Este artigo foi traduzido por máquina.

C#

Usando a análise de sobrevivência

Zvi Topol

Análise de sobrevivência (SA) é uma disciplina de estatística que se concentra na estimativa de tempo para eventos. Você normalmente aplicaria métodos de análise de sobrevivência para estudos clínicos para ajudar a determinar a eficácia de certas drogas (tempo até a morte do paciente), confiabilidade de sistemas de software (tempo de falha) e análise de crédito (tempo de empréstimo padrão).

Farmacêuticos estudos clínicos envolvendo dois grupos de pacientes são um excelente exemplo de como isso pode funcionar. O grupo de controle são membros administrado um placebo. Os membros do grupo de teste recebem a droga experimental visando a doença. Métodos de análise de sobrevivência em seguida são aplicados para determinar se há diferença estatisticamente significativa na sobrevida do paciente entre os dois grupos. Neste caso, o evento "na hora de" é o tempo desde o início do estudo até pacientes morrem.

Para expô-lo a usar SA, abordarei conceitos básicos, junto com uma implementação c# de um método de estimação usado comumente chamado o estimador de Kaplan-Meier. Eu vou usar um exemplo real de estimar a probabilidade de sobrevivência de aplicações móveis.

Imagine uma empresa de desenvolvimento de software produz dois aplicativos móveis separados intitulados X e Y. Cada um é desenvolvido por equipes separadas. A firma está ansiosa por aprender como robusto as aplicações móveis são e para determinar se um aplicativo é significativamente menos robusto e requer mais esforço para melhorar sua confiabilidade.

A qualquer momento, pode haver muitas instâncias de X e Y vivo e execução em dispositivos móveis do cliente. Assim, uma falha de aplicativo móvel é o que é mais interessante. Longos períodos de tempo para o evento, neste caso, indicará a aplicação é mais robusta ou tem melhor capacidade de sobrevivência.

No programa do demo, eu primeiro vou exibir os dados de sobrevivência para aplicações móveis, X e Y (ver Figura 1). Os dados mostram que ambos os aplicativos foram executados por 10 diferentes usuários com IDs que variam de zero a nove. No meu exemplo, um aplicativo pode qualquer acidente (descrito por evento = acidente de app na captura de tela) ou fechado pelo usuário (descrito por evento = app off). O dia em que o evento ocorre também é gravado.

The Survival Analysis Demo Showing Lifecycle of Mobile Apps
Figura 1: A análise de sobrevivência Demo mostrando o ciclo de vida de aplicativos móveis

Conceitos básicos de SA

O conceito mais básico em SA é a função de sobrevivência. Isto é comumente denotado pelo S(t). Se X é uma variável aleatória (uma variável cujos valores são resultados com base na hipótese) que representa a hora do evento, então S(t) = Pr (X > t). Em outras palavras, o S(t) é a probabilidade de sobrevivência após o tempo t. S(0) é definido como 1. A função de sobrevivência está relacionada com a função de distribuição do tempo de vida. Isto é normalmente indicado por f (t) e é definido como f (t) = Pr (X < = t), em outras palavras, a probabilidade que o evento aconteceu até o tempo t. Portanto, f (t) = 1 – S(t). O evento densidade função f (t) é definida para ser dF (t) / dt — a primeira derivada de f (t), se f (t) é diferenciável. Portanto, f (t) pode ser pensado como a taxa do evento (por unidade de tempo).

A função de risco, outro conceito básico, é igual a f(t)/S(t) e a taxa de evento no tempo t para os indivíduos que estão vivos no tempo t.

Você pode especificar funções de sobrevivência parametricamente, usando uma função explícita ou uma família de funções. Você pode também inferi-los não-parametricamente partir de dados existentes, sem ter uma forma parametrizada fechada. Uma especificação semi-paramétrica, que é uma mistura entre especificação paramétrica e não-paramétricos, também é possível. A distribuição exponencial é uma família de função parametrizada simples e popular para descrever as funções de sobrevivência devido a suas propriedades matemáticas atraentes.

Por exemplo, S(t) = exp(-0.05t) é uma função de sobrevivência de uma distribuição exponencial paramterized plotada em Figura 2. As funções de sobrevivência da forma S(t) = exp(-at) (onde um é um parâmetro que controla a taxa de risco pode descrever essa distribuição). O tempo de vida a função distribuição é dada por f (t) = 1 – S(t) = 1 – exp(-at). Figura 2 nos ajuda a visualizar como funções de sobrevivência se comportam ao longo do tempo.

How Survival Functions Behave over Time
Figura 2 como funções de sobrevivência se comportam ao longo do tempo

Trabalhando com um modelo paramétrico, você pode usar os dados reais para estimar os parâmetros do modelo. No caso de distribuição exponencial, o parâmetro é um. Uma maneira de fazer isso é usar métodos de estimativa de probabilidade máxima (MLE), mas isso é outro assunto completamente.

Vou me concentrar na implementação de um não -­estimativa paramétrica para a função de sobrevivência. Ou seja, não defina um modelo predefinido para a função de sobrevivência e estimar os parâmetros do modelo. Em vez disso, eu vou derivar a função de sobrevivência diretamente os dados observados. Antes de descrever como fazer isso, tenho que explicar um outro conceito importante de SA chamado censurar.

