#python #statistics #statsmodels
Вопрос:
Я хочу разложиться методом stat-моделей 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
Ответ №1:
Если ваш временной ряд не имеет известной частоты в индексе (например, sdf.index.freq
is None
, то вам необходимо установить период сезонности с помощью period
. seasonal
сообщает STL, сколько полных сезонов использовать в сезонном МИНИМУМЕ, но не сообщает 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()
Этот код создает
Комментарии:
1. Кевин, это точно решает мою проблему, спасибо~
2. как определить период? Месяц? Ежегодно или ежедневно?