带有统计模型的Holt-Winters时间序列预测

时间:2018-09-20 17:50:28

标签: time-series prediction holtwinters

我只是关注帖子here,以尝试使用下面的示例数据集进行第一个预测。我原本希望有一个像Expected这样的预测图,但是我得到的图就像这里的附件。got this

我的示例代码是

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import ExponentialSmoothing

df = pd.read_csv('data.csv', 
        parse_dates=['date'], 
        index_col='date')

df.index.freq = 'H'

train, test = df.iloc[:250, 0], df.iloc[250:, 0]
model = ExponentialSmoothing(train, seasonal='mul', seasonal_periods=12).fit()
pred = model.predict(start=test.index[0], end=test.index[-1])

plt.plot(train.index, train, label='Train')
plt.plot(test.index, test, label='Test')
plt.plot(pred.index, pred, label='Holt-Winters')
plt.legend(loc='best')
plt.show()

我的样本数据集按小时重新采样

date,count
2018-08-19 18:00,11
2018-08-19 19:00,4412
2018-08-19 20:00,4300
2018-08-19 21:00,3522
2018-08-19 22:00,2579
2018-08-19 23:00,1546
2018-08-20 00:00,918
2018-08-20 01:00,492
2018-08-20 02:00,299
2018-08-20 03:00,184
2018-08-20 04:00,201
2018-08-20 05:00,334
2018-08-20 06:00,867
2018-08-20 07:00,1767
2018-08-20 08:00,2904
2018-08-20 09:00,3892
2018-08-20 10:00,4744
2018-08-20 11:00,5081
2018-08-20 12:00,5370
2018-08-20 13:00,5408
2018-08-20 14:00,5523
2018-08-20 15:00,5162
2018-08-20 16:00,5182
2018-08-20 17:00,4685
2018-08-20 18:00,4472
2018-08-20 19:00,4454
2018-08-20 20:00,4406
2018-08-20 21:00,3719
2018-08-20 22:00,2636

我想念什么?

[编辑]

在将Seasonal_periods从12更改为24之后,我得到了这张图。

After changed to 24

[编辑]

After removed Data

2 个答案:

答案 0 :(得分:1)

乍一看,您似乎有错误的季节性周期。

尝试季度号= 24,而不是季节号= 12。

答案 1 :(得分:0)

您的新拟合值可能是正确的:第8周的异常值很可能会导致对季节性因素的高估。

进行测试:删除那一周(除以4)并尝试一下。如果合适度更高,那么您可以开始获得比眼神更好的值。

如果拟合度不变,则高估可能来自fit的smoothing_level,smoothing_seasonal或其他参数。