はじめに
A/Bテストについての書籍で気になる点があったので確認するためのメモです。
以下が気になった点です。
あくまで経験則ではあるが、メトリクスの平均値が正規分布に従うために必要なサンプルサイズは、メトリクスYの歪度(skewness)sの2乗の355倍程度である(Kohavi,DengandLongbotham,etal.2014)。歪度とは分布の非対称性を表す値の1つで下記の式で定義される。(17.5)
Ron Kohavi,Diane Tang,Ya Xu,大杉 直也. A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは (Japanese Edition) (p.315). Kindle 版.
メモ
1000人のうち、1名が商品を購入する時、0.1%の購入率だと表現することができます.
ここで、1000人のそれぞれが同一の確率で購入するという仮定を置く.
すると、成功確率pのベルヌーイ試行に従う確率変数を1000回抽出した標本平均はざっくりいってpである確率が最も高いということになります.
この抽出作業をp=0.001とした上で、1000回繰り返しヒストグラムにしたのが下図です。
この分布は、n(この場合1000人の1000)が非常に大きい場合、正規分布に近似されることが中心極限定理により示されることを統計検定2級のテキストや大学の一般教養として学びました.
しかし、今のところ上図は正規分布に近似できているとは思えません.
色々と似ていないところがありますが、例えばこのケースでは0未満の標本平均は実現しないので、著書からの引用を借りると、歪んでいると言えます.
また、数値がそもそも離散的で、今回のケースでは1000人の購入割合を計算しているので、上図のとおり最小でも0.001刻みになります.
累積度数にして再表示させると下図のようになるので、正規分布を仮定できない場合でも、1000人のうち3人以上が購入する結果を得た場合は、稀だということができます.
その場合、何か施策の効果があったなど、この標本の1000人はこれまで仮定していた標本とは異なる成功確率pを持つと考えるか、あるいは1000人の購買行動をそれぞれ購入率pのベルヌーイ試行だという仮定そのものが誤りであることを疑うことになります. 私はどちらかといえば後者です.
さて、再度引用文です.
あくまで経験則ではあるが、メトリクスの平均値が正規分布に従うために必要なサンプルサイズは、メトリクスYの歪度(skewness)sの2乗の355倍程度である(Kohavi,DengandLongbotham,etal.2014)。歪度とは分布の非対称性を表す値の1つで下記の式で定義される。(17.5)
Ron Kohavi,Diane Tang,Ya Xu,大杉 直也. A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは (Japanese Edition) (p.315). Kindle 版.
歪度とは
Bingにチャットしてみると以下のようです.
$$\frac{\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^3}{\left(\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2\right)^{\frac{3}{2}}}$$
分散や標準偏差の考え方を修正して、平均からプラスとマイナスいずれにばらついているか表現できるようにしたものだと理解しました.(3乗してプラマイが現れるようになっているので...)
pythonで計算する場合は以下のようなので数式を覚える必要はなさそうです.
歪度を計算すると1近傍の数値となり、著書で言及されている歪度(skewness)sの2乗の355倍を計算すると305.9928486457792となり、私の直感とは異なる結果となりました.
import numpy as np
from scipy.stats import skew
p = 0.001 # 確率
n = 1000 # 試行回数
sample = np.random.binomial(n, p, 1000) / n # 標本平均を1000回取得
skewness = skew(sample) # 歪度を計算
print(skewness ** 2 * 355)
著書内によると、正規分布に従うかどうかの検定が存在するみたいですが、まだそこまで追いついていないのでメモはここまでです.
2023年5月12日追記
よくよく引用部分を見ていると上述の歪度計算に使う数値に誤りがあることに気づいたので追記です.
あくまで経験則ではあるが、メトリクスの平均値が正規分布に従うために必要なサンプルサイズは、メトリクスYの歪度(skewness)sの2乗の355倍程度である(Kohavi,DengandLongbotham,etal.2014)。歪度とは分布の非対称性を表す値の1つで下記の式で定義される。(17.5)
Ron Kohavi,Diane Tang,Ya Xu,大杉 直也. A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは (Japanese Edition) (p.315). Kindle 版.
メトリクスYの歪度を求めるべきなのに、メトリクスYの標本平均の歪度を計算していました.
図で表すと私が表現すべきなのは下図のような形状のベルヌーイ分布の歪度です.
Bingに聞いて、計算してみたところ約35万という数値が得られました.
import numpy as np
from scipy.stats import bernoulli
p = 0.001 # 成功確率
n = 1000 # 試行回数
x = bernoulli.rvs(p, size=n) # ベルヌーイ試行
skewness = bernoulli.stats(p, moments='s') # 歪度の計算
print(f'skewness: {skewness}')
print(f'skewness ** 2 * 355: {skewness ** 2 * 355}')
'''
skewness: 31.575322658699797
skewness ** 2 * 355: 353935.35535535525
'''