Прогноз продаж с ARIMA - PullRequest
       66

Прогноз продаж с ARIMA

0 голосов
/ 17 июня 2020

, пожалуйста, несите этот длинный пост, поскольку я пытаюсь объяснить, что я делаю, шаг за шагом:

Я использую набор данных о продажах шампуня, чтобы практиковать прогнозирование временных рядов с python. В этом наборе данных есть значения продаж с 1 по 12 января, с 1 по 12 февраля и с 1 по 12 марта. Я хочу спрогнозировать продажи на известные даты с помощью ARIMA:

Я выполнил шаги из этого блога: [https://medium.com/@stallonejacob / time-series-pred-a-basi c -introduction-using- python -414fcb963000]

Time series plot

  1. Я проверил, является ли мой прогноз нестационарным, с помощью теста скользящего среднего и теста Дики-Фуллера . Очевидно, что моя серия нестационарна
  2. Чтобы сделать ее стационарной, я применил функцию diff () к моему df, а затем проверил, является ли она стационарной

    shampoo_diff = shampoo.diff().fillna(shampoo)

Rolling Avg and ADF test

Поскольку значение p <0,05, мы можем быть уверены, что shampoo_diff не меняется. Поскольку я применил diff () только один раз, я предположил <strong>d = 1

После этого я применила Season_decompose к своему оригинальному шампуню df:

decomposition = seasonal_decompose(shampoo, period = 12)

Seasonal Decompose Plots

Затем я построил график ACF и PACF, чтобы получить значения для p и q. Из графиков ниже я предположил, что p = 3 и q = 3, так как есть 3 значительных всплеска за пределами доверительного интервала для каждого графика.

ACF Plot PACF Plot

Однако это приводит к тому, что начальные коэффициенты MA не обратимы (не уверен, что это означает ) и выдает ошибку. Поэтому я смоделировал ARIMA с помощью p = 2, d = 1, q = 2 и запустил его в мои существующие даты, чтобы увидеть, как он подходит.

model = ARIMA(shampoo_diff['Sales'], order=(2,1,2))
  results_AR = model.fit(disp=-1)
  plt.figure(figsize=(20,6))
  plt.plot(shampoo_diff)
  plt.plot(results_AR.fittedvalues, color='red')
  plt.title('RSS: %.4f'% sum((results_AR.fittedvalues.values - shampoo_diff['Sales'][1:])**2))

Shampoo & ARIMA-forecasted plot

Мое значение RSS очень велико!

Как я могу это улучшить? Спасибо!

...