Pular para o conteúdo principal
InicioTutoriaisPython

ARIMA para previsão de séries temporais: Um guia completo

Aprenda os principais componentes do modelo ARIMA, como criá-lo e otimizá-lo para obter previsões precisas em Python e explore suas aplicações em vários setores.
Actualizado 10 de set. de 2024  · 12 min leer

Vamos dar uma olhada no ARIMA, que é uma das técnicas de previsão de séries temporais mais populares (se não a mais popular). O ARIMA é popular porque modela com eficácia os dados de séries temporais, capturando os componentes autorregressivos (AR) e de média móvel (MA) e, ao mesmo tempo, abordando a não estacionariedade por meio da diferenciação (I). Essa combinação torna os modelos ARIMA especialmente flexíveis e é por isso que eles são usados em diversos setores, como o financeiro e o de previsão do tempo. 

Os modelos ARIMA são altamente técnicos, mas vou detalhar as partes para que você possa desenvolver um bom entendimento. Antes de começar, é uma boa ideia que você se familiarize com algumas ferramentas básicas. O DataCamp oferece muitos recursos bons, como nossos cursos Modelos ARIMA em Python ou Modelos ARIMA em R. Você pode escolher qualquer um deles, dependendo do idioma que preferir. 

Por que usar a previsão ARIMA? 

Em finanças, economia e ciências ambientais etc., o ARIMA tem grande interesse porque pode identificar muitos padrões complexos de nossas observações passadas com necessidades futuras, o que o torna uma técnica de última geração. Desde a previsão do preço das ações, passando pela previsão de padrões climáticos até a obtenção de uma ideia sobre a demanda do consumidor, o ARIMA é uma ótima maneira de fazer análises preditivas precisas e acionáveis.

Com o uso do ARIMA, podemos analisar e prever dados de séries temporais de forma sofisticada, levando em conta padrões, tendências e sazonalidade. Isso facilita uma visão de 360 graus da dinâmica subjacente para que você possa tomar decisões informadas.

Componentes principais dos modelos ARIMA

Para realmente entender o ARIMA, precisamos desconstruir seus blocos de construção. Quando tivermos os componentes definidos, será mais fácil entender como esse método de previsão de séries temporais funciona como um todo. Aqui, darei uma explicação detalhada de cada componente.

Parte autorregressiva (AR)

O componente autorregressivo (AR) cria uma tendência altamente necessária a partir de valores passados na estrutura AR para modelos preditivos. Para esclarecer, a "estrutura de autorregressão" funciona como um modelo de regressão em que você usa as defasagens dos valores passados da própria série temporal como regressores.

Usando uma ampla variedade de dados históricos, a estrutura interroga padrões importantes para poder expor a dinâmica sistêmica. Esses padrões históricos nos ajudam a entender quais tendências futuras poderão surgir e a definir alguns pontos prováveis da trajetória de valor que são essenciais para uma melhor tomada de decisão e uma previsão precisa. 

Parte integrada (I)

A parte Integrada (I) envolve a diferenciação do componente da série temporal, tendo em mente que nossa série temporal deve ser estacionária, o que realmente significa que a média e a variação devem permanecer constantes em um período de tempo. Basicamente, subtraímos uma observação de outra para que as tendências e a sazonalidade sejam eliminadas. Ao realizar a diferenciação, obtemos a estacionariedade. Essa etapa é necessária porque ajuda o modelo a se ajustar aos dados e não ao ruído.

Parte da média móvel (MA) 

O componente de média móvel (MA) concentra-se na relação entre uma observação e um erro residual (falhas nos valores observados-previstos) de observações defasadas. Observando como a observação atual está relacionada aos erros do passado, podemos inferir algumas informações úteis sobre qualquer possível tendência em nossos dados. 

Podemos considerar os resíduos entre um desses erros, e o conceito do modelo de média móvel estima ou considera seu impacto em nossa última observação. Isso é particularmente útil para rastrear e capturar alterações de curto prazo nos dados ou choques aleatórios. Na parte (MA) de uma série temporal, podemos obter informações valiosas sobre seu comportamento, o que, por sua vez, nos permite fazer previsões e prognósticos com maior precisão.

Como criar um modelo ARIMA em Python

