理解fbprophet cross_validation交叉验证输出与性能指标疑问
性能指标表与行数问题说明
performance_metrics的每一行对应不同预测时长(horizon)下的聚合性能结果:horizon指预测的时间点距离切分点(cutoff)的天数,比如horizon=3就代表所有cutoff后第3天的预测结果对应的性能统计。- 你看到输出是horizon 2到20共19行,是因为Prophet会自动过滤掉没有匹配到真实值的horizon样本,大概率是你的原始数据时间间隔不是严格1天1条,horizon=1的位置没有有效匹配的预测-真实值对,所以被自动剔除了。
交叉验证参数理解
你对三个参数的认知基本正确:
- initial:每个cutoff之前用于训练模型的历史数据时长,你设置的500天符合预期。
- period:两个相邻cutoff的时间间隔,官方推荐设置为horizon的1/3到1/2,你设置的10天符合推荐规则。
- horizon:每个cutoff之后需要预测的时间长度,你设置的20天没有问题,17个cutoff最多产生17*20=340条交叉验证样本。
性能指标相关疑问解答
- coverage指标含义:Prophet默认输出80%置信区间(可通过
interval_width参数调整),coverage代表真实值落在对应预测置信区间内的样本占比。这个值越接近你设置的置信区间宽度,说明模型的不确定性预估越准确,比如你用默认0.8置信区间,coverage在0.78-0.82之间都属于理想情况。 - 指标计算逻辑:所有的MAE、MAPE、RMSE、coverage等指标,都是按horizon维度聚合计算的。以horizon=5的MAE为例,会先提取所有17个cutoff下,各自预测的cutoff后第5天的结果,和对应真实值计算绝对误差,再取平均值得到最终结果。
- 17次cutoff的预测误差当然存在差异,
performance_metrics默认输出的是按horizon聚合后的平均水平,如果你需要查看单cutoff的性能,直接对df_cv按cutoff分组自行计算误差即可。
全量训练的准确率说明
你提到的“fbprophet不需要拆分训练集和测试集”的认知存在偏差:模型本身拟合不需要拆分,但要评估泛化准确率必须做样本拆分,你现在用的交叉验证就是Prophet官方推荐的准确率评估方案,得到的聚合指标就是你用全量数据训练后模型的预期泛化性能。
内容的提问来源于stack exchange,提问作者edshewa
相关产品推荐
相关产品推荐

