O que é o algoritmo Holt-Winters e como funciona?
O algoritmo Holt-Winters é um método de suavização exponencial tripla. Ele quebra uma série temporal em três componentes: nível, tendência e sazonalidade. Em seguida, atualiza os três a cada nova observação e projeta o conjunto para os próximos períodos. Ou seja, é o que sustenta linha de base e detecção de desvio em ferramenta de monitoramento.
Este artigo traz as equações do modelo e o resultado de rodá-lo numa série real, dentro de um container. Todo número daqui saiu dessa execução, feita em 3 de setembro de 2026 com statsmodels 0.14.4 sobre 92 dias de dados públicos.
Quantas constantes o modelo tem? É o ponto que mais confunde. A suavização exponencial simples usa uma. Já o Holt-Winters usa três, mais o comprimento da estação. Na mesma série, essa diferença cortou o erro de previsão pela metade.
O que é o algoritmo Holt-Winters?
O algoritmo Holt-Winters é a extensão sazonal da suavização exponencial. Além do nível e da tendência que o método de Holt já estimava, ele mantém um índice sazonal para cada posição do ciclo. Por isso consegue prever séries que sobem, descem e repetem um padrão de sete dias ou de doze meses.
Charles Holt descreveu a versão com tendência em 1957. Em seguida, Peter Winters acrescentou o termo sazonal em 1960. Daí vem o nome composto e também o apelido de suavização exponencial tripla: são três equações de atualização rodando ao mesmo tempo.
Em monitoramento a tradução é direta. Isto é, a série vira a métrica coletada. A previsão vira a linha de base que o coletor compara com o valor observado a cada checagem. Nesse sentido, é a mecânica por trás das técnicas de previsão aplicadas a capacidade e a desvio de comportamento.
As três constantes de suavização
Cada componente tem a sua própria constante, que decide o peso das observações recentes contra o histórico acumulado. São três, não uma:
- alfa suaviza o nível, o valor central da série no instante atual;
- beta suaviza a tendência, a inclinação de subida ou de queda;
- gama suaviza a sazonalidade, o desvio típico de cada posição do ciclo.
Falta um quarto parâmetro que não é constante de suavização: o comprimento da estação, escrito como m. Ele declara quantas observações fecham um ciclo completo. Por exemplo, numa métrica diária com padrão semanal, m vale 7. Já numa métrica horária com padrão diário, vale 24.
Essas equações rodam em ordem a cada nova observação. O nível se atualiza com o valor observado já descontado do índice sazonal daquele ponto. Em seguida, a tendência se atualiza com a variação do nível entre um instante e o anterior. Por fim, o índice sazonal absorve o que sobrou depois de tirar nível e tendência.
Somando os três componentes, você chega à previsão. Para h passos à frente, ela é o nível, mais h vezes a tendência, mais o índice sazonal da posição correspondente do ciclo. O handbook de estatística do NIST traz as três equações escritas por extenso.
Na prática você não implementa a recursão à mão. A chamada abaixo é a que gerou todos os números deste artigo, com a documentação do statsmodels como referência dos parâmetros.
Uma constante contra três, na mesma série
Para medir a diferença, rodei os dois modelos sobre a mesma série: os acessos diários ao verbete Microsoft Excel da Wikipédia em português. A janela vai de 1 de junho a 31 de agosto de 2026. Ao todo, são 92 dias baixados da API pública de pageviews da Wikimedia, sem chave e sem login.
Escolhi essa série por um motivo mensurável. Ela tem ciclo semanal forte: 1,69 vez mais acesso em dia útil do que em fim de semana. Assim, é o formato da curva de acesso de um sistema corporativo. Além disso, qualquer leitor refaz a mesma chamada e recebe exatamente os mesmos números.
Treinei nos 78 primeiros dias e guardei os 14 últimos para conferir. Portanto, todo erro relatado abaixo é sobre dias que nenhum dos dois modelos viu durante o ajuste.
No gráfico, a linha vermelha é a previsão do modelo de uma constante. A azul é a do modelo de três.

