# @title Z検定 import numpy as np from scipy import stats def ab_test_conversion_rate(conversions_a, sample_size_a, conversions_b, sample_size_b, alpha=0.05): """ ABテストの初回課金率の検定を行う関数 :param conversions_a: グループAの課金者数 :param sample_size_a: グループAのサンプルサイズ :param conversions_b: グループBの課金者数 :param sample_size_b: グループBのサンプルサイズ :param alpha: 有意水準(デフォルトは0.05) :return: None """ # 課金率の計算 rate_a = conversions_a / sample_size_a rate_b = conversions_b / sample_size_b # プールされた標準誤差の計算 pooled_se = np.sqrt(rate_a * (1 - rate_a) / sample_size_a + rate_b * (1 - rate_b) / sample_size_b) # Z統計量の計算 z_score = (rate_a - rate_b) / pooled_se # p値の計算(両側検定) p_value = 2 * (1 - stats.norm.cdf(abs(z_score))) # 結果の出力 print(f"グループA 課金率: {rate_a:.4f}") print(f"グループB 課金率: {rate_b:.4f}") print(f"課金率の差: {rate_a - rate_b:.4f}") print(f"Z統計量: {z_score:.4f}") print(f"p値: {p_value:.4f}") if p_value < alpha: print(f"p値({p_value:.4f})が有意水準({alpha})より小さいため、") print("帰無仮説を棄却します。グループ間に統計的に有意な差があります。") else: print(f"p値({p_value:.4f})が有意水準({alpha})以上のため、") print("帰無仮説を棄却できません。グループ間に統計的に有意な差があるとは言えません。") # 使用例 conversions_a = 180 # グループAの課金者数 sample_size_a = 1000 # グループAのサンプルサイズ conversions_b = 150 # グループBの課金者数 sample_size_b = 1000 # グループBのサンプルサイズ ab_test_conversion_rate(conversions_a, sample_size_a, conversions_b, sample_size_b)
グループA 課金率: 0.8362 グループB 課金率: 0.8145 課金率の差: 0.0216 Z統計量: 0.6784 p値: 0.4975 p値(0.4975)が有意水準(0.05)以上のため、 帰無仮説を棄却できません。グループ間に統計的に有意な差があるとは言えません。