Métodos de previsão de séries temporais | Arima em Python e R

Conteúdo

Introdução

Imagina isto: você recebeu a tarefa de prever o preço do próximo iPhone e fornecer dados históricos. Isso inclui recursos como vendas trimestrais, despesas mensais e uma série de outras coisas que vêm com o balanço da Apple. Como cientista de dados, Que tipo de problema você classificaria em? Modelagem de séries temporais, claro.

Da previsão de vendas de produtos à estimativa do uso doméstico de eletricidade, a previsão de séries temporais é uma das principais habilidades que qualquer cientista de dados deve saber, se não dominar. Existem inúmeras técnicas diferentes que você pode usar, e neste artigo iremos cobrir um dos mais eficazes, chamado Auto ARIMA.

autoarimafeat-6048464

Primeiro entenderemos o conceito de ARIMA que nos levará ao nosso tópico principal: Auto ARIMA. Para solidificar nossos conceitos, vamos pegar um conjunto de dados e implementá-lo em Python e R.

Tabela de conteúdos

  1. O que é uma série temporal?
  2. Métodos de previsão de séries temporais
  3. Introdução ao ARIMA
  4. Passos para implementar ARIMA
  5. Por que precisamos do AutoARIMA?
  6. Implementação ARIMA automática (no conjunto de dados de passageiros aéreos)
  7. Como você seleciona parâmetros ARIMA automáticos?

Se você está familiarizado com séries temporais e suas técnicas (como média móvel, suavização exponencial e ARIMA), você pode ir diretamente para a seção 4. Para iniciantes, comece na seção abaixo, que é uma breve introdução às séries temporais e várias técnicas de previsão. .

1. O que é uma série temporal?

Antes de aprender sobre técnicas para trabalhar com dados de séries temporais, devemos primeiro entender o que uma série temporal realmente é e como ela difere de qualquer outro tipo de dados. Aqui está a definição formal de série temporal: é uma série de pontos de dados medido em intervalos de tempo consistentes. Isso significa simplesmente que determinados valores são registrados em um intervalo constante que pode ser de hora em hora., Diário, semanalmente, cada 10 dias, etc. O que torna as séries temporais diferentes é que cada ponto de dados na série depende dos pontos de dados anteriores. Vamos entender a diferença com mais clareza tomando alguns exemplos.

Exemplo 1:

Suponha que você tenha um conjunto de dados de pessoas que obtiveram um empréstimo de uma determinada empresa (como mostrado na tabela a seguir). Você acha que cada linha estará relacionada às linhas anteriores? Certamente não! O empréstimo tomado por uma pessoa será baseado em suas condições e necessidades financeiras (pode haver outros fatores, como tamanho da família, etc., mas para simplificar, estamos considerando apenas a receita e o tipo de empréstimo). O que mais, os dados não foram coletados em nenhum intervalo de tempo específico. Depende de quando a empresa recebeu um pedido de empréstimo.

autoarima1-2590281

Exemplo 2:

Vamos dar outro exemplo. Suponha que você tenha um conjunto de dados que contém o nível de CO2 no ar por dia (captura de tela abaixo). Você pode prever a quantidade aproximada de CO2 para o dia seguinte, olhando para os valores dos últimos dias? Nós vamos, claro. Se você notar, os dados foram registrados diariamente, quer dizer, o intervalo de tempo é constante (24 horas).

auto-arima-4681520

Você deve ter tido uma intuição sobre isso agora: o primeiro caso é um problema de regressão simples e o segundo é um problema de série temporal. Embora o quebra-cabeça da série temporal também possa ser resolvido usando regressão linear, essa não é realmente a melhor abordagem, uma vez que negligencia a relação dos valores com todos os valores passados ​​relativos. Vejamos agora algumas das técnicas comuns usadas para resolver problemas de série temporal..

2. Métodos de previsão de séries temporais

