🔍

Wilcoxon(ウィルコクソン)の符号付順位検定

に公開

概要

同一の対象に対し2つの条件を比較し中央値に有意な差があるかを検定するノンパラメトリック手法[1]
※「対応のあるt検定」の正規性の前提が成り立たない場合の代替手段

主な用途

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

データ要件

  • 従属変数:順序情報のある数値型/連続変数(例:売上、CV率、スコアなど)
  • 属率変数:同一対象の2条件(例:LP改修前後、施策AとB、平日と休日、広告AとBなど)
  • 前提条件:
    • 測定対象が同一のペアであること(例:同一人物・同一地域)
    • 2群の対応するデータの差の正規性は不要(非正規分布でもOK)

理論

各ペアの差分に対して絶対値で順位を付け、符号(±)を考慮した順位和の偏りで差の有無を検定
 - 帰無仮説:順位の符号はランダム(=2条件の中央値に差がない)
 - 対立仮説:順位の符号が偏っている(両側検定)、正の符号が多い/負の符号が多い(片側検定)

【検定の手順】

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

  2. 差分の絶対値に順位をつける(差分0は除外)
    順位は小さい順に1から付与(同順位があれば平均順位)

  3. 符号ごとに順位の合計を算出

    • 正の差( d_i > 0 )の順位和:W^+
    • 負の差( d_i < 0 )の順位和:W^-
  4. 小さい方の順位和( W = \min(W^+, W^-) )をW統計量とする
    - 差がすべて正 → W^- = 0のため、W = \min(W^+, W^-) = 0となる
    - 差がすべて負 → W^+ = 0のため、W = \min(W^+, W^-) = 0となる

  5. W統計量に対するp値を算出

    • サンプル数(≒ペア数)が少ない(n ≤ 20)場合 → 正確なp値(exact)を使う
      - すべての可能な符号の組み合わせを列挙し、観測されたW以上(または以下)の確率を計算

    • サンプル数が多い(n > 20)場合 → 正規近似(Z変換)でp値を求める
      - W統計量は中心極限定理[2]により正規分布に近似できる

    → p値が有意水準(例:0.05)未満なら、有意な差があると判断
      差が混在していると差は偶然とみなされやすい

実装コード例

Python

from scipy.stats import wilcoxon

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

# Wilcoxonの符号順位検定
stat, p_val = wilcoxon(before, after, method='auto', zero_method='wilcox')
print(f"W = {stat:.3f}, p値 = {p_val:.3f}")

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

補足1:methodパラメータの指定について
method='auto':データサイズや同点の有無に応じて自動選択(デフォルト)
method='exact':正確な p 値を計算
method='approx':正規近似(Z変換)でp値を計算

補足2:zero_methodパラメータの指定について
zero_method='wilcox':差が0のペアを除外(デフォルト)
zero_method='zsplit':差が0のペアも絶対値が0として含める

注意点・Tips

  • 非正規分布でもOK:差分が正規分布に従う必要はない(ノンパラメトリック検定)
    → 差分が正規分布に近い場合は、t検定の方が検出力が高くなる傾向がある
  • 中央値の差を検定:平均ではなく、差分の符号と順位に基づいて中央値の差を評価
  • 具体的な中央値の値は見ていない:観測値そのものよりも、差の方向(正負)の偏りに注目
  • 外れ値に強い:極端な値の影響を受けにくく、頑健性が高い
  • 差が0のペアは除外される:差分がちょうど0のデータは分析対象外
  • method='exact'は同点(ties)や0差分(zero differences)があると使えないケースがある、
    その場合はapproxへ自動で切り替わる

ケーススタディ

🔗学習効果の評価

関連手法

  • 前提条件の確認
    • Shapiro-Wilk検定(正規性の確認) → 正規性がない/微妙な場合に使用
  • 類似の比較手法
    • 対応のあるt検定(差分が正規分布に従う前提の手法)
    • Mann-Whitney検定(独立2群のノンパラメトリック検定)
    • ブートストラップ法(前提を緩めた有意性や信頼区間の推定手法)

参考リンク・文献

脚注
  1. データが特定の分布(例:正規分布)に従っているという仮定を必要としない統計的検定 ↩︎

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

Discussion