3. 坏账率定义与计算
坏账率是衡量信贷资产质量的核心指标。在 Tick 级高频风控场景中,坏账率的计算粒度、判定时效和滚动方式直接影响 PSI 哨兵的监控灵敏度。本节从公式、判定标准和计算口径三个维度展开。
3.1 坏账率公式
坏账率的基本公式为:
坏账率 = (当期认定为坏账的金额) / (当期应还总额或放款总额) × 100%
在 Tick 级数据流中,分母通常取 “当期应还本金总额”(即到期未还且进入催收队列的资产池),分子取 “逾期超过阈值且经判定为不可回收的金额”。高频场景下,公式需按时间窗口(如小时级、分钟级)切片计算:
BadRate(t) = Σ(坏账金额_i) / Σ(应还金额_i) 其中 i ∈ 时间窗口 [t-Δt, t]
| 参数 | 说明 | 高频 Tick 场景建议 |
|---|---|---|
| 坏账金额 | 经判定无法回收的本金 + 利息 + 罚息 | 按 Tick 级事件流实时标记 |
| 应还金额 | 当期应还总额(含正常、逾期、展期) | 使用滑动窗口聚合,避免边界抖动 |
| 时间窗口 Δt | 计算粒度(如 1 小时、1 天) | 建议 1 小时,与 PSI 哨兵对齐 |
关键点: 高频 Tick 场景下,坏账率公式必须与逾期状态机联动,避免将“刚逾期 1 天”的资产误判为坏账。
3.2 坏账判定标准
坏账判定不能仅依赖逾期天数,需结合 “逾期天数 + 催收状态 + 资产回收概率模型” 三重条件。以下是 Tick 级风控常用的判定标准:
- 逾期天数阈值: 通常设定为 M3+(逾期 ≥ 90 天)或 M6+(逾期 ≥ 180 天),高频场景可缩短至 M2+(60 天)以加快出清。
- 催收状态标记: 进入“失联”、“无效承诺”、“拒绝还款”等终态催收队列。
- 回收概率模型: 基于历史 Tick 数据训练的回收率模型,若预测回收概率 < 5%,则自动标记为坏账。
| 判定维度 | 静态坏账标准 | 滚动坏账标准(高频) |
|---|---|---|
| 逾期天数 | ≥ 90 天 | ≥ 60 天(可调) |
| 催收状态 | 人工终审 | 自动规则 + 模型打分 |
| 回收概率 | 无模型 | 实时模型 < 5% |
| 判定时效 | T+1 日终 | 分钟级 Tick 流 |
避坑提示: 高频场景下,判定标准不宜过于激进。建议设置“观察期”缓冲,避免因模型抖动导致坏账率剧烈波动,进而触发 PSI 哨兵误报。
3.3 滚动坏账率与静态坏账率
两种口径在计算逻辑、业务含义和监控用途上存在本质差异。下表对比了核心区别:
| 对比维度 | 静态坏账率 | 滚动坏账率 |
|---|---|---|
| 计算口径 | 固定观察期(如 2025-01 放款) | 连续滚动窗口(如近 30 天放款) |
| 分母 | 固定放款池总额 | 滑动窗口内放款总额 |
| 分子 | 该放款池最终坏账金额 | 窗口内放款在后续观察期产生的坏账 |
| 时效性 | 滞后(需等待放款池成熟) | 实时(随新放款和坏账事件更新) |
| PSI 哨兵适用性 | 不适用(太滞后) | 适用(分钟级更新) |
在 Tick 级 PSI 哨兵中,滚动坏账率 是首选口径。其计算流程如下:
- 设定滚动窗口长度(如 30 天)和更新频率(如每小时)。
- 每次 Tick 事件(新放款、还款、逾期、坏账标记)触发窗口重算。
- 窗口内所有放款按“放款日期”归入对应批次,计算每批次的坏账率。
- 对窗口内各批次坏账率按放款金额加权平均,得到当前滚动坏账率。
滚动坏账率(t) = Σ(批次_i 坏账金额) / Σ(批次_i 放款金额)
其中批次_i ∈ [t - 30天, t]
工程建议: 实现滚动坏账率时,使用 Flink 或 Spark Streaming 维护一个“滑动聚合状态”,避免每次全量扫描历史数据。状态大小 = 窗口长度 × 平均 Tick 事件量,通常可控制在内存可承受范围内。