Многовариантное прогнозирование временных рядов с набором данных за 3 месяца

У меня есть данные за 3 месяца (каждая строка соответствует каждому дню), и я хочу выполнить многомерный анализ временных рядов для них:

доступные столбцы -

Date    Capacity_booked Total_Bookings  Total_Searches  %Variation

Каждая дата имеет 1 запись в наборе данных и 3 месяца данных, и я хочу приспособить многомерную модель временных рядов для прогнозирования других переменных.

До сих пор это была моя попытка, и я пытался добиться того же, читая статьи.

Я сделал то же самое -

df['Date'] = pd.to_datetime(Date , format = '%d/%m/%Y')

data = df.drop(['Date'], axis=1)

data.index = df.Date

from statsmodels.tsa.vector_ar.vecm import coint_johansen
johan_test_temp = data
coint_johansen(johan_test_temp,-1,1).eig



#creating the train and validation set
train = data[:int(0.8*(len(data)))]
valid = data[int(0.8*(len(data))):]

freq=train.index.inferred_freq

from statsmodels.tsa.vector_ar.var_model import VAR

model = VAR(endog=train,freq=train.index.inferred_freq)
model_fit = model.fit()


# make prediction on validation
prediction = model_fit.forecast(model_fit.data, steps=len(valid))

cols = data.columns

pred = pd.DataFrame(index=range(0,len(prediction)),columns=[cols])
    for j in range(0,4):
        for i in range(0, len(prediction)):
           pred.iloc[i][j] = prediction[i][j]

У меня есть набор проверки и набор прогнозов. Однако прогнозы намного хуже, чем ожидалось.

Графики набора данных: 1.% Вариация  введите описание изображения здесь

  1. Capacity_Booked введите здесь описание изображения

  2. Общее количество бронирований и поисков  введите описание изображения здесь

Результат, который я получаю, -

Фрейм данных прогнозирования -

введите описание изображения здесь

Фрейм данных валидации -

введите описание изображения здесь

Как видите, прогнозы не соответствуют ожиданиям. Может кто посоветует способ повысить точность. Кроме того, если я подбираю модель для всех данных, а затем распечатываю прогнозы, она не учитывает начало нового месяца и, следовательно, предсказывает как таковой. Как это можно включить здесь? приветствуется любая помощь.

ИЗМЕНИТЬ

Ссылка на набор данных - набор данных

Спасибо


person dper    schedule 17.11.2019    source источник
comment
Можете ли вы опубликовать стандартные классы   -  person Swarathesh Addanki    schedule 30.11.2019
comment
@SwaratheshAddanki Я добавил ссылку на набор данных в вопросе ... вы можете посмотреть.   -  person dper    schedule 02.12.2019
comment
Вы можете попробовать использовать классический алгоритм машинного обучения, используя самодельные функции. Например, вы можете попытаться обучить перцептрон, SVM или случайный лес в течение одного дня, используя последние 7 дней (сделайте один ряд с функциями 4 * 7). Вы также можете принять во внимание один и тот же день прошлой недели (среду, если вы хотите предсказать среду) и среднее значение каждой среды прошлого месяца. Также используйте перекрестную проверку, чтобы получить более реалистичное измерение производительности.   -  person politinsa    schedule 05.12.2019
comment
@politinsa Не могли бы вы привести пример того же?   -  person dper    schedule 06.12.2019
comment
Я считаю, что у вас недостаточно данных, чтобы соответствовать хорошей модели: главная особенность, похоже, - это скачки вниз в конце этого месяца. Мы можем видеть только два из этих скачков в наборе данных, и из всего двух наблюдений невозможно многое узнать о том, как выглядит типичный скачок. Точно так же рост в течение месяцев выглядит достаточно регулярным, чтобы модель могла попытаться описать форму этих кривых, но мало информации о том, насколько значения вырастут за типичный месяц. Учитывая это, следующий месяц, равный предыдущему, может быть достаточно хорошей моделью?   -  person jochen    schedule 16.02.2020
comment
@jochen Спасибо за ваш ответ, согласно моему пониманию из вашего комментария, вы хотите сказать, что мне нужно предоставить больше точек данных (возможно, за год), чтобы получить хорошие результаты от алгоритма?   -  person dper    schedule 16.02.2020
comment
@dper Да, я так думаю. Как только у вас будет больше данных, вы можете попытаться найти модель (это все еще потребует некоторой работы), но уже через 3 месяца я не думаю, что есть шанс сделать что-нибудь умное. Если у вас есть больше данных, может быть, неплохим началом было бы попытаться просто смоделировать скачки вниз в конце каждого месяца? Раз уж у вас есть это, может быть, увеличивающие биты не так уж и сложно сделать?   -  person jochen    schedule 16.02.2020
comment
@jochen Я новичок в моделировании и хотел спросить, как смоделировать прыжок вниз? Можете предложить какие-нибудь ссылки?   -  person dper    schedule 16.02.2020


Ответы (1)


Один из способов повысить точность - посмотреть на автокорреляцию каждой переменной, как это предлагается на странице документации VAR:

https://www.statsmodels.org/dev/vector_ar.html

Чем больше значение автокорреляции для определенного лага, тем более полезным будет этот лаг для процесса.

Еще одна хорошая идея - взглянуть на критерий AIC и критерий BIC, чтобы проверить вашу точность (в той же ссылке выше есть пример использования). Меньшие значения указывают на большую вероятность того, что вы нашли истинную оценку.

Таким образом, вы можете изменить порядок вашей модели авторегрессии и увидеть ту, которая обеспечивает самый низкий AIC и BIC, проанализированные вместе. Если AIC указывает, что лучшая модель имеет задержку 3, а BIC указывает, что лучшая модель имеет задержку 5, вам следует проанализировать значения 3, 4 и 5, чтобы увидеть ту, которая дает наилучшие результаты.

Лучшим сценарием было бы иметь больше данных (так как 3 месяца - это немного), но вы можете попробовать эти подходы, чтобы увидеть, поможет ли это.

person Danilo Nunes    schedule 16.04.2020