基于ARIMA的R语言多商品时间序列预测:数据格式适配问题
多商品ARIMA预测:CSV格式适配与代码调整方案
报错原因
你遇到的Error: id variables not found in data: Code Article,核心问题是代码需要**商品唯一标识列(Code Article)**来区分不同商品,但当前数据要么是读入方式错误导致结构混乱,要么是原始CSV格式不符合分组建模的要求。
方案一:调整代码适配现有CSV(无需修改CSV)
你的CSV是分号分隔,但读入时没指定分隔符,R默认用逗号拆分,所以才会变成单列。按以下步骤修正:
正确读入CSV
指定分号作为分隔符,把数据拆成多列:# 替换成你的文件路径 df <- read.csv("sales_data.csv", sep = ";", header = TRUE, stringsAsFactors = FALSE)读入后应该是宽格式:第一列是日期,后续每一列对应一个商品的销量,列名最好是商品的
Code Article编码。转成长格式(适配分组建模)
用tidyr包把宽格式转成每行对应一个商品月度数据的长格式,生成Code Article列:library(tidyr) long_df <- pivot_longer(df, cols = -日期, # 排除日期列,其他列都是商品销量 names_to = "Code Article", # 把原列名作为商品编码 values_to = "销量")分组拟合ARIMA并预测
用dplyr和forecast包按商品分组,每个商品单独拟合ARIMA并生成18个月预测:library(dplyr) library(forecast) forecast_list <- long_df %>% group_by(`Code Article`) %>% mutate( # 转换为月度时间序列 ts_data = list(ts(销量, start = c(year(min(日期)), month(min(日期))), frequency = 12)), # 自动选择最优ARIMA模型 arima_model = list(auto.arima(ts_data[[1]])), # 生成18个月预测 forecast_result = list(forecast(arima_model[[1]], h = 18)) ) %>% ungroup()
方案二:规范CSV结构(更推荐,长期维护更省心)
如果可以修改CSV,直接改成长格式,每一行对应一个商品的一个月销量,列结构如下(分号分隔):
日期;Code Article;销量 2023-01-01;ART001;120 2023-01-01;ART002;85 2023-02-01;ART001;135 2023-02-01;ART002;90 ...
这种格式读入后无需转换,直接就能用上面的分组建模代码,结构清晰,不容易出错。
内容的提问来源于stack exchange,提问作者Mekags
相关产品推荐
相关产品推荐

