如何绘制workflow_set模型回测结果、实际值与预测值对比图
解决方法
步骤1:生成历史回测拟合值
你已经完成了最优模型的训练,只需要将训练集(历史实际数据)传入训练好的best_finalized模型即可得到回测拟合结果,在你现有代码基础上新增以下代码:
# 生成历史回测拟合值 backtest_tbl <- best_finalized %>% predict(new_data = train_tbl) %>% bind_cols(train_tbl %>% select(Date)) %>% mutate(type = "回测趋势线") %>% rename(Close = .pred)
小提示:如果运行时提示找不到
cart_spec报错,是因为你示例代码中仅定义了cubist_spec和rf_spec,没有定义CART模型的参数规范,可以将base的models列表中的cart_base = cart_spec替换为rf_base = rf_spec即可正常运行。
步骤2:合并三类数据绘图
现在你有三类需要绘制的数据:历史实际收盘价、历史回测拟合值、未来预测值,直接合并后绘图即可得到三条曲线的对比效果,替换你原有的绘图代码为:
# 合并三类数据并绘图 bind_rows( # 历史实际收盘价 train_tbl %>% mutate(type = "实际收盘价"), # 历史回测拟合值 backtest_tbl, # 未来预测值 prediction_tbl %>% mutate(type = "预测值") ) %>% ggplot(aes(x = Date, y = Close, color = type)) + geom_line(linewidth = 1.2) + labs(x = "日期", y = "收盘价", color = "数据类型") + theme_minimal()
可选:获取无数据泄露的滑窗回测结果
如果你需要更贴近实盘效果、无数据泄露的回测结果,可以直接从滑窗调参的结果中提取最优参数对应的交叉验证预测值,避免全量训练集拟合带来的效果高估:
# 提取滑窗交叉验证的回测结果 backtest_cv_tbl <- wflwset_tune_results %>% extract_workflow_set_result(id = b_mod) %>% collect_predictions(parameters = best_param) %>% bind_cols(train_tbl %>% slice(.$.row) %>% select(Date)) %>% select(.pred, Date) %>% mutate(type = "滑窗回测结果") %>% rename(Close = .pred)
将backtest_tbl替换为backtest_cv_tbl即可绘制更客观的回测表现。
内容的提问来源于stack exchange,提问作者KBE11416
相关产品推荐
相关产品推荐

