关于FBProphet的cross_validation、performance_metrics及参数的技术咨询
FBProphet的cross_validation与performance_metrics详解
一、你的代码逻辑确认
你的理解在当前数据集(2038天)的情况下是正确的——这段代码只会执行一轮交叉验证:用前2008天的数据训练模型,用接下来的30天(第2009-2038天)做测试。但如果你的数据集更长,period=30 days会触发多轮滚动验证,下面详细解释这两个函数的逻辑和参数:
二、cross_validation函数详解
cross_validation是FBProphet专为时间序列设计的滚动交叉验证工具,核心是保持时间顺序,避免未来数据泄露到训练集中。
核心参数说明
initial:初始训练集的时长,即第一次训练时使用的历史数据长度。比如你设置的'2008 days',就是第一次用前2008天的数据训练模型。period:两次验证迭代的时间间隔,控制验证的密集度。每过period天,就会用更新后的训练集(包含新增的period天数据)重新训练模型,并预测接下来的horizon天。period越小,验证轮数越多,结果越可靠,但计算量也会上升。horizon:每次预测的时间跨度,也就是测试集的长度。比如'30 days',就是每次训练后,预测接下来30天的数据,再和真实值对比。
执行逻辑扩展
如果你的数据集更长(比如2100天),这段代码会执行多轮验证:
- 第一轮:训练第1-2008天的数据,测试第2009-2038天
- 第二轮:训练第1-2038天的数据,测试第2039-2068天
- 第三轮:训练第1-2068天的数据,测试第2069-2098天
- 直到测试集的结束时间超过数据集最后一天为止
三、performance_metrics函数详解
performance_metrics是用来从cross_validation的结果中提取模型评估指标的工具,会按预测的时间跨度自动聚合指标,直观展示模型在不同预测时长下的表现。
核心功能
- 读取
cross_validation输出的df数据框(包含ds日期、yhat预测值、yhat_lower预测下限、yhat_upper预测上限、y真实值等字段) - 计算常见的时间序列评估指标,包括:
mse:均方误差rmse:均方根误差mae:平均绝对误差mape:平均绝对百分比误差coverage:真实值落在预测区间内的比例
使用示例
# 执行交叉验证 df_cv = cross_validation(m, initial='2008 days', period='30 days', horizon='30 days') # 计算评估指标 df_p = performance_metrics(df_cv) print(df_p)
输出结果会按horizon(预测天数,如1天、7天、30天)分组,展示每个时间跨度下的指标值。通常能看到:预测时长越短,误差越小;预测时长越长,误差越大,这符合时间序列的普遍规律。
内容的提问来源于stack exchange,提问作者Lokeesh Bharathi S
相关产品推荐
相关产品推荐

