卡方检验(Chi-Square Test)

卡方检验(Chi-Square Test)是一类基于卡方分布的假设检验方法,常用于检验两个离散变量是否存在关联(独立性检验)、理论分布与观测分布是否一致(适配度检验)、以及在金融风控、医学研究、社会科学调查等领域广泛应用。下面将从理论概念、常见类型及其应用场景、Python 实现等方面对卡方检验做一个系统介绍。


1. 卡方检验概述

卡方检验的统计量通常记作 χ 2 \chi^2 χ2,满足卡方分布(Chi-Square Distribution)。通过计算样本数据与理论假设(或期望频数)的偏离程度,卡方检验可用于判断离散型变量之间是否独立、以及实际观测值与理论期望值之间是否存在显著差异

在卡方检验中,最常见的有以下两种场景:

  1. 卡方独立性检验(Chi-Square Test of Independence)

    • 检验两个分类变量(离散型变量)之间是否存在统计学上的关联。
    • 常见于列联表分析(Contingency Table),又称卡方列联表分析
    • 例如,研究“性别”与“是否违约”之间是否有显著关系。
  2. 卡方适配度检验(Chi-Square Goodness-of-Fit Test)

    • 检验一组观测值与某一理论分布(或期望比率)是否匹配。
    • 例如,某金融机构认为借款人违约率应当符合“某理论比例”,但实际统计发现违约率存在偏差,需要验证差异是否显著。

卡方分布简介

  • 定义:若随机变量 Z i ∼ N ( 0 , 1 ) Z_i \sim N(0, 1) ZiN(0,1)(独立同分布的标准正态分布),则
    X = ∑ i = 1 k Z i 2 X = \sum_{i=1}^{k} Z_i^2 X=i=1kZi2
    服从自由度为 k k k 的卡方分布,记作 χ 2 ( k ) \chi^2(k) χ2(k)
  • 性质:卡方分布是一种偏度较大的分布,随自由度增加,它逐渐变得更接近正态分布。

2. 卡方独立性检验(Chi-Square Test of Independence)

2.1 适用场景

  • 用于判定两个离散型变量是否存在统计学上的显著关联;
  • 数据通常以**列联表(Contingency Table)**表示,例如:
事件A_发生事件A_不发生总计
事件B_发生n11n12n1.
事件B_不发生n21n22n2.
总计n.1n.2n…

这里 n 11 , n 12 , n 21 , n 22 n11, n12, n21, n22 n11,n12,n21,n22 表示观测频数。

2.2 原假设与备择假设

  • 原假设 H 0 H_0 H0:两个变量相互独立,即无显著关联;
  • 备择假设 H 1 H_1 H1:两个变量存在依赖关系,即存在显著关联。

2.3 检验统计量

卡方独立性检验的统计量通常构造如下:

  1. 计算列联表中每个单元格的观测频数 O i j O_{ij} Oij期望频数 E i j E_{ij} Eij

    • 期望频数常用“独立性假设”下的估计:
      E i j = ( 行合计 ) × ( 列合计 ) 样本总量 E_{ij} = \frac{(\text{行合计}) \times (\text{列合计})}{\text{样本总量}} Eij=样本总量(行合计)×(列合计)
  2. 卡方统计量:
    χ 2 = ∑ i , j ( O i j − E i j ) 2 E i j \chi^2 = \sum_{i,j} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} χ2=i,jEij(OijEij)2

  3. 自由度(degree of freedom, df):
    d f = ( r − 1 ) × ( c − 1 ) df = (r - 1) \times (c - 1) df=(r1)×(c1)
    其中 r r r 是行数、 c c c 是列数。

  4. 根据卡方分布表或 p 值进行决策。

2.4 决策原则

  • 给定显著性水平 α \alpha α(常见取 0.05),若计算的 χ 2 \chi^2 χ2 统计量对应的 p 值 < α < \alpha <α,则拒绝原假设(认为两变量有关联)。

3. 卡方适配度检验(Chi-Square Goodness-of-Fit Test)

3.1 适用场景

  • 用于检验某个观测频数分布是否与理论分布期望比例一致;
  • 例如:
    • 骰子投掷6种结果的观测比率是否与“均匀分布”匹配;
    • 某金融风控模型预测客户违约率为 5%,但实际观测违约率不同,需要检验差异是否显著。

3.2 原假设与备择假设

  • 原假设 H 0 H_0 H0:观测分布与理论分布无显著差异,或者说观测数据符合理论分布;
  • 备择假设 H 1 H_1 H1:观测分布与理论分布存在显著差异。

3.3 检验统计量

  1. 设有 k k k 种类型的结果, O i O_i Oi 表示观测频数, E i E_i Ei 表示理论频数。

  2. 卡方统计量:
    χ 2 = ∑ i = 1 k ( O i − E i ) 2 E i \chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i} χ2=i=1kEi(OiEi)2

  3. 自由度
    d f = k − 1 − (被估计的分布参数数目) df = k - 1 - \text{(被估计的分布参数数目)} df=k1(被估计的分布参数数目)

    • 如果理论分布中参数(如均值、方差等)是由数据估计得到的,需要相应地减少自由度。
  4. 与卡方分布进行比较或计算 p 值,做出决策:若 χ 2 \chi^2 χ2 较大或 p 值 < α \alpha α,拒绝原假设。


