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

ARIMA模型准确率显示NaN及测试数据警告问题求助

问题原因与修复方案

1. 测试集NaN准确率与“未来数据集不完整”警告的核心原因

使用stretch_tsibble做拉伸训练时,你设置了.step=1,意味着每个训练窗口仅向后滑动1个时间步,对应测试集仅包含1个观测值。但你调用forecast(h = "1 years")生成了12步预测,这就导致:

  • 实际测试数据(cn中每个窗口的后续数据)只有1个值,无法匹配12步预测,触发“未来数据集不完整”警告
  • 准确率计算时因预测值与实际值长度不匹配,无法生成有效指标,返回NaN

2. 训练集NaN准确率的可能原因

部分强制去掉截距的ARIMA模型(带~0设定),在初始小窗口(仅12个观测值)中无法正常收敛,模型拟合失败后,训练集准确率无法计算,返回NaN。


修复步骤

步骤1:匹配预测步长与拉伸逻辑

将预测步长改为h=1,与.step=1的滑动逻辑对齐:

fc <- fit %>%
  fabletools::forecast(h = 1)

此时每个训练窗口仅预测下1个时间点,能和cn中的测试观测值一一对应,警告会消失,测试集准确率可正常计算。

步骤2:优化模型设定,避免拟合失败

去掉强制~0的设定,让ARIMA自动判断是否需要截距,减少小窗口下的拟合失败概率:

fit <- cn %>%
  model(
    ar112 = ARIMA(paid ~ pdq(1,1,2)),
    ar110 = ARIMA(paid ~ pdq(1,1,0)),
    ar011 = ARIMA(paid ~ pdq(0,1,1)),
    ar012 = ARIMA(paid ~ pdq(0,1,2)),
    ar010 = ARIMA(paid ~ pdq(0,1,0)),
    ar211 = ARIMA(paid ~ pdq(2,1,1)),
    ar311 = ARIMA(paid ~ pdq(3,1,1)),
    ar011010 = ARIMA(paid ~ pdq(0,1,1) + PDQ(0,1,0)),
    ar001010 = ARIMA(paid ~ pdq(0,1,0) + PDQ(0,1,0)),
    arm = ARIMA(paid)
  )

步骤3:调整拉伸窗口的初始大小

如果初始12个月窗口仍导致部分模型拟合失败,可将.init调至更大值(如24),确保有足够数据支撑复杂模型:

cn <- file %>%
  filter(location == "Central", as.Date(start_month) >= "2012-01-01") %>%
  filter_index(~ "2022-12-31") %>%
  stretch_tsibble(.init = 24, .step = 1)

完整修复后代码示例

library(fpp3)

# 数据处理
file <- file %>% 
  select(location, start_month, paid) %>%
  as_tsibble(index = start_month, key = location)

# 调整拉伸窗口参数
cn <- file %>%
  filter(location == "Central", as.Date(start_month) >= "2012-01-01") %>%
  filter_index(~ "2022-12-31") %>%
  stretch_tsibble(.init = 24, .step = 1)

# 优化模型定义
fit <- cn %>%
  model(
    ar112 = ARIMA(paid ~ pdq(1,1,2)),
    ar110 = ARIMA(paid ~ pdq(1,1,0)),
    ar011 = ARIMA(paid ~ pdq(0,1,1)),
    ar012 = ARIMA(paid ~ pdq(0,1,2)),
    ar010 = ARIMA(paid ~ pdq(0,1,0)),
    ar211 = ARIMA(paid ~ pdq(2,1,1)),
    ar311 = ARIMA(paid ~ pdq(3,1,1)),
    ar011010 = ARIMA(paid ~ pdq(0,1,1) + PDQ(0,1,0)),
    ar001010 = ARIMA(paid ~ pdq(0,1,0) + PDQ(0,1,0)),
    arm = ARIMA(paid)
  )

# 匹配预测步长
fc <- fit %>%
  fabletools::forecast(h = 1)

# 计算准确率
accuracy(fit)  # 训练集
accuracy(fc, cn)  # 测试集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:41:59