4. 标签定义与坏样本标注:逾期标签、欺诈标签、套现标签的定义方法、多标签冲突处理策略
在交易风控建模中,标签(Label)是监督学习的核心目标变量。标签定义的质量直接决定了模型的上限。本章将系统讲解三类核心风险标签——逾期、欺诈、套现——的定义方法,并重点解决多标签冲突时的处理策略。
4.1 逾期标签定义方法
逾期标签是最常见的信用风险标签,通常基于还款行为的时间窗口来定义。定义逾期标签需要明确三个关键参数:观察点、表现期和逾期阈值。
| 参数 | 定义 | 典型取值 | 说明 |
|---|---|---|---|
| 观察点 | 交易发生或贷款发放的时间点 | T+0 | 样本特征提取的基准时间 |
| 表现期 | 观察点之后用于判断是否逾期的时间窗口 | 30天 / 60天 / 90天 | 窗口越长,逾期样本越稳定,但样本量越小 |
| 逾期阈值 | 定义“坏”的最低逾期天数 | 逾期≥30天 | 阈值越高,坏样本纯度越高,但样本量越少 |
实践建议:消费金融场景通常采用“逾期30天+”作为坏样本标签;信用卡场景常用“逾期60天+”;房贷等大额场景可能采用“逾期90天+”。建议同时构建多个表现期标签(如M3+、M6+),用于不同业务目标。
逾期标签的构建步骤:
- 确定观察点:以交易完成日或贷款放款日为T日。
- 设定表现期:例如T+30天、T+60天、T+90天。
- 获取还款记录:在表现期内追踪用户的还款行为。
- 标记逾期状态:若在表现期内未足额还款,则标记为逾期(1),否则为正常(0)。
- 处理截断样本:对于表现期尚未结束的样本,需做截断处理或剔除。
# 逾期标签生成示例(Python伪代码)
import pandas as pd
from datetime import timedelta
def generate_overdue_label(transactions, observation_date, performance_days=30):
"""
生成逾期标签
:param transactions: DataFrame,包含用户ID、交易日期、应还日期、实际还款日期
:param observation_date: 观察点日期
:param performance_days: 表现期天数
"""
end_date = observation_date + timedelta(days=performance_days)
# 筛选观察点之后的还款记录
perf_data = transactions[
(transactions['due_date'] >= observation_date) &
(transactions['due_date'] <= end_date)
]
# 判断是否逾期:实际还款日期 > 应还日期 + 逾期阈值
perf_data['is_overdue'] = (
perf_data['actual_repay_date'] >
perf_data['due_date'] + timedelta(days=30)
).astype(int)
# 按用户聚合,取最大值(只要有一笔逾期即标记为坏)
label = perf_data.groupby('user_id')['is_overdue'].max().reset_index()
label.columns = ['user_id', 'overdue_label']
return label
4.2 欺诈标签定义方法
欺诈标签的定义比逾期标签更复杂,因为欺诈行为具有隐蔽性和滞后性。欺诈标签通常来源于多个渠道的确认信息。
欺诈标签的主要来源:
- 内部风控确认:风控团队通过人工审核确认的欺诈交易。
- 外部黑名单:行业共享黑名单、监管机构公布的欺诈名单。
- 用户投诉/申诉:用户反馈非本人操作的交易。
- 司法数据:公安机关立案的欺诈案件。
- 设备指纹与行为异常:通过设备指纹、生物特征等检测到的异常行为。
| 欺诈类型 | 定义 | 典型标签 | 确认周期 |
|---|---|---|---|
| 账户盗用 | 他人冒用用户身份进行交易 | fraud_account_takeover | 1-7天 |
| 申请欺诈 | 使用虚假身份或资料申请贷款/信用卡 | fraud_application | 7-30天 |
| 交易欺诈 | 利用系统漏洞或伪造交易获利 | fraud_transaction | 1-14天 |
| 团伙欺诈 | 有组织的多人协作欺诈行为 | fraud_syndicate | 30-90天 |
注意:欺诈标签存在严重的“标签延迟”问题。很多欺诈行为在交易发生时无法立即确认,可能需要数周甚至数月才能被识别。因此,在构建欺诈标签时,建议使用“回溯窗口”方法,即给样本留出足够的确认时间(如90天),再打上最终标签。
4.3 套现标签定义方法
套现是指用户通过虚假交易将信用卡额度或消费信贷额度转换为现金的行为。套现标签的定义介于逾期和欺诈之间,既涉及信用风险,也涉及合规风险。
套现行为的典型特征:
- 交易模式异常:整数金额、频繁小额、夜间交易、同一商户重复交易。
- 商户异常:空壳商户、无实际经营场所、交易量与商户规模不匹配。
- 资金流向异常:交易后资金迅速转入个人账户或第三方支付平台。
- 还款行为异常:账单日后立即还款、还款后立即再次消费。
套现标签的构建方法:
- 规则初筛:基于业务规则(如单笔金额≥5000元、同一商户交易次数≥3次/天)筛选疑似套现样本。
- 模型评分:使用套现识别模型对疑似样本进行评分,输出套现概率。
- 人工复核:对高概率样本进行人工审核,确认是否套现。
- 标签固化:将确认的套现样本标记为“套现”(1),其余为“非套现”(0)。
# 套现标签规则初筛示例
def cash_out_rule_filter(transaction):
"""
套现规则初筛
"""
rules = []
# 规则1:交易金额为整数且≥5000
if transaction['amount'] % 100 == 0 and transaction['amount'] >= 5000:
rules.append('amount_rule')
# 规则2:同一商户当日交易次数≥3
if transaction['same_merchant_count_today'] >= 3:
rules.append('merchant_freq_rule')
# 规则3:交易时间在凌晨0-5点
if 0 <= transaction['hour'] <= 5:
rules.append('time_rule')
# 规则4:交易后24小时内还款
if transaction['repay_within_24h'] == 1:
rules.append('repay_rule')
# 命中2条及以上规则则标记为疑似套现
return len(rules) >= 2
4.4 多标签冲突处理策略
在实际业务中,同一个样本可能同时满足多个标签的定义条件,例如一笔交易既逾期又疑似欺诈。多标签冲突的处理是风控样本构建中的关键难点。
常见的多标签冲突处理策略:
| 策略名称 | 方法描述 | 适用场景 | 优缺点 |
|---|---|---|---|
| 优先级规则 | 定义标签优先级(如欺诈 > 套现 > 逾期),冲突时取优先级最高的标签 | 业务有明确的风险等级划分 | 简单易行,但可能丢失信息 |
| 多标签共存 | 保留所有标签,使用多输出模型或多任务学习 | 需要同时识别多种风险 | 信息完整,但模型复杂度高 |
| 标签融合 | 将冲突标签融合为新的复合标签(如“欺诈+逾期”) | 冲突样本具有独特的风险特征 | 可解释性好,但标签空间膨胀 |
| 样本剔除 | 直接剔除存在标签冲突的样本 | 冲突样本极少且难以判断 | 简单但可能引入样本偏差 |
| 人工仲裁 | 由风控专家对冲突样本进行人工判定 | 高价值样本或模型冷启动阶段 | 准确率高,但成本高、效率低 |
最佳实践:建议采用“优先级规则 + 多标签共存”的混合策略。对于大多数样本,使用优先级规则快速处理;对于优先级规则难以判定的边界样本,保留多标签信息,使用多任务学习模型分别预测各类风险。
4.5 标签质量评估与验证
标签定义完成后,必须进行质量评估,确保标签的准确性、稳定性和一致性。
标签质量评估指标:
- 坏样本率:坏样本占总样本的比例。过低的坏样本率(<1%)可能导致模型训练困难。
- 标签稳定性:不同时间窗口下标签分布的一致性。使用PSI(群体稳定性指标)评估。
- 标签一致性:同一批样本在不同标签定义下的重合度。使用Kappa系数评估。
- 标签延迟:从交易发生到标签确认的平均时间。延迟过长会影响模型时效性。
# 标签质量评估示例
def evaluate_label_quality(df, label_col, time_col):
"""
评估标签质量
"""
# 1. 坏样本率
bad_rate = df[label_col].mean()
print(f"坏样本率: {bad_rate:.4f}")
# 2. 标签稳定性(按月)
df['month'] = df[time_col].dt.to_period('M')
monthly_bad_rate = df.groupby('month')[label_col].mean()
print(f"月度坏样本率波动: {monthly_bad_rate.std():.4f}")
# 3. 标签延迟
if 'label_confirm_date' in df.columns:
df['label_delay'] = (df['label_confirm_date'] - df[time_col]).dt.days
print(f"平均标签延迟: {df['label_delay'].mean():.1f}天")
return monthly_bad_rate
常见陷阱:
- 幸存者偏差:只使用已结清或已确认的样本,忽略了表现期未结束的样本。
- 标签泄漏:使用了未来信息来定义标签,导致模型在训练时“看到”了未来。
- 标签不平衡:坏样本率过低(如<0.5%),导致模型难以学习。
- 标签噪声:人工标注不一致或规则定义模糊导致的标签错误。
4.6 本章小结
标签定义是交易风控建模的基石。逾期标签需要明确观察点、表现期和逾期阈值;欺诈标签需要多渠道确认并处理标签延迟;套现标签需要结合规则和模型进行识别。多标签冲突处理是实际业务中的常见挑战,建议采用优先级规则与多标签共存相结合的混合策略。最后,务必对标签质量进行系统性评估,避免因标签问题导致模型效果不佳。