2. 坏样本定义与标签体系:逾期天数定义(M0/M1/M2+)、坏账认定标准、样本标签的构建方法

在贷后预警体系中,坏样本的定义与标签体系是数据分析的基石。如果坏样本的定义不清晰、标签体系不统一,后续的模型训练、策略评估和风险监控都将失去准绳。本节将系统讲解逾期天数的标准化定义、坏账认定的核心标准,以及如何构建可落地的样本标签体系。

2.1 逾期天数定义:M0 / M1 / M2+ 标准化

行业通用的逾期阶段划分以 M(Month) 为单位,代表逾期月份数。不同机构可能对 M0、M1、M2 的起止天数有细微差异,但主流标准如下:

逾期阶段 逾期天数范围 常见别名 风险特征
M0 0 天(未逾期) 正常 / 当前 客户处于还款期内,无违约行为
M1 1 ~ 30 天 早期逾期 / 催收初期 客户可能遗忘或临时资金紧张,回收率较高
M2 31 ~ 60 天 中期逾期 客户还款意愿或能力明显下降,需加大催收力度
M3+ 61 天及以上 严重逾期 / 坏账预备 回收率急剧降低,通常进入法催或核销流程
实务提示:部分机构将 M2 定义为 31~90 天,M3 定义为 91~120 天。在构建标签体系时,务必与业务方确认统一的“逾期天数计算口径”(如:是否含宽限期、是否按自然日计算),避免因口径不一致导致样本错标。

2.2 坏账认定标准

坏账认定是标签体系中最关键的决策点。通常从以下三个维度综合判定:

  • 逾期天数阈值:多数机构将 M3+(逾期 ≥ 90 天) 作为坏账认定的核心门槛。部分消费金融产品可能放宽至 M4+(≥ 120 天)。
  • 还款行为特征:客户是否已失联、是否被标记为欺诈、是否已进入法催或核销流程。
  • 资产处置状态:是否已完成核销、是否已转让给第三方催收或资产管理公司。
坏账认定标准示例(某消费金融公司):
✅ 逾期天数 ≥ 90 天(M3+)
✅ 且经 3 次以上有效催收仍无还款动作
✅ 且未被标记为“争议中”或“展期”
✅ 满足以上条件,则认定为“坏账样本”(标签 = 1)

2.3 样本标签的构建方法

构建样本标签的核心目标是:为每个借款账户生成一个明确的“好/坏”标识,用于后续的预警模型训练和策略分析。以下是标准构建流程:

  1. 数据准备:提取借款账户的完整还款计划表、实际还款记录、逾期状态变更日志。
  2. 逾期阶段映射:根据逾期天数将每个账户的每个还款期映射到 M0/M1/M2/M3+ 阶段。
  3. 坏账判定:应用坏账认定标准,标记每个账户是否为坏样本(1 = 坏,0 = 好)。
  4. 观察期与表现期对齐:确定观察期窗口(如:放款后 6 个月)和表现期窗口(如:放款后 12 个月),确保标签与特征时间对齐。
  5. 标签去重与清洗:剔除数据异常、信息缺失或业务规则冲突的样本。
常见陷阱:不要将“当前逾期但后续还清”的账户直接标记为好样本。这类账户属于“逾期修复”样本,应单独归类或使用“滚动率”方法处理,否则会低估坏账率。

2.4 标签体系架构图

以下 SVG 图展示了从原始还款数据到最终样本标签的完整构建流程:

坏样本标签体系构建流程 坏样本标签体系构建流程 原始还款数据 逾期阶段映射 坏账判定 观察期与表现期对齐 标签去重与清洗 最终样本标签 关键说明: • 逾期阶段映射:将每个还款期映射到 M0/M1/M2/M3+,确保天数计算口径统一。 • 坏账判定:基于逾期天数 + 还款行为 + 资产状态综合判定,避免单一指标误判。 • 观察期与表现期对齐:确保特征数据与标签数据在时间上严格对应,防止未来信息泄露。

2.5 标签体系示例代码

以下 Python 代码展示了如何根据逾期天数生成 M 阶段标签和坏账标签:

import pandas as pd
import numpy as np

# 示例数据:借款账户的逾期天数
data = {
    'account_id': ['A001', 'A002', 'A003', 'A004', 'A005'],
    'overdue_days': [0, 15, 45, 95, 120]
}
df = pd.DataFrame(data)

# 定义逾期阶段映射函数
def map_m_stage(days):
    if days == 0:
        return 'M0'
    elif 1 <= days <= 30:
        return 'M1'
    elif 31 <= days <= 60:
        return 'M2'
    else:
        return 'M3+'

# 定义坏账标签(M3+ 且逾期天数 ≥ 90)
def label_bad(row):
    if row['overdue_days'] >= 90:
        return 1
    else:
        return 0

# 生成标签
df['m_stage'] = df['overdue_days'].apply(map_m_stage)
df['bad_label'] = df.apply(label_bad, axis=1)

print(df)

2.6 标签体系质量检查清单

在标签体系构建完成后,建议使用以下清单进行质量检查:

  • 一致性:同一账户在不同时间点的标签是否逻辑自洽?
  • 完整性:所有样本是否都有明确的标签?缺失标签的样本是否已记录原因?
  • 时效性:标签是否基于最新的还款数据生成?是否考虑了展期、延期等特殊状态?
  • 可解释性:业务团队是否理解标签的含义?标签定义文档是否完备?
最佳实践:建议在标签体系中增加一个“标签版本号”字段,每次调整坏账认定标准或逾期天数口径时,生成新版本标签,并保留历史版本。这有助于回溯分析和模型迭代。