- Por que usar LSTM na previsão de surtos
- Quando a LSTM vale a pena
- Dados abertos: o que usar e onde buscar
- Variáveis que ajudam a prever surtos
- Pipeline em Python para montar o modelo
- Exemplo mínimo de preparação
- Código-base de LSTM para séries epidemiológicas
- Validação, métricas e comparação com baselines
- Baselines que você deve bater
- Erros comuns e ajustes que melhoram a LSTM
- Ajustes práticos
LSTM na previsão de surtos virou uma opção prática para equipes que precisam antecipar picos de casos com dados abertos e Python. Em vez de depender apenas de planilhas históricas, o modelo aprende padrões de sequência, sazonalidade e atraso entre sinais epidemiológicos.
Na prática, o ganho aparece quando há séries semanais, ruído moderado e variáveis auxiliares. Este guia mostra o fluxo completo: fontes de dados, preparação, arquitetura em Python, validação temporal e um exemplo de implementação que você pode adaptar para dengue, influenza ou COVID-19.
Por que usar LSTM na previsão de surtos
A LSTM na previsão de surtos faz sentido quando a série temporal tem dependência de longo prazo. Em surtos, isso acontece com frequência: um aumento hoje pode refletir exposição, incubação e notificação com atraso de 1 a 4 semanas, dependendo da doença.
Modelos clássicos, como regressão linear ou média móvel, capturam tendência curta. Já a LSTM lida melhor com sequências mais longas e não lineares. Em estudos de vigilância, ela costuma entrar depois de um baseline simples, não no primeiro passo.
Quando a LSTM vale a pena
Use LSTM quando existir volume mínimo de observações, idealmente mais de 100 a 150 pontos temporais, e quando a série tiver sazonalidade, memória ou efeitos cumulativos. Para dados semanais, isso significa pelo menos dois a três anos de histórico.
Se a base for curta, o ganho pode ser pequeno. Nesse cenário, SARIMA, Prophet ou XGBoost com defasagens podem ser mais estáveis. A regra editorial é clara: a LSTM na previsão de surtos entra depois do diagnóstico do dado, não antes.
Leitura de apoio: WHO Data e OpenDataSUS.
Dados abertos: o que usar e onde buscar
O ponto de partida para LSTM na previsão de surtos é a série temporal de casos. No Brasil, o OpenDataSUS concentra bases úteis para epidemiologia aplicada. Em escala global, o Humanitarian Data Exchange e o WHO Data também ajudam.
Para dengue, influenza ou arboviroses, a granularidade semanal costuma ser mais prática que a diária. Isso reduz ruído de notificação. Um exemplo simples: 156 semanas de histórico equivalem a 3 anos de série, volume suficiente para um primeiro experimento com janela deslizante.
Em epidemiologia, prever cedo vale mais do que prever perfeito.
Variáveis que ajudam a prever surtos
Além dos casos, inclua clima, umidade, chuva, mobilidade, feriados e cobertura vacinal, quando disponível. Em surtos respiratórios, temperatura e mobilidade podem explicar parte da variação. Em doenças vetoriais, chuva e temperatura tendem a ser mais relevantes.
Também vale adicionar defasagens: casos da semana anterior, média móvel de 3 semanas e diferença percentual. Esses atributos simples costumam melhorar muito o desempenho antes mesmo da LSTM. Para dados públicos no Brasil, consulte dados.gov.br.
Pipeline em Python para montar o modelo
Um fluxo sólido de LSTM na previsão de surtos começa com limpeza, padronização e criação de janelas temporais. Em Python, a pilha mais comum inclui pandas, numpy, scikit-learn e TensorFlow/Keras. Para visualização, use matplotlib ou seaborn.
Exemplo de etapas: carregar CSV, converter data, ordenar por semana epidemiológica, preencher faltantes, normalizar a série com MinMaxScaler e gerar sequências com 12 passos de entrada para prever a próxima semana. Em séries semanais, uma janela de 12 a 26 semanas costuma ser um bom ponto de partida.
Exemplo mínimo de preparação
1. Agrupe por semana epidemiológica.
2. Crie variáveis defasadas de 1, 2, 4 e 8 semanas.
3. Escalone os dados apenas no treino.
4. Separe treino, validação e teste por tempo, nunca por sorteio.
Esse detalhe evita vazamento temporal. Em epidemiologia, vazamento pode inflar a métrica e gerar falsa confiança operacional. Para referência técnica em séries temporais, vale consultar a documentação do TimeSeriesSplit.
Código-base de LSTM para séries epidemiológicas
Abaixo está um esqueleto funcional para LSTM na previsão de surtos. Ele prevê o próximo valor da série a partir de uma janela temporal. Ajuste a coluna alvo para casos, internações ou notificações.
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
# df: colunas ['date', 'cases']
df = df.sort_values('date').reset_index(drop=True)
values = df[['cases']].values
scaler = MinMaxScaler()
scaled = scaler.fit_transform(values)
def make_sequences(data, window=12):
X, y = [], []
for i in range(window, len(data)):
X.append(data[i-window:i])
y.append(data[i])
return np.array(X), np.array(y)
X, y = make_sequences(scaled, window=12)
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]
model = Sequential([
LSTM(64, input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences=True),
Dropout(0.2),
LSTM(32),
Dropout(0.2),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=30, batch_size=16, validation_split=0.2, verbose=1)
Esse modelo é simples, mas já serve para um primeiro benchmark. Em bases reais, você pode adicionar callbacks, early stopping e multivariáveis. Se quiser subir o nível, compare a LSTM com CNN-LSTM ou TCN, que às vezes superam redes recorrentes em séries curtas.
Para um panorama técnico mais amplo, veja TensorFlow LSTM.
Uma LSTM só ajuda se o dado estiver limpo, temporalmente coerente e validado sem vazamento.
Validação, métricas e comparação com baselines
Sem validação correta, LSTM na previsão de surtos vira exercício de overfitting. A avaliação precisa respeitar a ordem temporal. O ideal é usar backtesting com janelas expansíveis ou deslizantes, além de um conjunto final de teste separado por período.
As métricas mais úteis são MAE, RMSE e MAPE. Para surtos, também vale olhar a capacidade de detectar picos. Uma previsão média boa, mas que erra o ápice em duas semanas, pode ser pouco útil para vigilância.
Baselines que você deve bater
Antes de celebrar a LSTM, compare com três referências: persistência ingênua, média móvel e SARIMA. Em muitos cenários, a LSTM só compensa quando há variáveis externas e volume razoável de histórico. Em séries muito ruidosas, o ganho pode ser modesto.
Um caso recorrente em saúde pública é a previsão de dengue em nível municipal. Modelos com clima e defasagens costumam superar a linha de base. Mas o ganho real depende da qualidade da notificação, que pode atrasar de 7 a 14 dias em alguns sistemas.
Para métricas e boas práticas em séries temporais, consulte Forecasting: Principles and Practice.
Erros comuns e ajustes que melhoram a LSTM
O erro mais comum em LSTM na previsão de surtos é treinar com dados mal alinhados. Semana epidemiológica, data de notificação e data de início dos sintomas não são a mesma coisa. Se a série mistura essas datas, a previsão perde sentido.
Outro problema é ignorar mudança de regime. Surtos sofrem intervenção, subnotificação e alteração de comportamento. Isso quebra padrões aprendidos. Em séries com ruptura, vale testar re-treino frequente, regularização maior e janelas menores, por exemplo de 8 a 12 semanas.
Ajustes práticos
Experimente normalização robusta, dropout entre 0,2 e 0,4, early stopping e redução do tamanho da rede. Em muitos casos, duas camadas LSTM bastam. Redes muito profundas aumentam custo e nem sempre melhoram a previsão.
Se o objetivo for operação, gere cenários: previsão pontual, intervalo de confiança e alerta de limiar. Em vigilância, um alarme antecipado de uma semana pode ser mais valioso do que uma curva bonita. Para dados e séries no ecossistema Python, veja pandas e TensorFlow.
A IAIRON Academy ensina IA aplicada de forma prática. Conheça aqui.