numpy实现PSI指标计算
计算方法
population stability index, 群体稳定性指标,比较特征的分布在两个样本空间内的差异度,计算公式:
参数 | 说明 |
---|---|
分箱内真实(Actual)样本个数占比 | |
分箱内期望(Except)样本个数占比, 在机器学习里就是预测结果 | |
分箱的个数 |
实现代码
import numpy as np def calc_psi(train_proba, test_proba, n_bins=10, eps=1e-6): def calc_ratio(y_proba): y_proba_1d = y_proba.reshape(1, -1) ratios = [] for i, interval in enumerate(intervals): if i == len(interval) - 1: # include the probability==1 n_samples = (y_proba_1d[np.where((y_proba_1d >= interval[0]) & (y_proba_1d <= interval[1]))]).shape[0] else: n_samples = (y_proba_1d[np.where((y_proba_1d >= interval[0]) & (y_proba_1d < interval[1]))]).shape[0] ratio = n_samples / y_proba.shape[0] if ratio == 0: ratios.append(eps) else: ratios.append(ratio) return np.array(ratios) distance = 1 / n_bins intervals = [(i * distance, (i+1) * distance) for i in range(n_bins)] train_ratio = calc_ratio(train_proba) test_ratio = calc_ratio(test_proba) return np.sum((train_ratio - test_ratio) * np.log(train_ratio / test_ratio))
测试
import numpy as np np.random.seed(324) probas = np.random.random(10000).reshape(-1, 1) train_proba = probas[: 8000] test_proba = probas[8000: ] calc_psi(train_proba, test_proba) # output # 0.007639628811739914
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2020-04-19 HTTPS工作流程