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

На R есть много пакетов, которые помогают в прогнозировании. Но общие модели, создаваемые начинающими пользователями, не так уж и надежны. Это не вина доступных пакетов, а их использование неопытными пользователями. Выбор правильной модели ARIMA или использование моделей пространства состояний поможет, но удобство использования является главной проблемой.

Здесь на сцену выходит Пророк от Facebook. Он соответствует моделям аддитивной регрессии вместо традиционных моделей ARIMA. Основные особенности Prophet:

  • Разумное количество отсутствующих наблюдений.
  • Обрабатывает большое количество выбросов.
  • Исторический тренд меняется.

Это просто круто, правда?

Итак, начнем -

Вы можете установить Prophet в R с помощью

>install.packages('prophet')

Теперь этот пророк установлен

>library(prophet)

Нам нужно получить некоторые данные и прочитать их во фрейме данных. Здесь я использую журнал просмотров страницы Википедии Петиона Мэннинга, который можно скачать здесь.

Теперь импортируйте csv в среду R и сохраните во фрейме данных.

>df <- example_wp_peyton_manning

Давайте посмотрим на заголовок фрейма данных.

> head(df) 
# A tibble: 6 x 2 ds y <date> <int> 1 2007-12-10 14629 2 2007-12-11 5012 3 2007-12-12 3582 4 2007-12-13 3205 5 2007-12-14 2680 6 2007-12-15 2401

Построение данных приводит к

>plot(df$y)

Сезонность и тенденция не просматриваются. Давайте запишем временной ряд и построим его.

>df1 <- df
>df1$y <- log(df$y)
>plot(df1$y)

Теперь это намного лучше. Подбираем модель по данным.

>m <- prophet(df1)

Теперь прогнозы можно делать на основе фрейма данных, содержащего даты прогноза.

> future <- make_future_dataframe(m , periods = 365)
> tail(future) 
ds 3265 2017-01-14 3266 2017-01-15 3267 2017-01-16 3268 2017-01-17 3269 2017-01-18 3270 2017-01-19
> head(future) 
ds 1 2007-12-10 2 2007-12-11 3 2007-12-12 4 2007-12-13 5 2007-12-14 6 2007-12-15

Давайте предсказывать.

> pred <- predict(m, future) |=============================================|100% ~0 s remaining
> tail(pred$yhat) 
[1] 7.823991 8.205770 8.530798 8.318204 8.150827 8.162741

Построение прогноза.

> plot(m, pred)

Вот что сказали создатели Prophet:

«Мы обнаружили, что настройки Prophet по умолчанию позволяют создавать прогнозы, которые часто точны, чем прогнозы, составленные опытными прогнозистами, с гораздо меньшими усилиями».

«С Prophet вы не останетесь довольны результатами полностью автоматической процедуры, если прогноз неудовлетворителен - аналитик, не обученный методам временных рядов, может улучшить или настроить прогнозы, используя множество простых способов. интерпретируемые параметры ».

Так что продолжайте экспериментировать, чтобы получить более точные результаты.