trend:模型随着移动平均值和time dummy的变化
1.什么是趋势?
时间序列的趋势分量代表序列均值的持续(presistent)、长期变化(long-term change)。趋势是一系列中移动最慢的部分,代表了最大时间尺度的重要性。在产品销售的时间序列中,随着越来越多的人逐年意识到该产品,市场扩张的影响可能是增加趋势。
更一般地说,一个序列中任何持续且缓慢移动的变化都可能构成一种趋势——例如,时间序列通常在其变化中具有趋势。
2.移动平均线图(moving average plots)
sliding window
要查看时间序列可能具有什么样的趋势,我们可以使用移动平均图。为了计算时间序列的移动平均值,我们计算某个定义宽度的滑动窗口内的值的平均值。图表上的每个点代表位于任一侧窗口内的系列中所有值的平均值。这个想法是为了消除序列中的任何短期波动,以便只保留长期变化。
3.Engineering Trend
一旦我们确定了趋势的形状,我们就可以尝试使用时间步长特征(time-step feature)对其进行建模。
我们已经看到如何使用时间虚拟模型本身来模拟线性趋势:
target = a*time +b
fit many other kinds of trend through transformations of the time dummy.
我们可以通过时间伪造的转换来融合许多其他类型的趋势。如果趋势似乎是二次(抛物线),我们只需要将时间伪装的平方添加到功能集中,给我们:
target = a * time**2 + b* time + c
使用scikit-learn’s 中的LinearRegression
3.例子:Tunnel Traffic
真是一个大工程呀
对商店销售趋势建模并了解使用高阶多项式进行预测的风险。
(1)让我们做一个移动平均线图,看看这个系列有什么样的趋势。由于这个系列有每日观察,让我们选择一个 365 天的窗口来平滑一年内的任何短期变化。要创建移动平均线,首先使用(rolling)滚动方法开始窗口计算。按照这个方法计算窗口的平均值。正如我们所看到的,隧道流量的趋势似乎是线性的。
-
tunnel.rolling()
-
tunnel.plot()
(2)在1中,我们直接在 Pandas 中设计了我们的时间虚拟机。然而,从现在开始,我们将使用 statsmodels 库中的一个名为DeterministicProcess 的函数。使用这个函数将帮助我们避免一些棘手的失败案例,这些案例可能会随着时间序列和线性回归而出现。 order 参数是指多项式顺序:1 表示线性,2 表示二次,3 表示三次,依此类推。 -
DeterministicProcess
from statsmodel.tsa.deterministic import DeterministicProcess
(3)预测模型
from sklearn.linear_model import LinearRegression
我们的线性回归模型发现的趋势几乎与移动平均图相同,这表明在这种情况下线性趋势是正确的决定。
为了进行预测,我们将模型应用于“样本外”特征。 “样本外”是指训练数据的观察期之外的时间。