-1

我只是关注这里的一篇文章,用下面的示例数据集尝试我的第一个预测。我期待一个像Expected这样的预测图,但我得到了像这里所附的图。明白啦

我的示例代码是

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 后,我得到了这张图。

改为24后

[编辑]

删除数据后

4

2 回答 2

1

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

尝试seasonal_periods=24,而不是seasonal_periods=12。

于 2018-09-21T09:33:38.803 回答
0

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

做一个测试:去掉那些周(将它们除以 4)并试探性地拟合。如果拟合更好,您可以开始拟合比眼睛估计更好的值。

如果 fit 没有改变,那么高估可能来自于 smoothing_level、smoothing_seasonal 或fit的其他参数。

于 2018-09-22T11:15:42.257 回答