🔍

Student(スチューデント)のt検定

に公開

概要

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

主な用途

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

データ要件

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

理論

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

【検定の手順】

  1. 2群の平均と分散を算出
    群1:標本平均 \bar{x}_1,不偏分散 s_1^2,標本サイズ(データ数) n_1
    群2:標本平均 \bar{x}_2,不偏分散 s_2^2,標本サイズ(データ数) n_2
    共通の不偏分散(プール分散):
s_p^2 = \frac{(n_1 - 1)s_1^2 + (n_2 - 1)s_2^2}{n_1 + n_2 - 2}
  1. t統計量の算出
t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{s_p^2 \left( \frac{1}{n_1} + \frac{1}{n_2} \right)}}
  • \bar{x}_1, \bar{x}_2:各群の標本平均
  • s_p^2:プール分散
  • n_1, n_2:各群の標本サイズ(データ数)
  1. 自由度 n_1 + n_2 - 2 の 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']

# Studentのt検定(equal_var=True)
t_stat, p_val = ttest_ind(group1, group2, equal_var=True)

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検定」を使用
  • 前提②「2群間に等分散性がある」
    → 等分散性があるか不安がある場合は「Welchのt検定」を使う
  • 前提③「各群が正規分布に従うこと」
    → 外れ値が多い、分布が歪んでいるなどの場合はノンパラメトリック検定を検討
    (例:Mann–WhitneyのU検定)
  • 平均を使うため外れ値に弱い:極端な値が結果を左右する

関連手法

参考リンク・文献

Discussion