ここでベイズ計算し、1例/テストです:
def estimateProbability(priorProbs, buyCount, noBuyCount):
# first, estimate the prob that the actual buy/nobuy counts would be observed
# given each of the priors (times a constant that's the same in each case and
# not worth the effort of computing;-)`
condProbs = [p**buyCount * (1.0-p)**noBuyCount for p in priorProbs]
# the normalization factor for the above-mentioned neglected constant
# can most easily be computed just once
normalize = 1.0/sum(condProbs)
# so here's the probability for each of the prior (starting from a uniform
# metaprior)
priorMeta = [normalize * cp for cp in condProbs]
# so the result is the sum of prior probs weighed by prior metaprobs
return sum(pm * pp for pm, pp in zip(priorMeta, priorProbs))
def example(numProspects=4):
# the a priori prob of buying was either 0.3 or 0.7, how does it change
# depending on how 4 prospects bought or didn't?
for bought in range(0, numProspects+1):
result = estimateProbability([0.3, 0.7], bought, numProspects-bought)
print 'b=%d, p=%.2f' % (bought, result)
example()
出力は次のようになります。この単純なケースのための私のバイ手計算と一致する
b=0, p=0.31
b=1, p=0.36
b=2, p=0.50
b=3, p=0.64
b=4, p=0.69
。定義によると、購入確率は、先験的確率の集合の中で常に最も低いものと最も高いものとの間にあることに留意されたい。それがあなたが望むものでなければ、誰も購入しない2つの「疑似製品」(p = 0.0)、誰かがいつも買うもの(p = 1.0)を導入することで、実際の観測に比べてより多くの重みを持ち、過去の製品に関する統計量は少ない。私たちがここにいることをすれば、我々が得る:この新製品は、これまで、以前に販売いずれかより悪い、またはそれらのいずれかよりも良いかもしれ性は低いが、不可能ではない可能性を考慮するために(fudgingの
b=0, p=0.06
b=1, p=0.36
b=2, p=0.50
b=3, p=0.64
b=4, p=0.94
中級レベル)は容易に想像することができます(estimateProbability
の引数にベクトルpriorWeightsを追加することにより、人工的な0.0と1.0の確率に低い重みを与えます)。
この種のことは、今、私が働くことをビジネスインテリジェンスでアプリケーションを開発し、私は一日何をすべきかの実質的な部分ですが、私はちょうどそれを十分に得ることができない... - !)
本当にクールな問題、と私は私が正確なベイズソリューションを知っていると思うが、それはまだAKA Pythonのソース、あなたが実行可能な擬似コードを気にします(コードにしばらく時間がかかるだろう? Javaで錆びついている... ;-)。 –
アレックス、はい - Pythonまたは擬似Pythonはまったく問題ありません! – sanity
これはプログラミング上の問題とは思われません。これは、Javaメソッドスタブに包まれた理論上の数学的質問です。 –