如何用autoplot按原始刻度绘制训练集与预测结果对比图?
Prophet预测后autoplot显示转换后刻度而非原始刻度的解决方法
问题描述
我尝试用autoplot将训练集与预测结果绘制在同一张图中,但输出的是Box-Cox转换后刻度的值,而非原始刻度的值。我的训练集同时包含原始刻度和转换后的刻度数据,求解决方法。
原始代码
# 训练模型 fit_prophet <- train %>% model(prophet(OrdAdj)) # 生成预测 fc_prophet <- fit_prophet %>% forecast(h = "1 month") # 转换回原始刻度 fc_prophet$QtyEur <- InvBoxCox(fc_prophet$.mean, lambda) class(fc_prophet$QtyEur) # 绘图 fc_prophet %>% autoplot(train)
解决方法
核心是在Prophet模型内部直接执行Box-Cox转换,而非提前转换数据再训练模型。这种方式下,预测结果会自动反转换回原始刻度,autoplot就能直接渲染原始刻度的数值。
修改后的代码
# 训练模型(内部做Box-Cox转换) fit_prophet <- train %>% model(prophet(box_cox(QtyEur, lambda=lambda))) # 生成预测 fc_prophet <- fit_prophet %>% forecast(h = "1 month") # 绘图并叠加测试集 fc_prophet %>% autoplot(train %>% filter(Date>="2023-01-01")) + geom_line(data=test, mapping=aes(y=QtyEur, x=Date), col="red") + labs(title="训练集+测试集 vs 预测结果")
效果说明
修改后绘图时,纵轴将直接显示原始的QtyEur刻度值,还能叠加测试集数据进行对比,生成的图可直观展示训练集、测试集与预测结果的原始数值差异:
- 在Prophet内部做Box-Cox转换的效果图
- 外部做Box-Cox转换的对比图
- 修改后autoplot的输出图
内容的提问来源于stack exchange,提问作者Federico S
相关产品推荐
相关产品推荐

