Я делаю прогноз:
# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima_model import ARIMA
# Forecast interest rates using an AR(1) model
mod = ARIMA(data, order=(1,1,1))
res = mod.fit()
# Plot the original series and the forecasted series
res.plot_predict(start='2014-07-02', end='2018-09-28')
plt.show()
Я получил ошибку:
KeyError: "invalid literal for int() with base 10: '2014-07-02'"
после прочтения документа statsmodels: https://www.statsmodels.org/dev/generated/statsmodels.tsa.arima_model.ARIMAResults.plot_predict.html
Затем интуитивный способ заключается впроверьте тип '2014-07-02', это pandas.core.indexes.datetimes.DatetimeIndex.
Таким образом, согласно документу, datetime должно быть разрешено.вот почему я сбиваю с толку.
Я последовал за комментарием Мартина Питерса о том, что существенным вопросом здесь является индекс, модель не имеет полных дат в качестве ключа, так как это австралийский фондовый индекс:
All Ordinaries closing price
Date
2014-06-30 5382.0
2014-07-01 5366.5
2014-07-02 5441.7
2014-07-03 5479.5
2014-07-04 5511.8
2014-07-07 5506.3
2014-07-08 5498.5
2014-07-09 5442.2
2014-07-10 5454.3
2014-07-11 5474.6
Таким образом, некоторые даты отличаются на один день, некоторые даты различаются на три дня.Тем не менее, я до сих пор не понимаю, почему я не могу использовать res.plot_predict напрямую.Некоторые другие могут иметь такую же проблему, как если я использую непрерывный временной ряд, то это работает.
Kriss предоставляет ссылку под комментарием, затем я прочитал ее полностью, но мне не удалось использовать ее для решения моей проблемы: в моих данных каждая дата уникальна, но чтобы убедиться в этом, я следовалответ:
data = data.groupby(pd.TimeGrouper(freq='D')).sum()
# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima_model import ARIMA
from datetime import datetime
# Forecast interest rates using an AR(1) model
mod = ARIMA(data, order=(1,1,1))
res = mod.fit()
# Plot the original series and the forecasted series
res.plot_predict(start=min(data.index), end=datetime(2018,9,28))
plt.show()
Тогда у меня такое же чувство, что я хочу ударить стену, я получил ошибку:
KeyError: Timestamp('2014-06-30 00:00:00')