时间序列的多元线性回归模型,时间序列的经典线性回归模型的基本假定是什么
将回归应用于时间序列问题
这篇文章的结构如下:
自回归-用Python中的理论和数学实现的自回归-选择最佳参数值结论自回归术语自回归(AR)与统计学中的常规回归密切相关。唯一的问题是,AR模型使用来自同一输入变量的滞后格式数据3354,这是自回归的自动部分。
自回归的预测能力有限,就像简单的移动平均线一样。该算法使用过去值的线性组合来预测未来。的一般自回归模型由以下公式表示:
其中c为常数,phi为p阶以下的迟滞系数,为不可约误差(白噪声)。
使用AR模型时,只需要指定参数p的值,如果p=1,AR模型公式简化为:
就这么简单!
p的高阶数往往给出更好的预测结果,但只是在某一点上。稍后您将看到如何自动选择p的最佳值。但是首先,让我们看看如何在Python中实现自回归。
Python中的自回归今天你将创建自己的数据集。这是一条简单的直线,添加了一点噪声:
import numpy as NP import pandas as PD from sk learn . metrics import mean _ squared _ error from stats models . TSA . ar _ model import ari import matplotlib . py plot as p lt from matplotlib import rcParams from cycler import cycler rcerrcparams[ figure . fig size ]=18,5 rcParams[ axes . spines . top ]=FalsercParams[ axes . spines . right ]=FalsercParams[ axes . prop _ cycle ]=cycler(color=[ # 363DataFrame(data={ x: xs, y :ys })# plot PLT . title( Random dataset ,size=20)PLT . plot(df[ y ]);看起来是这样的:
下一步是将数据集分成训练和测试子集。最后10个数据点将用于测试,所有其他数据将用于训练:
# Train/test split df _ Train=df[:-10]df _ test=df[-10:]# plot PLT . title(随机数据集训练和测试集,size=20)plt.plot(df_train[y],label= Training data )PLT . plot(df _ test[ y ],color=gray ,label= Testing data )PLT . legend();这是两个数据集的样子:
接下来,将声明一个用于训练和可视化AR模型的函数—train_and_plot(maxlag: int)。这个函数是为了避免重复复制和粘贴几乎相同的代码。它在训练集上训练AR(p=maxlag)模型,并以图形方式比较预测集和测试集。
这个函数还会在绘图的副标题中打印出模型系数,这样你就可以根据需要将它们与前面讨论的数学公式关联起来。
这是代码:
def train _ and _ plot(maxlag):model=AR(df _ train[ y ])。fit(maxlag=maxlag,method= mle )Forecasts=model . predict(start=len(df _ train),end=len(df _ train)len(df _ test)-1,dynamic=False)parameters=model . params . to _ dict()for k,v in parameters . items():parameters[k]=NP . round(v,3) plt.title(fAR({maxlag})训练/测试数据和预测,size=20,y=1.1) plt.suptitle(parameters,y=1现在,您可以使用此函数通过在新单元中执行train_and_plot(maxlag=1)来训练一个简单的AR(1)模型。它显示了下图:
将参数p改为您想要的任何值。例如,AR(2)模型结果如下(train_and_plot(maxlag=2)):
问题依然存在:3354这个数据集的最佳AR模型阶数是多少?让我们在下一节回答这个问题。
自回归-选择最佳参数值使用AR(1)和AR(2)获得的预测看起来并不那么有希望。你总想优化p的值,一个方法是画自相关图和偏自相关图,并检查,但是这个工作量太大。
更好的方法是在循环中训练AR(1)到AR(n)模型,并跟踪测试集的性能。您可以使用RMSE或任何其他指标来做到这一点。
这是可以做到这一点的简单代码片段:
# Max lag ordermax_p=10#存储RMSEerrors={}for p in range(1,Max _ p 1):# Train and predict model=AR(df _ Train[ y ])。fit(maxlag=p,Dynamic=False)preds=model . predict(start=len(df _ train),end=len(df _ train)len(df _ test)-1,Dynamic=False)# calculate and store RMSE error=mean _ squared _ error(df _ test[ y ],preds,squared=False)errors[f AR({ p })]=error以下是AR(1)到AR(10)模型的误差:
似乎AR(5)模型在测试集上的误差最低。以下是数据集和预测在此模型顺序中的样子:
使用AIC指标进行评估也很常见,因为它更喜欢简单的模型而不是复杂的模型。这两个指标都表明AR(5)是最好的模型。
总结AR模型可以用来预测简单的数据集。该算法与移动平均模型结合使用时效果最佳,这是我们将在下一篇文章中讨论的主题。
如果决定将AR模型应用于航空公司乘客等数据集,无论模型阶数如何,都不会得到很好的预测结果。可能让数据集静止会有帮助,但是预测还是不如指数平滑法。
我们将在下一篇文章中探讨将自回归和移动平均结合成单一模型(ARMA)是否有帮助。
达里奥拉德契奇
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。