Facebook lança ferramenta para Forecast Open Source

Sigmundo Preissler Jr, PhD
3 min readNov 21, 2018

--

Em Fevereiro de 2017 a Facebook Research lançou publicamente uma ferramenta open source para forecasting, chama-se Facebook Prophet. A ferramenta está disponível no GitHub para uso em Phython ou R.

A comunidade de Cientistas de Dados ao redor do mundo adoraram a ideia, pois foram também convidados à contribuir com a ferramenta. E ainda por cima tendo a possibilidade de usar uma ferramenta desenvolvida pela Facebook com base nas suas dores e necessidades que geraram aprendizado e uma ferramenta fantástica.

A ferramenta visa contribuir para problemas de geração de previsões e cenários futuros para séries temporais. Veja as características do Prophet (em que ele brilha, segundo o site):

  • Observações horárias, diárias ou semanais com pelo menos alguns meses (preferivelmente um ano) de histórico.
  • Fortes sazonalidades múltiplas em “escala humana”: dia da semana e época do ano.
  • Feriados importantes que ocorrem em intervalos irregulares que são conhecidos antecipadamente (por exemplo, o Super Bowl).
  • Um número razoável de observações ausentes ou grandes outliers,
    mudanças históricas de tendência, por exemplo, devido a lançamentos de produtos ou alterações no registro.
  • Tendências que são curvas de crescimento não lineares, em que uma tendência atinge um limite natural ou satura.

A ideia de oferecer uma ferramenta para forecast com menor esforço está tornando o Prophet largamente investigado. Ele usa um processo cíclico, conforme apresentado na Fig.1.

Fig.1 — Processo de Forecast do Prophet (Source: Facebook)

O modelo aditivo é utilizado para a análise de sazonalide (explico melhor este modelo e o modelo multiplicativo neste post). Os quatro componentes principais são:

  • Uma tendência de curva de crescimento linear ou logística por partes. O Prophet detecta automaticamente as alterações nas tendências selecionando pontos de mudança dos dados.
  • Um componente sazonal anual modelado usando séries de Fourier.
  • Um componente sazonal semanal usando variáveis dummy.
  • Uma lista de feriados importantes fornecida pelo usuário.

Só para dar um gostinho do visual da ferramenta seguem abaixo algumas figuras obtidas no próprio site do Facebook Research. A ferramenta além de ter uma interface muito agradável é intuitiva e de fácil implementação em Python ou R.

Fig.2 — Análise de Sazonalidade do Prophet

Na Fig.2 você encontra uma análise de sazonalidade em um modelo treinado pela própria ferramenta em um visual bem agradável. Já na Fig. 3 você pode identificar análises de tendência em sub plots com variação de período.

Fig.3 — Análise em Sub Plots do Prophet

A implementação em Python e em R são muito simples. Porém atenção às interpretações e aos métodos utilizados no modelo OK? (veja mais no site do Prophet). Dá uma olhada nesses códigos obtidos no tutorial geral para Python:

# Python
import pandas as pd
from fbprophet import Prophet
df = pd.read_csv('../examples/example_wp_log_peyton_manning.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
fig2 = m.plot(forecast)
fig3 = m.plot_components(forecast)

Perceba que este código em Python vai gerar exatamente os gráficos que você viu acima, a Fig.2 e a Fig.3. Um detalhe importante: não esqueça de instalar, antes de tudo, o fbprophet, para isso você pode instalar usando o PiP:

#pip install fbprophet

Já que estamos falando de implementação, vamos apresentar aqui o resumo de implementação em R, olha só:

# R
library(prophet)
df <- read.csv('../examples/example_wp_log_peyton_manning.csv')
m <- prophet(df)
future <- make_future_dataframe(m, periods = 365)
forecast <- predict(m, future)
tail(forecast[c('ds', 'yhat', 'yhat_lower', 'yhat_upper')])
# Fig. 2
plot(m, forecast)
# Fig. 3
prophet_plot_components(m, forecast)

Gostou? Legal né? Se quiser contribuir com a comunidade e principalmente para o Facebook Prophet acesse o site principal da ferramenta aqui ou ainda o GitHub do Prophet. Caso queira deixei seus comentários abaixo e continue me acompanhando por aqui ;)

Boas previsões!

--

--