Análise de Sobrevivência
O que é Análise de Sobrevivência (Survival Analysis)?
Análise de sobrevivência é uma família de métodos estatísticos e de aprendizado de máquina (machine learning) para modelar desfechos de tempo até o evento (time-to-event) — quanto tempo leva até que algum evento aconteça. O “evento” pode ser:
- Recaída ou morte de um paciente (saúde)
- Churn de clientes (negócios por assinatura)
- Falha de máquina (manutenção preditiva)
- Inadimplência de empréstimo (risco de crédito)
- Tempo até um usuário converter, retornar ou se reengajar (analytics de produto)
O que torna a análise de sobrevivência diferente da regressão (regression) ou classificação (classification) comuns é que ela foi projetada para lidar com censura (censoring): situações em que o tempo do evento não é totalmente observado para todos os exemplos.
Em termos de ML, a análise de sobrevivência fica entre:
- Regressão (prever um alvo contínuo como tempo), e
- Classificação (prever se um evento acontece até um prazo)
…mas ela preserva mais informação do que ambas ao modelar uma distribuição (distribution) sobre tempos de evento enquanto contabiliza corretamente a censura.
Conceitos Centrais: Tempo até o Evento, Censura e Truncamento
Variável de tempo até o evento
Seja (T \ge 0) o tempo (aleatório) até que um evento ocorra. Cada exemplo de treinamento normalmente tem:
- (t_i): tempo observado (tempo do evento ou tempo de censura)
- (\delta_i \in {0,1}): indicador do evento
- (\delta_i = 1): evento observado no tempo (t_i)
- (\delta_i = 0): censurado no tempo (t_i)
Censura (por que a análise de sobrevivência existe)
Censura à direita (right censoring) é a mais comum. Significa que o evento ainda não aconteceu quando a observação termina.
Exemplo (churn de clientes):
- Você observa um usuário por 90 dias.
- Ele não deu churn até o dia 90.
- Você sabe que (T > 90), mas não o tempo exato do churn.
Outros tipos:
- Censura à esquerda (left censoring): o evento aconteceu antes do início da observação ((T < t)), mas o tempo exato é desconhecido.
- Censura por intervalo (interval censoring): o evento ocorre entre dois tempos de observação (você só sabe (t_a < T \le t_b)).
- Censura administrativa (administrative censoring): censura devido ao fim do estudo (comum em ensaios clínicos).
Uma suposição-chave de modelagem em muitos métodos é a censura não informativa (independente) (non-informative (independent) censoring): o tempo de censura é independente do tempo do evento dadas as covariáveis (covariates). Violações (por exemplo, pacientes mais doentes abandonando com mais frequência) podem enviesar os resultados.
Truncamento (entrada atrasada)
Truncamento à esquerda (left truncation) (também conhecido como entrada atrasada (delayed entry)) acontece quando você só inclui sujeitos que sobrevivem tempo suficiente para serem observados.
Exemplo (confiabilidade de máquinas):
- Você começa a monitorar máquinas apenas depois que elas passam por um período de burn-in.
- Máquinas que falharam antes do início do monitoramento não aparecem no conjunto de dados.
Muitos toolkits de sobrevivência oferecem suporte explícito a truncamento à esquerda; ignorá-lo pode enviesar severamente as estimativas.
Sobrevivência e Risco: A Base Matemática
A análise de sobrevivência normalmente usa três funções relacionadas.
Função de sobrevivência \(S(t)\)
[ S(t) = P(T > t) ]
Esta é a probabilidade de o evento não ter ocorrido até o tempo (t). É uma função decrescente de 1 em direção a 0.
Densidade \(f(t)\) e CDF \(F(t)\)
[ F(t) = P(T \le t), \quad f(t) = \frac{d}{dt}F(t) ]
Função de risco \(h(t)\)
O risco (hazard) é uma taxa instantânea de ocorrência do evento no tempo (t), dado que houve sobrevivência até (t):
[ h(t) = \lim_{\Delta t \to 0} \frac{P(t \le T < t+\Delta t \mid T \ge t)}{\Delta t} ]
Interpretação: risco agora, condicionado a ainda estar em risco.
Risco acumulado \(H(t)\)
[ H(t) = \int_0^t h(u),du ]
Uma relação crucial conecta tudo:
[ S(t) = \exp(-H(t)) ]
Essa relação é amplamente usada tanto em modelos clássicos quanto em modelos de sobrevivência em ML.
O que Modelos de Sobrevivência Predizem
Dependendo do modelo e do caso de uso, você pode querer:
- Um escore de risco (risk score) (ranquear indivíduos por risco)
- Uma curva de sobrevivência (survival curve) completa (S(t \mid x))
- Probabilidade do evento por horizonte: (P(T \le \tau \mid x) = 1 - S(\tau \mid x))
- Tempo esperado até o evento (menos comum e às vezes mal definido com muita censura)
- Razões de risco (hazard ratios) (tamanhos de efeito interpretáveis)
A análise de sobrevivência também é intimamente relacionada a ranqueamento (ranking) e modelagem probabilística (probabilistic modeling); veja Aprendizado para Ranqueamento para entender como objetivos de ranqueamento aparecem em métricas de sobrevivência como o índice de concordância (concordance index).
Linhas de Base Não Paramétricas
Estimador de Kaplan–Meier (KM)
O estimador de Kaplan–Meier fornece uma estimativa não paramétrica (non-parametric) de (S(t)) a partir de dados censurados. Se eventos ocorrem em tempos ordenados (t_{(1)} < t_{(2)} < \dots), com:
- (d_j): número de eventos em (t_{(j)})
- (n_j): número em risco imediatamente antes de (t_{(j)})
então:
[ \hat{S}(t) = \prod_{t_{(j)} \le t} \left(1 - \frac{d_j}{n_j}\right) ]
Casos de uso:
- Análise exploratória rápida
- Comparar coortes (por exemplo, tratamento vs controle)
KM não usa atributos (x); é uma curva em nível populacional (ou estratificada por uma única variável categórica de agrupamento).
Estimador de Nelson–Aalen
Um estimador não paramétrico para o risco acumulado:
[ \hat{H}(t) = \sum_{t_{(j)} \le t} \frac{d_j}{n_j} ]
Então (\hat{S}(t) \approx \exp(-\hat{H}(t))).
Cavalo de Batalha Semiparamétrico: Cox de Riscos Proporcionais
Forma do modelo
O modelo de Cox de riscos proporcionais (proportional hazards, PH) é um dos modelos de sobrevivência mais usados:
[ h(t \mid x) = h_0(t)\exp(x^\top \beta) ]
- (h_0(t)): risco basal (baseline hazard) (não especificado)
- (\beta): coeficientes para os atributos (x)
Ideia-chave: as covariáveis escalonam o risco de forma multiplicativa, e a razão de risco entre dois indivíduos não depende do tempo.
Interpretação: razões de risco
Para um aumento de uma unidade no atributo (x_k), o risco é multiplicado por:
[ \exp(\beta_k) ]
Se (\exp(\beta_k)=1.3), esse atributo aumenta o risco instantâneo em 30% (sob as suposições de riscos proporcionais).
Ajuste via verossimilhança parcial
Cox é ajustado usando uma verossimilhança parcial (partial likelihood) que depende da ordenação dos tempos de evento, mas não do risco basal. É por isso que Cox é poderoso: linha de base flexível + efeitos interpretáveis das covariáveis.
Suposições e diagnósticos
Principais suposições:
- Riscos proporcionais: o efeito das covariáveis é constante ao longo do tempo
- Censura independente
- Forma funcional correta (frequentemente linear em (x), a menos que seja estendido)
Violações são comuns na prática (por exemplo, uma campanha de marketing impacta fortemente o churn no início e mais fracamente depois). Medidas corretivas incluem:
- Coeficientes variantes no tempo
- Modelos de Cox estratificados
- Trocar para AFT ou modelos de sobrevivência em ML não lineares
Modelos Paramétricos de Sobrevivência (AFT e Distribuições Clássicas)
Tempo de Falha Acelerado (Accelerated Failure Time, AFT)
Modelos AFT assumem que as covariáveis atuam acelerando ou desacelerando o tempo:
[ \log T = x^\top \beta + \varepsilon ]
Aqui, (\exp(\beta_k)) pode ser interpretado como um fator multiplicativo no tempo de sobrevivência (dependendo da parametrização).
AFT costuma ser mais fácil de raciocinar quando “escalonamento do tempo” faz sentido (por exemplo, “este fator dobra o tempo esperado até churn”).
Distribuições paramétricas comuns
Modelos paramétricos de sobrevivência assumem uma distribuição para (T), como:
- Exponencial (Exponential) (risco constante)
- Weibull (Weibull) (risco monótono; muito comum em confiabilidade)
- Log-normal (log-normal), log-logística (log-logistic) (riscos não monótonos são possíveis)
Benefícios:
- Extrapolação suave além do intervalo de tempo observado
- Estimação eficiente com poucos dados
- Interpretação gerativa natural
Custos:
- Risco de especificação incorreta (distribuição errada pode enviesar estimativas)
Análise de Sobrevivência na Prática de Machine Learning
Métodos clássicos de sobrevivência são fundamentais, mas muitos problemas reais de ML exigem:
- Interações não lineares entre atributos
- Atributos esparsos de alta dimensionalidade
- Forte desempenho preditivo em dados tabulares
Isso levou a modelos de sobrevivência “nativos de ML”.
Modelos baseados em árvores: Florestas Aleatórias de Sobrevivência
Florestas Aleatórias de Sobrevivência (Random Survival Forests, RSF) estendem florestas aleatórias a dados censurados usando critérios de divisão específicos de sobrevivência (por exemplo, divisão por log-rank) e estimando curvas de sobrevivência nas folhas.
Pontos fortes:
- Captura não linearidades e interações
- Mínima engenharia de atributos
- Forte linha de base em problemas tabulares (semelhante a Árvores de Decisão e Ensembles)
Pontos fracos:
- Menos interpretável que Cox (embora exista importância de variáveis)
- Pode exigir muitos dados para estimativas estáveis de curvas de sobrevivência
Boosting por gradiente para sobrevivência
Métodos de boosting podem otimizar perdas de sobrevivência como:
- Verossimilhança parcial de Cox (modelagem de escore de risco)
- Perdas AFT
- Verossimilhanças em tempo discreto
Muitos profissionais adaptam frameworks de boosting por gradiente (gradient boosting) para sobrevivência; algumas bibliotecas oferecem objetivos nativos. Essa costuma ser uma das principais escolhas para problemas de negócio como churn ou inadimplência, onde boosting tabular já é forte.
Modelos neurais de sobrevivência
Aprendizado profundo (deep learning) aparece na análise de sobrevivência quando:
- Você tem entradas não estruturadas (texto, imagens) ou interações complexas
- Você precisa de dinâmica temporal flexível
Exemplos de abordagens:
- DeepSurv: rede neural treinada com verossimilhança parcial de Cox (aprende escores de risco não lineares)
- Redes de sobrevivência em tempo discreto (discrete-time survival networks): preveem o risco ao longo de faixas de tempo (transformam tempo em classificação entre faixas)
- Modelos profundos de riscos competitivos (por exemplo, ideias no estilo DeepHit): modelam múltiplos tipos de evento
Modelos neurais de sobrevivência também podem ser combinados com incorporações (embeddings) aprendidas via Redes Neurais, mas exigem avaliação e calibração cuidadosas.
Exemplo Prático: Churn de Clientes com Censura
Suponha que você opere um serviço por assinatura. Para cada usuário:
- Tempo de início: cadastro
- Evento: churn (cancelamento da assinatura)
- Se ainda estiver ativo no snapshot dos dados: censura à direita
Seu conjunto de dados pode incluir:
tenure_days(tempo do cadastro até churn ou censura)churned(1 se churn observado, 0 se censurado)plan,country,sessions_last_7d,support_tickets, …
Por que sobrevivência em vez de uma predição binária de churn?
- Um classificador precisa de um horizonte fixo (por exemplo, “churn nos próximos 30 dias”).
- Sobrevivência usa todos os horizontes de uma vez e aproveita corretamente usuários parcialmente observados.
Exemplo (Python) com modelo de Cox
Usando lifelines (common survival library):
import pandas as pd
from lifelines import CoxPHFitter
# df columns: duration, event, and features
# duration: observed time (days)
# event: 1 if churned, 0 if censored
df = pd.read_csv("churn_survival.csv")
cph = CoxPHFitter()
cph.fit(df, duration_col="tenure_days", event_col="churned")
cph.print_summary()
# Predict survival curve for a single user
user = df.drop(columns=["tenure_days", "churned"]).iloc[[0]]
surv_curve = cph.predict_survival_function(user) # index is time
print(surv_curve.head())
A partir de uma curva prevista (S(t \mid x)), você pode calcular uma probabilidade por horizonte:
- Probabilidade de churn até o dia 30: (1 - S(30 \mid x))
Em produção, você poderia:
- Atualizar atributos diariamente
- Recomputar (S(t)) ou o escore de risco
- Acionar intervenções para alto risco previsto no curto prazo
Covariáveis Variantes no Tempo (uma necessidade comum no mundo real)
Muitos atributos de ML mudam ao longo do tempo (sessões, saldo, leituras de sensores). A análise de sobrevivência pode lidar com isso via:
- Modelos de Cox estendidos com covariáveis variantes no tempo
- Formato de dados de processo de contagem (counting process) ou “start-stop”: múltiplas linhas por entidade, uma por intervalo
Conceitualmente:
- Cada intervalo tem atributos medidos durante aquele intervalo
- O indivíduo está “em risco” até o evento ou a censura
Se seus dados são naturalmente em tempo discreto (diário/semanal), uma abordagem prática é sobrevivência em tempo discreto (discrete-time survival):
- Dividir o tempo em faixas (bins)
- Modelar o risco por faixa (frequentemente usando regressão logística ou árvores boosted)
- Isso se conecta ao ferramental padrão de classificação, permanecendo ciente da censura
Riscos Competitivos e Eventos Recorrentes
Riscos competitivos
Às vezes, múltiplos tipos de evento podem ocorrer, e um impede o outro.
Exemplo:
- Em crédito: inadimplência vs quitação antecipada (ambos encerram o empréstimo, mas com significados diferentes)
- Em medicina: morte por diferentes causas
Tratar ingenuamente outros eventos como censura pode enviesar estimativas. Métodos de riscos competitivos (competing risks) modelam:
- Riscos causa-específicos (cause-specific hazards), ou
- Funções de incidência cumulativa (cumulative incidence functions) (probabilidade de cada tipo de evento até um dado tempo)
Eventos recorrentes
Eventos podem acontecer múltiplas vezes por sujeito:
- Reinternações hospitalares
- Reparos de máquinas
- Compras repetidas
Isso exige modelos especializados (modelos de fragilidade (frailty models), formulações no estilo Andersen–Gill, etc.) e definição cuidadosa de intervalos de risco.
Métricas de Avaliação para Modelos de Sobrevivência
Avaliar é mais difícil do que em aprendizado supervisionado (supervised learning) padrão por causa da censura e da dependência temporal.
Métricas comuns:
Índice de concordância (C-index) (concordance index): mede a qualidade de ranqueamento — se maior risco previsto corresponde a eventos mais cedo. É análogo ao AUC, mas lida com censura (sob suposições).
Bom quando você se importa com priorização.AUC / ROC dependentes do tempo (time-dependent AUC / ROC): avalia discriminação em horizontes específicos.
Pontuação de Brier dependente do tempo (Brier score (time-dependent)) e Pontuação de Brier Integrada (Integrated Brier Score, IBS): avaliam a acurácia probabilística das previsões de sobrevivência ao longo do tempo e penalizam falta de calibração.
Considere também:
- Calibração (calibration): as probabilidades previstas correspondem às frequências observadas ao longo do tempo?
- Avaliação focada em decisão (decision-focused evaluation): custo/benefício em limiares de intervenção
Para seleção de modelos, você frequentemente fará validação cruzada (cross-validation) com divisões e métricas sensíveis à censura.
Armadilhas Comuns e Boas Práticas
Defina o problema com cuidado
- Escolha uma origem do tempo clara (cadastro, data de diagnóstico, data de instalação)
- Defina o evento precisamente (o que conta como churn? períodos de carência?)
- Decida como tratar desfechos ambíguos (por exemplo, downgrade de plano vs churn)
Trate a censura corretamente
- Não descarte exemplos censurados — eles carregam informação ((T > t))
- Verifique se a censura pode ser informativa (por exemplo, usuários deixam de ser rastreados devido a desinstalação do app)
Evite vazamento de informação com divisões temporais
Conjuntos de dados de sobrevivência são indexados no tempo; divisões aleatórias podem vazar informações do futuro. Prefira:
- Treinar em coortes/intervalos de tempo mais antigos
- Validar em períodos posteriores
Isso é conceitualmente similar à boa prática em Previsão de Séries Temporais, mesmo quando o alvo de modelagem é tempo até o evento, e não uma série temporal.
Trade-offs entre interpretabilidade e desempenho
- Cox: razões de risco interpretáveis, forte linha de base
- Sobrevivência com árvores/boosting: forte desempenho preditivo, interpretabilidade mais fraca
- Sobrevivência profunda: flexível, mas requer ajuste e calibração cuidadosos
Para linhas de base interpretáveis, compare com o raciocínio no estilo Regressão Linear/Logística (efeitos de atributos, regularização), mas adaptado a verossimilhanças que lidam com censura.
Onde a Análise de Sobrevivência se Encaixa em ML
A análise de sobrevivência é uma escolha natural quando:
- Você se importa com quando algo acontece, e não apenas se acontece
- O conjunto de dados tem desfechos incompletos (censura é inevitável)
- Você precisa de predição dinâmica de risco em múltiplos horizontes
Ela complementa famílias “irmãs” de modelos na caixa de ferramentas de ML:
- Em comparação com Detecção de Anomalias, sobrevivência foca em tempo até falha em vez de detecção de evento raro em um ponto no tempo.
- Em comparação com Árvores de Decisão e Ensembles, métodos de sobrevivência modificam objetivos e métricas para incorporar censura e tempo.
- Em comparação com Modelos Bayesianos, sobrevivência pode ser feita de forma frequentista (frequentist) ou bayesiana; sobrevivência bayesiana fornece incerteza de forma principiada, mas pode ser mais pesada computacionalmente.
Resumo
A análise de sobrevivência fornece um arcabouço principiado para modelagem de tempo até o evento sob censura, produzindo curvas de sobrevivência, riscos e escores de risco que são difíceis de obter corretamente com regressão ou classificação padrão.
Principais conclusões:
- Alvos do modelo incluem (S(t)), (h(t)) e probabilidade de evento por horizonte.
- Censura (especialmente censura à direita) é central e deve ser tratada explicitamente.
- Ferramentas centrais vão de Kaplan–Meier e Cox de riscos proporcionais a modelos AFT paramétricos e métodos modernos de ML como florestas de sobrevivência e modelos de sobrevivência com boosting.
- A avaliação depende de métricas sensíveis à censura como C-index e pontuações de Brier dependentes do tempo.
- O sucesso no mundo real depende de definição cuidadosa do problema, validação temporal e alinhamento das saídas com decisões.
Se você compartilhar seu caso de uso específico (por exemplo, churn vs falha, quais atributos mudam ao longo do tempo e quais decisões você precisa tomar), a escolha entre Cox, AFT, boosting ou sobrevivência neural fica muito mais clara.