2. A/B测试基础:统计学原理与假设检验

在金融压力测试场景中,A/B测试是评估策略变更(如风控模型阈值调整、新审批规则上线)是否产生统计显著效果的核心工具。本节将系统梳理A/B测试的统计学基础,确保后续效果评估具备严谨的数学支撑。

2.1 A/B测试的统计学原理

A/B测试本质上是随机对照试验在金融领域的应用。其核心逻辑是:将实验对象(如贷款申请、交易流水)随机分为两组,分别施加不同处理(A组为对照组,B组为实验组),通过比较两组在关键指标(如违约率、通过率、收益率)上的差异,推断处理效果是否真实存在。

统计学原理建立在大数定律与中心极限定理之上:

  • 大数定律:随着样本量增加,样本均值趋近于总体均值,保证实验结果的稳定性。
  • 中心极限定理:无论原始数据分布如何,样本均值的抽样分布近似正态分布,为后续假设检验提供了分布基础。
金融场景提示: 在压力测试中,样本量需满足“最小可检测效应”要求。例如,若预期违约率从5%降至4.5%,需计算所需样本量,避免因样本不足导致“假阴性”。
A/B测试核心流程 A/B测试核心流程 总体(金融样本池) 随机分流 A组(对照组) 现有风控策略 B组(实验组) 新策略/模型 观测指标:违约率/通过率 观测指标:违约率/通过率 统计检验

2.2 假设检验:原假设与备择假设

假设检验是A/B效果评估的决策框架。在金融压力测试中,我们通常关心策略变更是否带来了显著改善。假设检验通过构造两个互斥的假设,并基于样本数据做出判断。

假设类型 符号 定义 金融场景示例
原假设(零假设) H₀ 处理效果不存在,差异由随机波动引起 新风控模型与旧模型的违约率无差异(μ_B - μ_A = 0)
备择假设(对立假设) H₁ 或 Hₐ 处理效果真实存在,差异具有统计意义 新模型违约率显著低于旧模型(μ_B - μ_A < 0)
关键原则: 原假设通常代表“无效果”或“现状”,是受保护的一方。我们通过收集证据来拒绝原假设,从而支持备择假设。在金融监管中,拒绝原假设需要足够强的证据,以避免因误判导致策略错误上线。

2.3 显著性水平与p值

显著性水平(α)和p值是假设检验中量化证据强度的核心工具。

  • 显著性水平(α):预先设定的阈值,表示“原假设为真时错误拒绝它”的最大可接受概率。金融压力测试中常用 α = 0.05 或 α = 0.01。
  • p值:在原假设为真的前提下,观察到当前样本结果(或更极端结果)的概率。p值越小,说明样本数据与原假设的兼容性越差。

决策规则:

  • 若 p ≤ α → 拒绝 H₀,认为效果统计显著。
  • 若 p > α → 无法拒绝 H₀,认为差异不显著。
p值与显著性水平决策逻辑 p值与显著性水平决策逻辑 拒绝域 α/2 拒绝域 α/2 接受域 1 - α p值 决策规则 p ≤ α → 拒绝 H₀(效果显著) | p > α → 无法拒绝 H₀

2.4 两类错误与金融风控权衡

在假设检验中,错误不可避免。理解两类错误及其在金融场景中的代价至关重要。

错误类型 定义 统计符号 金融风控代价
第一类错误(假阳性) 原假设为真时错误拒绝(误判有效) α(显著性水平) 上线无效策略,增加坏账风险或误拒优质客户
第二类错误(假阴性) 原假设为假时错误接受(漏判有效) β 错过优化机会,维持低效策略,损失潜在收益
风控实践警示: 在压力测试中,降低α(如从0.05降至0.01)会减少假阳性,但会增加β(降低统计功效)。需根据业务风险偏好平衡:对于高风险策略(如大幅放宽授信),建议采用更严格的α;对于低风险优化(如UI调整),可适当放宽。

2.5 统计功效与样本量规划

统计功效(1 - β)表示当备择假设为真时,正确拒绝原假设的概率。金融A/B测试中,通常要求功效 ≥ 0.8。

影响功效的关键因素:

  1. 效应量(Effect Size):预期差异大小。效应量越大,功效越高。
  2. 样本量(n):样本越多,功效越高。
  3. 显著性水平(α):α越宽松,功效越高(但假阳性风险增加)。
  4. 数据变异性(σ):数据波动越小,功效越高。
样本量估算公式(两独立样本均值检验):
n = (Zα/2 + Zβ)² × 2σ² / Δ²
其中,Δ为最小可检测差异,σ为总体标准差,Z为对应分位数。

在金融压力测试中,建议在实验设计阶段即完成样本量计算,避免因样本不足导致结果不可靠。常见工具包括Python的statsmodels.stats.power模块或R语言的pwr包。

# Python 样本量计算示例(两样本比例检验)
from statsmodels.stats.proportion import proportion_effectsize
from statsmodels.stats.power import zt_ind_solve_power

# 参数:预期对照组违约率5%,实验组降至4%,α=0.05,功效=0.8
effect_size = proportion_effectsize(0.05, 0.04)
n = zt_ind_solve_power(effect_size=effect_size, alpha=0.05, power=0.8, alternative='smaller')
print(f"所需每组样本量: {int(n)}")
# 输出:所需每组样本量: 约 10700

2.6 本章小结