statsmodels.tsa._stl.STL "Unable to determine period from endog"

statsmodels.tsa._stl.STL "Unable to determine period from endog"

我想通过statsmodels STL方法分解

我的时间序列数据如下所示:

         success.rate
Date
2020-09-11  24.735701
2020-09-14  24.616301
2020-09-15  24.695900
2020-09-16  24.467051
2020-09-17  24.118799

当我像

那样将它放入STL时
STL(sdf, seasonal=20, robust=True)

我总是遇到这样的错误:

--------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/mnt/d/mywork/test
 STL(sdf,seasonal=20, robust=True)
----> 1 STL(sdf, seasonal=20, robust=True)

statsmodels/tsa/_stl.pyx in statsmodels.tsa._stl.STL.__init__()

ValueError: Unable to determine period from endog

如果您的时间序列在索引上没有已知频率(例如,sdf.index.freqNone,那么您需要使用 period 设置季节性周期. seasonal 告诉 STL 在季节性 LOWESS 中使用多少个完整季节,但不告诉 STL 一个完整周期需要多少个观测值。

from statsmodels.datasets import co2
from statsmodels.tsa.seasonal import STL
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

data = co2.load(True).data
data = data.resample('M').mean().ffill()

# Remove freq info
data.index = [i for i in range(data.shape[0])]

res = STL(data, period=12).fit()
res.plot()
plt.show()

此代码生成