Existem vários métodos para a previsão de séries temporais e nós os cobriremos brevemente nesta seção.. Explicações detalhadas e códigos Python para todas as técnicas mencionadas abaixo podem ser encontrados neste artigo: 7 técnicas para previsão de séries temporais (com códigos Python).

  1. Abordagem ingênua: Nesta técnica de previsão, o valor do novo ponto de dados é previsto para ser igual ao ponto de dados anterior. O resultado seria uma linha reta, uma vez que todos os novos valores assumem os valores anteriores.ingênuo-2432706
  2. Média simples: O valor a seguir é considerado a média de todos os valores anteriores. As previsões aqui são melhores do que a 'Abordagem Ingênua', pois não resulta em uma linha plana, mas aqui, todos os valores anteriores são levados em consideração, o que pode nem sempre ser útil. Por exemplo, quando solicitado a prever a temperatura de hoje, Eu consideraria a temperatura do último 7 dias em vez da temperatura de um mês atrás.simples média-5477497
  3. Média móvel : Esta é uma melhoria em relação à técnica anterior. Em vez de tirar a média de todos os pontos acima, a média de 'n’ os pontos anteriores são considerados como o valor previsto.Movingaverage-7801970
  4. Média móvel ponderada: Uma média móvel ponderada é uma média móvel em que os valores 'n’ passado recebem pesos diferentes.wmovingavg-5287626
  5. Suavização exponencial simples: Nesta técnica, as observações mais recentes recebem pesos maiores do que as do passado distante.ses-3692119
  6. Modelo de tendência linear de Holt: Este método leva em consideração a tendência do conjunto de dados. Por tendência, queremos dizer a natureza crescente ou decrescente da série. Suponha que o número de reservas de hotel aumente a cada ano, então podemos dizer que o número de reservas mostra uma tendência crescente. A função de previsão neste método é uma função de nível e tendência.holttrend-3015737
  7. Método Holt Winters: Este algoritmo leva em consideração a tendência e a sazonalidade da série. Por exemplo, o número de reservas de hotel é alto nos fins de semana e baixo nos dias de semana, e aumenta a cada ano; há uma sazonalidade semanal e uma tendência de crescimento.holtwinter-3922820
  8. ARIMA: ARIMA é uma técnica muito popular para modelagem de séries temporais. Descreve a correlação entre os pontos de dados e leva em consideração a diferença de valores. Uma melhoria em relação ao ARIMA é o SARIMA (o Sazonal ARIMA). Veremos o ARIMA com um pouco mais de detalhes na próxima seção..

3. Introdução ao ARIMA

Nesta seção, faremos uma introdução rápida ao ARIMA que será útil para entender o Auto Arima. Uma explicação detalhada de Arima está incluída neste artigo, parametros (p, q, d), gráficos (ACF PACF) e implementação: Tutorial de série temporal completo.

ARIMA é um método estatístico muito popular para prever séries temporais. ARIMA significa Médias móveis auto-regressivas integradas. Os modelos ARIMA funcionam com as seguintes premissas:

  • A série de dados é estacionária, o que significa que a média e a variância não devem variar ao longo do tempo. Uma série pode ser estacionária usando transformação logarítmica ou diferenciando a série.
  • Os dados fornecidos como entrada devem ser uma série univariada, uma vez que arima usa valores passados ​​para prever valores futuros.

ARIMA tem três componentes: COM (termo autoregressivo), eu (termo de diferenciação) y MA (termo de média móvel). Vamos entender cada um desses componentes:

  • O termo AR se refere aos valores anteriores usados ​​para prever o próximo valor. O termo AR é definido pelo parâmetro 'p’ em arima. O valor de 'p’ determinado usando o gráfico PACF.
  • O termo MA é usado para definir o número de erros de previsão anteriores que são usados ​​para prever valores futuros. O parâmetro 'q’ em arima representa o termo MA. O gráfico ACF é usado para identificar o valor 'q’ Direito.
  • A ordem de diferenciação especifica o número de vezes que a operação de diferenciação serial é realizada para torná-la estacionária. Testes como ADF e KPSS podem ser usados ​​para determinar se a série está estacionária e ajudar a identificar o valor d.

4. Passos para implementar ARIMA

As etapas gerais para implementar um modelo ARIMA são:

  1. Faça upload dos dados: A primeira etapa na construção do modelo é, claro, carregar conjunto de dados.
  2. Pré-processando: Dependendo do conjunto de dados, as etapas de pré-processamento serão definidas. Isso incluirá a criação de carimbos de data / hora, converter tipo de coluna de data / hora, faça a série univariada, etc.
  3. Faça a série estacionária: Para satisfazer a suposição, é necessário fazer a série estacionária. Isso incluiria verificar a estacionariedade da série e realizar as transformações necessárias.
  4. Determine o valor d: Para tornar a série estacionária, o número de vezes que a operação de diferença foi realizada será considerado como o valor d
  5. Crie gráficos ACF e PACF: Esta é a etapa mais importante na implementação do ARIMA. Os gráficos ACF PACF são usados ​​para determinar os parâmetros de entrada para nosso modelo ARIMA.
  6. Determine os valores p e q: Leia os valores p e q dos gráficos da etapa anterior
  7. Ajuste o modelo ARIMA: Usando os dados processados ​​e os valores dos parâmetros que calculamos nas etapas anteriores, caber no modelo ARIMA
  8. Prever valores no conjunto de validação: Previsão de valores futuros
  9. Calcular RMSE: Para verificar o desempenho do modelo, verificar o valor RMSE usando previsões e valores reais no conjunto de validação.

5. Por que precisamos do Auto ARIMA?

