Pular para o conteúdo principal

Modelos SARIMA: um guia completo para previsão sazonal de séries temporais

Aprenda como o SARIMA estende o ARIMA para lidar com sazonalidade, entenda seus sete parâmetros e construa um modelo funcional em Python — da coleta de dados à previsão.
Atualizado 31 de jul. de 2026  · 15 min lido

Explorar com IA

Abrir no ChatGPTAbrir no ClaudeAbrir no Perplexity

Todo dezembro, o varejo reforça o estoque para as festas. Todo verão, as redes elétricas se preparam para picos no ar-condicionado. Esses padrões se repetem ano após ano e, se você criar uma previsão de série temporal que os ignore, vai perder precisão no caminho.

Os modelos de média móvel integrada autorregressiva sazonal (SARIMA, na sigla em inglês) estendem o amplamente usado ARIMA para capturar padrões sazonais recorrentes junto com tendências regulares. Neste artigo, você vai entender o que é SARIMA, como seus componentes funcionam, quando preferi-lo ao ARIMA e como construir um modelo passo a passo em Python.

O que é SARIMA?

SARIMA é um modelo de previsão de séries temporais que lida com padrões não sazonais e sazonais nos dados. Ele se apoia diretamente no ARIMA, então, se você já trabalhou com ARIMA, vai reconhecer boa parte da mecânica. A diferença-chave é que o SARIMA adiciona uma segunda camada de parâmetros projetada para modelar comportamentos que se repetem em intervalos fixos, como ciclos mensais, trimestrais ou semanais.

Formalmente, um modelo SARIMA é escrito como SARIMA(p, d, q)(P, D, Q)[S]. O primeiro conjunto, (p, d, q), trata da estrutura não sazonal, idêntico ao ARIMA padrão. O segundo, (P, D, Q)[S], captura os padrões sazonais, em que S é o comprimento do ciclo sazonal. Para dados mensais com sazonalidade anual, S = 12. Para dados trimestrais, S = 4.

Principais componentes do SARIMA

Os sete parâmetros do SARIMA podem parecer muita coisa no começo. Ajuda pensar em dois grupos: o trio familiar do ARIMA (p, d, q) e os correspondentes sazonais (P, D, Q, S), que espelham os primeiros na escala sazonal. Cada parâmetro sazonal faz exatamente o que seu "gêmeo" não sazonal faz, só que aplicado em defasagens sazonais em vez de passos de tempo adjacentes.

Parte autorregressiva (AR)

O componente AR usa valores passados da série para prever valores futuros. O parâmetro p especifica quantos valores defasados incluir. Se p = 2, o modelo usa os dois passos de tempo anteriores como preditores do valor atual.

No lado sazonal, P faz a mesma coisa, mas em defasagens sazonais. Se P = 1 e S = 12, o modelo olha o valor de 12 períodos atrás, mesmo mês do ano anterior, como preditor. Isso captura diretamente padrões ano a ano.

Parte integrada (I)

O parâmetro d controla quantas vezes a série é diferenciada para remover tendências e torná-la estacionária. Diferenciar significa subtrair a observação anterior de cada observação, o que remove uma tendência linear. Se d = 1, você usa primeira diferença; se d = 2, diferencia uma série que já foi diferenciada.

A diferenciação sazonal funciona do mesmo jeito, só que em defasagens sazonais. O parâmetro D especifica quantas diferenças sazonais aplicar. Com D = 1 e S = 12, você subtrai de cada observação o valor de 12 períodos antes. Usar d = 1 e D = 1 juntos é comum quando a série tem uma tendência geral de alta e um padrão sazonal recorrente.

Parte de média móvel (MA)

Diferente do componente AR, que olha para valores passados, o componente MA modela a relação entre a observação atual e os erros residuais de previsões anteriores. O parâmetro q define quantos termos de erro defasados incluir. Se q = 1, o modelo usa o erro de previsão do passo anterior para ajustar a previsão atual.

O equivalente sazonal Q aplica a mesma lógica em defasagens sazonais. Com Q = 1 e S = 12, o modelo incorpora o erro de previsão de 12 períodos atrás. Isso importa quando choques sazonais, como um verão excepcionalmente quente que eleva a demanda de energia, tendem a se repetir no mesmo período do ano seguinte.

