时间序列预测基础教程系列(7)_如何⽤⾃回归模型(AR)
预测时间序列预测(Python)
⽤Python进⾏时间序列预测的⾃回归模型
⾃回归是⼀个时间序列模型,它使⽤以前时间步的观察值作为回归⽅程的输⼊,以预测下⼀个时间步的值。
这是⼀个⾮常简单的想法,可以对⼀系列时间序列问题进⾏准确的预测。
在本教程中,您将了解如何使⽤Python实现时间序列预测的⾃回归模型。
完成本教程后,您将了解:
如何探索⾃相关的时间序列数据。
如何开发⾃相关模型并⽤它来进⾏预测。
气象python零基础入门教程
如何使⽤开发的⾃相关模型进⾏滚动预测。
让我们开始吧。
⾃回归
回归模型(例如线性回归)基于输⼊值的线性组合对输出值进⾏建模。
例如:
yhat = b0 + b1*X1
在哪⾥是预测,b0和b1是通过在训练数据上优化模型⽽到的系数,并且X是输⼊值。
该技术可⽤于时间序列,其中输⼊变量被视为前⼀时间步的观察值,称为滞后变量。
例如,我们可以根据最后两个时间步(t-1和t-2)的观察结果预测下⼀个时间步(t + 1)的值。作为回归模型,这看起来如下:
X(t+1) = b0 + b1*X(t-1) + b2*X(t-2)
因为回归模型在之前的时间步骤使⽤来⾃相同输⼊变量的数据,所以它被称为⾃回归(self of regression)。
⾃相关
⾃回归模型假设先前时间步骤的观察对于预测下⼀时间步的值是有⽤的。
变量之间的这种关系称为相关性。
如果两个变量在同⼀⽅向上变化(例如,⼀起向上或向下),则称为正相关。如果变量随着值的变化⽽向相反的⽅向移动(例如,⼀个上升,⼀个下降),则称为负相关。
paywall我们可以使⽤统计测量来计算输出变量与先前时间步长处的各种不同滞后值之间的相关性。输出变量与特定滞后变量之间的相关性越强,⾃动回归模型在建模时可以对该变量赋予的权重越⼤。
同样,因为在先前时间步骤中在变量和它⾃⾝之间计算相关性,所以它被称为⾃相关。由于时间序列数据的顺序结构,它也被称为串⾏相关。
相关统计还可以帮助选择哪些滞后变量在模型中有⽤,哪些不可⽤。
有趣的是,如果所有滞后变量与输出变量显⽰低或⽆相关性,则表明时间序列问题可能⽆法预测。在开始使⽤新数据集时,这⾮常有⽤。
在本教程中,我们将研究单变量时间序列的⾃相关,然后开发⾃回归模型并使⽤它来进⾏预测。
在我们这样做之前,让我们⾸先回顾⼀下将在⽰例中使⽤的每⽇最低温度数据。
最低每⽇温度数据集
该数据集描述了澳⼤利亚墨尔本市10年(1981-1990)的最低⽇常温度。
单位为摄⽒度,有3,650个观测值。数据来源被称为澳⼤利亚⽓象局。
下载数据集与⽂件名“当前的⼯作⽬录⽇⽤最低temperatures.csv “。
javascript正则对象的方法
注意:下载的⽂件包含⼀些问号(“?”)字符,在使⽤数据集之前必须删除这些字符。在⽂本编辑器中打开⽂件并删除“?”字符。同时删除⽂件中的任何页脚信息。
下⾯的代码将数据集作为Pandas系列加载。
from pandas import Series
from matplotlib import pyplot
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
print(series.head())
series.plot()
pyplot.show()
运⾏该⽰例将从加载的数据集中打印前5⾏。
Date
1981-01-01 20.7
1981-01-02 17.9
1981-01-03 18.8
1981-01-04 14.6
1981-01-05 15.8
Name: Temp, dtype: float64
然后创建数据集的线图。
最低每⽇温度数据集图
快速检查⾃相关
我们可以快速,直观地检查我们的时间序列数据集中是否存在⾃相关。
我们可以在前⼀时间步骤(t-1)绘制观察结果,并在下⼀时间步骤(t + 1)观察作为散点图。
这可以通过⾸先创建时间序列数据集的滞后版本并使⽤Pandas库中的内置散点图函数来⼿动完成。
但有⼀种更简单的⽅法。
Pandas提供了⼀个内置的绘图来完成这个,称为    函数。
下⾯是创建最低每⽇温度数据集的滞后图的⽰例。
from pandas import Series
from matplotlib import pyplot
ls.plotting import lag_plot
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)toggle rate
lag_plot(series)
pyplot.show()
运⾏该⽰例将x轴上的温度数据(t)与y轴上的前⼀天(t-1)的温度进⾏对⽐。
最低每⽇温度数据集滞后图
我们可以看到沿着对⾓线的⼤型观察球。它清楚地显⽰了⼀种关系或某种相关性。
对于任何其他滞后观察,可以重复此过程,例如,如果我们想要查看过去7天或上个⽉或去年同⼀天的关系。
我们可以做的另⼀个快速检查是直接计算观察和滞后变量之间的相关性。
我们可以使⽤像这样的统计检验。这产⽣了⼀个数字,⽤于总结两个变量在-1(负相关)和+1(正相关)之间的相关性,其中⼩值接近零表⽰低相关性,⾼值⾼于0.5或低于-0.5表⽰⾼相关性。
可以使⽤滞后数据集的DataFrame上的函数轻松计算相关性。
rankifs函数
下⾯的⽰例创建最⼩每⽇温度数据集的滞后版本,并计算每列与其他列(包括其⾃⾝)的相关矩阵。
from pandas import Series
from pandas import DataFrame
from pandas import concat
from matplotlib import pyplot
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
values = DataFrame(series.values)
dataframe = concat([values.shift(1), values], axis=1)
result = ()
print(result)
这是对上图的⼀个很好的确认。
它显⽰观察值与滞后= 1值之间的强正相关(0.77)。
t-1      t+1
t-1  1.00000  0.77487
t+1  0.77487  1.00000
这对于⼀次性检查很有⽤,但如果我们想在时间序列中检查⼤量滞后变量,这是很乏味的。
圈子论坛源码接下来,我们将看⼀下此⽅法的扩展版本。
⾃相关图
我们可以绘制每个滞后变量的相关系数。
这可以⾮常快速地了解哪些滞后变量可能是⽤于预测模型的良好候选者以及观察值与其历史值之间的关系如何随时间变化。
我们可以⼿动计算每个滞后变量的相关值并绘制结果。值得庆幸的是,Pandas提供了⼀个名为函数的内置图。
该图提供了沿x轴的滞后数和y轴上-1和1之间的相关系数值。该图还包括实线和虚线,表⽰相关值的95%和99%置信区间。这些线上⽅的相关值⽐线下⽅的相关值更重要,为选择更相关的滞后值提供阈值或截⽌值。
from pandas import Series
from matplotlib import pyplot
ls.plotting import autocorrelation_plot
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
autocorrelation_plot(series)
pyplot.show()
运⾏该⽰例显⽰了正负相关的摆动,因为温度值在前⼀年的夏季和冬季变化。
熊猫⾃相关图
statsmodels库还在函数中提供了⼀个版本的绘图作为线图。
from pandas import Series
from matplotlib import pyplot
aphics.tsaplots import plot_acf
series = Series.from_csv('daily-minimum-temperatures.csv', header=0)
plot_acf(series, lags=31)
pyplot.show()
在此⽰例中,我们将评估的滞后变量限制为31以便于阅读。
Statsmodels Autocorrelation Plot
现在我们知道如何在时间序列中查看⾃相关,让我们看⼀下使⽤⾃回归建模它。
在我们这样做之前,让我们建⽴基准性能。
持久性模型
假设我们想要开发⼀个模型来预测所有先前观察结果中数据集中最近7天的最低温度。
我们可以⽤来做出预测的最简单模型是坚持最后⼀次观察。我们可以将其称为持久性模型,它为我们可⽤于与⾃回归模型进⾏⽐较的问题提供了性能基准。
我们可以通过将观察结果分成训练集和测试集来开发问题的测试⼯具,只将数据集中的最后7个观测值分配给测试集作为我们希望预测
的“看不见的”数据。
使⽤前瞻性验证模型进⾏预测,以便我们可以保留第⼆天的最新观察结果。这意味着我们没有进⾏7天的预测,⽽是7天的预测。