Ошибка при использовании прогноза с ARIMA (python statsmodels) - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть набор данных с датами и случайными значениями.Следующий код генерирует набор данных.

def random_dates(start, end, n=10):
        start_u = start.value//10**9
        end_u = end.value//10**9
        return pd.DatetimeIndex((10**9*np.random.randint(start_u, end_u, n)))

    start = pd.to_datetime('2017-01-01')
    end = pd.to_datetime('2018-01-12')

    days = random_dates(start, end)

    np.random.seed(seed=1111)
    data = np.random.randint(1, high=100, size=len(days))
    df = pd.DataFrame({'Date': days, 'values': data})
    df = df.set_index('Date')
    print(df)

The original Dataset Я пытаюсь реализовать модель временных рядов ARIMA в наборе данных для прогнозирования на период с ноября 2018 года по декабрь 2018 года.Из набора данных видно, что я поставил нули на даты, когда мне нужно предсказать значения.

Я код ниже, чтобы сделать прогноз.Тем не менее, я получаю сообщение об ошибке в строке: 2 начало get_prediction не может быть присвоено значение даты, которое я хочу. TypeError: аргумент int () должен быть строкой, байтовоподобным объектом или числом, а не 'меткой времени'

start = pd.to_datetime("2018-01-10")
pred = results.get_prediction(start, dynamic=False)
pred_ci = pred.conf_int()
ax = tc.plot(label='observed')
pred.predicted_mean.plot(ax=ax, label='One-step ahead Forecast', alpha=.7, figsize=(14, 7))
ax.fill_between(pred_ci.index,
                pred_ci.iloc[:, 0],
                pred_ci.iloc[:, 1], color='k', alpha=.2)
ax.set_xlabel('Date')
ax.set_ylabel('TC')
plt.legend()
plt.show()

Я пытался изменить индекс даты на строку, ноэто дает ту же ошибку.Пожалуйста, скажите мне, где я ошибся.Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Я думаю, что это результат ошибки в Statsmodels, которая была исправлена ​​только недавно (https://github.com/statsmodels/statsmodels/pull/5250).

. Тем временем вы можете попробовать следующее (если ваши данные находятся в переменной df)

start = df.index.get_loc(pd.to_datetime("2018-01-10"))
...