【问题标题】:forecasting with holt-winters model使用 holt-winters 模型进行预测
【发布时间】:2026-01-07 22:40:01
【问题描述】:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import ExponentialSmoothing

df =pd.read_csv(r"C:\Users\USER\PycharmProjects\mysqlconnection\mul.csv",
                 index_col='finalYears')

)
df.index.freq = 'M'
train, test = df.iloc[:20, 0], df.iloc[20:, 0]
model = ExponentialSmoothing(train, seasonal='mul', seasonal_periods=4).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')

我尝试使用如上所示的 holt-winters 模型进行预测,但我不断收到此错误。 pred 行发生的错误表示“'start 参数无法匹配到与数据索引相关的位置。” ,我想如何处理这个错误?

这是我的数据。我将数据分组为一年中的季度1

【问题讨论】:

    标签: python time-series statsmodels forecasting holtwinters


    【解决方案1】:

    here 看来,开始、结束必须是 int、str 或 datetime。如果我这样做了

    start = 20
    end = test.shape[0]+20
    pred = model.predict(start=start, end=end)
    

    然后预测运行。 read_csv 可能已将您的索引列转换为 int/str/datetime 以外的其他内容。

    【讨论】:

    • 感谢您的回复 :) 但它给了我另一个错误,即绘图错误,它说。错误“IndexError:元组索引超出范围。你能帮我解决这个问题吗?
    • 检查你的 train、test 和 pred 向量的长度,可能有一个或多个长度为零?
    • 嘿,我已经混淆了我需要更改哪一个 :( 错误是否与此行相关?df.index.freq = 'M' train, test = df.iloc[:20, 0 ], df.iloc[20:, 0] 基本上,我想在我的数据文件(上面提供)中从第 20 行及以下开始测试。我希望你能帮我解决这个问题 :)