Попытка обдумать, как реализовать модель ARIMA для получения (возможно) простых прогнозов.По сути, я планирую прогнозировать бронирование в этом году до конца года и экспортировать в формате CSV.Выглядит примерно так:
date bookings
2017-01-01 438
2017-01-02 167
...
2017-12-31 45
2018-01-01 748
...
2018-11-29 223
2018-11-30 98
...
2018-12-30 73
2018-12-31 100
Где прогнозируется что-то большее, чем сегодня (28/11/18).
Что я пытался сделать:
Это дает мне мой набор данных, который в основном состоит из двух столбцов, данных за день за весь 2017 год и заказов:
import pandas as pd
import statsmodels.api as sm
# from statsmodels.tsa.arima_model import ARIMA
# from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
import matplotlib
matplotlib.rcParams['axes.labelsize'] = 14
matplotlib.rcParams['xtick.labelsize'] = 12
matplotlib.rcParams['ytick.labelsize'] = 12
matplotlib.rcParams['text.color'] = 'k'
df = pd.read_csv('data.csv',names = ["date","bookings"],index_col=0)
df.index = pd.to_datetime(df.index)
Это бит "моделирования":
X = df.values
size = int(len(X) * 0.66)
train, test = X[0:size], X[size:len(X)]
history = [x for x in train]
predictions = list()
for t in range(len(test)):
model = ARIMA(history, order=(1,1,0))
model_fit = model.fit(disp=0)
output = model_fit.forecast()
yhat = output[0]
predictions.append(yhat)
obs = test[t]
history.append(obs)
# print('predicted=%f, expected=%f' % (yhat, obs))
#error = mean_squared_error(test, predictions)
#print(error)
#print('Test MSE: %.3f' % error)
# plot
plt.figure(num=None, figsize=(15, 8))
plt.plot(test)
plt.plot(predictions, color='red')
plt.show()
Экспорт результатов в csv:
df_forecast = pd.DataFrame(predictions)
df_test = pd.DataFrame(test)
result = pd.merge(df_test, df_forecast, left_index=True, right_index=True)
result.rename(columns = {'0_x': 'Test', '0_y': 'Forecast'}, inplace=True)
Проблема, с которой я столкнулся:
- Понимание подмножеств поезда / теста.Поправьте меня, если я ошибаюсь, но набор Train используется для обучения модели и получения данных «прогнозов», а затем есть тест, чтобы сравнить прогнозы с тестом?
- 2017 данные выглядели хорошо, нокак мне реализовать это на данных 2018 года?Как я могу получить Поезд / Тестовые наборы?Нужно ли мне это вообще?
Что я думаю, что мне нужно сделать:
- Получить данные о моих бронированиях за 2017 и 2018 годы из моей базы данных
- Разделить его на 2017 и 2018 годы
- Подготовить некоторые прогнозы на 2018 год
- Добавить эти данные прогноза на 2018 год + к 2017 году и экспортировать их в формате csv
Как и почему проблема у меня.Любая помощь будет высоко ценится