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

构建滚动均值预测:解决序列多余元素与测试集匹配问题

解决滚动均值预测的两个问题:移除多余元素与测试集日期匹配

我来帮你一步步解决这两个问题,直接上实用的方案:

1. 移除fitmean末尾的第13个多余元素

问题出在滚动均值的计算逻辑上——默认的滚动窗口设置可能会多生成一个基于最后12个数据的均值(包含了本不该纳入的最新数据)。你可以用两种方式解决:

方式一:直接切片删除最后一个元素

如果fitmean是Pandas Series或DataFrame,直接用切片去掉最后一行即可:

# 保留前n-1个元素,n是当前fitmean的长度
fitmean = fitmean.iloc[:-1]

方式二:调整滚动窗口参数,从根源避免多余元素

如果你用的是Pandas的rolling()函数,可以设置closed='left',让滚动窗口只包含当前时间点之前的12个数据,这样就不会额外生成最后一个元素:

# 假设parts是带日期索引的Series
fitmean = parts.rolling(window=12, closed='left').mean()

这个参数会让每个均值对应到窗口结束后的时间点,刚好符合你基于过去12个数据做预测的需求。

2. 解决测试集日期匹配问题(仅得到2017年1-6月的6个值)

核心是让滚动均值的日期索引和testparts完全对齐。你的目标是用过去12个月的均值预测2017年1-6月,所以需要确保每个预测值的日期正好对应测试集的月份:

步骤1:确保滚动均值的索引对应测试集时间点

假设parts包含了2016年1月-2017年6月的完整数据,你可以先计算滚动均值,再通过shift(1)把均值“挪”到下一个月(比如2016年1-12月的均值对应2017年1月的预测):

# 计算滚动均值,然后shift(1)让均值对应到下一个月的预测
rolling_mean = parts.rolling(window=12).mean().shift(1)
# 只保留testparts对应的日期范围(2017年1-6月)
fitmean_test = rolling_mean.loc[testparts.index]

步骤2:验证索引对齐

做完之后可以打印fitmean_test.index和testparts.index,确认两者完全一致,这样相减的时候就会得到完整的6个差值,不会出现日期不匹配的问题。

如果你的parts只有2016年6月-2017年6月的数据,那需要先补充2016年1-5月的数据(如果有的话),否则2017年1-5月的滚动均值会因为数据不足出现NaN。如果没有历史数据,那只能从2017年6月开始做有效预测,但根据你的需求,应该是有完整的12个月训练数据的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:48:56