Python Facebook Prophet入站呼叫量预测模型欠拟合优化咨询
优化方案
1. 添加自定义指示回归器直接捕捉月初月末特征
这是解决你当前问题最高效的方案,针对固定时段的流量偏移,直接用二元指示变量捕捉比平滑的傅里叶季节性拟合精度高很多:
- 在训练数据集新增两列特征:
is_first_12_days(每月前12天赋值为1,其余为0)、is_last_7_days(每月最后7天赋值为1,其余为0) - 调用Prophet的
add_regressor方法将两个特征加入模型,可单独设置prior_scale控制特征权重,月初波动大可以将对应回归器的权重调至20~50区间测试:
M.add_regressor('is_first_12_days', prior_scale=40) M.add_regressor('is_last_7_days', prior_scale=30)
- 预测时也需要给测试集生成对应的两个特征列,否则会报错。
2. 配置条件季节性实现分段专属拟合
如果你希望给月初、月末单独配置独立的周期性规律,可以用Prophet的条件季节性功能:
- 先在数据集新增两个布尔列:
is_early_month(前12天为True)、is_late_month(最后7天为True) - 分别添加对应时段的专属季节性,可独立设置傅里叶阶数和权重:
M.add_seasonality( name='early_month_season', period=30.5, fourier_order=25, prior_scale=50, condition_name='is_early_month' ).add_seasonality( name='late_month_season', period=30.5, fourier_order=20, prior_scale=40, condition_name='is_late_month' )
原来的全局月度季节性可以保留,也可以根据测试效果选择删除。
3. 调整现有月度季节性参数
你当前设置的月度季节性傅里叶阶数为20,对于需要拟合月初尖峰、月末抬升的非平滑月度规律来说阶数偏低,可以尝试将fourier_order上调到25~35区间,配合prior_scale同步调整,提升对月度高频波动的拟合能力。
4. 训练数据量调整方案
如果业务的月度话务规律在近2年没有发生结构性变化,可以将训练数据缩减到最近23年,避免过旧的历史数据干扰模型对现有规律的学习,调整时需要用最近36个月的数据做验证集,确保泛化能力不下降。
其他可尝试的优化点
- 你当前的
changepoint_prior_scale已经调到15,属于非常高的数值,继续调大很容易引发过拟合,不需要再调整该参数 - 如果整体话务量存在非线性增长特征,可以尝试将
growth参数改为logistic,提前设置好数据的容量上限cap和下限floor - 可以对比测试全局加法季节性的效果,如果月初月末的增量是固定数值而非和整体流量成正比,加法季节性的拟合效果会更好
内容的提问来源于stack exchange,提问作者t25
相关产品推荐
相关产品推荐