Componente sazonal (S)

O parâmetro S define a duração do ciclo sazonal e conecta os três parâmetros sazonais (P, D, Q). Acertar o S é fundamental: se seus dados são mensais com padrão anual, S = 12. Dados semanais com ciclo anual dão um S por volta de 52.

É aqui que a sazonalidade às vezes complica. Um ano não tem exatamente 52 semanas; é mais perto de 52,18. Para a maioria dos casos práticos, arredondar para S = 52 funciona bem. Mas alguns conjuntos têm múltiplos períodos sazonais: a demanda diária de eletricidade costuma mostrar um ciclo semanal (S = 7) e um anual (S = 365). O SARIMA padrão lida com um período sazonal; múltiplas sazonalidades exigem métodos mais avançados, como TBATS ou Facebook Prophet.

Quando S não for óbvio, a decomposição da série ajuda. Ao decompor a série em tendência, sazonalidade e resíduo, você enxerga visualmente o período recorrente dominante. Também vale inspecionar os gráficos de autocorrelação em busca de picos em defasagens regulares.

ARIMA vs. SARIMA: qual é a diferença?

Provavelmente você já está se perguntando: quando usar SARIMA em vez do ARIMA, que é mais simples?

Resposta curta: use ARIMA quando seus dados não têm padrão sazonal relevante, e SARIMA quando têm.

ARIMA modela três coisas: a autocorrelação da própria série (AR), o número de diferenças necessárias para estacionaridade (I) e a influência persistente de erros de previsão passados sobre o valor atual (MA). Ele lida bem com tendências, ciclos e ruído irregular. O que ele não consegue é modelar padrões que se repetem em uma frequência sazonal fixa. Esses ficam como variância não explicada.

SARIMA adiciona exatamente essa capacidade. Quando picos e vales sazonais aparecem com clareza nos seus dados, ajustar um ARIMA simples empurra esses padrões para os resíduos, piorando as previsões e gerando resíduos que não são ruído branco. Um SARIMA os captura diretamente.

Regra prática: plote seus dados e procure padrões que se repetem em intervalos fixos. Se encontrar, picos de vendas em feriados, aumentos de energia no inverno, padrões trimestrais de resultados, vá de SARIMA. Se a série for irregular ou guiada por tendência sem ciclo regular, ARIMA é mais simples e suficiente.

Nosso curso de ARIMA Models in Python cobre ambos os frameworks com exercícios práticos para afiar sua intuição sobre quando cada um se aplica.

Como construir um modelo SARIMA em Python

Construir um SARIMA segue uma sequência lógica: coletar dados, verificar estacionaridade, identificar parâmetros, ajustar o modelo, rodar diagnósticos e prever. Veja como cada etapa funciona na prática usando a biblioteca statsmodels do Python.

Coleta de dados

Para um modelo que capture sazonalidade, você precisa de histórico suficiente para observar o padrão pelo menos duas vezes, idealmente vários ciclos. Vendas mensais no varejo, registros de temperatura, consumo de energia e contagens de passageiros são exemplos clássicos. Fontes públicas como o Federal Reserve Economic Data (FRED), o US Census Bureau ou o Kaggle são bons pontos de partida.

O dataset didático padrão para esse fluxo é o de passageiros de linhas aéreas: dados mensais de 1949 a 1960 com tendência de alta clara e forte sazonalidade anual. Ele está disponível no statsmodels via get_rdataset(), que o busca na coleção Rdatasets. Aprenda o fluxo com esse dataset antes de aplicar aos seus próprios dados.

Pré-processamento dos dados

Antes de ajustar qualquer SARIMA, você precisa de uma série estacionária, aquela em que a média e a variância não mudam ao longo do tempo. O teste ADF (Augmented Dickey-Fuller) verifica isso formalmente: um p-valor abaixo de 0,05 sugere estacionaridade.

Se não for o caso, a diferenciação resolve. Aplique diferenciação regular (d = 1) para tendência, diferenciação sazonal (D = 1 na defasagem S) para não estacionaridade sazonal, ou ambas se necessário. Trate valores ausentes antes dessa etapa. Forward fill ou interpolação são abordagens padrão em séries temporais, já que remover linhas quebra a estrutura temporal.

