卡方检验(Chi-Square Test)是一类基于卡方分布的假设检验方法,常用于检验两个离散变量是否存在关联(独立性检验)、理论分布与观测分布是否一致(适配度检验)、以及在金融风控、医学研究、社会科学调查等领域广泛应用。下面将从理论概念、常见类型及其应用场景、Python 实现等方面对卡方检验做一个系统介绍。
1. 卡方检验概述
卡方检验的统计量通常记作
χ
2
\chi^2
χ2,满足卡方分布(Chi-Square Distribution)。通过计算样本数据与理论假设(或期望频数)的偏离程度,卡方检验可用于判断离散型变量之间是否独立、以及实际观测值与理论期望值之间是否存在显著差异。
在卡方检验中,最常见的有以下两种场景:
卡方独立性检验(Chi-Square Test of Independence):
检验两个分类变量(离散型变量)之间是否存在统计学上的关联。常见于列联表分析(Contingency Table),又称卡方列联表分析。例如,研究“性别”与“是否违约”之间是否有显著关系。 卡方适配度检验(Chi-Square Goodness-of-Fit Test):
检验一组观测值与某一理论分布(或期望比率)是否匹配。例如,某金融机构认为借款人违约率应当符合“某理论比例”,但实际统计发现违约率存在偏差,需要验证差异是否显著。
卡方分布简介
定义:若随机变量
Z
i
∼
N
(
0
,
1
)
Z_i \sim N(0, 1)
Zi∼N(0,1)(独立同分布的标准正态分布),则
X
=
∑
i
=
1
k
Z
i
2
X = \sum_{i=1}^{k} Z_i^2
X=i=1∑kZi2 服从自由度为
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 检验统计量
卡方独立性检验的统计量通常构造如下:
计算列联表中每个单元格的观测频数
O
i
j
O_{ij}
Oij 和 期望频数
E
i
j
E_{ij}
Eij。
期望频数常用“独立性假设”下的估计:
E
i
j
=
(
行合计
)
×
(
列合计
)
样本总量
E_{ij} = \frac{(\text{行合计}) \times (\text{列合计})}{\text{样本总量}}
Eij=样本总量(行合计)×(列合计) 卡方统计量:
χ
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,j∑Eij(Oij−Eij)2
自由度(degree of freedom, df):
d
f
=
(
r
−
1
)
×
(
c
−
1
)
df = (r - 1) \times (c - 1)
df=(r−1)×(c−1) 其中
r
r
r 是行数、
c
c
c 是列数。
根据卡方分布表或 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 检验统计量
设有
k
k
k 种类型的结果,
O
i
O_i
Oi 表示观测频数,
E
i
E_i
Ei 表示理论频数。
卡方统计量:
χ
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=1∑kEi(Oi−Ei)2
自由度:
d
f
=
k
−
1
−
(被估计的分布参数数目)
df = k - 1 - \text{(被估计的分布参数数目)}
df=k−1−(被估计的分布参数数目)
如果理论分布中参数(如均值、方差等)是由数据估计得到的,需要相应地减少自由度。 与卡方分布进行比较或计算 p 值,做出决策:若
χ
2
\chi^2
χ2 较大或 p 值 <
α
\alpha
α,拒绝原假设。
4. Python 中的卡方检验
Python 的 scipy 库中为卡方检验提供了常用的函数,如:
scipy.stats.chi2_contingency:适用于独立性检验和R×C 列联表的分析;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):
初始时将每个取值或小区间视为独立箱;计算卡方值并合并最相似的箱,直到满足预设箱数或卡方阈值。最终得到分箱区间,提升特征区分度。
5.2 贷款违约率差异分析
假设要分析不同性别/年龄段/职业与贷款违约之间的关联;将性别或年龄段(离散区间)与违约情况构成列联表,做卡方独立性检验;若卡方值显著,说明该特征与违约有关,可考虑纳入评分卡或风险模型。
5.3 风险分布对比(适配度检验)
在压力测试或模型监控中,金融机构假设市场波动下的损失分布应符合某风险模型的预测;通过收集实际损失数据并与理论分布做卡方适配度检验,可判断模型在当前市场环境下是否仍然有效。
6. 注意事项与常见误区
期望频数过小:
若在列联表某些格子的期望频数(expected frequency)过小(< 5),卡方检验结果可能不稳定;可考虑合并某些行/列,或使用其他检验(如确切概率检验、Fisher’s Exact Test)。 使用场景:
卡方检验主要适用于分类(离散)变量;连续型变量需要先分箱或离散化,否则无法直接进行卡方检验。 自相关或配对数据:
卡方检验假设样本独立。若数据存在配对、重复测量等,需要用更合适的方法。 检验结果的解释:
拒绝原假设,并不表示两变量具有因果关系,只代表在统计意义上有关联。需要结合业务逻辑或额外实验来判断因果性。 多重检验问题:
在大规模变量筛选(如评分卡建模中),频繁使用卡方检验,会造成多重比较问题,需要调整显著性阈值(如Bonferroni校正)或综合指标选择特征。
7. 总结
卡方检验是一类基于卡方分布的假设检验方法,广泛用于两个离散变量的独立性检验、观测分布与理论分布的适配度检验等场景。在 金融风控 与 评分卡建模 中,常用于:
特征筛选(卡方分箱);差异分析(人口统计特征与违约行为的相关性);模型监控(实际分布与模型预测分布是否相符)。 使用 Python 中的 scipy.stats.chi2_contingency 和 chisquare 可以方便地进行卡方独立性检验和适配度检验。检验结果需注意期望频数是否足够大,并正确解读统计结果。卡方检验只能说明是否存在显著性差异或关联,而不代表因果关系。
如果在实际业务中需要大量进行卡方检验(例如对多种特征变量),建议:
结合 业务理解 判断变量是否具备潜在关联;关注 期望频数 分布;处理 多重检验 所带来的 Type I error 风险;与 其他指标(如 IV 值、信息增益、WOE 等)结合综合评价。
参考与进一步阅读
Scipy 官方文档 - chi2_contingencyScipy 官方文档 - chisquare卡方检验(维基百科)