statsmodels.tsa._stl.STL «Не удается определить период с конца»

#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()
 

Этот код создает

Демонстрация STL

Комментарии:

1. Кевин, это точно решает мою проблему, спасибо~

2. как определить период? Месяц? Ежегодно или ежедневно?