Censura ocorre quando algumas observações no dataset estão incompletas. Em algum momento, você perdeu a noção do item observado. No meu exemplo, isto significaria que uma aplicação móvel terminou sua execução sem bater (lançando uma exceção fatal). O aplicativo normalmente foi fechado pelo usuário. Embora possa haver outras razões pelas quais um aplicativo terminou sem bater, eu vou assumir um aplicativo trava ou fica fechado pelo usuário.

Existem dois tipos principais para censurar — censura direito e esquerdo e censurar. Bem censurar ocorre quando o horário de início é conhecido, mas a hora do evento está falta. Censurar a esquerda ocorre quando o tempo do evento está presente, mas o tempo de início está faltando. Bem censurar está ocorrendo no meu exemplo.

Usando o estimador de Kaplan-Meier para estimar a função de sobrevivência

O estimador de Kaplan-Meier (KM) é um algoritmo não-paramétricos que avalia a função de sobrevivência. Derivando o estimador KM implica o uso de matemática avançada, incluindo teoria de martingale e contagem de processos e está além do escopo deste artigo. Implementar o estimador KM, no entanto, é simples e baseia-se em acusações.

Considere o estimador KM para a sobrevivência do aplicativo móvel X de computação. O estimador KM precisa manter o controle de três contagens diferentes:

  1. Quantas instâncias do aplicativo móvel X estão ainda em funcionamento. Isso é representado usando a variável se na minha implementação.
  2. O número de instâncias que caíram. Isso é controlado na variável caiu.
  3. O número de instâncias que terminou a execução graciosamente. Estas são contadas usando a variável censurada.

As seguintes linhas de código (para a aplicação móvel X) estiver usando a classe CrashMetaData para codificar os dados de sobrevivência representados em Figura 3:

var appX = new CrashMetaData[] {new CrashMetaData{UserID = 0,
  CrashTime = 1, Crashed = false},
           new CrashMetaData{UserID = 1, 
              CrashTime = 5, Crashed = true}, 
           new CrashMetaData{UserID = 2, 
              CrashTime = 5, Crashed = false},
           new CrashMetaData{UserID = 3, 
              CrashTime = 8, Crashed = false},
           new CrashMetaData{UserID = 4, 
              CrashTime = 10, Crashed = false},
           new CrashMetaData{UserID = 5, 
              CrashTime = 12, Crashed = true},
           new CrashMetaData{UserID = 6, 
              CrashTime = 15, Crashed = false},
           new CrashMetaData{UserID = 7, 
              CrashTime = 18, Crashed = true},
           new CrashMetaData{UserID = 8, 
              CrashTime = 21, Crashed = false},
           new CrashMetaData{UserID = 9, 
              CrashTime = 22, Crashed = true}};

Figura 3 sobrevivência dados de aplicativo móvel X

UserID Dias Caiu Censurado
0 1   X
1 5 X  
2 5   X
3 8   X
4 10   X
5 12 X  
6 15   X
7 18 X  
8 21   X
9 22 X  

Os dados de sobrevivência contém a hora do evento em dias (codificados pelo CrashTime) e informações sobre se o evento refere-se a um aplicativo falha ou censurar. Se caiu é igual a true, o aplicativo travou. Caso contrário, o aplicativo fechado graciosamente (em outras palavras, foi censurado). Além disso, um campo UserID é controlando a instância do aplicativo.

O estimador KM é implementado no método EstimateKaplanMeier. Isso particiona os dados para diferentes disjunto intervalos de tempo com base em períodos de tempo para eventos (no meu exemplo é uma acidente de aplicação). Ela mantém controle sobre as contagens em cada intervalo.

É importante observar a contagem de quantos aplicativos ainda está de pé e correr é feito antes do evento (isto é devido a formulação matemática de contagem de processos). Então no primeiro intervalo no meu exemplo, que abrange dias 0 a 5, 9 fora de 10 instâncias foram acima e funcionando apenas antes do dia 5 (uma instância terminou a execução no tempo 1). No intervalo de até e incluindo o dia 5, eu tive um acidente (que define o intervalo) e 2 instâncias de acabamentos (nos dias 1 e 5). Veja a Figura 4.

Day Intervals Created by the KM Estimator
Figura 4 intervalos de dia criados pelo estimador KM

A estimativa KM para a função de sobrevivência é então o produto ao longo de todos os intervalos diferentes da sobrevivência derivado as contagens nas partições:

1 – (caiu no intervalo) / (aqueles em risco apenas antes do final do intervalo)

O método EstimateKapalanMeier retorna um objeto da classe SurvivalCurve. Isto representa a função de sobrevivência estimadas. A saída é uma função de passo. Cada etapa é o valor da função de sobrevivência em um intervalo correspondente (como estimado pelo estimador KM). Figura 5 inclui parte da análise de sobrevivência demo programa saída correspondente ao objeto SurvivalCurve (para ambas as aplicações X e Y).

