Я пытаюсь следовать здесь руководству по временным рядам (используя свой собственный набор данных):
https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/
Удивительно, но я могу успешно достичь части 7: ARIMA.В этом разделе я немного спотыкаюсь.Все значения в столбце Prediction для него - NaN.
В терминале я вижу a date index has been provided but it has no associated frequency information and so will be ignored when forecasting
В моем наборе тестовых данных есть несколько пробелов в датах, когда транзакции не проводились, поэтому язаполните его test=test.set_index('DATE').asfreq('D', fill_value=0)
.Я также делаю то же самое с моим набором данных ARIMA, поэтому индекс соответствует тестовому набору.
Остальная часть соответствующего кода выглядит следующим образом:
train=df[0:180]
test=df[180:]
SARIMA=test.copy()
fit=sm.tsa.statespace.SARIMAX(train['COUNT'], order=(1,1,1), seasonal_order=(0,0,0,5)).fit()
SARIMA['SARIMA']=fit3.predict(start=0,
end=93,dynamic=True)
print(SARIMA)
print(test)
В выводе на печатьИндекс для тестового набора и набора ARIMA совпадают.ARIMA содержит столбец SARIMA
, который содержит прогнозы, за исключением того, что все они NaN
.Чего мне не хватает?
test
DATE COUNT
2018-06-21 1
2018-06-22 3
..
2018-11-21 3
2018-11-22 4
SARIMA
DATE COUNT SARIMA
2018-06-21 1 NaN
2018-06-22 3 NaN
..
2018-11-21 3 NaN
2018-11-22 4 NaN
edit: по какой-то причине statsmodels
просто не может определить частоту индекса.Я пробовал SARIMA=SARIMA.set_index('DATE').asfreq('D',fill_value=0)
SARIMA.index=pd.to_datetime(SARIMA.index)
SARIM.index=pd.DatetimeIndex(SARIMA.index.values, freq='D')
Но всегда появляется предупреждение
Редактировать: Я прямо пытался создать новый набор данных в Excel:
DATE COUNT
2018/01/01 1
2018/01/02 2
..
2018/01/10 3
2018/01/11 4
создал модельс такими же строками выше, за исключением установки enforce_stationarity
и enforce invertibility
на False
.Все прогнозы все еще NaN
edit3: используя поддельный набор данных excel, я подошел на 1 шаг ближе.Прохождение start='2018-01-01'
и end='2018-01-21'
дало предсказания всех 0, что лучше, чем NaN
.Кто-нибудь может понять эти результаты?
edit4: установка dynamic=False
вернула разумные прогнозы.Я явно не статистик