PSI这个指标我们在风控建模前后都是需要密切关注的,这个指标直接反映了模型的稳定性,对于我们评估模型是否需要迭代有着直接的参考意义。今天我将从下面几方面来介绍一下这个指标。
Index
01 PSI的概念
02 PSI的生成逻辑
03 PSI的业务应用
04 PSI的Python实现
01 PSI的概念
PSI全称叫做“Population Stability Index
”,中文翻译是群体稳定性指标,从风控应用的角度理解就是分组的测试与跨时间稳定性指标。
在我们建模的时候,数据(变量或者模型分)的分组占比分布是我们的期望值,也就是我们希望在测试数据集里以及未来的数据集里,也能够展示出相似的分组分布,我们称之为稳定
。
PSI值没有指定的值域,我们需要知道的是值越小越稳定,一般在风控中会拿0.25
来作为筛选阈值,即PSI>0.25
我们就认定这个变量或者模型不稳定了。好了,那具体PSI怎么计算呢?不急,请接着看下一节。
02 PSI的生成逻辑
按照惯例,我们先把PSI的计算公式放上来:
其中,代表第i组的实际占比(占全部数量),代表第i组的期望占比(也就是训练时或者上线时的分组占比)。我们还是拿之前的《风控ML[5] | WOE前的分箱一定要单调吗》 文章里的数据来举例,具体可以看下面的表:
公式比较简单,在Excel里就可以实现了,结果计算出来PSI为0.018,所以是稳定的。
03 PSI的业务应用
那么有了这个稳定性指标,在具体的风控场景中可以怎么应用呢?我一般会在下面几个场景应用:
1、建模前筛选变量
2、模型上线后监控模型
建模前筛选变量
我们在做评分卡的时候一般都是会选择稳定性比较强的变量,因为模型一般上线后,下一次迭代都要1年后了,所以我们倾向于稳定性强的变量。那一般怎么筛选呢?我们从下面几个步骤来操作:
1)选择训练数据,并且确定变量的最优分箱(具体可以参考上篇关于最优分箱的文章)
[1] 风控建模中的自动分箱的方法有哪些
[2] 3种连续变量分箱方法的代码分享
2)初始化变量的期望占比分布
3)计算变量每个月的变量PSI
4)观察是否有PSI超过0.25的变量,剔除。
模型上线后监控模型
而模型上线后,我们一般会对模型分进行分组,比如A - F,所以我们会去监控模型分的分组稳定性,同样地,模型的入参也一样会监控。
04 PSI的Python实现
我们在前一篇文章(3种连续变量分箱方法的代码分享 )里介绍的自动分箱算法的基础上,基于numpy进行PSI的计算,测试集可以在公众号SamShare的后台输入关键词cut
获取。
import pandas as pd
import numpy as np
import random
import math
from scipy.stats import chi2
import scipy
# 测试数据构造,其中target为Y,1代表坏人,0代表好人。
df = pd.read_csv('./data/autocut_testdata.csv')
print(len(df))
print(df.target.value_counts()/len(df))
print(df.head())
def get_maxks_split_point(data,&