前言
最近在研究如何存储和查询十亿数据的事情 突然插了一档子事 公司让我临时救个🔥 python算法需求比较多 人手紧缺 让我来弄个算法需求 计算PSI 我一听懵逼了 啥是PSI 临危受命 不行也得上啊
PSI知识储备
简介
PSI反映了验证样本在各分数段的分布与建模样本分布的稳定性 在建模中,我们常用来筛选特征变量、评估模型稳定性 稳定性是有参照的 因此需要有两个分布——实际分布(actual)和预期分布(expected) 在建模时通常以训练样本(In the Sample, INS)作为预期分布 而验证样本通常作为实际分布
大白话解释
训练数据中的标签列即y列 表示实际数据 训练数据用于模型训练 得到一个模型 用该模型进行数据预测 预测出来的y列即预期数据 将实际数据和预期数据进行同样的分段 每一段内分别计算数据分布 然后比较 用来反映模型的稳定性
必要性
风控 稳定性压倒一切 一套风控模型 通常一年以上 才会被替换下线 如果模型不稳定 意味着模型不可控 对于业务本身而言就是一种不确定性风险 直接影响决策的合理性 直观理解上的系统稳定 通常是指某项指标波动小(低方差) 指标曲线几乎是一条水平的直线 此时就会觉得系统运行正常稳定 很有安全感
变异系数cv
变异系数 cv 来衡量这种数据波动水平 变异系数越小,代表波动越小,稳定性越好
变异系数 C·V =( 标准偏差 SD / 平均值Mean )× 100%
只用变异系统来表示稳定性是不够的
因为实际中由于受到客群变化(互金市场用户群体变化快) 数据源采集变化(比如爬虫接口被风控了)等等因素影响 实际样本分布将会发生偏移 就会导致模型不稳定 所以才需要PSI
PSI公式
计算步骤
步骤一
将变量预期分布(excepted)进行分箱(binning)离散化 统计各个分箱里的样本占比
分箱方式
分箱可以是等频、等距或其他方式 分箱方式不同,将导致计算结果略微有差异
变量类型
- 连续型变量
对于连续型变量(特征变量、模型分数等) 分箱数需要设置合理,一般设为10或20
- 离散型变量
如果分箱太多可以提前考虑合并小分箱 分箱数太多,可能会导致每个分箱内的样本量太少而失去统计意义 分箱数太少,又会导致计算结果精度降低
步骤二
按相同分箱区间 对实际分布(actual)统计各分箱内的样本占比
步骤三
算各分箱内的A - E和Ln(A / E) 计算index = (实际占比 - 预期占比)* ln(实际占比 / 预期占比)
步骤四
将各分箱的index进行求和,即得到最终的PSI
业务含义
PSI数值越小,两个分布之间的差异就越小,代表越稳定
PSI近似概念相对熵
相对熵/KL散度/信息散度 是两个概率分布间差异的非对称性度量
物理含义
1、当两个随机分布相同时,它们的相对熵为零 当两个随机分布的差别增大时,它们的相对熵也会增大 2、相对熵是一个从信息论角度量化距离的指标 与数学概念上的距离有所差异 数学上的距离需要满足:非负性、对称性、同一性、传递性等 而相对熵不满足对称性
计算公式
在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值
P(x)表示数据的真实分布,而Q(x)表示数据的观察分布
简单理解
概率分布携带着信息,可以用信息熵来衡量 若用观察分布Q(x)来描述真实分布P(x),还需要多少额外的信息量