Repare no alfa: é ele que explica o resultado. Sem termo sazonal, o otimizador levou o alfa a 1,0000, que é o valor máximo. Com alfa em 1, a previsão passa a repetir a última observação. Assim, os 14 dias saíram como uma reta em 411 acessos.
Não é defeito da biblioteca. Sem um termo para representar o ciclo semanal, repetir ontem é mesmo o que minimiza o erro quadrático. O modelo faz o melhor que a estrutura dele permite. Contudo, a estrutura é curta demais para a série.
Do desvio-padrão do resíduo ao limiar de alerta
Previsão sozinha não gera alarme. O que gera é a faixa em volta dela. Por isso o número que interessa aqui é o resíduo do treino. Ele é a diferença entre o previsto e o observado em cada um dos 78 dias.
Nesta série o desvio-padrão do resíduo ficou em 50,9 acessos. A dois desvios, a faixa tem 204 acessos de largura e 1 dos 14 dias do teste caiu fora dela. Já a três desvios, a faixa vai a 305 acessos e nenhum dia cai fora.
Escolher entre dois e três desvios é uma decisão de volume de acionamento, não de rigor estatístico. No ritmo do teste, um dia fora a cada 14 equivale a 26 acionamentos por ano em uma única métrica. Multiplique por mil itens coletados e o resultado tem nome: fadiga de alertas.
Apertar demais custa caro do outro lado. A três desvios este ambiente não teria disparado nenhum alarme em duas semanas. Inclusive, o domingo em que o acesso ficou 102 pontos acima do previsto passaria em branco. É a mesma tensão de qualquer configuração de thresholds, agora com a faixa se movendo junto com o ciclo.
Na ferramenta, esse multiplicador aparece como campo de configuração. No OpMon, o operador preenche os limites superior e inferior do intervalo de confiança em desvios-padrão, cada um com o seu próprio valor.

Três armadilhas que só aparecem quando você roda
Rodei o mesmo modelo com a configuração errada de propósito. Dessa forma, medi o custo de cada erro em vez de descrevê-lo. A tabela traz as três armadilhas ao lado das duas configurações que funcionam, todas sobre os mesmos 14 dias de teste.
| Configuração do modelo | O que acontece no ajuste | RMSE no teste |
|---|---|---|
3 constantes, m = 7 |
acompanha o ciclo semanal real da série | 45,2 |
3 constantes, m = 14 |
funciona porque 14 é múltiplo exato da semana | 43,2 |
3 constantes, m = 30 |
procura um ciclo mensal onde o ciclo é semanal | 147,9 |
| 1 constante só | alfa vai a 1,0 e a previsão vira uma reta em 411 acessos | 84,7 |
| 3 constantes, histórico de 13 dias | a biblioteca recusa o ajuste antes de começar | não roda |
Essa recusa da última linha é literal. Com 13 dias de histórico o statsmodels levanta um ValueError. A mensagem é explícita: Cannot compute initial seasonals using heuristic method with less than two full seasonal cycles in the data. Já com 14 dias, que são duas estações exatas, ele ajusta sem reclamar.
Duas estações é o mínimo que roda, porém não é o recomendado. Com 14 dias o RMSE ficou em 42,4, com 21 dias subiu para 103,2 e com 78 dias voltou a 45,2. A janela curta ajusta, mas o resultado oscila conforme o pedaço de série que você recorta.
Holt-Winters no monitoramento de TI
Na OpServices, monitorar infraestrutura e indicadores de negócio gera muita série para acompanhar. Daí veio o uso do algoritmo aqui dentro. Ele monta linha de base automática, em vez de exigir um limiar fixo escolhido a dedo por item coletado.
O período de amostragem dessa linha de base é configurável por semana, mês, ano ou calendário customizável. É o mesmo m da seção anterior, agora com nome de produto. Assim, dá para adaptar o modelo a data comemorativa e a feriado.
Em cada checagem o produto compara o valor coletado com o comportamento esperado e com os limites derivados dele. Quando o valor sai da faixa, a notificação segue para o responsável sem configuração adicional. Em síntese, é a forma mais barata de detecção de anomalias em ambiente com muitos itens.
No gráfico, a quebra da linha de base aparece como o instante em que a métrica sai da faixa esperada.

Pare de gerenciar alertas. Comece a gerenciar incidentes de verdade.
Aplicamos Machine Learning para correlacionar eventos, suprimir ruído operacional e apontar a causa raiz antes que o war room comece.
Quando o modelo serve ao seu ambiente
Três perguntas decidem antes de qualquer implementação. A métrica tem ciclo? Você tem pelo menos duas estações completas de histórico? O ciclo real bate com o m que você vai declarar? Uma resposta negativa em qualquer delas já elimina o modelo.
Há também um limite estrutural que o laboratório não resolve. O Holt-Winters clássico assume uma sazonalidade só. Métrica com ciclo diário e semanal ao mesmo tempo, como acesso por hora ao longo da semana, pede mais de um termo sazonal.
Sobra o caso comum, que ele resolve bem: uma série com um ciclo claro e algumas semanas de histórico. Aí faz sentido uma faixa que se move junto com o comportamento normal. O livro de previsão de Hyndman e Athanasopoulos cobre as variantes aditiva e multiplicativa em detalhe.
Se a decisão for aplicar isso no seu ambiente, o trabalho pesado não é o algoritmo. Antes de tudo, é escolher quais métricas merecem linha de base e qual multiplicador cada uma recebe. Fale com um especialista da OpServices para desenhar essa régua com o seu histórico, em vez de com o nosso.