Багатовимірне прогнозування часових рядів із набором даних на 3 місяці


12

У мене створено 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. Ємність_Завантажена введіть тут опис зображення

  2. Усього бронювання та пошуку введіть тут опис зображення

Вихід, який я отримую, -

Рамка даних прогнозування -

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

Рамка даних валідації -

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

Як ви бачите, що прогнози далеко не те, що очікується. Хто-небудь може порадити спосіб підвищення точності. Крім того, якщо я поміщую модель на цілі дані і потім друкую прогнози, це не враховує, що почався новий місяць, а отже, і прогнозувати як такий. Як це можна включити сюди. будь-яка допомога цінується.

EDIT

Посилання на набір даних - Набір даних

Дякую


чи можете ви розмістити std класів
Swarathesh Addanki

@SwaratheshAddanki Я додав посилання до набору даних у запитанні ... ви можете подивитися.
dper

Ви можете спробувати використати класичний алгоритм машинного навчання, використовуючи функції "домашнього виготовлення". Наприклад, ви можете спробувати навчити перцептрон або SVM або випадковий ліс за один день, використовуючи останні 7 днів (складіть один рядок з 4 * 7 функціями). Ви також можете взяти до уваги той самий день минулого тижня (середа, якщо ви хочете прогнозувати на середу) та середню кількість кожної середи минулого місяця. Крім того, використання перехресної перевірки для того , щоб мати більш реалістичне вимірювання продуктивності
politinsa

@politinsa Чи можете ви поділитися прикладом для того ж?
dper

1
Я вважаю, що у вас не вистачає даних, щоб підходити до хорошої моделі: головна особливість, здається, - це стрибки вниз наприкінці цього місяця. Ми можемо бачити лише два таких стрибки в наборі даних, і лише з двох спостережень не вдасться дізнатися багато про те, як виглядає типовий стрибок. Аналогічно, зростання протягом місяців виглядає достатньо регулярно, щоб модель могла спробувати описати форму цих кривих, але мало інформації про те, наскільки величини будуть рости за типовий місяць. Враховуючи це, "наступний місяць дорівнює попередньому місяцю" може бути досить хорошою моделлю?
Йохен

Відповіді:


1

Одним із способів підвищення точності є пошук автокореляції кожної змінної, як це запропоновано на сторінці документації VAR:

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

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

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

Таким чином, ви можете змінити порядок своєї авторегресивної моделі та побачити ту, яка забезпечує найнижчі AIC та BIC, обидва проаналізовані разом. Якщо AIC вказує, що найкраща модель має відставання 3, а BIC вказує, що найкраща модель має відставання 5, вам слід проаналізувати значення 3,4 та 5, щоб побачити модель з найкращими результатами.

Найкращим сценарієм було б мати більше даних (оскільки 3 місяці це не так багато), але ви можете спробувати ці підходи, щоб побачити, чи допомагає це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.