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

R语言fable包自动ETS模型未筛选出信息准则最优模型的原因咨询

为什么自动ETS未选中信息准则更低的ETS(A,M,N)模型?

我来帮你拆解这个问题,其实fpp2里的自动ETS选择逻辑并非简单遍历所有模型后直接挑信息准则最低的,这里有几个关键原因:

1. 初始值估计差异导致信息准则偏差

自动ETS和手动拟合模型时,初始值的计算方式可能存在差异。自动ETS会采用一套默认的初始化流程(比如基于指数平滑递推的初始值),而手动指定模型结构时,参数初始化的细微调整可能让最终拟合的参数结果不同,进而影响AIC/BIC的计算。哪怕是同一结构的模型,初始值选择都可能让信息准则出现波动,更别说不同结构的模型对比了。

2. 自动ETS的搜索有优先级与提前终止逻辑

虽然ETS的模型类型总数不算多,但自动选择过程并不是完全遍历所有18种可能的组合。它会按照固定优先级测试模型:

  • 优先测试误差项为加法(A)的模型,再考虑乘法(M)类型;
  • 趋势、季节项的测试也有先后顺序;
  • 如果某个模型的信息准则已经显著优于后续候选模型,自动搜索可能提前终止,不会继续测试所有可能性。
    你手动拟合的ETS(A,M,N)可能不在自动搜索的优先路径上,或者在搜索早期就被“暂时最优”的模型挡住了。

3. restrict=FALSE未改变搜索逻辑

你设置的restrict=FALSE只是解除了对模型参数的约束(比如允许趋势阻尼系数大于1、季节参数超出常规范围),但并没有改变自动搜索的模型优先级和流程。也就是说,自动搜索还是会按默认顺序找模型,只是找到模型后允许参数自由估计,不会因参数不符合常规约束而排除它。

4. 模型拟合的收敛性问题

手动拟合的ETS(A,M,N)可能在迭代过程中收敛到了一个更优的局部最优解,而自动ETS在搜索时,可能因为初始化或迭代步骤的差异,没有收敛到这个最优解,导致计算出的信息准则更高,从而被自动选择逻辑排除。

验证方法

你可以手动遍历所有可能的ETS模型,确认ETS(A,M,N)是否真的是最优解:

# 定义所有可能的误差、趋势、季节类型
error_types <- c("A", "M")
trend_types <- c("N", "A", "Ad", "M", "Md")
season_types <- c("N", "A", "M")

# 生成所有模型组合
model_combinations <- expand.grid(error = error_types, trend = trend_types, season = season_types)

# 批量拟合模型并提取信息准则
results_list <- lapply(1:nrow(model_combinations), function(i) {
  e <- model_combinations$error[i]
  t <- model_combinations$trend[i]
  s <- model_combinations$season[i]
  fit <- ts_train %>% model(ETS(value ~ error(e) + trend(t) + season(s), restrict = FALSE))
  data.frame(
    model = paste0("ETS(", e, ",", t, ",", s, ")"),
    AIC = glance(fit)$AIC,
    BIC = glance(fit)$BIC,
    AICc = glance(fit)$AICc
  )
})

# 整理结果并按AIC排序
results_df <- do.call(rbind, results_list)
results_df %>% arrange(AIC)

如果运行后确实ETS(A,M,N)的AIC最低,就能确认是自动ETS的搜索逻辑导致的问题;如果不是,那可能是手动拟合时的偶然收敛差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:17:34