Para criar um modelo ARIMA para previsão, como os preços do ouro, você pode seguir estas etapas. Vamos analisar isso juntos.

Coleta de dados 

A primeira etapa é preparar um conjunto de dados adequado e preparar nosso ambiente.

Localizar um conjunto de dados

Colete ou pesquise um conjunto de dados em plataformas de fontes de dados. Você quer um que tenha dados históricos ao longo do tempo. Aqui está um link para o conjunto de dados do Kaggle relacionado aos preços futuros do ouro. 

Instalar pacotes

Instalamos os pacotes de que precisamos, incluindo statsmodels e sklearn

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error

Carregar os dados

Em seguida, lemos os dados em nosso ambiente local.

data = pd.read_csv("future-gc00-daily-prices.csv", index_col="Date")

Pré-processamento de dados 

Nosso conjunto de dados é bastante limpo, mas, em outros contextos, teríamos de lidar com problemas de indexação, o que é importante na previsão de séries temporais. Por exemplo, se estivéssemos prevendo o valor de abertura de uma ação em uma determinada bolsa, teríamos de considerar que o mercado de ações não abre nos fins de semana.

Verificar a estacionariedade

Manter as coisas estacionárias facilita muito a tarefa de modelagem, ajuda a melhorar a precisão do nosso modelo e, em troca, nos fornece previsões mais confiáveis. Embora os modelos ARIMA possam lidar com a não estacionariedade até certo ponto, eles não podem considerar efetivamente a variação no tempo. Aqui podemos usar o teste Augmented Dickey-Fuller para saber se nossos dados têm uma média e uma variância constantes.

result = adfuller(data["Price"])
print(f"ADF Statistic: {result[0]}")
print(f"p-value: {result[1]}")

Lidar com valores ausentes

Como parte do pré-processamento de dados, também precisamos considerar como lidar com os valores ausentes usando um método de imputação, como preenchimento direto ou substituição da média.

data.fillna(method='ffill', inplace=True)  # fill missing values

Realizar diferenciação

Para analisar a estacionariedade de nossos dados de série temporal, devemos primeiro calcular as diferenças em nossos dados. Se os dados não forem estacionários, aplique a técnica de diferenciação para transformá-los em uma série estacionária. As etapas a serem seguidas para realizar a diferenciação são as seguintes:

  • Subtraia cada observação da seguinte para obter uma nova série temporal de primeiras diferenças. Isso cria uma nova série temporal com um elemento a menos do que a original.
  • Teste se a série diferenciada agora é estacionária. Caso contrário, podemos obter a segunda diferença diferenciando a série original novamente.
  • Continue diferenciando a série até que ela se torne estacionária. A ordem de diferenciação exigida é o número mínimo de diferenças necessárias para obter uma série sem autocorrelação.
if result[1] > 0.05:  
data["Price"] = data["Price"].diff().dropna()
result = adfuller(data["Price"])
stationarity_interpretation = "Stationary" if result[1] < 0.05 else "Non-Stationary"

print(f"ADF Statistic after differencing: {result[0]}")
print(f"p-value after differencing: {result[1]}")
print(f"Interpretation: The series is {stationarity_interpretation}.")
ADF Statistic: -11.498371141896145
p-value: 4.5550962204394835e-21
Interpretation: The series is Stationary.

Identificação do modelo

Quando criamos um modelo ARIMA, temos que considerar a p, de q que entram em nosso modelo ARIMA.

  • O primeiro parâmetro, p, é o número de observações defasadas. Ao considerar p, determinamos efetivamente o quanto retrocedemos no tempo ao tentar prever a observação atual. Fazemos isso observando as autocorrelações de nossas séries temporais, que são as correlações em nossas séries em defasagens anteriores. 
  • O segundo parâmetro, d, refere-se à ordem de diferenciação. Diferenciar significa simplesmente encontrar as diferenças entre os intervalos de tempo consecutivos. É uma maneira de tornar nossos dados estacionários, o que significa remover as tendências ou a sazonalidade. d indica a diferenciação em que ordem você obtém um processo estacionário.
  • O terceiro parâmetro q refere-se à ordem da parte da média móvel (MA) do modelo. Representa o número de erros de previsão defasados incluídos no modelo. Diferentemente de uma média móvel simples, que suaviza os dados, a média móvel no ARIMA captura a relação entre uma observação e os erros residuais de um modelo de média móvel aplicado a observações defasadas.

