这段代码:
import numpy as np
from statsmodels.tsa.api import ExponentialSmoothing
time_series = np.array([1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4])
print(ExponentialSmoothing(time_series, seasonal_periods=4, trend=None, seasonal="add").fit().forecast(4)) # [1. 2. 3. 4.]
在没有警告的情况下运行并正确打印 [1. 2. 3. 4.] 在我的电脑上(Anaconda Navigator 1.9.12 和 Visual Studio Code 1.45.1,运行 python 3.7.6,numpy 1.18.1,statsmodels 0.11.0)。
然而,在我同事的计算机(运行 Python 3.8、numpy 1.18.4、statsmodels 0.11.0 的 Visual Studio Code)上,相同的代码会在正确打印之前触发以下警告 [1. 2. 3. 4.]:
...\statsmodels\tsa\holtwinters.py:725: RuntimeWarning: 在less_equal loc = initial_p <= lb 中遇到无效值
...\statsmodels\tsa\holtwinters.py:731:RuntimeWarning:在greater_equal loc = initial_p >= ub 中遇到无效值
...\statsmodels\tsa\holtwinters.py:956: RuntimeWarning: 除以零在日志中遇到 aic = self.nobs * np.log(sse / self.nobs) + k * 2
...\statsmodels\tsa\holtwinters.py:962: RuntimeWarning: 除以零出现在日志 bic = self.nobs * np.log(sse / self.nobs) + k * np.log(self.nobs)
我们怎样才能解决问题,以便我的同事不会收到这些 RuntimeWarnings,拜托?还是我们不应该担心他们?非常感谢。
更新:我想我找到了答案。我的测试数据太完美了,因此引起了警告。将抖动引入数据可消除警告。无论哪种方式,我认为,基于此,我们无论如何都可以忽略警告:
import numpy as np
from statsmodels.tsa.api import ExponentialSmoothing
time_series = np.array([1.2, 1.8, 3.2, 3.8, 1, 2, 3, 4, 1.1, 1.9, 3.1, 3.9, 1, 2, 3, 4])
print(ExponentialSmoothing(time_series, seasonal_periods=4, trend=None, seasonal="add").fit().forecast(4))
# [1.07500096 1.92499933 3.07500112 3.92499949]
另一个更新:不,不是这样。在我的电脑上,我仍然没有收到警告,但我的同事收到了
...\statsmodels\tsa\holtwinters.py:725: RuntimeWarning: 在less_equal loc = initial_p <= lb 中遇到无效值
...\statsmodels\tsa\holtwinters.py:731:RuntimeWarning:在greater_equal loc = initial_p >= ub 中遇到无效值