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

时间序列预测报错:'start'值未更改,求三月均值朴素预测验证集性能

三月均值朴素时间序列预测的报错修复

问题背景

需要基于ausbeer数据集,用三月均值模型预测并评估验证集(2005-2007年四季度)的性能,原代码使用了受限库之外的fpp2和zoo,且运行时报错:

Error in window.default(x, ...) : 'start' cannot be after 'end'
In addition: Warning message:
In window.default(x, ...) : 'start' value not changed

仅允许使用library(forecast)、library(timeSeries)和library(astsa)三个库。

报错原因

  1. 原代码用zoo::rollmean生成的滚动均值序列长度比训练集短2个观测值(滚动窗口为3),与验证集的时间范围、长度无法匹配,导致accuracy函数内部调用window时出现起止时间冲突。
  2. 违规使用了fpp2和zoo库,不符合要求。

修正后的代码

library(forecast)
# 加载数据集
data(ausbeer)
# 划分训练集、验证集、测试集
train1 <- window(ausbeer, start = c(1956,1), end = c(2004,4))
valid1 <- window(ausbeer, start = c(2005,1), end = c(2007,4))
test1 <- window(ausbeer, start = c(2008,1))

# 用forecast库的ma函数计算3期移动平均(三月均值),align="right"等价于centre=FALSE
ma3_train <- ma(train1, order = 3, centre = FALSE)
# 提取训练集最后一个移动均值,生成与验证集长度一致的预测值(朴素滚动均值预测逻辑)
naive3_pred <- rep(tail(ma3_train, 1), length(valid1))
# 给预测值匹配验证集的时间序列属性,保证对齐
ts_pred <- ts(naive3_pred, start = start(valid1), frequency = frequency(valid1))

# 计算验证集的预测性能指标
accuracy(ts_pred, valid1)[,1:5]

代码说明

  • 用forecast::ma替代zoo::rollmean,满足库的限制,centre=FALSE对应原代码的右对齐滚动逻辑,生成最近3期的均值序列。
  • 朴素三月均值预测的逻辑是用训练集最后一个滚动均值作为基准,重复生成验证集长度的预测值,保证时间序列的起止和长度与验证集完全匹配,解决window函数的起止冲突报错。
  • 给预测结果设置正确的时间序列属性,确保accuracy函数能正确对齐观测值与预测值,计算性能指标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:50:32