Como encontrar os termos ARIMA

Usamos ferramentas como ACF (função de autocorrelação) e PACF (função de autocorrelação parcial) para determinar os valores de p, d e q. O número de defasagens em que a ACF corta é q, e em que a PACF corta é p. Também precisamos escolher o valor adequado para d, criando uma situação em que, após a diferenciação, os dados se assemelhem a ruído branco. Para nossos dados, escolhemos 1 para p e q porque observamos um pico significativo na primeira defasagem para cada um deles.

plot_acf(data["Price"], lags=40)
plot_pacf(data["Price"], lags=40)

Gráficos ACF e PACF de resíduos para avaliar o ajuste do modeloGráficos ACF e PACF usados para determinar os termos ARIMA. Imagem do autor

Estimativa de parâmetros 

Para deixar claro, os valores p, d e q no ARIMA representam a ordem do modelo (defasagens para autorregressão, diferenciação e termos de média móvel), mas não são os parâmetros reais que estão sendo estimados. Depois que os valores de p, d e q são escolhidos, o modelo estima parâmetros adicionais, como coeficientes para os termos autorregressivos e de média móvel, por meio da estimativa de máxima verossimilhança (MLE).

Ajuste de modelo

# Fit the ARIMA model
# Initial ARIMA Model parameters
p, d, q = 1, 0, 1
model = ARIMA(data["Price"], order=(p, d, q))
model_fit = model.fit()
model_summary = model_fit.summary()
model_summary

Estatísticas e diagnósticos de modelos

Agora, verificamos os resíduos e nos certificamos de que eles agem como ruído branco, o que significa que não devem ter padrões ou tendências. Uma opção é usar nossos gráficos ACF e PACF novamente, mas dessa vez aplicados aos resíduos. Se não houver grandes picos de defasagem nesses gráficos fora da banda, isso significa que nossos resíduos parecem ser ruído branco. Também podemos verificar os resíduos do modelo geral para garantir que não haja padrões óbvios, como estamos fazendo aqui:

Gráfico residual

# plot residual errors
residuals = model_fit.resid
residuals.plot()
residuals.plot(kind='kde')
plt.show()

Resíduos do modelo ARIMAResíduos do modelo ARIMA. Imagem do autor

AIC e BIC

Verificamos as estatísticas do modelo relevantes para a seleção do modelo. Valores mais baixos significam que o modelo se ajusta melhor, mas também podemos comparar os resultados com os resultados de modelos mais simples para evitar o ajuste excessivo.

print(f"AIC: {model_fit.aic}")
print(f"BIC: {model_fit.bic}")
AIC: 41919.18902176751
BIC: 41937.18705062565

Previsão

Para fazer previsões usando um modelo ARIMA, comece usando o modelo ajustado para prever valores futuros com base nos dados. Depois que as previsões são feitas, é útil visualizá-las plotando os valores previstos junto com os valores reais. Isso é feito porque usamos um fluxo de trabalho de treinamento/teste, em que os dados são divididos em conjuntos de treinamento e teste. Isso nos permite ver o desempenho do modelo em dados não vistos. Nosso curso Model Validation in Python é um ótimo recurso para que você aprenda os meandros da validação de modelos.

1. Use um fluxo de trabalho de treinamento/teste

Nossa primeira etapa é dividir os dados em versões de treinamento e teste. 

data = data[“Price”]train_size = int(len(data) * 0.8)train, test = data[:train_size], data[train_size:]

# Fit the model to training data. Replace p, d, q with our ARIMA parameters
model = ARIMA(train_data["Price"], order=(p, d, q))  

# Forecast
forecast = model_fit.forecast(steps=len(test))

2. Visualize nossa série temporal

Nossa próxima etapa é inspecionar visualmente nossa previsão de série temporal.

# Plotting
plt.figure(figsize=(10, 5))
plt.plot(data.index[:train_size], train, label='Train', color='blue')
plt.plot(data.index[train_size:], test, label='Test', color='green')
plt.plot(data.index[train_size:], forecast, label='Forecast', color='red')
plt.legend()
plt.title('ARIMA Forecast vs Actual')
plt.show()

