我有一个类似的问题,我还没有完全弄清楚。在python中包含多个季节性术语似乎仍然有点棘手。R似乎有这个能力,see here。所以,我可以给你的一个建议是用R目前提供的更复杂的功能来尝试这个(尽管如果你还不熟悉R的话,这可能需要大量的时间投入)。在

看看你的季节模式建模方法,取n阶差分并不能给你季节常数,而是你指定为季节相关的时间点之间的差异的一些表示。如果这些差异很小,那么更正它们可能不会对建模结果产生太大影响。在这种情况下,模型预测结果可能相当好。反之,如果差异很大,包括它们也很容易扭曲预测结果。这可以解释您在建模结果中看到的变化。从概念上讲,你需要做的是代表随时间变化的常数。在

在上面提到的博客文章中,作者主张使用傅立叶级数来模拟每个时间段内的方差。NumPy和SciPy包都提供了计算快速傅立叶变换的例程。然而,作为一个非数学家,我发现很难确定快速傅立叶变换能产生适当的数字。在

最后,我选择了使用韦尔奇信号分解形式SciPy的信号模块。它的作用是返回时间序列的频谱密度分析,从中可以推断出时间序列中不同频率的信号强度。在

如果您在频谱密度分析中确定了与您试图在时间序列中解释的季节性频率相对应的峰值,则可以使用它们的频率和振幅来构造表示季节变化的正弦波。然后,可以将这些作为外生变量包含在ARIMA中,就像博客文章中的Fourier项一样。在

这是我目前所掌握的情况——现在我正试图弄清楚,是否可以让statsmodels ARIMA过程使用这些正弦波,这些正弦波指定了一个季节性趋势,作为我模型中的外生变量(文档规定它们不应代表趋势,但嘿,一个人可以做梦,对吗?)编辑:Thisrobhyneman的博客文章也是高度相关的,并解释了一些背后的基本原理,包括傅立叶项。在

很抱歉,我不能给您一个在Python中被证明是有效的解决方案,但是我希望这能给您一些新的想法来控制这种讨厌的季节变化。在

日间;夜间:python现在似乎不太适合处理多个季节性术语,R可能是一个更好的解决方案(请参阅参考资料);

使用差异分数来解释季节趋势似乎无法捕捉与季节重现相关的恒定方差;

在python中实现这一点的一种方法是使用Fourier级数来表示季节趋势(另请参阅参考资料),这可以通过使用Welch信号分解等方法获得。然而,如何在ARIMA中使用这些作为外生变量来达到良好的效果是一个悬而未决的问题。

祝你好运

埃弗特

注:如果我找到一种方法在Python中运行,我会更新