Embora ARIMA seja um modelo muito poderoso para previsão de dados de séries temporais, processos de preparação de dados e ajuste de parâmetros acabam consumindo muito tempo. Antes de implementar ARIMA, você precisa tornar a série estacionária e determinar os valores de peq usando os gráficos que discutimos anteriormente. Auto ARIMA torna essa tarefa realmente fácil para nós, uma vez que elimina as etapas 3 uma 6 que vimos na seção anterior. A seguir, as etapas que você precisa seguir para implementar ARIMA automático são mostradas:

  1. Carregar dados: Esta etapa será a mesma. Faça upload dos dados para o seu laptop
  2. Pré-processamento de dados: a entrada deve ser univariada, portanto, remova as outras colunas
  3. Fit Auto ARIMA: se encaixa no modelo na série univariada
  4. Prever valores no conjunto de validação: fazer previsões no conjunto de validação
  5. Calcular RMSE: verificar o desempenho do modelo usando valores previstos em relação aos valores reais

Ignoramos completamente a seleção das funções p e q, como você pode ver. Que alivio! Na próxima seção, vamos implementar ARIMA automático usando um conjunto de dados de brinquedo.

6. Implementação em Python e R

Usaremos o conjunto de dados International-Air-Passenger. Este conjunto de dados contém o número total mensal de passageiros (em milhares). Tem duas colunas: mês e contagem de passageiros. Você pode baixar o conjunto de dados em esse link.

#carregue os dados
data = pd.read_csv('international -irline-passageiros.csv')

#dividir em treino e conjunto de validação
train = data[:int(0.7*(len(dados)))]
válido = dados[int(0.7*(len(dados))):]

#pré-processando (uma vez que arima leva séries univariadas como entrada)
trem.drop('Mês',eixo = 1, local = Verdadeiro)
valid.drop('Mês',eixo = 1, local = Verdadeiro)

#plotando os dados
Comboio['Passageiros de companhias aéreas internacionais'].enredo()
válido['Passageiros de companhias aéreas internacionais'].enredo()

autoarimaplot1-3762053

#construindo o modelo
from pyramid.arima import auto_arima
model = auto_arima(Comboio, trace = True, error_action = 'ignorar', suppress_warnings = True)
model.fit(Comboio)

forecast = model.predict(n_periods = only(válido))
previsão = pd.DataFrame(previsão,index = valid.index,colunas =['Predição'])

#traçar as previsões para o conjunto de validação
plt.plot(Comboio, rótulo ="Trem")
plt.plot(válido, rótulo ="Válido")
plt.plot(previsão, rótulo ="Predição")
plt.show()

autoarimaplot-4372874

#calcular rmse
de matemática import sqrt
de sklearn.metrics import mean_squared_error

rms = sqrt(mean_squared_error(válido,previsão))
imprimir(rms)
saída -
76.51355764316357

Abaixo está o código R para o mesmo problema:

# carregando pacotes
biblioteca(previsão)
biblioteca(Métricas)

# lendo dados
data = read.csv("internacional-companhia aérea-passageiros.csv")

# divisão de dados em conjuntos válidos e de trem
train = data[1:100,]
válido = dados[101:agora(dados),]

# removendo "Mês" coluna
treinar $ Mês = NULL

# modelo de treinamento
model = auto.arima(Comboio)

# resumo do modelo
resumo(modelo)

# previsão
previsão = previsão(modelo,44)

# avaliação
rmse($ International.airline.passengers válidos, previsão $ pred)

7. Como o Auto Arima seleciona os melhores parâmetros?

No código acima, nós apenas usamos o .encaixar() comando para ajustar o modelo sem ter que selecionar a combinação de p, q, d. Mas, Como o modelo descobriu a melhor combinação desses parâmetros? Auto ARIMA leva em consideração os valores AIC e BIC gerados (como você pode ver no código) para determinar a melhor combinação de parâmetros. Valores AIC (Critério de Informação Akaike) y BIC (Critério de Informação Bayesiana) são estimadores para comparar modelos. Quanto mais baixos forem esses valores, melhor o modelo.

Confira estes links se você estiver interessado na matemática por trás AIC e BIC.

8. Notas finais e leituras adicionais

Eu descobri que o ARIMA automático é a técnica mais simples para fazer previsões de séries temporais. Saber um atalho é bom, mas também é importante estar familiarizado com a matemática por trás disso. Neste artigo, Eu examinei os detalhes de como o ARIMA funciona, mas certifique-se de verificar os links fornecidos no artigo. Para sua fácil referência, aqui estão os links novamente:

Eu sugeriria praticar o que aprendemos aqui sobre este problema de prática: Problema de prática de série temporal. Você também pode fazer nosso curso de treinamento criado no mesmo problema prático, Previsão de séries temporais, para te dar uma vantagem.

Boa sorte e fique à vontade para nos enviar seus comentários e fazer perguntas na seção de comentários abaixo..

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.