Identificação do modelo

Com a série estacionária em mãos, use os gráficos de ACF (Função de Autocorrelação) e PACF (Função de Autocorrelação Parcial) para identificar os parâmetros do modelo. Procure por:

  • ACF mostra a correlação entre a série e suas defasagens. Um corte acentuado após a defasagem q sugere a ordem MA. Picos em defasagens sazonais (12, 24, 36 para dados mensais) informam Q.
  • PACF mostra correlações parciais com efeitos intermediários removidos. Um corte acentuado após a defasagem p sugere a ordem AR. Picos sazonais informam P.

Na prática, os gráficos dão valores candidatos, e você compara alguns modelos usando critérios de informação (mais sobre isso nos diagnósticos). Se preferir automatizar a busca, o auto_arima() do pacote pmdarima faz uma busca em grade pelas combinações de parâmetros e seleciona o melhor ajuste.

Estimativa de parâmetros

Depois de definir os parâmetros candidatos, o statsmodels os estima por Máxima Verossimilhança (MLE), encontrando os coeficientes que tornam os dados observados mais prováveis sob o modelo. Estimar SARIMA é mais intensivo computacionalmente do que ARIMA simples porque o otimizador precisa ajustar, ao mesmo tempo, os componentes não sazonais e sazonais.

O processo de ajuste pode, às vezes, convergir para um ótimo local em vez do global, então vale testar alguns valores iniciais ou combinações de parâmetros diferentes quando os resultados parecerem estranhos.

Ajuste do modelo

Veja como ajustar um modelo SARIMA em Python usando o dataset de passageiros de linhas aéreas:

import pandas as pd
import statsmodels.api as sm

# Load the classic airline dataset
airline_data = sm.datasets.get_rdataset("AirPassengers", "datasets").data
airline_data.index = pd.date_range(start="1949-01", periods=len(airline_data), freq="MS")
passengers = airline_data["value"]

# Fit SARIMA(1,1,1)(1,1,1)[12]
sarima_model = sm.tsa.statespace.SARIMAX(
    passengers,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,
    enforce_invertibility=False
)

sarima_result = sarima_model.fit(disp=False)
print(sarima_result.summary())	

O argumento order recebe (p, d, q) para a parte não sazonal; seasonal_order recebe (P, D, Q, S). Definir enforce_stationarity=False e enforce_invertibility=False dá mais flexibilidade ao otimizador, o que costuma ajudar a convergir com dados do mundo real.

Estatísticas e diagnósticos do modelo

Depois do ajuste, rode os gráficos de diagnóstico com sarima_result.plot_diagnostics(). Você está procurando quatro coisas:

  • Resíduos padronizados: Devem parecer ruído branco, sem padrões evidentes.
  • Histograma dos resíduos: Deve ser aproximadamente normal.
  • Gráfico Q-Q normal: Os pontos devem ficar próximos à linha diagonal.
  • Correlograma (ACF dos resíduos): Sem picos significativos, que indicariam autocorrelação não explicada.

Preste atenção especial às defasagens sazonais no correlograma. Picos nas defasagens 12, 24 e assim por diante sugerem que o componente sazonal não foi totalmente capturado. Compare especificações alternativas usando AIC (Akaike Information Criterion) e BIC (Bayesian Information Criterion): valores menores indicam melhor ajuste, com o BIC penalizando mais a complexidade.

Previsão

Com o modelo validado, gerar previsões é simples. Separe seus dados em conjuntos de treino e teste para avaliar a acurácia de forma honesta:

# Train on first 11 years, test on final year
train = passengers[:"1959"]
test = passengers["1960":]

# Refit on training data and forecast
sarima_train = sm.tsa.statespace.SARIMAX(
    train,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,   # add this
    enforce_invertibility=False   # add this
).fit(disp=False)

forecast = sarima_train.get_forecast(steps=12)
forecast_mean = forecast.predicted_mean
conf_int = forecast.conf_int()

O método get_forecast() retorna previsões pontuais com intervalos de confiança que se alargam conforme você projeta mais longe. Esse alargamento não é um defeito; é o modelo sendo honesto sobre a incerteza. Avalie a acurácia usando RMSE (Root Mean Squared Error) ou MAPE (Mean Absolute Percentage Error) no conjunto de teste separado.

