🔍
カイ二乗検定|独立性の検定
概要
カイ二乗検定による独立性の検定とは、
2つのカテゴリ変数の間に関係(独立性)があるかどうかを検定するための検定手法
主な用途
パターン | 説明 | 実務ユースケース |
---|---|---|
カテゴリ変数同士の関連性確認 | 2つのカテゴリ変数が統計的に関連しているかどうかを確認 | 性別と購買有無の関係、都道府県別の満足度分布の違いなど |
複数グループの傾向差比較 | 複数グループ間での傾向に違いがあるかを確認 | A社・B社・C社でアンケート回答分布に違いがあるか、年代別に好みが異なるかなど |
マーケティング施策の効果検証 | 属性別の反応率の違いなどから施策の効果が属性に依存しているかを確認 | メール配信あり・なしと購入率の関係、キャンペーン別に反応が異なるかの確認 |
データ要件
-
変数の型:カテゴリ変数 × カテゴリ変(例:性別×購買有無、年代×イベント参加の有無 など)
-
データ形式:度数データのクロス集計表(2次元)
例:購入有無 有 無 合計 男性 2 1 3 女性 1 2 3 合計 3 3 6 セルの値はカウント
-
前提条件:
- 各セルの期待度数が5以上であることが望ましい(少なすぎると検定の信頼性が下がる)
- データはカテゴリ変数で、数値の大小や連続性は不要
- 観測データは独立している(同じ人が複数回含まれない)
理論
各カテゴリが独立であるという仮定のもとに期待される頻度と観測された頻度の差を評価
- 帰無仮説:2つのカテゴリ変数は独立である(=関係がない)
- 対立仮説:2つのカテゴリ変数は独立でない(=関係がある) ※片側検定は存在しない
【検定の手順】
- クロス集計表を作成(行・列にカテゴリ)
- 各セルに対して、期待度数(行合計 × 列合計 ÷ 全体数)を計算
- 観測度数と期待度数の差を元にカイ二乗統計量を算出
-
自由度 (行数 - 1) × (列数 - 1) のカイ二乗分布に基づいてp値を算出
→ p値が有意水準(例:0.05)未満なら、2変数は独立でないと判断(帰無仮説を棄却)
カイ二乗統計量やp値は実際には
scipy.stats.chi2_contingency()
で計算
実装コード例
Python
import pandas as pd
from scipy.stats import chi2_contingency
# クロス集計表(例)を作成
data = pd.DataFrame({
'性別': ['男性', '女性', '男性', '女性', '男性', '女性'],
'購入有無': ['有', '無', '有', '無', '無', '有']
})
# クロス集計
cross_table = pd.crosstab(data['性別'], data['購入有無'])
# カイ二乗検定
chi2, p, dof, expected = chi2_contingency(cross_table)
print(f"カイ二乗統計量={chi2:.3f}, p値={p:.5f}")
if p < 0.05:
print("→ 有意な関係があります(独立ではありません)")
else:
print("→ 有意な関係は確認できません(独立とみなせます)")
注意点・Tips
-
度数(カウント)データが前提:
割合や連続値では❌ 割合は元となった人数が必要! -
「関係があるか/ないか」だけを判定:
→ 方向を知りたい場合は「標準化残差」等の追加分析を実施 -
期待度数が5未満のセルが多い場合:
→ Fisherの正確確率検定の使用を検討 - 変数のカテゴリ数が多すぎると精度が下がる:カテゴリ数を絞る・統合することも一案
- 有意差だけで判断しない:実務では効果量などを併用して意味のある差かを判断する
ケーススタディ
🔗 クレーム分析
関連手法
- 類似手法
- Fisherの正確確率検定(小サンプル向けのカテゴリ間比較検定)
- 関連手法
- 適合度の検定(1つのカテゴリ変数の理論分布との一致度の差検定)
- McNemar検定(対応のある2群間の変化を検定)
Discussion