机器学习技术如何应用于股票价格预测?(上)

2019年07月01日 由 sunlei 发表 67416 0
机器学习的应用已经非常广泛,其中之一就是预测时间序列。最有趣(或许也是最赚钱)的预测时间序列之一的当属股价了。

最近我读了一篇用机器学习技术预测股价的博客文章。这是一篇写得很好的文章,其中探讨了各种技术。然而,我觉得这个问题可以用更严谨的学术态度来处理。例如,文章中的方法“移动平均”、“线性回归”、“k-近邻”、“Auto ARIMA”和“Prophet”具有预测期,而“Long - Short Term Memory (LSTM)”具有1天的预测期。在文章的最后,它指出“LSTM已经轻松地超过了我们目前看到的任何算法。但很明显,我们并不是在拿苹果和苹果做比较。这是我对这个问题的看法。

问题陈述


我们的目标是利用前N天的数据预测Vanguard Total Stock Market ETF (VTI)每日调整后的收盘价。我们将使用2015年11月25日至2018年11月23日这三年VTI的历史价格,可以从雅虎财经轻松下载。下载后,数据集如下:

[caption id="attachment_41660" align="aligncenter" width="857"] VTI下载的数据集。[/caption]

我们将把这个数据集分成60%的序列、20%的验证和20%的测试。模型将使用列车组进行培训,模型超参数将使用验证集进行调整,最后将使用测试集报告模型的性能。下图显示了调整后的收盘价拆分为相应的列车、验证和测试集。

[caption id="attachment_41661" align="aligncenter" width="846"] 将数据集分为60%的训练、20%的验证和20%的测试。[/caption]

为了评估我们的方法的有效性,我们将使用均方根误差(RMSE)和平均绝对百分比误差(MAPE)指标。对于这两个指标,值越低,预测效果越好。

最后一个值


在最后一个值方法中,我们将简单地将预测设置为最后一个观测值。在我们的上下文中,这意味着我们将当前调整后的收盘价设置为前一天调整后的收盘价。这是最具成本效益的预测模型,通常用作比较更复杂模型的基准。这里没有需要优化的超参数。

下图显示了使用最后一个值方法进行的预测。如果你仔细观察,你会发现每一天的预测(红十字)仅仅是前一天的值(绿十字)。

[caption id="attachment_41662" align="aligncenter" width="869"] 使用最后一个值方法进行预测。[/caption]

移动平均线


在移动平均法中,预测值是前N个值的平均值。在我们的上下文中,这意味着我们将当前调整后的收盘价设置为前N天调整后收盘价的平均值。需要调整超参数N。

下图显示了验证集上实际值和预测值之间的RMSE,对于不同的N值,我们将使用N=2,因为它给出了最低的RMSE。

[caption id="attachment_41664" align="aligncenter" width="860"] 验证集上的实际值和预测值之间的RMSE,用于不同的N。[/caption]

下图显示了使用移动平均法的预测结果。

[caption id="attachment_41665" align="aligncenter" width="874"] 使用移动平均法进行预测。[/caption]

线性回归


线性回归是一种线性方法,用于建模因变量和一个或多个自变量之间的关系。我们在这里使用线性回归的方法是将一个线性回归模型与前面的n个值相匹配,并使用这个模型来预测当天的值。下图是n=5的例子。实际调整后的收盘价显示为深蓝色十字,我们希望预测第6天的价值(黄色正方形)。我们将通过前5个实际值拟合一条线性回归线(浅蓝色线),并使用它在第6天(浅蓝色圆)进行预测。

[caption id="attachment_41666" align="aligncenter" width="869"] 用N=5的线性回归预测下一个值。[/caption]

下面是我们用来训练模型和做预测的代码。





下图显示了验证集上实际值和预测值之间的RMSE,对于不同的N值,我们将使用N=5,因为它给出了最低的RMSE。



下图显示了使用线性回归方法进行的预测。可以看出,该方法没有捕捉方向的变化(即下降趋势到上升趋势,反之亦然)。

[caption id="attachment_41670" align="aligncenter" width="865"] 使用线性回归方法进行预测。[/caption]

当然,今天我们是讲不完的,休息一下,下次继续学习。
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消