2. A/B测试基础概念
A/B测试(又称分桶测试、对照实验)是风控网关效果评估的核心方法论。其本质是在同一时间维度下,将流量随机划分为实验组(Treatment)与对照组(Control),分别应用新策略(如新的风控模型、规则阈值)与旧策略(基线),通过对比两组的关键业务指标差异,量化新策略的真实效果。
2.1 A/B测试的定义与核心要素
在风控网关场景中,A/B测试遵循以下严格定义:
- 随机化:每个请求(或用户)以概率均等的方式进入实验组或对照组,消除系统偏差。
- 对照:对照组必须保持与线上生产环境完全一致的策略,作为效果比较的基准。
- 单一变量:实验组仅改变待验证的单一策略(如模型版本、规则顺序、阈值参数),其他环境配置保持不变。
- 前置指标:在实验开始前,必须明确定义核心评估指标(如通过率、误杀率、逾期率)。
风控网关A/B测试典型场景: 将10%的流量切至新规则引擎(实验组),90%流量保持旧引擎(对照组),观察24小时内的“交易通过率”与“首逾率”变化。
2.2 假设检验:从业务问题到统计决策
假设检验是A/B测试的统计内核。我们将业务问题转化为两个互斥的统计假设:
| 假设类型 | 符号 | 含义(以风控通过率为例) |
|---|---|---|
| 原假设(零假设) | H₀ | 新策略与旧策略的通过率无显著差异(μ新 = μ旧) |
| 备择假设 | H₁ | 新策略与旧策略的通过率存在显著差异(μ新 ≠ μ旧) |
检验过程遵循“反证法”思想:假设H₀为真,计算在当前样本下观察到如此极端(或更极端)差异的概率——即p值。若p值小于预先设定的显著性水平α(通常取0.05),则拒绝H₀,认为差异具有统计显著性。
风控实践提示: 在风控网关中,α的选取需权衡“误拒风险”(Type I Error)。若α=0.05,意味着即使新旧策略无差异,仍有5%的概率错误地认为新策略有效。对于高敏感场景(如资金损失),建议将α收紧至0.01。
2.3 统计显著性:不是“看起来有差异”就够了
统计显著性(Statistical Significance)回答的是:观察到的差异是否真实存在,还是由随机波动导致。它依赖于三个核心因素:
- 效应量(Effect Size):实验组与对照组指标的绝对差值。效应量越大,越容易被检测为显著。
- 样本量(Sample Size):进入实验的请求数量。样本量越大,统计检验的“分辨率”越高。
- 方差(Variance):指标本身的波动程度。风控指标(如逾期率)通常方差较大,需要更大样本量。
显著性水平α与统计功效(1-β)共同决定了实验的可靠性。下表总结了关键参数:
| 参数 | 符号 | 典型值 | 含义 |
|---|---|---|---|
| 显著性水平 | α | 0.05 / 0.01 | 允许犯“假阳性”错误的概率(误认为有效) |
| 统计功效 | 1-β | 0.80 / 0.90 | 当真实差异存在时,能正确检测出显著性的概率 |
| 最小效应量 | δ | 0.1% ~ 1% | 业务上认为有意义的最小指标变化(如通过率提升0.5%) |
2.4 最小样本量:实验需要跑多久?
最小样本量(Minimum Sample Size)是指在给定α、功效和效应量的前提下,为了获得可靠的统计结论,每组至少需要的样本数量。对于风控网关常见的二分类指标(通过/拒绝、逾期/正常),可使用以下公式估算:
# 最小样本量估算公式(两组等样本量)
# n = (Z_α/2 + Z_β)² * [p₁(1-p₁) + p₂(1-p₂)] / (p₁ - p₂)²
# Python 示例
from scipy import stats
alpha = 0.05 # 显著性水平
beta = 0.20 # 1 - 统计功效
p_control = 0.85 # 对照组通过率
p_treatment = 0.86 # 实验组预期通过率(提升1%)
Z_alpha = stats.norm.ppf(1 - alpha/2)
Z_beta = stats.norm.ppf(1 - beta)
n = (Z_alpha + Z_beta)**2 * (p_control*(1-p_control) + p_treatment*(1-p_treatment)) / (p_control - p_treatment)**2
print(f"每组最小样本量: {int(n)}")
常见误区: 最小样本量是“每组”所需数量,而非总量。若网关日流量为100万,实验组与对照组各需5万样本,则实验仅需运行约半天即可达到统计要求。但若效应量极小(如通过率提升0.1%),样本量需求可能激增至数百万,实验需持续数天。
2.5 置信区间:给出差异的范围
置信区间(Confidence Interval, CI)比单一的p值提供更丰富的信息。它给出了真实效应量可能落入的范围,同时反映了估计的精度。95%置信区间的含义是:如果重复实验100次,其中95次计算出的区间会包含真实的效应量。
对于风控网关的通过率差异(Δ = p新 - p旧),置信区间计算如下:
# 两组率差置信区间(Wald方法)
import numpy as np
n_control = 50000
n_treatment = 50000
p_control = 0.8500
p_treatment = 0.8560
diff = p_treatment - p_control
se = np.sqrt(p_control*(1-p_control)/n_control + p_treatment*(1-p_treatment)/n_treatment)
z = 1.96 # 95%置信水平
ci_lower = diff - z * se
ci_upper = diff + z * se
print(f"通过率差异: {diff:.4f}")
print(f"95%置信区间: [{ci_lower:.4f}, {ci_upper:.4f}]")
解读置信区间时,需关注以下三种情况:
- 区间完全大于0:新策略显著优于旧策略(通过率提升)。
- 区间完全小于0:新策略显著劣于旧策略(通过率下降)。
- 区间包含0:差异不显著,无法拒绝原假设。
实战要点: 在风控网关A/B测试报告中,应同时报告p值和置信区间。p值告知“是否显著”,置信区间告知“效果有多大以及精度如何”。例如:“新模型使通过率提升0.6%(95% CI: [0.3%, 0.9%], p=0.002)”,比单纯说“p<0.05”更具业务指导价值。