Path: blob/master/site/pt-br/probability/examples/Bayesian_Switchpoint_Analysis.ipynb
25118 views
Copyright 2019 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Análise bayesiana de pontos de alteração
Este notebook reimplementa e estende o exemplo “Análise bayesiana de pontos de mudança” da documentação de pymc3.
Pré-requisitos
Dataset
O dataset é este aqui. Observação: há outra versão deste exemplo disponível em outro lugar, mas há dados “ausentes” e, nesse caso, você precisaria incluir os valores ausentes (caso contrário, seu modelo jamais sairá dos parâmetros iniciais porque a função de verossimilhança não estará definida).
Modelo probabilístico
O modelo pressupõe um “ponto de alteração” (por exemplo: um ano durante o qual as regulações de segurança mudaram) e a taxa de desastre com distribuição de Poisson com taxas constantes (mas potencialmente diferentes) antes e após esse ponto de alteração.
A contagem de desastres real é fixa (observada); toda amostra desse modelo precisará especificar tanto o ponto de alteração quanto a taxa de desastres “inicial” e “posterior”.
Modelo original no exemplo da documentação de pymc3:
Entretanto, a taxa de desastres média tem uma descontinuidade no ponto de alteração , o que a torna diferenciável. Portanto, ela não fornece nenhum sinal de gradiente ao algoritmo Monte Carlo Hamiltoniano (HMC) – porém, como o prior é contínuo, o fallback do HMC para um random-walk é suficiente para encontrar as áreas de massa de alta probabilidade neste exemplo.
Em um segundo modelo, modificamos o original usando a “alteração” de sigmoide entre e e l para tornar a transição diferenciável e usamos uma distribuição uniforme contínua para o ponto de alteração (é possível argumentar que este modelo é mais fiel à realidade, pois uma “alteração” na taxa média provavelmente seria distribuída ao longo de vários anos). Portanto, o novo modelo é:
Na ausência de mais informações, pressupomos que como parâmetros para os priors. Vamos executar os dois modelos e comparar os resultados da inferência.
O código acima define o modelo por meio de distribuições JointDistributionSequential. As funções disaster_rate
são chamadas com um array de [0, ..., len(years)-1]
para produzir um vetor de len(years)
variáveis aleatórias – os anos antes do switchpoint
(ponto de alteração) são early_disaster_rate
, e os anos após, são late_disaster_rate
(módulo da transição sigmoide).
Aqui está a prova real de que a função de probabilidade logarítmica é verdadeira:
HMC para fazer inferência bayesiana
Definimos o número de resultados e passos de burn-in necessários; o código é modelado principalmente de acordo com a documentação de tfp.mcmc.HamiltonianMonteCarlo e usa um tamanho adaptativo de passo (caso contrário, o resultado é muito sensível ao valor do tamanho do passo escolhido). Usamos o valor 1 como estado inicial da cadeia.
Mas essa não é a história completa. Se você rever a definição do modelo acima, verá que algumas das distribuições de probabilidade não são bem definidas em todo o eixo de números reais. Portanto, restringimos o espaço para que o HMC examine por meio do encapsulamento do kernel do HMC com um TransformedTransitionKernel, que especifica os bijetores forward para transformar os números reais para o domínio no qual a distribuição de probabilidade está definida (conforme os comentários no código abaixo).
Execute os dois modelos em paralelo:
Visualize o resultado
Visualizamos o resultado como histogramas das amostras da distribuição posterior para a taxa de desastre inicial e posterior, bem como o ponto de alteração. É adicionada aos histogramas uma linha sólida representando a média das amostras, bem como o 95º percentil dos limites do intervalo de credibilidade como linhas tracejadas.