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

使用fable Prophet时未来数据集不完整的问题解决

解决按分组移除最后N条观测值及Prophet样本外性能评估问题

问题根源

你遇到的警告是因为未按type分组执行移除最后5条观测值的操作,导致部分分组的训练数据没有正确截断,后续生成的预测数据集与原完整数据集的时间范围无法匹配,出现缺失值提示。

正确实现步骤

1. 按分组移除最后5条观测值

使用group_by(type)确保每个分组独立移除最后5条数据,再用slice或filter完成截断:

# 方法1:用slice按分组取前n-5条
lax_train <- lax_passengers %>%
  group_by(type) %>%
  slice(1:(n() - 5)) %>%  # 保留每个分组的前(总条数-5)条,即移除最后5条
  ungroup()

# 方法2:按时间筛选(更直观,适用于规则时间序列)
lax_train <- lax_passengers %>%
  group_by(type) %>%
  filter(time < max(time) - months(5)) %>%  # 假设时间为月度频率,非月度需调整单位
  ungroup()

2. 验证数据正确性

检查每个分组的观测数是否比原数据集少5条,确认截断有效:

# 对比原数据和训练数据的分组观测数
lax_passengers %>% count(type)
lax_train %>% count(type)

3. 拉伸时间序列并生成预测

# 构建拉伸时间序列(.init根据数据量调整,确保初始训练集足够)
lax_stretch <- lax_train %>%
  stretch_tsibble(.init = 12, .step = 1)

# 训练Prophet模型并生成5步预测
fc <- lax_stretch %>%
  model(prophet = Prophet(passengers ~ season('year', 12))) %>%
  forecast(h = 5)

4. 计算样本外性能得分

此时再执行准确率计算,不会出现缺失数据警告:

accuracy(fc, lax_passengers)

关键说明

  • 必须通过group_by(type)明确分组操作,否则slice会对整个数据集而非单个分组生效,导致数据截断不彻底。
  • 若时间序列频率不是月度,需调整months(5)为对应单位(如weeks(20)对应周度数据)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:26:28