如何使用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
相关产品推荐
相关产品推荐

