(免责声明:我在时间序列建模领域很新)
我正在尝试建立一个 Sarima 模型来逐日预测几个度量的预期值(分别),关键是在一定时期内有超过 X 值不在置信区间内时检测异常。
模型将在前 2 个月的每一天进行重新训练(目前,在我设法获得更好的结果之前,这还不是固定的)并预测接下来的 24 小时
其中一些措施在非工作日(周末/节假日或公司因其他原因关闭的日子)有显着差异
这是一个例子(5 月 1 日和 2 日是周末):
时间序列可视化
我已经构建了一个数组(1 或 0)来表示那些非工作日并将其作为 sarima 的 exog 传递,类似这样:
model = SARIMAX(X_train['value'],exog=train_working_days, order=(p, d, q), seasonal_order=(P, D, Q, 24)).fit(maxiter=100)
多亏了这一点,我可以清楚地看到预测的变化,下班时间的预测值较低:
带有预测的时间序列
(我已经在历史数据上模拟了数据流,并重建了序列以进行可视化和控制,但这些是分开的 24 小时预测和 2 个月的训练数据滑动窗口)
我知道我的预测即使在工作日也不是很精确,但是大尖峰之间的大多数点都非常不稳定,只有大致相似的形状,所以我只是使用足够宽的置信区间来测试我的异常需要几个异常达到警报级别(否则只是噪音)。
所以我在这里的问题是,即使该系列在非工作日有效地向下移动,我的预测的每日概况仍然与工作日相同(降级),因此更平坦的曲线在 1-2 上徘徊下一个工作日
有没有办法处理这种事情?
我曾考虑将我的 24 小时季节性更改为 7*24 小时(每周),这可能有助于周末效果,但所有其他下班日仍然会遇到同样的问题。
我还考虑在第二个模型中分离下班日,但丢失的信息可能太大,两种模型都无法比唯一模型更好地执行。
也许我已经达到了我对 Sarima 所能做的极限?如果是这样,我会喜欢一些不需要超过几个月数据的建议。
提前感谢您阅读我,祝您有美好的一天