検出力分析 - パート I
ここからは検出力分析に取り組みます。実験やA/Bテストを行うときは、少なくとも80%の検出力を確保するのが一般的です。その一つの方法は、80%の検出力を達成するために必要なサンプルサイズを計算することです。
あなたがニュース系メディアサイトの担当者で、ユーザーがサイトで過ごす時間を増やしたいとします。現在、ユーザーの滞在時間は平均1分、標準偏差0.5分の正規分布に従っています。ページの読み込みを高速化する新機能を導入し、サイト滞在時間が5%増加したことを検出するのに必要なサンプルサイズを知りたいとします。
この演習では、1回のシミュレーションを実行する枠組みを作り、t検定を実行し、p値を計算します。
この演習はコースの一部です
Pythonで学ぶ統計シミュレーション
演習の手順
effect_sizeを5%、control_meanを1、control_sdを0.5に初期化します。np.random.normal()を使い、初期化した値を用いてcontrol_time_spentとtreatment_time_spentを1回分シミュレーションします。stはすでにインポート済みのscipy.statsです。st.ttest_ind()を使って、treatment_time_spentとcontrol_time_spentに対して t検定を実行します。- 統計的有意性
stat_sigは、p_valueが 0.05 未満ならTrue、それ以外はFalseにします。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Initialize effect_size, control_mean, control_sd
effect_size, sample_size, control_mean, control_sd = ____, 50, ____, ____
# Simulate control_time_spent and treatment_time_spent, assuming equal variance
control_time_spent = np.random.normal(loc=control_mean, scale=____, size=sample_size)
treatment_time_spent = np.random.normal(loc=____*(1+effect_size), scale=control_sd, size=____)
# Run the t-test and get the p_value
t_stat, p_value = st.ttest_ind(____, ____)
stat_sig = p_value < ____
print("P-value: {}, Statistically Significant? {}".format(p_value, stat_sig))