前言
最近在研究如何存储和查询十亿数据的事情
突然插了一档子事
公司让我临时救个🔥
python算法需求比较多 人手紧缺
让我来弄个算法需求
计算PSI
我一听懵逼了 啥是PSI
临危受命 不行也得上啊
PSI知识储备
简介
PSI反映了验证样本在各分数段的分布与建模样本分布的稳定性
在建模中,我们常用来筛选特征变量、评估模型稳定性
稳定性是有参照的
因此需要有两个分布——实际分布(actual)和预期分布(expected)
在建模时通常以训练样本(In the Sample, INS)作为预期分布
而验证样本通常作为实际分布
![把两个分布重叠放在一起](https://imgkr2.cn-bj.ufileos.com/8a91a91e-4e00-4a56-b1db-73a1fe63a8d3.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=bxCF8lmgCqhHcpKyQ3Kx%252FxymaAo%253D&Expires=1610858819)
大白话解释
训练数据中的标签列即y列 表示实际数据
训练数据用于模型训练 得到一个模型
用该模型进行数据预测 预测出来的y列即预期数据
将实际数据和预期数据进行同样的分段
每一段内分别计算数据分布 然后比较
用来反映模型的稳定性
必要性
风控 稳定性压倒一切
一套风控模型 通常一年以上 才会被替换下线
如果模型不稳定 意味着模型不可控
对于业务本身而言就是一种不确定性风险
直接影响决策的合理性
直观理解上的系统稳定 通常是指某项指标波动小(低方差)
指标曲线几乎是一条水平的直线
此时就会觉得系统运行正常稳定 很有安全感
变异系数cv
变异系数 cv 来衡量这种数据波动水平
变异系数越小,代表波动越小,稳定性越好
变异系数 C·V =( 标准偏差 SD / 平均值Mean )× 100%
只用变异系统来表示稳定性是不够的
因为实际中由于受到客群变化(互金市场用户群体变化快)
数据源采集变化(比如爬虫接口被风控了)等等因素影响
实际样本分布将会发生偏移
就会导致模型不稳定
所以才需要PSI
PSI公式
![](https://imgkr2.cn-bj.ufileos.com/59ff3eb5-6cce-4830-8921-e03e81b6765e.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=mncQwgpPclinJKO2NxwHk%252B6tHt0%253D&Expires=1610859640)
![](https://imgkr2.cn-bj.ufileos.com/e1eb396c-13a3-446f-944b-c92d6df3a80e.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=bN2AL%252BO5GEHQJPMHQp9mUwqsuao%253D&Expires=1610862096)
计算步骤
步骤一
将变量预期分布(excepted)进行分箱(binning)离散化
统计各个分箱里的样本占比
分箱方式
分箱可以是等频、等距或其他方式
分箱方式不同,将导致计算结果略微有差异
变量类型
-
连续型变量
对于连续型变量(特征变量、模型分数等)
分箱数需要设置合理,一般设为10或20
-
离散型变量
如果分箱太多可以提前考虑合并小分箱
分箱数太多&#x