0

私はこの本(http://nbviewer.ipython.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Chapter2_MorePyMC/MorePyMC.ipynb)をよく読んでいますが、自分自身を見つけました私自身の問題に Pymc を使用しようとすると、問題が発生します。

注文した顧客から大量の注文値を受け取りましたが、それらはかなりガンマ分布のように見えます。AB テストを実行していて、注文値の分布がどのように変化するかを確認したい - Pymc と入力してください。私は本の例に従っていましたが、実際にはうまくいかないことがわかりました-最初の試みはこれでした:

import pymc as pm
import numpy as np
from matplotlib import pyplot as plt
from pylab import savefig

## Replace these with the actual order values in the test set
## Have made slightly different to be able to see differing distributions
observations_A = pm.rgamma(3.5, 0.013, size=1000)
observations_B = pm.rgamma(3.45, 0.016, size=2000)

## Identical prior assumptions
prior_a = pm.Gamma('prior_a', 3.5, 0.015)
prior_b = pm.Gamma('prior_b', 3.5, 0.015)

## The difference in the test groups is the most important bit
@pm.deterministic
def delta(p_A = prior_a, p_B = prior_b):
    return p_A - p_B

## Add observations
observation_a = pm.Gamma('observation_a', prior_a, value=observations_A, observed=True)
observation_b = pm.Gamma('observation_b', prior_b, value=observations_A, observed=True)

mcmc = pm.MCMC([prior_a, prior_b, delta, observation_a, observation_b])
mcmc.sample(20000,1000)

Prior_a と Prior_b のトレースの平均を見ると、約 3.97/3.98 の値が表示されます。これらの事前確率の統計を見ると、同様の話が見えます。ただし、事前確率を定義すると、事前確率でメソッドを呼び出すと、rand()予想される種類の値 (100 から 400 の間) が得られます。基本的に、更新段階の 1 つ (観察段階については確信が持てません) は、予期しないことを行っています。

これに少し苦労して、このページ ( http://matpalm.com/blog/2012/12/27/dead_simple_pymc/ ) を見つけ、別のアプローチが適切であると判断しました。

import pymc as pm
import numpy as np
from matplotlib import pyplot as plt
from pylab import savefig

## Replace these with the actual order values in the test set
observations_A = pm.rgamma(3.5, 0.013, size=1000)
observations_B = pm.rgamma(3.45, 0.016, size=2000)

## Initial assumptions
A_Rate = pm.Uniform('A_Rate', 2, 4)
B_Rate = pm.Uniform('B_Rate', 2, 4)
A_Shape = pm.Uniform('A_Shape', 0.005, 0.05)
B_Shape = pm.Uniform('B_Shape', 0.005, 0.05)

p_A = pm.Gamma('p_A', A_Rate, A_Shape, value=observations_A, observed=True)
p_B = pm.Gamma('p_B', A_Rate, B_Shape, value=observations_B, observed=True)

## Sample
mcmc = pm.MCMC([p_A, p_B, A_Rate, B_Rate, A_Shape, B_Shape])
mcmc.sample(20000, 1000)

## Plot the A_Rate, B_Rate, A_Shape, B_Shape
## Using those, determine the Gamma distribution
## Plot both - and draw 1000000... samples from each.
## Perform statistical tests on these.

したがって、ガンマ分布を直接求めるのではなく、パラメーターを見つけようとしています (私はそう思います)。これは、適切な大きさのトレースで値を与えるという点で、うまく機能しているようです。ただし、テストグループとベータの両方のアルファのサンプルのヒストグラムをプロットできるようになりましたが、それは私が求めているものではありません。事前確率と私が提供する値から計算された、テストグループの「ガンマのような」分布のそれぞれをプロットできるようにしたいと考えています。また、AB テストの例が示すように、「デルタ」をプロットできるようにしたいと考えています。2番目の例の決定論的変数が私の最善の策になると思いますが、これを構築するための最良の方法は本当にわかりません.

簡単に言えば、AB テストしたいガンマ分布から得たデータがあります。私はデータのガンマ事前ビューを持っていますが、それがより簡単であれば、通常の事前ビューを持っていると説得することができます. 賢明な方法で、収集したデータで同一の事前確率を更新し、分布とそれらの差をプロットしたいと思います。

乾杯、

マット

4

0 に答える 0