Valores reais vs. valores previstos da previsão ARIMA

Previsão ARIMA de valores reais vs. valores previstos. Imagem do autor

3. Avaliar as estatísticas do modelo

Avaliamos as estatísticas do modelo, especialmente o erro quadrático médio, para avaliar o ajuste do nosso modelo. Um RMSE menor indica um modelo ARIMA melhor, refletindo diferenças menores entre os valores reais e os previstos.

# Evaluate model performance on the test set
rmse = mean_squared_error(test_data["Price"], predictions, squared=False)
print(f"RMSE: {rmse}")
“RMSE”: 135.87678712210163

Torne-se um cientista de ML

Domine as habilidades em Python para se tornar um cientista de aprendizado de máquina
Comece a Aprender De Graça

Usos comuns da previsão ARIMA 

Agora, vamos discutir as aplicações do ARIMA em diferentes setores. Vários setores, desde economia e finanças até previsão do tempo e saúde, usam modelos ARIMA para obter insights dos dados e também na busca de precisão preditiva. Alguns dos principais são os seguintes:

Economia e finanças 

A força do ARIMA está em sua capacidade de lidar com séries temporais financeiras que geralmente contêm autocorrelações complexas e interações entre vários indicadores econômicos. Sua capacidade de modelar efeitos de defasagem e incorporar diferenciação o torna ideal para a previsão de métricas voláteis, como preços de ações ou taxas de câmbio.

  • Previsão financeira: Por meio da previsão de preços de ações, taxas de câmbio e outros instrumentos financeiros, o ARIMA pode ser usado para apoiar estratégias de investimento.
  • Modelagem econômica: Os modelos ARIMA ajudam a prever o futuro de um país ou da economia global, informando as decisões de política econômica.
  • Planejamento da demanda: O ARIMA prevê a demanda por bens de consumo e serviços, ajudando a otimizar o planejamento da produção para controlar o estoque.

Previsão do tempo

Os modelos ARIMA aproveitam os padrões climáticos históricos para fornecer previsões de curto e longo prazo, portanto, são flexíveis o suficiente para prever condições climáticas típicas e extremas.

  • Previsão de temperatura e precipitação: Os modelos ARIMA são usados em previsões meteorológicas de curto e longo prazo, incorporando interações ar-mar e muitos outros fatores. 
  • Modelagem de mudanças climáticas: Os modelos ARIMA usam dados meteorológicos históricos para entender melhor as tendências do clima e prever como serão os climas futuros.

Gerenciamento da cadeia de suprimentos

A capacidade do ARIMA de modelar efeitos de defasagem ajuda os gerentes da cadeia de suprimentos a gerenciar o estoque ou antecipar interrupções com base em padrões históricos e prazos de entrega.

  • Previsão de demanda: O ARIMA tem a capacidade de prever a demanda futura de produtos e planejar cronogramas de produção ou níveis de estoque.
  • Gerenciamento de estoques: O ARIMA garante que os níveis corretos de estoque sejam mantidos nos itens para que você não tenha muito capital vinculado a investimentos em estoque e para reduzir os custos relacionados ao excesso ou à falta de estoque.
  • Otimização da cadeia de suprimentos: O ARIMA pode prever interrupções na cadeia de suprimentos analisando as interações entre diversas variáveis, incluindo, por exemplo, atrasos no transporte ou flutuações na demanda.

Cuidados com a saúde

No setor de saúde, os modelos ARIMA são particularmente valiosos porque podem prever internações de pacientes e outras tendências importantes.

  • Previsão de surtos de doenças: Os modelos ARIMA provam sua utilidade ao prever a propagação de doenças infecciosas, o que abrirá caminho para intervenções preventivas de saúde pública.
  • Previsão de admissão hospitalar: O ARIMA prevê as taxas de admissão hospitalar e ajuda a otimizar os recursos e as programações da equipe.
  • Monitoramento do paciente: O ARIMA é uma ferramenta útil para profissionais que desejam examinar dados médicos para alertar sobre os primeiros sinais de problemas de saúde e adaptar estratégias de tratamento.

