psi指标

浏览: 4348
群体稳定性指标(population stability index)
公式: psi = sum((实际占比-预期占比)* ln(实际占比/预期占比))
举个例子解释下,比如训练一个logistic回归模型,预测时候会有个类概率输出,p。在你的测试数据集上的输出设定为p1,将它从小到大排序后将数据集10等分(每组样本数一直,此为等宽分组),计算每等分组的最大最小预测的类概率值。
现在你用这个模型去对新的样本进行预测,预测结果叫p2,利用刚才在测试数据集上得到的10等分每等分的上下界。按p2将新样本划分为10分(不一定等分了哦)。
实际占比就是新样本通过p2落在p1划分出来的每等分界限内的占比,预期占比就是测试数据集上各等分样本的占比。
意义就是如果模型更稳定,那么在新的数据上预测所得类概率应该更建模分布一致,这样落在建模数据集所得的类概率所划分的等分区间上的样本占比应该和建模时一样,否则说明模型变化,一般来自预测变量结构变化。通常用作模型效果监测。
一般认为PSI小于0.1时候模型稳定性很高,0.1-0.2一般,需要进一步研究,大于0.2模型稳定性差,建议修复。

def plot_psi(actual,expected,title = 'PSI',quant=10):
minv = min(min(actual),min(expected))
maxv = max(max(actual),max(expected))
step = 1.0*(maxv-minv)/quant
acnt = []
ecnt = []
s,e = minv,minv+step
act = np.array(actual)
ex = np.array(expected)

while e <= maxv:
acnt.append(((act>=s) & (act < e)).sum())
ecnt.append(((ex>=s )& (ex < e)).sum())
s = e
e = e+step

arate = np.array(acnt)/ len(actual)
erate = np.array(ecnt)/ len(expected)

arate[arate==0] = 0.000001
erate[erate==0] = 0.000001

psi = np.sum((arate - erate)*np.log(arate/erate))
#psi = psi.sum()

x1 = np.linspace(0,len(acnt)-1,len(acnt)) - 0.2
x2 = np.linspace(0,len(acnt)-1,len(acnt)) + 0.2
plt.bar(x1, arate*100, alpha=0.9, width = 0.4, facecolor = 'orange', edgecolor = 'white', label='Actual', lw=0.2)
plt.bar(x2, erate*100, alpha=0.9, width = 0.4, facecolor = 'lightblue', edgecolor = 'white', label='Expected', lw=0.2)
plt.legend()
plt.suptitle(title)
plt.title('({})'.format(psi))
ax = plt.axes()
from matplotlib.ticker import FormatStrFormatter
ax.yaxis.set_major_formatter(FormatStrFormatter('%.0f%%'))
plt.show()
return psi


公式: psi = sum((实际占比-预期占比)*ln(实际占比/预期占比)),和 IV的计算公式一样,和交叉熵的作用类似。
举个例子解释下,比如训练一个提升树模型,预测时候会有个概率输出p。你测试集上的输出设定为p1吧,将它从小到大排序后20等分,如0-0.05,0.05-0.1,......。
现在用这个模型去对新的样本进行预测,预测结果叫p2,按p1的区间也划分为20等分。
实际占比就是p2上在各区间的用户占比,预期占比就是p1上各区间的用户占比。
意义就是如果模型跟稳定,那么p1和p2上各区间的用户应该是相近的,占比不会变动很大,也就是预测出来的概率不会差距很大。
至于为什么分20箱呢,其实是和卡方有关。分成20箱的阈值是0.25.
一般认为psi小于0.1时候模型稳定性很高,0.1-0.25一般,大于0.25模型稳定性差,建议重做。





推荐 0
本文由 糖美美 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册