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

如何在R中对多家企业的时间序列数据批量预测ROA?

面板数据批量预测企业ROA实现思路(R语言)

你的数据属于典型的短面板数据,单企业可使用的年度时间序列长度为6年,批量预测的核心逻辑是按企业拆分全量数据后逐组建模,最后合并所有预测结果即可,具体实现步骤如下:

第一步:数据预处理

  • 先确认你的dataframe包含三个必填字段:企业名称、年份、ROA,其余销售额、员工数量等基本面字段为可选协变量
  • 按企业名称分组,过滤掉时间序列有效长度不足3年的异常企业样本,避免后续建模报错
  • 单企业的年度数据时间序列频率统一设为1,无需做月度/季度转换

第二步:批量建模核心逻辑

适配你正在使用的forecast包,搭配dplyr+purrr做分组迭代即可实现批量处理:

  • 用dplyr::group_split()按企业名称拆分全量数据,得到每个企业对应的子数据框列表
  • 用purrr::map()遍历所有子数据框,对每个企业的ROA时间序列建模,可根据数据特征选择auto.arima()、ets()等函数;如果要加入销售额、员工数量等协变量提升精度,可使用auto.arima(y, xreg = 协变量矩阵)的形式建模
  • 所有模型统一用forecast()函数生成1期(对应2021年)的预测结果,提取点预测值即可

第三步:结果合并输出

遍历预测结果时同步绑定对应的企业名称、预测年份2021,最后把所有结果合并为统一的结果表即可,核心代码示例如下:

# 加载依赖包
library(dplyr)
library(purrr)
library(forecast)

# 批量预测核心代码
pred_result <- 你的原始数据框 %>%
  group_by(企业名称) %>%
  # 过滤掉有效样本量不足3年的企业
  filter(n() >= 3) %>%
  group_split() %>%
  map_dfr(function(sub_df){
    # 提取单企业ROA时间序列
    roa_ts <- ts(sub_df$ROA, start = min(sub_df$年份), frequency = 1)
    # 若使用协变量可取消下方注释,自行替换协变量字段名
    # xreg_mat <- as.matrix(sub_df[, c("销售额", "员工数量")])
    # 建模,可根据需求替换为ets等其他forecast包支持的模型
    model <- auto.arima(roa_ts)
    # 预测1期(对应2021年)
    pred <- forecast(model, h = 1)
    # 组装单企业预测结果
    data.frame(
      企业名称 = unique(sub_df$企业名称),
      年份 = 2021,
      预测ROA = as.numeric(pred$mean)
    )
  })

注意事项

  • 如果部分企业建模失败,可在map()里加tryCatch()跳过异常样本,避免全流程中断
  • 时间序列过短的企业(<3年)建议单独处理,或者直接用对应年份的行业ROA均值填充预测值
  • 若使用带协变量的时间序列模型,需要提前准备好2021年对应企业的协变量预估数据,传入forecast()的xreg参数才能完成预测;如果没有协变量的预估数据,直接使用单变量时间序列模型即可
  • 如果想进一步提升预测精度,可以换用面板回归模型(如固定效应模型+ROA滞后项)、梯度提升树(XGBoost/LightGBM)等方案:将历史ROA、企业所属行业、其他基本面指标都作为特征训练模型,完成训练后直接输入2021年的特征即可得到预测结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:45:02