【发布时间】:2021-12-29 20:46:43
【问题描述】:
我正在运行一个预言机模型来预测呼入电话量。我花了很多时间清理数据、运行对数刻度和超参数调整——这些都产生了“好的”MAPE(平均百分比误差)。
此时我的问题是模型始终欠拟合。尤其是在本月的前 12 天 - 在本月的前 6 天更是如此。由于运营原因,这些天的通话量总是要高得多。随着交易量进入下个月月初,它们也开始在月底附近开始建造。
实际值是蓝点,预测值是灰线。这只是一个月,但它代表了所有其他月份的每月季节性:
为简单起见,我将仅包含模型详细信息,并将所有数据清理过程排除在外。如果有帮助的话,我可以提供更多信息,但到目前为止我得到的反馈是,额外的细节只会让事情变得混乱。真正唯一重要的是,在对构建模型的数据运行 boxcox 转换以及对模型产生的数据进行反向 boxcox 后的结果:
# Create Model
M = Prophet(
changepoint_prior_scale = 15,
changepoint_range = .8,
growth='linear',
seasonality_mode= 'multiplicative',
daily_seasonality=False,
weekly_seasonality=False,
yearly_seasonality=False,
holidays=Holidays
).add_seasonality(
name='monthly',
period=30.5,
fourier_order = 20,
prior_scale = 45
).add_seasonality(
name='daily',
period=1,
fourier_order=75,
prior_scale=20
).add_seasonality(
name='weekly',
period=7,
fourier_order=75,
prior_scale=30
).add_seasonality(
name='yearly',
period = 365.25,
fourier_order = 30,
prior_scale = 15)
总的来说,我希望全面改善拟合不足的情况,尤其是在月初和月底。我尝试增加 changepoint_range 以放松模型,但结果并不明显。我也尝试增加“每月”季节性的prior_scale,但没有比上面的屏幕截图更好的结果。
我有点不知所措。有没有可以与 FaceBook Prophet 模型一起使用的建模技术来解决这个问题?有没有办法添加一个回归量,将特定的季节性分配给前 12 天和最后 7 天?我做了一些研究,不确定你是否可以和/或如何工作。
任何帮助将不胜感激。
作为更新,我已尝试提升 change_point 范围和更改点先验比例,但没有任何影响。打算尝试减少训练数据量(目前使用 4 年)。
【问题讨论】:
-
这对我来说还不错。大部分数据都在直线上,除了一些不应该对事情产生太大影响的异常值。
-
我的问题是,从 1 日到 6 日,每个月的异常值都非常一致。如此之多,以至于我可能会应用一揽子乘数并更接近实际通话量。似乎该模型应该对此有所了解,只是不确定如何到达那里。我已尽我所能放宽界限,它是完全不可动摇的。我只想在月初有更少的异常值。我正在尝试使用它来提供调度程序。
-
我认为我最好的选择可能是在该月的第 6 天添加一个额外的回归,只是不太确定如何做到这一点。我找不到任何类似用例的示例。
标签: python time-series facebook-prophet overfitting-underfitting