Explorando as mudanças na sazonalidade: uma análise prática
Quando a sazonalidade deixa de ser previsível: abordagens para identificar e entender mudanças nos padrões de séries temporais
Já pensou como certos padrões parecem se repetir no tempo? Nas finanças e em outras situações, chamamos esses padrões de sazonalidade. Ela pode aparecer em preços de commodities, vendas no varejo, e até nos retornos do mercado de capitais. Mas e quando esses padrões deixam de se repetir? Aí começam os problemas – prejuízos, estratégias falhando e aquela dúvida: o que deu errado?
Vamos conversar sobre isso e, claro, trazer um pouco de prática com python para te ajudar a identificar essas mudanças.
Por que a sazonalidade importa?
A sazonalidade é como aquele relógio interno do mercado: você espera que certos eventos aconteçam em períodos previsíveis. Por exemplo:
Preços de commodities: Pense no preço do café. Geralmente sobe em períodos de entressafra no Brasil. Mas e se mudanças climáticas alterarem o ciclo de produção?
Varejo: Todo mundo sabe que as vendas disparam no Natal. Mas lembra da pandemia? Várias lojas tiveram que antecipar promoções e mudar estratégias porque o comportamento de compra mudou.
Mercado de capitais: Tem até um ditado famoso: "Sell in May and go away." Alguns meses historicamente têm retornos melhores, mas será que esse padrão ainda se aplica com mercados globais tão conectados?
Esses padrões parecem confiáveis – até não serem mais. Um exemplo clássico foi a crise de 2008, quando vários modelos quantitativos que usavam sazonalidade como premissa falharam, porque as condições de mercado mudaram drasticamente. Outro caso foi o impacto das redes sociais nas promoções de Black Friday, que diluiu o pico de vendas antes tão concentrado em um único dia.
Quando e como esses padrões mudam? Os motivos são diversos: mudanças climáticas, evolução tecnológica, mudanças de comportamento do consumidor ou até crises inesperadas. Por isso, não basta confiar cegamente no passado. A boa notícia é que dá para monitorar e medir essas mudanças.
Dados utilizados
Os dados analisados são provenientes do IBGE e foram obtidos utilizando técnicas descritas no artigo "Como baixar dados do IBGE pelo SIDRA". Eles representam indicadores econômicos chave do Brasil e servirão para exemplificar a importância de fatores econômicos na modelagem de séries temporais e na identificação de padrões sazonais e estruturais. As séries incluem indicadores como o Índice de Produção da Indústria de Transformação e Extrativa, a Receita Nominal de Vendas no Comércio Varejista e o IPCA, entre outros.
Decomposição STL
A decomposição STL (Seasonal-Trend Decomposition using LOESS) é uma técnica para dividir uma série temporal em três componentes principais: tendência, sazonalidade e resíduos. A tendência reflete a direção geral da série ao longo do tempo, capturando variações de longo prazo, enquanto a sazonalidade representa padrões recorrentes em intervalos regulares, como flutuações anuais ou mensais previsíveis. Já os resíduos correspondem à parte imprevisível ou aleatória, que não pode ser explicada pela tendência ou sazonalidade, como eventos únicos ou erros.
O método utiliza LOESS (Locally Estimated Scatterplot Smoothing), uma técnica de suavização que ajusta polinômios locais aos dados em torno de cada ponto da série. Essa abordagem pondera os pontos mais próximos com maior peso, produzindo curvas suaves que se adaptam às características locais dos dados. No contexto da decomposição STL, LOESS é usado iterativamente para separar as componentes: suaviza a série para identificar a tendência, remove a tendência para isolar a sazonalidade e, por fim, deixa os resíduos como o que sobra após subtrair as duas primeiras componentes. Esse processo flexível e iterativo torna a decomposição STL adequada para séries temporais complexas, mesmo quando os padrões de sazonalidade variam com o tempo.
Avaliação da força de sazonalidade
A força da sazonalidade quantifica a importância relativa da componente sazonal em uma série temporal. Sua fórmula é dada por:
Aqui, Var(Sazonal) representa a variância da componente sazonal da série, enquanto Var(Série Total) é a variância dos valores originais da série temporal. A métrica resulta em um valor entre 0 e 1, onde valores próximos a 1 indicam que a sazonalidade domina as variações da série, enquanto valores próximos a 0 mostram que outros fatores, como ruídos ou tendência, são mais relevantes.
Para calcular a força da sazonalidade, a série Yt é decomposta em componentes de tendência (Tt), sazonalidade (St) e ruído (Rt), de acordo com a equação:
No código fornecido, essa decomposição é realizada pelo método STL (Seasonal and Trend decomposition using Loess), que separa a série em suas partes constituintes. A força da sazonalidade é calculada como a razão entre a variância da componente sazonal (St) e a variância total (Yt), aplicada em janelas móveis para capturar como a sazonalidade evolui ao longo do tempo. A análise ao longo do tempo permite detectar mudanças estruturais e ajustar modelos preditivos para refletir essas variações, garantindo maior precisão em previsões e planejamentos.
A função rolling_seasonal_strength
aplica a STL em janelas de 5 anos (60 meses), deslocando as janelas anualmente. O resultado é uma série de valores que mostram a evolução da força sazonal ao longo do tempo.
Detectando rupturas estruturais
Mudanças abruptas na força sazonal podem sinalizar transições econômicas ou eventos inesperados. Para identificá-las, a função detect_breaks
implementa o teste Bai-Perron, introduzido por Jushan Bai e Pierre Perron em estudos sobre mudanças estruturais em modelos de regressão linear. Originalmente, esse método foi aplicado para analisar dados macroeconômicos e financeiros, onde alterações súbitas no comportamento de variáveis podem afetar projeções e tomadas de decisão.
O algoritmo Bai-Perron funciona segmentando a série temporal em intervalos, buscando pontos de ruptura que minimizam o erro ao ajustar modelos de regressão a cada trecho. Dessa forma, ele permite detectar onde ocorrem mudanças significativas nos padrões estruturais, indicando períodos de transição.
O parâmetro penalty (pen) desempenha papel crucial na sensibilidade do teste: valores mais altos tornam o critério mais rigoroso, resultando em menos rupturas identificadas, enquanto valores menores aumentam a probabilidade de se detectar mais pontos de mudança. Assim, ajustar esse parâmetro permite equilibrar a identificação de rupturas reais versus possíveis flutuações aleatórias.
Visualizando e interpretando os resultados
Os resultados são apresentados graficamente em um layout organizado por série. O eixo x representa o ínicio da janela móvel, nesse sentido, o ponto em 2005 representa a média móvel de 2005-2009 (cinco anos). Cada série mostra a evolução da força sazonal (em azul) e os pontos de ruptura (linhas vermelhas). O código completo está disponível para ser baixado em test_seasonality.py.
Os gráficos mostram a evolução da força de sazonalidade em nove séries distintas, com uma ou mais rupturas (linhas verticais vermelhas) ao longo do tempo. Observa-se que algumas séries apresentam oscilações marcantes, indicando períodos em que a sazonalidade se intensifica ou se enfraquece de forma clara. Na Série 7 (Índice de Receita Nominal de Vendas no Comércio Varejista), por exemplo, há um pico acentuado em torno de “2009”, que representa 2009-2013, seguido de forte queda, sugerindo mudanças estruturais significativas no comportamento sazonal. Já a Série 8 (IPCA) chama a atenção por ter valores de sazonalidade relativamente baixos durante quase todo o período, mas exibe um salto abrupto próximo a 2018, que representa 2018-2022.
Em outras séries, como a Série 9 (Índice de Receita Nominal de Vendas de Material de Construção), o número maior de rupturas aponta para possíveis transições de padrão sazonal em diferentes momentos, o que pode estar relacionado a eventos econômicos ou mudanças de metodologia de coleta de dados. No geral, as quebras indicam pontos em que a sazonalidade é alterada, possivelmente por fatores externos (crises, políticas públicas) ou internos (mudanças de composição ou periodicidade).
E o que tudo isso significa?
As mudanças no comportamento da sazonalidade podem ser causadas por fatores como novos regulamentos, crises ou alterações no comportamento do consumidor. No entanto, neste exemplo, o foco está apenas em identificar como a intensidade da sazonalidade varia ao longo do tempo. Para compreender as razões por trás dessas mudanças, é essencial analisar como cada série é construída. Isso inclui identificar possíveis fatores de influência, como segmentações por área ou contribuições específicas. Caso existam segmentações, pode-se investigar quais segmentos tiveram impacto nas alterações observadas.
Expandindo a análise
Se você quer ir além, pode tentar explorar as seguintes abordagens:
Wavelets: Uma ferramenta para analisar séries temporais em diferentes escalas. Enquanto métodos tradicionais tratam a série globalmente, wavelets capturam mudanças locais nos ciclos sazonais. Isso é útil, por exemplo, para entender como a irregularidade climática afeta os ciclos de produção agrícola.
Modelos de mudança de regime: Modelos de Markov com mudança de regime detectam transições entre padrões sazonais, como alterações em ciclos econômicos devido a choques externos. Eles ajudam a identificar momentos críticos em que a sazonalidade muda de forma abrupta ou gradual.
Testes de estacionariedade estrutural: Métodos como Zivot-Andrews avaliam se os padrões sazonais permanecem consistentes ou se sofrem rupturas ao longo do tempo. Essa análise é importante para ajustar modelos baseados em pressupostos históricos.
Até a próxima!