Прогнозирование временных рядов по Холт-Винтерсу с использованием statsmodels - PullRequest
0 голосов
/ 10 июня 2018

Я пытался прогнозировать с помощью holt-winters model, как показано ниже, но продолжаю получать прогноз, который не согласуется с тем, что я ожидаю.Я также показал визуализацию сюжета

Train = Airline[:130]
Test = Airline[129:]

from statsmodels.tsa.holtwinters import Holt

y_hat_avg = Test.copy()
fit1 = Holt(np.asarray(Train['Passengers'])).fit()
y_hat_avg['Holt_Winter'] = fit1.predict(start=1,end=15)
plt.figure(figsize=(16,8))
plt.plot(Train.index, Train['Passengers'], label='Train')
plt.plot(Test.index,Test['Passengers'], label='Test')
plt.plot(y_hat_avg.index,y_hat_avg['Holt_Winter'], label='Holt_Winter')
plt.legend(loc='best')
plt.savefig('Holt_Winters.jpg')

Я не уверен в том, что мне здесь не хватает.

Here's the plot visualization

Прогноз, похоже, соответствуетболее ранняя часть данных обучения

1 Ответ

0 голосов
/ 10 июня 2018

Основная причина ошибки - ваши начальные и конечные значения.Он прогнозирует значение для первого наблюдения до пятнадцатого.Однако, даже если вы исправите это, Холт включает только компонент тренда, и ваши прогнозы не будут иметь сезонных эффектов.Вместо этого используйте ExponentialSmoothing с сезонными параметрами.

Вот рабочий пример для вашего набора данных:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.holtwinters import ExponentialSmoothing

df = pd.read_csv('/home/ayhan/international-airline-passengers.csv', 
                 parse_dates=['Month'], 
                 index_col='Month'
)
df.index.freq = 'MS'
train, test = df.iloc[:130, 0], df.iloc[130:, 0]
model = ExponentialSmoothing(train, seasonal='mul', seasonal_periods=12).fit()
pred = model.predict(start=test.index[0], end=test.index[-1])

plt.plot(train.index, train, label='Train')
plt.plot(test.index, test, label='Test')
plt.plot(pred.index, pred, label='Holt-Winters')
plt.legend(loc='best')

, который дает следующий график:

forecast results with Holt-Winters

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...