4. Python 中的卡方检验

Python 的 scipy 库中为卡方检验提供了常用的函数,如:

  1. scipy.stats.chi2_contingency:适用于独立性检验R×C 列联表的分析;
  2. scipy.stats.chisquare:适用于适配度检验(一维频数对比),也可用于单行或单列的列联分析。

4.1 独立性检验示例(chi2_contingency)

import numpy as np
from scipy.stats import chi2_contingency

# 1. 构造列联表数据
# 假设我们想研究“是否逾期”与“性别”之间是否相关
# 行:性别 (Male / Female)
# 列:是否逾期 (Overdue / NotOverdue)
contingency_table = np.array([
    [30, 70],  # 男性: 逾期=30, 未逾期=70
    [20, 80]   # 女性: 逾期=20, 未逾期=80
])

# 2. 进行卡方独立性检验
chi2, p_value, dof, expected = chi2_contingency(contingency_table)

print("Chi-square statistic:", chi2)
print("p-value:", p_value)
print("Degrees of freedom:", dof)
print("Expected frequencies:\n", expected)
  • 输入contingency_table 是 2×2 的列联表。
  • 输出
    • chi2:卡方检验统计量;
    • p_value:显著性水平下的 p 值;
    • dof:自由度;
    • expected:理论频数(若变量独立的话)。

如果 p_value < 0.05(例如),可拒绝原假设,认为性别与逾期存在显著关联。

4.2 适配度检验示例(chisquare)

import numpy as np
from scipy.stats import chisquare

# 1. 观测频数
observed = np.array([50, 30, 20])  # 某三类情况的观测频数

# 2. 理论频数(期望频数)
expected = np.array([45, 35, 20])  # 理论上或经验上预估的频数

# 3. 卡方适配度检验
chi2_stat, p_value = chisquare(f_obs=observed, f_exp=expected)

print("Chi-square statistic:", chi2_stat)
print("p-value:", p_value)
  • p_value < 0.05,说明观测频数与期望频数差异显著,拒绝“匹配”假设。

5. 卡方检验在金融风控中的应用

5.1 特征筛选(变量分箱与卡方分箱)

评分卡建模中,常见做法是对连续变量进行分箱(将取值范围分成多个区间)。为了衡量分箱后“是否能区分好违约和非违约人群”,会使用卡方分箱(Chi-square Binning):

  1. 初始时将每个取值或小区间视为独立箱;
  2. 计算卡方值并合并最相似的箱,直到满足预设箱数或卡方阈值。
  3. 最终得到分箱区间,提升特征区分度。

5.2 贷款违约率差异分析

  • 假设要分析不同性别/年龄段/职业贷款违约之间的关联;
  • 将性别或年龄段(离散区间)与违约情况构成列联表,做卡方独立性检验;
  • 若卡方值显著,说明该特征与违约有关,可考虑纳入评分卡或风险模型。

5.3 风险分布对比(适配度检验)

  • 压力测试模型监控中,金融机构假设市场波动下的损失分布应符合某风险模型的预测;
  • 通过收集实际损失数据并与理论分布做卡方适配度检验,可判断模型在当前市场环境下是否仍然有效。

6. 注意事项与常见误区

  1. 期望频数过小

    • 若在列联表某些格子的期望频数(expected frequency)过小(< 5),卡方检验结果可能不稳定;
    • 可考虑合并某些行/列,或使用其他检验(如确切概率检验、Fisher’s Exact Test)。
  2. 使用场景

    • 卡方检验主要适用于分类(离散)变量
    • 连续型变量需要先分箱或离散化,否则无法直接进行卡方检验。
  3. 自相关或配对数据

    • 卡方检验假设样本独立。若数据存在配对、重复测量等,需要用更合适的方法。
  4. 检验结果的解释

    • 拒绝原假设,并不表示两变量具有因果关系,只代表在统计意义上有关联。
    • 需要结合业务逻辑或额外实验来判断因果性。
  5. 多重检验问题

    • 在大规模变量筛选(如评分卡建模中),频繁使用卡方检验,会造成多重比较问题,需要调整显著性阈值(如Bonferroni校正)或综合指标选择特征。

7. 总结

  • 卡方检验是一类基于卡方分布的假设检验方法,广泛用于两个离散变量的独立性检验观测分布与理论分布的适配度检验等场景。
  • 金融风控评分卡建模 中,常用于:
    1. 特征筛选(卡方分箱);
    2. 差异分析(人口统计特征与违约行为的相关性);
    3. 模型监控(实际分布与模型预测分布是否相符)。
  • 使用 Python 中的 scipy.stats.chi2_contingencychisquare 可以方便地进行卡方独立性检验和适配度检验。
  • 检验结果需注意期望频数是否足够大,并正确解读统计结果。卡方检验只能说明是否存在显著性差异或关联,而不代表因果关系

如果在实际业务中需要大量进行卡方检验(例如对多种特征变量),建议:

  1. 结合 业务理解 判断变量是否具备潜在关联;
  2. 关注 期望频数 分布;
  3. 处理 多重检验 所带来的 Type I error 风险;
  4. 其他指标(如 IV 值、信息增益、WOE 等)结合综合评价。

参考与进一步阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值