Найти тему
Data - новая нефть!

Заглянуть в будущее, легко с FaceBook и Python!

Моё мнение: аналитика это не только и не столько констатация факта. Важнее понимать не где мы сейчас, а где мы будем и какие драйверы для этого есть.

Часто возникает задача прогноза того или иного показателя. Т.е. какой будет конкретная величина (MAU, Turnover и т.д.) через неделю, месяц, квартал. Чаще всего линейно прогнозировать нельзя: надо, как минимум, учитывать сезонность. При этом сезонность может быть как внутри года, так и внутри недели. Не забываем про государственные праздники и т.д. Множество факторов, которые надо уложить в модель.

Если показатель, которые вы прогнозируете достаточно инертен (например MAU), то для решения этой задачи прекрасно подходит библиотека Prophet от FaceBook. С её помощь построение прогноза сводится к 5-7 строчкам кода. При этом под капотом мощнейшие технологии, разработанные в Фейсбуке для целей Фейсбука. Библиотека самостоятельно определяет характер временного ряда и строит функцию повторяющую его.

Сначала покажу пример прогноза, которые я использую в дашбордах:

Прогноз временного ряда
Прогноз временного ряда

На графике выше синяя линия - факт показателя, оранжевая - прогноз.

Покажу пример кода, который позволит реализует такой график:

1. Устанавливаем библиотеку (выполняется 1 раз)

$ pip install pystan
$ pip install fbprophet

2. Импортируем библиотеки:

# Python
import pandas as pd
from fbprophet import Prophet

3.Читаем данные в датафрейм:

df = pd.read_csv ( '../examples/example_wp_log_peyton_manning.csv' )

Важно отметить: библиотека Prophet на входе требует датафрейм с двумя колонками: ds - дата, y - значение. Названия колонок именно такие и ни как иначе.

Пример датафрейма
Пример датафрейма

4. Инициализируем объект m, и отдаём ему на обучение наш датафрейм

# Python
m = Prophet ()
m.fit (df)

5. Создаём датафрейм, которые содержит 365 дат от сегодня в будущее (можно больше или меньше). Функция встроена в Prophet

future = m.make_future_dataframe(periods = 365)

6. Запускаем построение прогноза по модели в m для дат из датафрейма future

forecast = m.predict (future) # прогноз
forecast [[ 'ds' , 'yhat' , 'yhat_lower' , 'yhat_upper' ]].tail()
# вывод результата
Итоговый датафрейм
Итоговый датафрейм

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

fig1 = m.plot(forecast)
Результат прогноза
Результат прогноза

Вот и всё. Никаких космических технологий. Прогнозы получаются достаточно точными. Главное помнить: хорошие данные на входе, хороший прогноз на выходе.

В этом прелесть Python. Практически любой может использовать технологи Facebook легко и просто