🔍

対応のあるt検定(paired t-test)

に公開

概要

同一の対象に対して2つの条件を比較し、平均値に有意な差があるかを検定する手法

主な用途

パターン 説明 実務ユースケース
時間軸の比較 同一対象の前後で変化を測定 LP改修前後でCV率の変化
条件差の比較 同一対象に異なる施策や状態を適用して比較 同一顧客の施策AとBで売上比較
時系列的な環境比較 時間帯・曜日など外的条件の違いで行動を比較 平日と休日の訪問数比較
交互提示による比較 同一対象に2条件を交互に提示して反応を比較 広告訴求A/Bのクリック率比較

データ要件

  • 従属変数:数値型(例:CV率、売上、訪問数、クリック率など)
  • 属率変数:同一対象の2条件(例:LP改修前後、施策AとB、平日と休日、広告AとBなど)
  • 前提条件:
    • 測定対象が同一のペアであること(例:同一人物・同一地域)
    • 2群の対応するデータの差が正規分布に従うこと

理論

同じ対象から得られた2つの値(前後・A/Bなど)を比較し、 その差分の平均が0であるかを検定
 - 帰無仮説:差分の平均が0だった(=2つの比較対象に差がなかった)
 - 対立仮説:差があった(両側検定)、上がった/下がった(片側検定)

【検定の手順】

  1. 差分データの算出
     各対象について、2つの値の差分 d_i = x_i^{(1)} - x_i^{(2)} を求める

  2. 差分の平均と不偏分散を算出

    • 平均:
      \bar{d} = \frac{1}{n} \sum_{i=1}^n d_i   
    • 不偏分散:
    s^2 = \frac{1}{n - 1} \sum_{i = 1}^n {(x_i - \overline{x})^2}   
  3. t統計量の算出

      t = \frac{ \bar{d} }{ \sqrt{s^2 / n} } = \frac{ \bar{d} }{ s / \sqrt{n} }   
  4. 自由度 n - 1 の t分布に基づいてp値を算出
     → p値が有意水準(例:0.05)未満なら、平均値に有意な差があると判断

実装コード例

Python

from scipy.stats import ttest_rel

# 施策前後のデータ ※差分データは正規分布に従う想定
before = df['before']
after = df['after']

# 対応のあるt検定
t_stat, p_val = ttest_rel(before, after)
print(f"t値 = {t_stat:.3f}, p値 = {p_val:.3f}")

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

注意点・Tips

  • 対応のあるt検定は「差分データが正規分布に従うこと」が前提
    → この前提が崩れると、p値や有意差判定の信頼性が下がる
  • サンプル数が多ければ中心極限定理[1]により多少の非正規性は許容される(ロバスト性[2]
  • n < 30程度なら差分データの正規性確認が必須
    小サンプルでは、差分データが正規分布に従っているかどうかの判断が難しく、
    分布の歪み(偏りや外れ値)の影響を受けやすいため、正規性の確認が重要になる
  • 平均を使うため外れ値に弱い
    極端な値が結果を左右する

ケーススタディ

🔗学習効果の評価

関連手法

参考リンク・文献

脚注
  1. 中心極限定理:サンプル数が大きくなるにつれて、正規分布に収束する ↩︎

  2. ロバスト性:理想的な前提条件を多少満たしていなくても、結果が大きくはブレずに信頼できる性質 ↩︎

Discussion