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

使用auto.arima对多域名数据单独建模并输出数据框预测结果的问题

解决方案

原代码存在的问题

  • 内部重命名test变量覆盖了外部数据集,导致后续循环逻辑出错
  • 未调用forecast()生成预测结果,仅拟合模型自然看不到预测值
  • 时间序列频率设置错误:示例数据是日度数据,原代码用frequency=12(月度)会导致时间序列结构错误
  • 未将模型结果整理成标准数据框格式,返回的是模型对象列表,无法直接转换

修正后的完整代码

1. 数据预处理

首先确保日期列格式正确,并按域名+日期排序:

library(tidyverse)
library(forecast)
library(lubridate)

# 预处理数据集:转换日期格式并排序
test_clean <- test %>%
  mutate(Date = mdy(Date)) %>%
  arrange(Domain, Date)

2. 按域名批量生成ARIMA预测并输出数据框

用group_map直接按域名分组处理,避免手动遍历唯一值的麻烦:

# 设置预测步数(比如预测未来7天)
forecast_steps <- 7

# 批量处理每个域名,生成统一格式的预测数据框
domain_forecasts <- test_clean %>%
  group_by(Domain) %>%
  group_map(function(group, key) {
    # 生成当前域名的时间序列(示例用Impressions列,实际是net_cpm就替换)
    ts_data <- ts(group$Impressions, 
                  start = min(group$Date), 
                  frequency = 365)  # 日度数据频率设为365
    
    # 拟合ARIMA模型
    arima_fit <- auto.arima(ts_data, seasonal = TRUE)
    
    # 生成预测结果
    arima_forecast <- forecast(arima_fit, h = forecast_steps)
    
    # 整理成标准数据框
    forecast_df <- tibble(
      Domain = key$Domain,
      Date = seq(max(group$Date) + days(1), by = "day", length.out = forecast_steps),
      Forecast = as.numeric(arima_forecast$mean),
      Lower_95 = as.numeric(arima_forecast$lower[,2]),
      Upper_95 = as.numeric(arima_forecast$upper[,2])
    )
    
    return(forecast_df)
  }) %>%
  bind_rows()  # 合并所有域名的预测结果为单个数据框

3. 结果说明

  • domain_forecasts是标准data.frame,包含每个域名的未来n天预测值、95%置信区间上下限
  • 若实际使用net_cpm列,只需把group$Impressions替换为group$net_cpm即可

额外提示

  • 数据量极大时,可添加进度提示:在group_map前加progress_estimated(n_distinct(test_clean$Domain)) %>% wrap_map()
  • 部分域名时间序列长度不足会报错,可加tryCatch捕获错误并跳过:
group_map(function(group, key) {
  tryCatch({
    # 原处理逻辑
  }, error = function(e) {
    message(paste("处理域名", key$Domain, "出错:", e$message))
    return(tibble())
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:40:40