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

R语言如何对多产品批量实现Auto ARIMA需求预测

R语言批量运行Auto ARIMA需求预测的实现方案

不需要手写基础for循环也能实现,更推荐用嵌套数据框+purrr映射的方案,代码更简洁易维护,也能避免循环中常见的变量覆盖、报错中断问题,当然基础循环方案也能正常运行,你可以根据自己的编码习惯选择

方案1:嵌套数据框+purrr批量映射(推荐)

这是目前R中批量处理独立时序的主流方案,核心逻辑是把每个SKU的时序数据单独打包成嵌套单元格,再对每个单元格统一调用你已经写好的预测函数,适配3000个SKU的处理量完全没有问题:

  • 第一步:先把你现有的单SKU预测逻辑封装成自定义函数,输入是单个SKU的时序数据,输出是你需要的包含SKU、预测日期、点预测、95%置信上下限的data.frame,你可以直接把现有正常运行的代码移植到函数内即可,示例框架如下:
# 封装单SKU预测逻辑,参数df_sku就是单个SKU的历史数据框
predizer_arima <- function(df_sku) {
  # 此处直接粘贴你现有单SKU预测代码即可,变量对应你自己的葡萄牙语命名
  sku_id <- unique(df_sku$sku) # 替换为你实际的SKU列名
  # 你的原有逻辑:时序转换、auto.arima建模、forecast预测代码放在这里
  # 最后整理为标准输出格式
  resultado <- data.frame(
    sku = sku_id,
    data_prevista = seq.Date(as.Date("2024-07-01"), by = "month", length.out = 3), # 替换为你自己的预测日期生成逻辑
    valor_previsto = fc$mean,
    limite_inferior = fc$lower[,2], # 95%置信下限
    limite_superior = fc$upper[,2] # 95%置信上限
  )
  return(resultado)
}
  • 第二步:把全量数据按SKU分组,嵌套为每个SKU单独的数据块
library(tidyverse)
library(forecast)

# 导入你的全量历史数据,必须包含SKU列、日期列、需求值列,列名对应你自己的葡萄牙语命名
dados_totais <- read.csv("seu_arquivo.csv", stringsAsFactors = FALSE)

# 按SKU分组嵌套
dados_aninhados <- dados_totais %>%
  group_by(sku) %>%
  nest()
  • 第三步:批量调用自定义预测函数,合并所有结果
# 批量跑预测,加安全包裹避免单个SKU建模失败导致全流程中断
dados_resultados <- dados_aninhados %>%
  mutate(previsao = map(data, possibly(predizer_arima, otherwise = NULL))) %>%
  unnest(previsao)

# 导出最终结果
write.csv(dados_resultados, "previsao_todos_sku.csv", row.names = FALSE)

方案2:基础for循环实现

如果你更熟悉循环逻辑,也可以用for循环实现,注意提前初始化结果列表避免性能损耗:

# 提取所有唯一SKU
lista_sku <- unique(dados_totais$sku)
# 初始化结果列表
lista_resultados <- vector("list", length(lista_sku))

for (i in seq_along(lista_sku)) {
  sku_atual <- lista_sku[i]
  # 筛选单个SKU的数据
  df_sku_atual <- dados_totais %>% filter(sku == sku_atual)
  # 调用你封装的预测函数
  lista_resultados[[i]] <- predizer_arima(df_sku_atual)
  # 可选:加进度打印,方便追踪运行进度
  if(i %% 100 == 0) cat("已完成", i, "个SKU的预测\n")
}

# 合并所有结果
dados_resultados <- bind_rows(lista_resultados)
write.csv(dados_resultados, "previsao_todos_sku.csv", row.names = FALSE)

性能优化建议

  • 3000个SKU如果单线程跑速度较慢,可以把map换成furrr包的future_map开启多线程并行,仅需修改一行代码即可,不需要调整其他逻辑
  • 可以提前过滤掉历史数据不足3个周期的SKU,避免auto.arima建模报错中断流程
  • 如果不需要保存每个SKU的模型对象,预测完直接清理内存,可以进一步提升运行速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:09:04