You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Statsmodel Holt Winter获取模型样本内预测值

Statsmodels Holt-Winters获取训练/测试集预测值并导出匹配索引CSV的实现

训练集的对应预测值不需要手动调用预测方法,模型拟合完成后自带的fittedvalues属性就是和训练集索引完全对齐的样本内拟合值,直接使用即可。

实现步骤

  • 训练集预测值:直接读取拟合后模型的fittedvalues属性,和训练集逐行索引匹配
  • 测试集预测值:调用model.forecast(测试集长度)即可,返回结果自动和测试集索引对齐
  • 拼接两部分的实际值、预测值,校验无缺失后直接导出CSV

可直接复用的代码

import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 以下是你已完成的流程,替换成你自己的参数/数据拆分逻辑即可
# 假设原始时序数据存在df的value列,按时间拆分训练、测试集
train = df.iloc[:-test_size]
test = df.iloc[-test_size:]
# 模型拟合,trend、seasonal等参数替换成你自己调试好的配置
model = ExponentialSmoothing(
    train['value'],
    trend='add',
    seasonal='add',
    seasonal_periods=12
).fit()

# 核心:获取两部分预测值
train_predict = model.fittedvalues  # 训练集对应预测值,索引和train完全一致
test_predict = model.forecast(len(test))  # 测试集预测值,索引和test完全一致

# 合并为索引对齐的结果表
result_df = pd.DataFrame({
    '实际值': pd.concat([train['value'], test['value']]),
    '预测值': pd.concat([train_predict, test_predict])
})

# 校验索引匹配度:如果结果表无空值说明索引完全对齐
if result_df.isna().any().any():
    raise ValueError("预测值和实际值索引不匹配,请检查数据拆分逻辑")

# 可选:增加一列标记数据属于训练/测试集
result_df['数据集类型'] = ['训练集']*len(train) + ['测试集']*len(test)

# 导出CSV,utf-8-sig编码适配Windows下Excel打开不乱码
result_df.to_csv('holt_winters预测结果.csv', encoding='utf-8-sig')

注意事项

  • 不需要手动给训练集调用predict方法生成预测值,fittedvalues是模型拟合过程中计算的原生样本内预测结果,不会出现计算偏差或索引错位
  • 如果你的测试集索引是训练集时间索引的顺延,forecast方法返回的预测值会自动继承顺延的时间索引,不需要手动对齐

内容的提问来源于stack exchange,提问作者Bhavya Budhia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:39:18