4. A/B测试实验设计:随机化分组策略、分层抽样与区组设计、多臂老虎机(MAB)在风控中的初步应用
在金融风控模型上线前,实验设计的科学性直接决定了A/B测试结论的可靠性。本章聚焦三种核心分组策略:完全随机化、分层抽样与区组设计,以及前沿的多臂老虎机(MAB)方法。我们将从原理、适用场景、代码实现三个维度展开,帮助你在风控场景中做出最优选择。
4.1 完全随机化分组(Simple Randomization)
完全随机化是最基础的分组策略,每个用户以固定概率(通常50%)被分配至实验组或对照组。其核心优势在于操作简单、无偏估计,但在风控场景中容易因样本量不足或用户异质性导致组间不均衡。
适用条件:样本量 > 10万,且用户特征分布相对均匀;常用于低风险策略的快速验证(如文案优化、非核心规则调整)。
4.1.1 随机化分组代码示例(Python)
import pandas as pd
import numpy as np
def simple_randomization(df, seed=42):
np.random.seed(seed)
df['group'] = np.random.choice(['control', 'treatment'], size=len(df), p=[0.5, 0.5])
return df
# 使用示例
user_data = pd.DataFrame({'user_id': range(1, 100001)})
user_data = simple_randomization(user_data)
print(user_data['group'].value_counts())
4.2 分层抽样与区组设计(Stratified & Blocked Design)
当用户群体中存在强影响因子(如信用评分等级、历史逾期率、渠道来源)时,完全随机化可能导致这些因子在组间分布不均。分层抽样先将用户按关键特征划分为若干层(Strata),再在每层内独立进行随机化分组,从而保证组间在关键维度上均衡。
| 维度 | 分层变量示例 | 分层目的 |
|---|---|---|
| 信用风险 | 信用评分(A/B/C/D) | 避免高、低风险用户集中在一组 |
| 历史行为 | 近3月逾期次数(0/1/≥2) | 控制历史表现对实验结果的干扰 |
| 渠道来源 | APP/网页/第三方导流 | 消除渠道用户质量差异 |
4.2.1 分层抽样代码示例
def stratified_randomization(df, strata_cols, seed=42):
np.random.seed(seed)
df['group'] = None
for _, group_df in df.groupby(strata_cols):
n = len(group_df)
indices = group_df.index
n_treatment = int(n * 0.5)
treatment_indices = np.random.choice(indices, size=n_treatment, replace=False)
df.loc[treatment_indices, 'group'] = 'treatment'
df.loc[~df.index.isin(treatment_indices) & df.index.isin(indices), 'group'] = 'control'
return df
# 假设已有信用评分等级列 'credit_grade'
user_data['credit_grade'] = np.random.choice(['A','B','C','D'], size=len(user_data))
user_data = stratified_randomization(user_data, ['credit_grade'])
区组设计(Blocked Design)是分层抽样的进阶形式:将相似用户组成区组(Block),在区组内随机分配实验/对照。风控中常用于“同额度、同期限”的贷款申请分组,确保每组申请结构一致。
4.3 多臂老虎机(MAB)在风控中的初步应用
传统A/B测试在实验期间会持续将流量分配给表现较差的策略,造成机会成本。多臂老虎机(Multi-Armed Bandit)通过动态调整流量分配,在探索(Exploration)与利用(Exploitation)之间取得平衡,尤其适合风控中策略迭代频繁、样本成本高的场景。
4.3.1 MAB核心算法对比
| 算法 | 核心思想 | 风控适用场景 | 收敛速度 |
|---|---|---|---|
| Epsilon-Greedy | 以概率ε随机探索,1-ε选择当前最优 | 低风险策略快速验证 | 中等 |
| UCB(Upper Confidence Bound) | 选择置信区间上界最高的臂 | 高不确定性策略(如新模型) | 较快 |
| Thompson Sampling | 基于贝叶斯后验概率采样 | 逾期率预估、额度调整 | 快 |
4.3.2 Thompson Sampling 代码示例(风控逾期率优化)
import numpy as np
class ThompsonSampling:
def __init__(self, n_arms):
self.n_arms = n_arms
self.alpha = np.ones(n_arms) # 成功次数(如未逾期)
self.beta = np.ones(n_arms) # 失败次数(如逾期)
def select_arm(self):
samples = [np.random.beta(a, b) for a, b in zip(self.alpha, self.beta)]
return np.argmax(samples)
def update(self, arm, reward):
# reward=1 表示未逾期,0表示逾期
if reward == 1:
self.alpha[arm] += 1
else:
self.beta[arm] += 1
# 模拟3个策略的逾期率
mab = ThompsonSampling(n_arms=3)
true_overdue_rates = [0.05, 0.08, 0.03] # 策略0、1、2的真实逾期率
for _ in range(10000):
arm = mab.select_arm()
reward = 1 if np.random.rand() > true_overdue_rates[arm] else 0
mab.update(arm, reward)
print("各臂被选次数:", mab.alpha + mab.beta - 2)
风控MAB使用注意:MAB在探索阶段可能将流量分配给高逾期风险的策略,需设置安全护栏(如最大逾期率阈值、实时监控告警)。建议在低风险额度策略或非核心审批规则上先行试点。
4.4 三种分组策略对比总结
| 维度 | 完全随机化 | 分层抽样/区组设计 | 多臂老虎机(MAB) |
|---|---|---|---|
| 组间均衡性 | 依赖大样本 | 强(关键维度可控) | 动态调整 |
| 机会成本 | 高(全程均分流量) | 中 | 低(快速收敛到最优) |
| 实现复杂度 | 低 | 中 | 高 |
| 风控推荐场景 | 低风险、大流量验证 | 强影响因子存在时 | 策略迭代快、样本成本高 |
4.5 实战选择建议
- 样本量 > 50万且无强分层变量 → 完全随机化(成本最低)
- 存在已知强影响因子(如信用分、渠道) → 分层抽样(保证组间可比性)
- 策略迭代周期短(周级)、样本获取成本高 → MAB(推荐Thompson Sampling)
- 合规要求严格(如监管要求组间均衡) → 分层抽样+事后校准
关键原则:无论选择哪种策略,实验前必须进行样本量计算和最小可检测效应(MDE)评估,确保实验有足够的统计功效。风控场景中,建议MDE设定在5%-10%之间,避免因样本不足导致假阴性。