[数据挖掘] 46 时间序列预测 5 平滑法-移动平均 美国铁路(美铁)客运公司数据_哔哩哔哩_bilibili
#设定窗口时间为12
ma_centered = ridership_ts.rolling(12, center=True).mean()
ma_tailing = ridership_ts.rolling(12).mean()
print(ma_centered.head(7)) #头欠项6
print(ma_centered.tail(7)) #尾欠项5
# 尾移动平均用于预测:向前移动一个时间单位以获得当月的移动平均预测值,eg,2月的移动平均值成为了3月份的客流量移动平均预测值
ma_centered = pd.Series(ma_centered[:-1].values, index=ma_centered.index[1:]) # 相当于一个移动平均的lag-1序列
ma_tailing = pd.Series(ma_tailing[:-1].values, index=ma_tailing.index[1:]) # 移动平均序列值不变,时间增加一个单位
print(ma_centered.head(7)) #头欠项6
print(ma_centered.tail(7)) #尾欠项4
# 叠加在原有数据上的移动平滑线
fig,ax = plt.subplots(figsize=(10,7),dpi=160)
ax=ridership_ts.plot(ax=ax,color='black',linewidth=0.5)
ma_centered.plot(ax=ax,color='mediumvioletred',linewidth=3)
ma_tailing.plot(ax=ax,style='--',linewidth=4,color='yellowgreen')
ax.set_xlabel('Time')
ax.set_ylabel('Ridership')
ax.legend(['客流量','中心移动平均','尾移动平均'])
plt.show()
# 使用尾移动平均法对美铁数据进行预测
# 切分训练集与测试集
ntest=36
ntrain=len(ridership_ts) - ntest
train_ts = ridership_ts[:ntrain]
test_ts = ridership_ts[ntrain:]
# 尾移动平均法
ma_tailing = train_ts.rolling(12).mean()
last_ma = ma_tailing[-1] # 获取 ma_tailing序列的最后一个元素作为预测值
ma_tailing_pred = pd.Series(last_ma, index=test_ts.index) # 使用朴素预测法进行预测,此处用最后一个ma预测测试集的所有数据点
fig, axes = plt.subplots(nrows=2,ncols=1,figsize=(9,7.5),dpi=180)
ma_tailing.plot(ax=axes[0],linewidth=3,color='yellowgreen')
ma_tailing_pred.plot(ax=axes[0],linewidth=3,color='yellowgreen',style='--')
residual = train_ts - ma_tailing
residual.plot(ax=axes[1],color = 'green')
residual = test_ts - ma_tailing_pred
residual.plot(ax=axes[1],color = 'green',linestyle = 'dashed')
graphLayout(axes,train_ts,test_ts)
plt.show()