You need to enable JavaScript to run this app. 日销数据Time Series Forecasting求助:ARIMA误差高需优化及30天预测指导
优惠活动
大模型
产品
解决方案
定价
更多

日销数据Time Series Forecasting求助:ARIMA误差高需优化及30天预测指导

R语言日度销售数据未来30天预测优化求助

我是时间序列预测及R语言的新手。为学习预测方法,我收集了兄长新设创业公司2019年3月28日至2021年7月7日的日度销售数据,希望实现未来30天的销量预测,特在此寻求相关帮助。
此前我参照Kaggle平台的教程步骤,尝试使用ARIMA模型进行预测,但测试集预测结果与实际值偏差较大,MAPE值达到28%,希望能获得专业指导解决该问题。
2021年的样本数据对应的R代码示例如下:

data.frame(date=seq(as.Date("2021-01-01"),as.Date("2021-07-07"),by="1 day"),sales=c(100,105 ,167, 106 ,112, 107, 202,  98, 120, 109 ,114, 195, 110, 121,  89, 128, 104, 194 ,107 ,127, 117, 100, 117 ,205,116, 112, 119, 129, 161, 132, 110, 114, 118, 194, 114, 113, 113 ,172, 101 ,161 ,102, 135,  97, 122, 170, 126 ,160, 110, 118, 108,  111, 163, 110, 123 ,102 ,116, 181, 119, 155, 108, 122, 169, 115, 122, 116, 168 ,115 ,101, 117, 113 ,163, 115 ,107, 106, 171 ,109, 119, 107, 101 ,166, 105, 102 ,174,108, 102, 114,  97, 114, 149, 100, 111,  94,110 ,108, 100 , 92 ,104, 112, 160, 105,  98,  91,117 , 44,  60 , 36 , 50 , 51 , 54,  62,  61 , 62 , 50 , 59 , 85 , 49,  61 , 56 , 63,  39, 110 , 56 , 54 , 55,  56,  63 , 44, 115,  55,  50,  96 ,129 , 61,  59,  98 , 90 ,153,  90,  82 , 98,  79, 149,  97 , 85,  92,  78, 100 , 69, 152,  88,  76 , 91 ,145, 106,  69,  84,  72, 144 , 76, 74 , 94  ,70 , 86  ,76 ,137 , 71  ,87 , 91,  62 ,150 , 66 , 77  ,88, 135,  93 , 62 , 83, 83 , 72,  71 ,148 , 91 , 68 , 78 , 95 ,124,  69  ,78))

偏差原因分析

你用基础ARIMA效果差的核心原因是没有匹配日度销售数据的固有特征:

  • 存在周度季节性:观察2021年上半年的销量,每隔6天就出现一次160-200的峰值,对应线下零售的周度消费规律,普通ARIMA默认未设置7天的季节周期,完全无法捕捉该规律。
  • 存在结构突变:2021年4月前后销量从均值110左右暴跌到50-70区间,后续又逐步回升,大概率是业务调整、疫情等外部因素导致,基础ARIMA无法识别这类结构变化,会直接放大预测偏差。
  • 未纳入外生特征:节假日、促销活动、运营调整等外部因素对零售销量影响极大,未纳入模型也会拉低预测准确率。

优化方案

1. 前置数据预处理

先完成基础清洗工作:

  • 读取本地CSV数据后,将日期列转为Date格式,排除缺失值、明显的异常值。
  • 构造衍生特征:周几标识、月份标识、是否节假日、结构突变虚拟变量(2021年4月后赋值为1,之前为0)。
  • 拆分训练集和测试集:建议用2019-2020年数据做训练,2021年1-6月数据做测试,验证模型效果。

2. 模型选择(推荐2种新手友好的方案)

方案一:Prophet模型(优先推荐)

Meta开发的时序预测工具,自动处理季节性、突变点、节假日,代码简单,对业务类日度数据适配性极高,通常可以把MAPE降到15%以内:

# 安装加载包
install.packages("prophet")
library(prophet)

# 数据格式化(prophet要求日期列名为ds,指标列名为y)
sales_data <- read.csv("你的本地CSV文件路径.csv")
sales_data$ds <- as.Date(sales_data$date)
sales_data$y <- sales_data$sales

# 训练模型,自动适配周度、年度季节性
model <- prophet(sales_data, yearly.seasonality = TRUE, weekly.seasonality = TRUE)

# 生成未来30天的预测框架
future <- make_future_dataframe(model, periods = 30)

# 执行预测
forecast <- predict(model, future)

# 查看预测结果、可视化
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])
plot(model, forecast)

方案二:SARIMAX模型

如果要继续使用ARIMA系列模型,改用带季节项和外生变量的SARIMAX:

library(forecast)
library(lubridate)

# 转为时序对象,季节周期设为7(对应周度)
ts_sales <- ts(sales_data$sales, frequency = 7)

# 构造外生变量矩阵,示例加入周几虚拟变量、突变点虚拟变量
xreg <- cbind(
  model.matrix(~ wday(ds) - 1, data = sales_data), # 周几独热编码
  break_point = ifelse(sales_data$ds >= as.Date("2021-04-01"), 1, 0)
)

# 自动拟合SARIMAX
model_sarimax <- auto.arima(ts_sales, xreg = xreg, seasonal = TRUE)

# 预测未来30天,需要先构造未来30天对应的xreg矩阵,逻辑和训练集一致
future_xreg <- # 按未来日期生成对应外生变量
forecast_sarimax <- forecast(model_sarimax, xreg = future_xreg, h = 30)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:48:02