第五篇:风控模型监控预警

目录

1、模型效果指标

2、评分分布表

3、模型稳定性趋势图

4、模型区分度趋势图

5、变量稳定性分析

6、业务效果指标(可选)

7、线上线下误差分析


智能模型由于特征更多、结构更复杂,因此需要持续的更新迭代,通常一个模型的生命周期为3-6个月,因而监控预警在智能模型中显得尤为重要。

监控报表的呈现形式可以一图表为主,方便相关人员快速了解模型现状。

1、模型效果指标

报表的开头可以是模型三大指标(AUC\KS\PSI)的总览,包括跨时段和跨产品线,能够让人们看清模型对于不同时间段和不同产品线下样本的预测能力。由于AUC和KS的计算依赖于贷后表现。因此指标总览这块只能计算满足表现期情况下最近一周/月的模型效果,PSI计算的是这段时间内样本和训练集样本模型的稳定性。

2、评分分布表

评分分布表主要反映了模型在最近一周/月内各个分数区间的样本占比,可以弥补第一项指标总览中由于表现期而导致近期效果无法监控到的问题。表中主要对比了当前模型评分分布和建模时点评分分布的差异(具体数据如建模样本占比、当前样本占比、PSI),如果发现评分有较大波动则需要重点关注,提前与业务侧沟通看是客群变化导致还是模型的效果发生衰退。

3、模型稳定性趋势图

由于表格没有办法展示一段时间内的模型效果,因此还需要折线图来预测人们看清楚模型在时间轴上的变化趋势,这里首先有稳定性的趋势图,横轴是周,纵轴是PSI,反映了模型稳定性随时间的变化。

4、模型区分度趋势图

除了稳定性趋势图之外,还可以绘制区分度(或者其他关键指标)趋势图,同样横轴是满足表现期的周,纵轴是KS(或者其他关键指标),如果KS持续低于阈值一段时间,就需要考虑模型迭代的事宜。

5、变量稳定性分析

除了上述模型方面的监控外,变量方面的监控也是必不可少的。通过观察重要变量的稳定性,可以帮助更好地解释模型不稳定的原因。变量稳定性可以从缺失率和PSI两个方面考虑。

6、业务效果指标(可选)

在实际业务场景中,只监控模型本身还是远远不够的,因为模型的线上效果和使用方式密切相关。在保证策略安全的条件下,可以考虑加入业务指标的监控,例如申请人数、通过人数、通过率、逾期率、召回率等。因为风控策略通常是在模型评分的基础上卡一个阈值,有的时候虽然模型评分整体发生偏移,但是在阈值条件下如果业务指标稳定的话,模型仍然是可以接受的。

7、线上线下误差分析

涉及离线数据服务化的模型,建议加入线上线下误差分析的模块,T+0或者T+1对线上模型服务进行监控,防止出现线上线下数据长时间对不齐的事故。这里要求线上模型服务必须把入参和出参以日志的形式保留下来,方便进行解析和验证。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中可以使用以下函数来计算风险控制模型中的PSI值: 1. `scipy.stats.ks_2samp()`:它是一个Kolmogorov-Smirnov(KS)测试函数,用于比较两个概率分布的相似性。可以使用此函数来计算PSI值。 2. `numpy.histogram()`:它是用于计算频率分布的函数。可以使用此函数来计算每个分箱的频率。 3. `numpy.cumsum()`:它是用于计算累加和的函数。可以使用此函数来计算每个分箱的累计频率。 4. `numpy.abs()`:它是用于计算绝对值的函数。可以使用此函数来计算每个分箱的PSI值。 5. `numpy.sum()`:它是用于计算数组元素总和的函数。可以使用此函数来计算所有分箱的PSI值之和。 下面是一个示例代码,用于计算两个数据集之间的PSI值: ```python import numpy as np from scipy.stats import ks_2samp def calculate_psi(expected, actual, bins=10): # 计算每个分箱的期望频率和实际频率 bins_expected = np.histogram(expected, bins=bins)[0] bins_actual = np.histogram(actual, bins=bins)[0] # 计算每个分箱的累计期望频率和累计实际频率 cum_expected = np.cumsum(bins_expected) cum_actual = np.cumsum(bins_actual) # 计算每个分箱的PSI值,并将所有分箱的PSI值求和 psi = np.sum(np.abs(cum_expected / np.sum(bins_expected) - cum_actual / np.sum(bins_actual)) * np.log((cum_expected / np.sum(bins_expected)) / (cum_actual / np.sum(bins_actual)))) return psi # 示例数据 expected_data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] actual_data = [0.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 11] # 计算PSI值 psi = calculate_psi(expected_data, actual_data) print("PSI值为:", psi) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值