我有一份包含4年销售数据的数据集,试图预测未来五年的销售情况。我已将数据集分为36个月的训练集和12个月的测试集。我选择了Holt-Winters方法,并编写了以下代码来测试模型。
from statsmodels.tsa.api import ExponentialSmoothingholt_winter = ExponentialSmoothing(np.asarray(train_data['Sales']), seasonal_periods=12, trend='add', seasonal='add')hw_fit = holt_winter.fit()hw_forecast = hw_fit.forecast(len(test_data))plt.figure(figsize=(16,8))plt.plot(train_data.index, train_data['Sales'], "b.-", label='Train Data')plt.plot(test_data.index, test_data['Sales'], "ro-", label='Original Test Data')plt.plot(test_data.index, hw_forecast, "gx-", label='Holt_Winter Forecast Data')plt.ylabel('Score', fontsize=16)plt.xlabel('Time', fontsize=16)plt.legend(loc='best')plt.title('Holt Winters Forecast', fontsize=20)plt.show()
代码似乎运行正常,并且可能正确预测了测试数据集的结果。然而,我在尝试预测未来五年的销售时遇到了困难,不知道该如何编写代码?
回答:
hw_fit.predict(start, end)
将从步骤start预测到步骤end,其中步骤0是训练数据的第一个值。
forecast用于进行样本外预测。因此,这两者是等价的:
hw_fit.forecast(steps)hw_fit.predict(len(train_data), len(train_data)+steps-1)
所以,由于你的模型是以月为单位训练的,如果你想预测训练数据之后的n个月的销售情况,你可以使用上述方法,并设置steps=n。