🔍

Welch(ウェルチ)のt検定

に公開

概要

異なる2群の対象に対して平均値に有意な差があるかを検定する手法
※ Studentのt検定と異なり、等分散性を仮定しない点が特徴

主な用途

パターン 説明 実務ユースケース
群間比較 異なる2群の平均を比較 施策AとBを別ユーザーに実施しCV率比較
属性による比較 属性で分けた2群の差を比較 男女の平均購入額の差を検定
施策 vs 非施策 施策あり・なし群で効果比較 メール配信ありvsなしでCTR比較
ランダム分割テスト 無作為に2群を作り効果を検証 ボタンA/Bでクリック率の差を検定

データ要件

  • 従属変数:数値型(例:CV率、購入額、CTR、クリック率など)
  • 独立変数:独立した2群の比較(例:施策AvsB、男女、メール配信ありvsなし、ボタンAvsBなど)
  • 前提条件:
    • 比較する2群間に独立性がある
    • 各群の従属変数が正規分布に従う ※対応のあるt検定は「差分」と異なるので注意
    • 等分散性の仮定は不要

理論

異なる2群(施策AvsB、男女など)の母平均の差がない(=差が0)であるかを検定
 - 帰無仮説:2群の母平均に差がない
 - 対立仮説:差があった(両側検定)、一方が大きい/小さい(片側検定)

【検定の手順】

  1. 2群の平均と分散を算出
    群1:標本平均 \bar{x}_1,不偏分散 s_1^2,標本サイズ(データ数) n_1
    群2:標本平均 \bar{x}_2,不偏分散 s_2^2,標本サイズ(データ数) n_2

  2. t統計量の算出

t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\frac{s_1^2}{n_1} + \frac{s_2^2}{n_2}}}
  • \bar{x}_1, \bar{x}_2:各群の標本平均
  • s_1^2, s_2^2:各群の不偏分散
  • n_1, n_2:各群の標本サイズ(データ数)
  1. 自由度の算出
df = \frac{\left( \frac{s_1^2}{n_1} + \frac{s_2^2}{n_2} \right)^2} {\frac{ \left( \frac{s_1^2}{n_1} \right)^2 }{n_1 - 1} + \frac{ \left( \frac{s_2^2}{n_2} \right)^2 }{n_2 - 1}}

自由度の計算は実際にはscipy.stats.ttest_indなどのライブラリで内部的に計算される

  1. 自由度 df の t分布に基づいてp値を算出
     → p値が有意水準(例:0.05)未満なら、平均値に有意な差があると判断

実装コード例

Python

from scipy.stats import ttest_ind

# 2群のデータ ※各群は独立・正規分布に従う想定
group1 = df[df['group'] == 'A']['value']
group2 = df[df['group'] == 'B']['value']

# Welchのt検定(equal_var=False)
t_stat, p_val = ttest_ind(group1, group2, equal_var=False)

print(f"t値 = {t_stat:.3f}, p値 = {p_val:.3f}")

# 評価(有意水準=0.05、両側検定で設定)
if p_val < 0.05:
    print("→ グループAとBに有意な差があります。")
else:
    print("→ 有意な差は認められません。")

補足:equal_varパラメータの指定について
equal_var=TrueStudentのt検定を指定(デフォルト)
equal_var=FalseWelchのt検定を指定

注意点・Tips

  • 前提①「独立2群」である
    家庭・店舗・企業などでグループ分けされている場合は「見かけの独立」に注意
    → 同一対象を比較する場合は「対応のあるt検定」を使用
  • 前提②「各群が正規分布に従うこと」
    → 外れ値が多い、分布が歪んでいるなどの場合はノンパラメトリック検定を検討
    (例:Mann–WhitneyのU検定)
  • 平均を使うため外れ値に弱い:極端な値が結果を左右する
  • 実務では、分散が等しくなかったり、サンプルサイズが揃わないケースも多いため、
    より柔軟で頑健なWelchのt検定が好まれる傾向がある

ケーススタディ

🔗キャンペーン施策の効果測定

関連手法

参考リンク・文献

Discussion