Aplicações práticas do SARIMA

Tantos sinais do mundo real são sazonais que o SARIMA ganha lugar cativo em qualquer toolkit de séries temporais. Alguns exemplos por setor:

  • Varejo: Previsão de volumes mensais de vendas para planejamento de estoque, especialmente em períodos de festas em que picos de demanda são previsíveis, mas variam de magnitude ano a ano.
  • Consumo de energia: Previsão de demanda por eletricidade e gás, que segue ciclos sazonais diários e anuais impulsionados por temperatura e padrões de atividade.
  • Finanças: Modelagem de padrões de resultados trimestrais ou de volume de negociação que se repetem conforme calendários fiscais.
  • Previsão do tempo: Projeção de temperatura, precipitação e outras variáveis climáticas que seguem ciclos anuais fortes.

Em todos os casos, a estrutura que se repete é o sinal, e o SARIMA foi feito para capturá-lo.

Limitações do SARIMA

Saber onde a ferramenta funciona bem é só metade do jogo. SARIMA é uma base sólida para séries sazonais, mas conhecer seus limites distingue quem usa modelos com consciência de quem usa no automático.

Ele lida com exatamente um período sazonal. Se seus dados têm múltiplas sazonalidades, padrões diários, semanais e anuais sobrepostos, o SARIMA não vai modelar todos de uma vez. Métodos como TBATS, Prophet ou redes LSTM lidam melhor com múltiplas frequências sazonais.

SARIMA também assume linearidade. Ele modela relações lineares entre valores passados, erros passados e observações futuras. Dinâmicas não lineares, comuns em séries financeiras ou sistemas caóticos, pedem outras ferramentas. E, como o ARIMA, o SARIMA depende apenas do histórico da própria série. Se você tem fatores externos que influenciam suas previsões, promoções, eventos climáticos, indicadores econômicos, considere o SARIMAX, que adiciona variáveis exógenas ao framework SARIMA.

Por fim, a seleção de parâmetros pode ser realmente difícil. Com sete parâmetros para ajustar, o espaço de busca é grande, e o ajuste pode ser lento em séries longas. O auto_arima() do pmdarima ajuda a automatizar isso. Mas não há atalho para entender o que os parâmetros significam de verdade, por isso cobrimos os componentes antes de mexer em qualquer código.

Conclusão

Sempre achei que o SARIMA é subestimado em cursos introdutórios de previsão. É ensinado como "ARIMA, mas com a parte sazonal", o que faz parecer uma extensão menor. Não é. Os parâmetros sazonais não são um acréscimo superficial; eles fazem trabalho estrutural de verdade, capturando uma camada do comportamento dos seus dados que o ARIMA simplesmente não alcança.

O que faz o SARIMA "clicar" na prática é perceber que os componentes não sazonais e sazonais não são modelos separados rodando em paralelo. Eles interagem. Os termos AR e MA trabalham junto com seus equivalentes sazonais, cada um lidando com uma escala de tempo diferente da autocorrelação. Quando isso cai a ficha, ler os gráficos de ACF e PACF deixa de ser caça a padrão e passa a ser entender de fato seus dados.

Se você trabalha com dados mensais, trimestrais ou com qualquer ciclo regular, SARIMA é o melhor ponto de partida — não porque sempre será a resposta final, mas porque obriga você a pensar com clareza sobre a estrutura da sua série. A partir daí, o SARIMAX adiciona preditores externos, e métodos como TBATS ou Prophet lidam com casos mais complexos e multissazonais. Nosso tutorial de previsão de séries temporais e o curso ARIMA Models in Python são ótimos próximos passos.

Perguntas frequentes sobre SARIMA

O que significa SARIMA?

SARIMA significa Seasonal AutoRegressive Integrated Moving Average. Ele estende o modelo ARIMA padrão adicionando parâmetros sazonais — (P, D, Q) e o período sazonal S — que capturam padrões recorrentes em séries temporais, como ciclos mensais ou trimestrais.

Qual é a diferença entre ARIMA e SARIMA?

