おそらく、推定 ctr の信頼区間の表現が必要です。ウィルソン スコア間隔は、試してみるのに適したものです。
信頼スコアを計算するには、以下の統計が必要です。
\hat p
観測された ctr (クリック数とインプレッション数の比率)
n
は総インプレッション数です
z
α/2は(1-α/2)
、標準正規分布の分位数です。
Python での簡単な実装を以下に示します。95% の信頼区間に対応するz
(1-α/2) =1.96 を使用します。コードの最後に 3 つのテスト結果を添付しました。
# clicks # impressions # conf interval
2 10 (0.07, 0.45)
20 100 (0.14, 0.27)
200 1000 (0.18, 0.22)
これで、計算された信頼区間を使用するためのしきい値を設定できます。
from math import sqrt
def confidence(clicks, impressions):
n = impressions
if n == 0: return 0
z = 1.96 #1.96 -> 95% confidence
phat = float(clicks) / n
denorm = 1. + (z*z/n)
enum1 = phat + z*z/(2*n)
enum2 = z * sqrt(phat*(1-phat)/n + z*z/(4*n*n))
return (enum1-enum2)/denorm, (enum1+enum2)/denorm
def wilson(clicks, impressions):
if impressions == 0:
return 0
else:
return confidence(clicks, impressions)
if __name__ == '__main__':
print wilson(2,10)
print wilson(20,100)
print wilson(200,1000)
"""
--------------------
results:
(0.07048879557839793, 0.4518041980521754)
(0.14384999046998084, 0.27112660859398174)
(0.1805388068716823, 0.22099327100894336)
"""