编译 | sunlei
发布 | ATYUN订阅号
机器学习的应用已经非常广泛,其中之一就是预测时间序列。最有趣(或许也是最赚钱)的预测时间序列之一的当属股价了。
最近我读了一篇用机器学习技术预测股价的博客文章。这是一篇写得很好的文章,其中探讨了各种技术。然而,我觉得这个问题可以用更严谨的学术态度来处理。例如,文章中的方法“移动平均”、“线性回归”、“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的历史价格,可以从雅虎财经轻松下载。下载后,数据集如下:
VTI下载的数据集
我们将把这个数据集分成60%的序列、20%的验证和20%的测试。模型将使用列车组进行培训,模型超参数将使用验证集进行调整,最后将使用测试集报告模型的性能。下图显示了调整后的收盘价拆分为相应的列车、验证和测试集。
将数据集分为60%的训练、20%的验证和20%的测试
为了评估我们的方法的有效性,我们将使用均方根误差(RMSE)和平均绝对百分比误差(MAPE)指标。对于这两个指标,值越低,预测效果越好。
最后一个值
在最后一个值方法中,我们将简单地将预测设置为最后一个观测值。在我们的上下文中,这意味着我们将当前调整后的收盘价设置为前一天调整后的收盘价。这是最具成本效益的预测模型,通常用作比较更复杂模型的基准。这里没有需要优化的超参数。
下图显示了使用最后一个值方法进行的预测。如果你仔细观察,你会发现每一天的预测(红十字)仅仅是前一天的值(绿十字)。
使用最后一个值方法进行预测
移动平均线
在移动平均法中,预测值是前N个值的平均值。在我们的上下文中,这意味着我们将当前调整后的收盘价设置为前N天调整后收盘价的平均值。需要调整超参数N。
下图显示了验证集上实际值和预测值之间的RMSE,对于不同的N值,我们将使用N=2,因为它给出了最低的RMSE。
验证集上的实际值和预测值之间的RMSE,用于不同的N
下图显示了使用移动平均法的预测结果。
使用移动平均法进行预测
线性回归
线性回归是一种线性方法,用于建模因变量和一个或多个自变量之间的关系。我们在这里使用线性回归的方法是将一个线性回归模型与前面的n个值相匹配,并使用这个模型来预测当天的值。下图是n=5的例子。实际调整后的收盘价显示为深蓝色十字,我们希望预测第6天的价值(黄色正方形)。我们将通过前5个实际值拟合一条线性回归线(浅蓝色线),并使用它在第6天(浅蓝色圆)进行预测。
用N=5的线性回归预测下一个值
下面是我们用来训练模型和做预测的代码。
下图显示了验证集上实际值和预测值之间的RMSE,对于不同的N值,我们将使用N=5,因为它给出了最低的RMSE。
下图显示了使用线性回归方法进行的预测。可以看出,该方法没有捕捉方向的变化(即下降趋势到上升趋势,反之亦然)。
使用线性回归方法进行预测
当然,今天我们是讲不完的,休息一下,下次继续学习。
End