Path: blob/master/site/ja/probability/examples/Bayesian_Switchpoint_Analysis.ipynb
25118 views
Copyright 2019 The TensorFlow Probability Authors.
Licensed under the Apache License, Version 2.0 (the "License");
ベイジアンスイッチポイント解析
このノートブックは、pymc3 ドキュメントに含まれるベイズの「Change point analysis」の例を再実装し、拡張したものです。
前提条件
データセット
確率的モデル
このモデルは、「スイッチポイント」(安全規制が変更される年など)と、一定した(ただし潜在的に異なる)率によるそのスイッチポイントの前と後のポワソン分布の災害発生率を使用します。
実際の災害発生数は固定(観測済み)です。このモデルのすべてのモデルはスイッチポイントと災害の「早期」と「後期」の発生率の両方を指定する必要があります。
pymc3 ドキュメントの例に含まれる元のモデル:
しかし、平均災害発生率 には、スイッチポイント での不連続点があります。そのため、これは微分不可能です。したがって、ハミルトニアンモンテカルロ(HMC)アルゴリズムに勾配信号は送られません。ただし、 より前は連続であるため、HMC はランダムウォーク(酔歩)にフォールバックします。この例の確立室用の高い領域を見つけるには十分です。
2 つ目のモデルとして、トランジションを微分可能にするためにシグモイド関数の「switch」を e と l の間に使用して元のモデルを変更し、スイッチポイント の連続一様分布を使用します。(平均発生率の「スイッチ」の期間は何年にもなる可能性があるため、このモデルはより現実的ということもできます。)したがって、新しいモデルは次のようになります。
その他の情報がない状態で、 を事前確率のパラメータとして使用します。両方のモデルを実行して、推論の結果を比較してみましょう。
上記のコードは、JointDistributionSequential 分布を介してモデルを定義しています。disaster_rate
関数は、[0, ..., len(years)-1]
の配列とともに呼び出され、len(years)
ランダム変数のベクトルを生成します。(シグモイドトランジションを法として)switchpoint
より前の年は early_disaster_rate
で、後の年は late_disaster_rate
です。
健全性チェックは次のとおりになります。ターゲットの対数確率関数は健全です。
HMC でベイジアン推論を行う
結果数と必要なバーンインステップを定義します。このコードはほぼ、tfp.mcmc.HamiltonianMonteCarlo のドキュメントを模倣したものです。適応ステップサイズを使用しています(そうでなければ、結果は選択されたステップサイズ値の影響を大きく受けるためです)。チェーンの初期状態として 1 の値を使用します。
ただし、これは完全なストーリーではありません。上記のモデル定義に戻ると、一部の確率分布は実数線全体においてうまく定義されていません。したがって、HMC カーネルを前方 Bijector を指定する TransformedTransitionKernel でラップして実数を確率分布が定義されている領域に変換することで、HMC が調べる空間を制約します(以下のコードのコメントをご覧ください)。
両方のモデルを並行して実行します。
結果を視覚化する
結果は、早期と後期の災害発生率を表す事後確率分布のサンプルとスイッチポイントを含むヒストグラムとして視覚化します。ヒストグラムには、サンプルの中央値を表す実線と、95 パーセンタイルの信頼区間の境界を表す破線をオーバーレイします。