Coisas a considerar para uma melhor previsão ARIMA

Aqui estão alguns erros comuns que você deve evitar ao trabalhar na criação de modelos ARIMA:

Sobreajuste e subajuste

Se escolhermos valores incorretos de p, d e q, isso pode levar a um ajuste excessivo ou insuficiente. Temos um ajuste excessivo quando nosso modelo é muito complexo e se apega ao ruído em nossos dados, de modo que não se generaliza bem para novas observações. Por outro lado, a subadaptação significa simplesmente que nosso modelo é menos complexo e não consegue capturar todos os padrões subjacentes.

Para evitar o ajuste excessivo, uma abordagem poderia ser usar menos termos de defasagem e também, possivelmente, menos termos de diferenciação. O ajuste insuficiente pode ser corrigido aumentando-se o número de termos autorregressivos, se apropriado. É preciso encontrar um equilíbrio entre complexidade e simplicidade. Técnicas como validação/validação cruzada podem ajudar.

Estacionariedade

A estacionariedade é uma suposição estatística que lida com as dependências de tempo dos dados. Previsões não confiáveis e relações espúrias podem resultar de dados não estacionários. Diferenciação ou transformações, como transformações de log ou ajustes sazonais, podem ser usadas para tornar estacionários os dados não estacionários. 

Sazonalidade

A presença de sazonalidade é outro componente vital a ser levado em conta ao lidar com a análise de séries temporais. Diariamente, semanalmente e anualmente são alguns dos intervalos fixos nos quais muitos conjuntos de dados do mundo real exibem padrões repetidos. A desconsideração desses padrões sazonais pode resultar em uma previsão inadequada. No contexto da sazonalidade, precisamos de diferenças sazonais e termos AR e MA sazonais, além dos valores p e q. Lembre-se de que uma série pode ter mais de um tipo de sazonalidade.

Análise residual

Uma das etapas mais importantes da modelagem ARIMA é verificar se a série residual gerada é estacionária. Os resíduos são a diferença entre os valores observados e os produzidos por um modelo. Ao analisar os resíduos, podemos verificar se o nosso modelo é capaz de encontrar e trabalhar com a dinâmica dos dados. Os resíduos devem mostrar uma dispersão aleatória sem indicar tendências ou correlações.

Quando os resíduos mostram padrões ou correlações, isso significa que há informações em algum lugar que o modelo não capturou completamente. Testes estatísticos e diagnósticos visuais, incluindo o teste Ljung-Box, bem como histogramas e outros gráficos de diagnóstico, podem ser usados para verificar se o modelo é adequado.

Próximas etapas com ARIMA e modelos relacionados

Em muitos casos, o ARIMA não é a etapa final. Assim como o ARIMA é uma evolução dos modelos autorregressivos ou de média móvel, novas ideias também foram desenvolvidas. Por um lado, os próprios modelos ARIMA podem lidar com padrões lineares e não lineares em uma série temporal. Se você quiser uma previsão sazonal, considere os modelos SARIMA, que podem lidar com padrões de vários períodos/periódicos em nossas séries temporais. Os modelos SARIMA são especialmente úteis em áreas em que os dados têm um padrão recorrente ou comportamento cíclico, como previsão de vendas e previsões meteorológicas. Os modelos ARIMAX são outra opção popular. Os modelos ARIMAX são modelos ARIMA que utilizam uma variável externa ou um regressor exógeno. Eles podem ajudar muito no desempenho e na precisão de nossas previsões.

Além disso, entrando no campo do aprendizado de máquina, podemos pensar em nos aprofundar na análise de séries temporais usando ferramentas como redes neurais recorrentes (RNN) e LSTM para prever dependências temporais complexas. Como reflexão final, o campo da análise bayesiana de séries temporais e a compreensão de como essa abordagem pode proporcionar benefícios na previsão e na tomada de decisões.

Conclusão / Considerações finais 

Como vimos, o ARIMA é um modelo estatístico comum que avalia a série temporal e prevê valores futuros levando em conta elementos autorregressivos e de média móvel. Ele nos permite gerar uma previsão dos dados históricos, embora os recursos de um determinado conjunto de dados possam ser muito diferentes dos recursos de outro conjunto de dados. Sua adaptabilidade é o que o torna um método de previsão comum e amplamente utilizado.