Survival Analysis Demo Output for KM Estimates for Applications X and Y
Figura 5 análise de sobrevivência Demo saída para estimativas KM para aplicações de X e Y

Figura 6 inclui uma parcela da função de sobrevivência passo estimada para a aplicação móvel X. Na trama, linhas verticais curtas em cada etapa indicam várias ocorrências do evento acidente durante o intervalo correspondente à etapa.

KM Estimate of the Survival Function for Mobile Application X
Figura 6 KM de estimativa da função de sobrevivência para a aplicação móvel X

Você pode usar a estimativa de inferir o tempo de sobrevida mediana, ou o tempo pelo qual metade da instância estará vivo. Isso deve ocorrer em algum ponto no tempo, entre os dias 12 (onde a estimativa de probabilidade de sobrevivência é 0.711 > 0.5) e 18 (onde a probabilidade de sobrevivência é 0.474 < 0.5). Existem algumas abordagens na literatura SA descrevendo como calcular exatamente esta quantidade, porque normalmente cai entre duas etapas.

Definirei o tempo de sobrevivência mediano como o tempo de sobrevivência mínima para que a função de sobrevivência é menor do que 0,5, que, para a aplicação móvel X, resulta em um tempo de sobrevida média de 18 dias. A interpretação dessa quantidade é que pelo dia 18, metade das instâncias móveis aplicação X acidente e meia estadia acima e funcionando. Essa implementação calcula o tempo de sobrevida mediana no método GetMedianSurvivalTime.

Outra pergunta que você pode responder usando as estimativas KM é se existe uma diferença na capacidade de sobrevivência dos dois (ou mais) aplicações diferentes. Uma maneira de abordar esta questão é plotar visualmente as estimativas KM, correspondente a cada pedido. Este tipo de trama é descrito em Figura 7e compara as funções de sobrevivência estimadas de aplicações X e Y.

KM Estimates for Mobile Applications X and Y
Figura 7 KM estimativas para aplicações móveis, X e Y

A curva verde representa a função de sobrevivência do aplicativo X e a curva azul representa a função de sobrevivência de aplicação Y.

Do terreno, você pode ver que a função de sobrevivência de aplicação X no máximo a função de sobrevivência de aplicação Y. Portanto, você pode inferir aplicativo X tem melhor capacidade de sobrevivência do que a aplicação Y e, portanto, é mais robusto.

Enquanto visualizar funções de sobrevivência pode ajudar na determinação de diferenças de capacidade de sobrevivência, alguns casos não são tão claros. Felizmente, há uma abordagem estatística para testar tais diferenças de uma maneira formal e rigorosa, chamado o Log Rank Test. Este é um algoritmo que testa se existe uma diferença significativa entre dois (ou mais) distribuições de sobrevivência em uma maneira não-paramétricos. A literatura SA inclui uma discussão detalhada sobre isso e a maioria das bibliotecas de estatística SA inclui implementações de teste Log Rank.

É interessante notar que há outro algoritmo popular para estimar a função de sobrevivência de forma não-paramétricos, chamada o estimador de Nelson-Aalen (NA). O at estima a função de risco cumulativo de dados de sobrevivência. Em seguida, você pode derivar a função de sobrevivência desta estimativa usando uma fórmula matemática que amarra-lo à função acumulada de perigo. Você pode encontrar mais detalhes sobre este estimador na literatura SA.

Conclusão

Eu apresentei os conceitos básicos e terminologia do ramo estatístico de análise de sobrevivência. Mostrei como implementar o estimador de Kaplan-Meier não-paramétricos e aplicou-a um exemplo comparando a robustez de aplicações móveis. Este estimador pode ajudar a determinar se há uma diferença na capacidade de sobrevivência dos dois pedidos. Também mencionei um rigoroso teste estatístico para verificar se há diferenças, chamadas o teste Log Rank. Outra quantidade que derivei usando o estimador KM é o tempo de sobrevida mediana, que também aponta para diferenças de sobrevivência entre aplicativos X e Y.

Finalmente, eu mencionei o estimador de Nelson-Aalen como um método alternativo e não-paramétricos para estimar a função de sobrevivência. Diretamente não estimar a função de sobrevivência, como o estimador KM, mas prefiro estima a função cumulativa de perigo. Em seguida, você pode derivar a função de sobrevivência da função acumulada de perigo.

Isto apenas arranhões na superfície do campo rico de SA. As aplicações abrangem áreas da medicina, a engenharia e cujos métodos e algoritmos são implementados em muitos pacotes estatísticos. Com a proliferação de aplicativos móveis e Software como um implantações corporativas do serviço, eu antecipo métodos SA podem desempenhar um papel no controlo e na melhoria da qualidade de tais implantações.

Zvi Topol trabalhos como cientista sênior em marketing analytics em New York City. Ele projeta e aplica algoritmos de otimização não-linear de grande escala e métodos estatísticos para melhorar o planejamento de marketing para grandes empresas da Fortune 500.

Agradecemos ao seguinte especialista técnico pela revisão deste artigo: Dr. James McCaffrey (Microsoft Research)