跳至正文

业务3:金融风控的账户逾期分析

最近在学习消费金融业务下的风控分析,虽然还没有完全理解和掌握,其中的一些内容已经深刻地影响了对其他行业的理解。其中最为典型的是借助于风控逾期分析而构建的零售客户迁徙分析模型。

【补充】最近在知乎上发现一篇文章,非常好,帮助我系统理解了很多基础概念。参考信贷风控中Vintage、滚动率、迁移率的理解

一、消费金融中的逾期期间

和通常的储蓄账户不同,对贷款账户而言,银行要随时监控贷款账户的负债,避免损失。因此,余额的动态监控和状态分类,就是消费金融业务中的基本场景。比如如下所示的银行账户,假设每月10日应该偿还20元,有一天没有偿还,那么它的状态就从“正常还款账户”进入了“逾期还款账户”。

账户日期账户余额(欠)备注
A001账户2021/5/10100正常还款
A001账户2021/6/1080正常还款
A001账户2021/7/1060正常还款
A001账户2021/8/1060(dpd=1)逾期账户
A001账户2021/8/1160(dpd=2)逾期账户
A001账户2021/8/1260(dpd=3)逾期账户

这里的“状态”是对账户在特定时期的特征描述,它在单行上有意义,因此可以视为业务字段标签。

上述的“账户状态”还可以分为更多的类型,正如前文所述(业务02:金融行业中的贷后管理),至少可以分为:正常还款、提前结清EPO、逾期还款三个类型,其中提前结清又可以分为全部提前结清、部分提前结清,逾期还款随着时间可以表示为逾期不还和逾期偿还等。提前结清改日单独描述,这里把逾期还款进一步细分。

根据客户逾期还款的天数、金额、频次等,可以对客户进一步做分类或者评分标记。业务分析通常以“逾期天数”(dpd=due past day)为分类标准,天数以30天为间隔分段,称之为“逾期期间”(bucket)。

逾期期间通常简化为:

  • C:表示未逾期,C代表正常在贷Current,对应逾期天数dpd=0
  • M1:逾期天数大于0、小于30的逾期区间,表示逾期一个月时长
  • M2:如果M1账户一直没有偿还,超过30天进入M2阶段,同时逾期天数小于60天因此M2是M1的延续
  • M2+:M2+代表逾期天数超过30天的,包括M2,M3,M4等更高逾期阶段

逾期期间,严格来说是对dpd逾期天数的分组,它和之前的账龄MOB意义截然不同,虽然有时候共用了M1,M2这样的简化名称,甚至有时候都称之为MOB。在这里,站在观察点上看到账户状态,逾期30天之内(因为还没有到下一期)标记为M1,这之前未逾期状态标记为M0(对应逾期天数dpd=0)。结合账户账龄,逾期发生在账户账龄第三期,因此可以说逾期M1@MOB3,即在账龄3期发生了一笔M1状态逾期。

二、基于逾期期间的迁徙变化A

上面仅仅是以特定观察点的视角,如果增加前后时间点的对比,比如从期初到当前的账户逾期变化,那么就是账户逾期的迁徙分析。典型的业务问题如:

  • 有多少账户从期初的正常还款账户流入到M1逾期账户?
  • 本月新增了多少M2+账户?(注意M2+可能来自于C,可能来自于M1)
  • 相对于期初的贷款余额,当前M1~5逾期期间的剩余还款本金比例是多少?

基于此,之前的字段加上时间角度,就是账户的迁徙变化了。常见指标如C-M1%,代表期初C账户的账户数量,有多少比例在观察日期迁徙到了M1逾期状态。当然,这里的比例可以是账户数量,也可以是账户余额。

常见几个指标类型一览如下:

指标指标说明指标简介(基于金额视角)
 C-M1C-M1%比率截止统计日M1账户金额 / 上月底C账户金额
M1-M2 预测月底M2账户金额/上月底M1账户金额
M2-M3 预测月底M3账户金额/上月底M2账户金额
C- M2C- M2%累计比率当期C- M1,M1-M2两者相乘
首逾比率首期逾期的账户比率(相对于期初所有新增放款账户)

按照《业务可视化分析》一书中“第三字段分类”的视角,之前的M1,M2 是基于数据明细的业务字段,是基于数据行的业务标签;这里的C- M1则是完全的分析字段,这类指标在数据明细中完全没有无意义,仅在特定的问题层次上方有意义。比如当前月份的C- M1,某产品在当月的C- M1等。

另外,这个指标计算需要有特定的数据要求,从而完成前后的对比分析。因此要么增加对比期间的数据列,要么保留对应的数据行。

先看推荐的数据结构:用数据切片的方式,记录每个账户每天的余额状态和逾期状态。由于数据量非常大,业务中通常会记录一部分时间,或者取最近每天和历史每月期末的时点值。如下图所示:

如上图所示,假设观察日期为7月25日,站在这个时间点回望所有账户的过去发展,发现有一个账户001上月发生了逾期(应该7月20日偿还第二期20元,但是没有偿还),因此7月25日标记逾期5天,账户余额依然是80元。 这是一个从期初账户逾期状态M0,发展到当前账户逾期状态M1 的过程。

而账户002则是正常账户,它偿还了首期,正常减少了余额。逾期状态在期初是M0,在当前也是M0.

如果要计算C- M1 的指标,就是期初的正常账户数量(2个),发展为M1账户的比率(1/2)。

因此,计算C- M1比率的关键是分别计算分子和分母,虽然都是相同的聚合类型countd([账户ID]),但是它们对应不同的切片日期,前者对应观察日期2021年7月25日,后者对应上个月的期末日期2021年6月30日。也正因为此,我们不能贸然把切片日期添加到筛选器,而应该选择一条曲折的道路:借助辅助列在聚合中增加筛选条件。

喜乐君这里缺少合适的数据源,因此这里写一下逻辑如下:

C -M1 %

=(当前日期,且逾期状态=M1的账户数 )/(上月期末,且逾期状态=M0的账户数)

=COUNTD( IIF (切片日期=2021/7/25 AND 逾期状态=’M1′, 账户ID, null) ) /

COUNTD( IIF(切片日期=2020/6/30 AND 逾期状态=’M0, 账户ID, null) )

注意,再不改变数据结构的前提下,这个方法是逻辑清晰而简单理解的最佳方式,它充分使用了行级别函数增加辅助列标签,然后结合聚合计算完成不对称的数据的对比计算。

同时,如果领导希望每次打开自动查看数据表最后日期的C- M1比率,那么就需要替换上面的观察日期和上月期末日期。使用Tableau的方法也异常简单,喜乐君通常有两个字段来替换:

  • max数据日期 = { MAX(切片日期) }
  • 上月期末日期 = max数据日期 – DAY(max数据日期

注意,由于上面的计算中,默认只会使用到最后日期和上期期末日期,为了防止行级别函数过多的计算对性能产生的上海,喜乐君强烈建议最后做一下数据样本的调整。这里可以增加一个筛选器字段:

「tf保留当期和期初数据 」

切片日期 = max数据日期 OR 切片日期 = 上月期末日期

喜乐君最近见某知名partner其网站上的一片文章,通常只关注实现,不关注性能,缺少最后这一段优化的过程,是极不推荐的。

那有没有一种更好的方法,避免这里的行级别计算函数带来的性能障碍,也不需要做日期的额外判断选择呢?这就需要在数据底层优化数据结构,把对比的部分预先增加到列。本质上并没有改变什么,只是把行级别计算和对比,预先在数据准备的环节完成而已。

三、基于逾期期间的迁徙变化B

为了避免上述的复杂性,IT通常帮助大家把上述的计算预先在ET L环节完成,可以想象把每个账户的上月期末(即当月期初)数据增加为多个列。就有了如下的明细结构。

账户切片日期账户余额(欠)当前逾期状态期初逾期状态期初余额
A001账户2021/5/31100M0
A001账户2021/6/6080M0M0100
A001账户2021/7/2580M1M080
A001账户2021/6/3020M0
A001账户2021/7/2515M0M115

但是,这样并没有简化问题,只是把计算从可视化阶段转移到了数据准备阶段,并没有根本的性能改善。所以IT通常会做进一步的优化,特别是聚合层次的调整。

默认这里是没有聚合的,而只是基于join连接的数据合并。考虑到逾期迁徙中,领导并不关心每个账户的具体情况,那么就可以把账户聚合到一个更高的起点,比如各销售分支机构、各个产品、不同渠道在每个切片日期,不同逾期状态的账户数、贷款余额、期初贷款余额等。

在实际业务中,考虑到逾期期间又多以M0、M1、M2、M3、M4、M5、M6+为分割,这样就进一步减少了逾期期间的分类数量。

更一步为了比较期初M0和当前M1的变化,还可以把不同行的逾期期间,转置为列。于是就有了这样的数据结构:

机构产品切片日期初M0金额期初M1金额……当前M0金额当前M1金额……
………………
…………

基于这样的数据结构,账户的ID就消失了,取而代之的是在特定维度层次上的中间表。这种中间表能进一步向上聚合,但是不能向下拆分。

后期有合适的数据,喜乐君会在这里写完更多的逻辑,把可视化环节也分享于此。

喜乐君

@Aug 28, 2021


了解 喜乐君 的更多信息

订阅后即可通过电子邮件收到最新文章。

了解 喜乐君 的更多信息

立即订阅以继续阅读并访问完整档案。

Continue reading