A experiência prática é importante para que você domine os conceitos básicos do ARIMA. A DataCamp oferece cursos completos com base em suas necessidades de aprendizagem para que você possa aprimorar e dominar o assunto da modelagem ARIMA. Nesses excelentes tutoriais on-line, aprenda os fundamentos da modelagem ARIMA, bem como as ferramentas e técnicas mais práticas para implementar soluções analíticas que resolvem problemas difíceis do mundo real com muito menos esforço (e em menos tempo) do que você jamais imaginou ser possível. Ao final, você deverá se sentir à vontade para aplicar a modelagem ARIMA em seu futuro trabalho de ciência de dados. Confira os cursos de modelagem ARIMA disponíveis no DataCamp e alcance seu potencial máximo em análise de séries temporais: Previsão em R, séries temporais com R, modelos ARIMA em Python, modelos ARIMA em R

Torne-se um cientista de ML

Aperfeiçoe suas habilidades em Python para se tornar um cientista de aprendizado de máquina.

Comece a Aprender De Graça

Perguntas frequentes sobre previsão de séries temporais

O que é um modelo ARIMA?

Um modelo ARIMA (Autoregressive Integrated Moving Average, média móvel integrada autorregressiva) é um método estatístico popular para previsão de séries temporais que prevê valores futuros combinando observações passadas (AR), diferenciação para alcançar a estacionariedade (I) e erros passados para refinar as previsões (MA).

Qual é a diferença entre ARIMA e suavização exponencial?

Podemos dizer que os modelos ARIMA descrevem uma série por suas autocorrelações. É uma técnica mais forte e mais flexível que tende a ser usada para fornecer previsões estáveis e de longo prazo. A suavização exponencial analisa mais a tendência e a sazonalidade e, em geral, é considerada de melhor desempenho para séries curtas e voláteis.

Como a previsão ARIMA está relacionada à modelagem de regressão?

A previsão ARIMA está relacionada à modelagem de regressão, pois usa valores e erros passados para prever pontos de dados futuros, da mesma forma que os modelos de regressão preveem variáveis dependentes usando variáveis independentes. O ARIMA também lida com séries temporais não estacionárias por meio de diferenças, o que o alinha com as técnicas de regressão usadas em dados estacionários. Diferentemente dos modelos de regressão tradicionais, o ARIMA considera explicitamente os efeitos dependentes do tempo, o que o torna mais adequado para a previsão de séries temporais.

Temas

Aprenda com a DataCamp

Course

Data Science for Business

2 hr
104.9K
Learn about data science for managers and businesses and how to use data to strengthen your organization.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

tutorial

Previsões do mercado de ações com LSTM em Python

Descubra as redes LSTM (Long Short-Term Memory) em Python e como você pode usá-las para fazer previsões do mercado de ações!
Thushan Ganegedara's photo

Thushan Ganegedara

30 min

tutorial

Gráfico de linha de série temporal do Matplotlib

Este tutorial explora como criar e personalizar gráficos de linha de séries temporais no matplotlib.

tutorial

Tutorial do Python Excel: O guia definitivo

Saiba como ler e importar arquivos do Excel em Python, gravar dados nessas planilhas e encontrar os melhores pacotes para fazer isso.
Natassha Selvaraj's photo

Natassha Selvaraj

30 min

tutorial

Tutorial de execução de scripts Python no Power BI

Descubra as diferentes maneiras de usar o Python para otimizar a análise, a visualização e a modelagem de dados no Power BI.
Joleen Bothma's photo

Joleen Bothma

9 min

tutorial

Entendendo o desvio de dados e o desvio de modelo: Detecção de deriva em Python

Navegue pelos perigos do desvio de modelo e explore nosso guia prático para o monitoramento do desvio de dados.
Moez Ali's photo

Moez Ali

9 min

tutorial

Tutorial para entender a regressão logística em Python

Aprenda sobre a regressão logística, suas propriedades básicas e crie um modelo de aprendizado de máquina em um aplicativo do mundo real em Python.
Avinash Navlani's photo

Avinash Navlani

10 min

See MoreSee More