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)
组间均衡性 依赖大样本 强(关键维度可控) 动态调整
机会成本 高(全程均分流量) 中 低(快速收敛到最优)
实现复杂度 低 中 高
风控推荐场景 低风险、大流量验证 强影响因子存在时 策略迭代快、样本成本高
三种分组策略流程对比 完全随机化 用户池 → 50%实验 / 50%对照 分层抽样 按信用等级分层 → 层内随机 多臂老虎机 动态分配流量 → 探索+利用 特点 • 操作简单 • 需大样本保证均衡 • 机会成本高 特点 • 关键维度均衡 • 减少组间干扰 • 需先验知识选择分层变量 特点 • 动态优化流量 • 低机会成本 • 需设置安全护栏

4.5 实战选择建议

  • 样本量 > 50万且无强分层变量 → 完全随机化(成本最低)
  • 存在已知强影响因子(如信用分、渠道) → 分层抽样(保证组间可比性)
  • 策略迭代周期短(周级)、样本获取成本高 → MAB(推荐Thompson Sampling)
  • 合规要求严格(如监管要求组间均衡) → 分层抽样+事后校准
关键原则:无论选择哪种策略,实验前必须进行样本量计算和最小可检测效应(MDE)评估,确保实验有足够的统计功效。风控场景中,建议MDE设定在5%-10%之间,避免因样本不足导致假阴性。