ARIMA modela padrões não sazonais: tendência, autocorrelação e efeitos de média móvel. SARIMA adiciona uma segunda camada de parâmetros (P, D, Q, S) que modela os mesmos efeitos em defasagens sazonais. Se seus dados exibem padrões que se repetem em intervalos fixos — como vendas mais altas todo dezembro — SARIMA captura isso diretamente, enquanto ARIMA deixa como variância residual não explicada.

Como escolher os parâmetros certos do SARIMA?

Comece verificando se a série é estacionária com o teste ADF (Augmented Dickey-Fuller). Depois, inspecione os gráficos de ACF e PACF: as ordens AR (p) e MA (q) não sazonais vêm do padrão de cortes em defasagens não sazonais, enquanto as ordens sazonais P e Q vêm de picos em defasagens sazonais. Você também pode usar o auto_arima() do pacote pmdarima para buscar automaticamente combinações de parâmetros, usando AIC ou BIC para selecionar o melhor modelo.

Como determinar o período sazonal S para meu modelo SARIMA?

O período sazonal S reflete com que frequência o padrão se repete. Para dados mensais com sazonalidade anual, S = 12. Para dados trimestrais, S = 4. Para dados semanais, S = 52 (ou 52,18 arredondado). Se o período não for óbvio, use decomposição da série temporal ou inspecione o gráfico de ACF em busca de picos regularmente espaçados — esses picos revelam a frequência sazonal dominante.

O SARIMA consegue lidar com múltiplos períodos sazonais?

O SARIMA padrão lida com um período sazonal por vez. Se seus dados têm sazonalidades sobrepostas — como demanda diária de eletricidade com ciclos semanais e anuais — você vai precisar de alternativas como TBATS, Facebook Prophet ou redes LSTM, projetadas para modelar múltiplas estruturas sazonais simultâneas.

Qual biblioteca Python é melhor para ajustar modelos SARIMA?

A biblioteca statsmodels do Python é a escolha padrão, oferecendo SARIMAX() (flexível o suficiente para ajustar modelos SARIMA sem variáveis exógenas). Para seleção automatizada de parâmetros, a função auto_arima() da biblioteca pmdarima faz uma busca em grade e vale incluir no seu fluxo quando você não sabe por onde começar com os valores.

Como avaliar se meu modelo SARIMA está bem ajustado?

Depois do ajuste, rode plot_diagnostics() no objeto de resultado e verifique se os resíduos parecem ruído branco, sem estrutura — em especial, sem picos em defasagens sazonais no ACF. Compare especificações concorrentes usando AIC ou BIC (quanto menor, melhor). Para acurácia de previsão em dados separados, RMSE e MAPE são as métricas mais comuns.

O que é SARIMAX e quando devo usá-lo em vez de SARIMA?

SARIMAX adiciona variáveis exógenas — preditores externos — ao framework SARIMA. Use quando você tem fatores mensuráveis que influenciam sua série além do próprio histórico: investimento em promoções afetando vendas no varejo, temperatura afetando demanda de energia ou indicadores macroeconômicos afetando receita trimestral. Se seus dados se limitam à série em si, SARIMA é suficiente; quando houver direcionadores externos relevantes, SARIMAX permite incorporá-los diretamente.

Tópicos
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

Tutorial

Entendendo data drift e model drift: detecção de drift em Python

Navegue pelos riscos do model drift e confira nosso guia prático de monitoramento de data drift.
Moez Ali's photo

Moez Ali

Tutorial

O guia completo para machine learning na AWS com o Amazon SageMaker

Este tutorial abrangente ensina você a usar o AWS SageMaker para criar, treinar e implantar modelos de machine learning. Nós guiamos você por todo o fluxo de trabalho, desde a configuração do seu ambiente AWS e a criação de uma instância de notebook do SageMaker até a preparação de dados, modelos de treinamento e sua implementação como endpoints.
Bex Tuychiev's photo

Bex Tuychiev

Python

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

Tutorial

Tutorial de manipulação de dados categóricos de aprendizado de máquina com Python

Aprenda os truques comuns para lidar com dados categóricos e pré-processá-los para criar modelos de aprendizado de máquina!
Moez Ali's photo

Moez Ali

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.
Elena Kosourova's photo

Elena Kosourova

Ver MaisVer Mais