成为AI产品经理——模型稳定性评估(PSI)
一、PSI作用
稳定性是指模型性能的稳定程度。
上线前需要进行模型的稳定性评估,是否达到上线标准。
上线后需要进行模型的稳定性的观测,判断模型是否需要迭代。
稳定度指标(population stability index ,PSI)。通过PSI指标,我们可以获得不同样本或者不同时间下同一样本在分数段上的分布的稳定性。
PSI的计算公式为:SUM(实际占比-预期占比)*ln(实际占比/预期占比)。
PSI至少有两组分布结果,一组是预期分布结果,一组是实际分布结果。我们期望的是分布情况不要发生很大的变化。
在一个信用评估的业务中,我们将用户的信用等级分为0-100,分数越高,信用越好,我们让分数60以上的人可以进行贷款,60以下的不能进行贷款业务。
我们将上线前的OOT测试结果的分布情况作为预期,将上线后最近抽取的样本结果作为实际分布,下图是预期分布和实际分布在不同分数段的占比情况。

我们可以看出分布占比情况发生了巨大的变化,这对于业务的使用无疑是致命的, 我们可能会使得不能贷款的人员办理了业务,他们有逾期还款的风险,银行会损失很多金钱。
二、PSI的计算
PSI的计算公式为:SUM(实际占比-预期占比)*ln(实际占比/预期占比)。
PSI的计算主要分为三步:
①分箱:等频分箱或等距分箱
②计算实际分布
③计算PSI数值
下面将具体说明这三步:
1.分箱
分箱分为等频分箱和等距分箱。
等频分箱就是令每一个分箱中的样本数量相同。
等距分箱是指每两个区间之间的距离一样多。
数据分箱2——等频、等距分箱_等频分箱法_呆萌的代Ma的博客-CSDN博客
因为我们信用评分模型的稳定性需要看人数分布的波动情况,我们上面案例使用的是等距分箱。
2.计算实际分布
我们已经设置好预期样本,所以只需要计算实际分布。上述案例中我们通过获得近期的用户数据传入模型得到实际的测试结果。然后将测试的结果等距分箱。
3.计算PSI
PSI的计算公式为:SUM(实际占比-预期占比)*ln(实际占比/预期占比)。
这里有一个例子:我们把开发样本占比看成实际占比,把现行样本占比看作预期样本,具体的计算就是下面这个图。

三、PSI范围标准

四、Python计算PSI
import pandas as pd
import numpy as npdef calculate_psi(expected, actual, bins=10):# 离散化数据expected_discrete = pd.cut(expected, bins=bins, labels=False)actual_discrete = pd.cut(actual, bins=bins, labels=False)# 计算每个分箱中的样本数expected_counts = pd.value_counts(expected_discrete)actual_counts = pd.value_counts(actual_discrete)# 计算每个分箱中的占比expected_percentages = expected_counts / len(expected)actual_percentages = actual_counts / len(actual)# 计算 PSIpsi = np.sum((expected_percentages - actual_percentages) * np.log(expected_percentages / actual_percentages))return psi# 示例数据
train_data = np.random.normal(loc=0, scale=1, size=1000)
test_data = np.random.normal(loc=0.2, scale=1, size=1000)# 计算 PSI
psi_value = calculate_psi(train_data, test_data)
print("PSI:", psi_value)
在这个示例中,train_data 和 test_data 是两个数据集,calculate_psi 函数用于计算 PSI。该函数首先将数据进行离散化,然后计算每个分箱的样本占比,最后计算 PSI。
请注意,这只是一个简单的示例,实际应用中可能需要根据数据的特点进行适当的调整。
将数据集导入到 Python 代码中通常使用 Pandas 库,Pandas 提供了灵活且高效的数据结构,特别适用于处理和分析数据。以下是一个简单的示例,演示如何将数据集导入到 Python 代码中:
import pandas as pd# 从CSV文件导入数据集
file_path = 'path/to/your/dataset.csv'
dataset = pd.read_csv(file_path)# 打印数据集的前几行
print(dataset.head())
上述代码假设你的数据集以 CSV 格式存储。如果数据集是以其他格式(例如 Excel、JSON、SQLite 等)存储,Pandas 提供了相应的读取函数,可以根据数据集的格式进行选择。
如果你没有一个实际的数据集,你可以创建一个示例数据集。以下是一个使用 Pandas 创建示例数据集的例子:
import pandas as pd
import numpy as np# 创建一个示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'Salary': [50000, 60000, 75000, 90000]}dataset = pd.DataFrame(data)# 打印数据集
print(dataset)
五、备注
1.PSI不仅在上线前需要关注,还需要在上线后进行监测,因为有些模型可能会随着时间的推移稳定性变差。
2.影响PSI的因素很多,常见的有数据源变化、用户群体变化等等,后期都需要考虑。
参考文献:刘海丰——《成为AI产品经理》 自用,请勿传播
【评分卡入门教程12】模型评估2-PSI值_哔哩哔哩_bilibili
相关文章:
成为AI产品经理——模型稳定性评估(PSI)
一、PSI作用 稳定性是指模型性能的稳定程度。 上线前需要进行模型的稳定性评估,是否达到上线标准。 上线后需要进行模型的稳定性的观测,判断模型是否需要迭代。 稳定度指标(population stability index ,PSI)。通过PSI指标,我们可以获得不…...
操作系统——进程同步
目录 一、信号量相关函数 1. 创建信号量集 2. 获取信号量集 3. 等待、通知信号量集 4. 控制信号量集 二、简单进程同步 1. 创建信号量集 2. P操作 3. V操作 4. 删除信号量集 5. 测试: 三、生产者与消费者 1. 创建、删除共享内存及信号量集 2. 单一生产…...
如何能够对使用ShaderGraph开发的Shader使用SetTextureOffset和SetTextureScale方法
假设在ShaderGraph中的纹理的引用名称为"_BaseMap",同时对这个"_BaseMap"纹理使用了采样的节点"SampleTexture2D",然后该采样节点的uv接入的TilingAndOffset节点,此时的关键步骤是新建一个Vector4属性…...
力扣572:另一棵树的子树
力扣572:另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所…...
Linux系统中进程间通信(Inter-Process Communication, IPC)
文章目录 进程间通信介绍进程间通信目的进程间通信发展 管道什么是管道 匿名管道用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道特点 命名管道创建一个命名管道匿名管道与命名管道的区别命名管道的打开规则 命名管道的删除用命名管…...
【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0
React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 📂 System ├── 📂 Plugin │ ├── 📄 file-loader | 在处…...
python 制作3d立体隐藏图
生成文件的3d图,例子: 文字: 隐藏图: 使用建议: 1、建议不用中文,因为中文太复杂,生成立体图效果不好。 2、需要指定FONT_PATH,为一个ttf文件,…...
layui+ssm实现数据批量删除
layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…...
国产AI边缘计算盒子,双核心A55丨2.5Tops算力
边缘计算盒子 双核心A55丨2.5Tops算力 ● 2.5TopsINT8算力,支持INT8/INT4/FP16多精度混合量化。 ● 4路以上1080p30fps视频编解码,IVE模块独立提供图像基础算子加速。 ● 支持Caffe、ONNX/PyTorch深度学习框架,提供resnet50、yolov5等AI算…...
C++作业4
代码整理, 将学过的三种运算符重载,每个至少实现一个运算符的重载 代码: #include <iostream>using namespace std;class Stu {friend const Stu operator*(const Stu &L,const Stu &R);friend bool operator<(const Stu …...
计算机网络(二)| 物理层上 | 数据通信基础知识 调制 频率范围 信噪比
文章目录 1 物理层基本概念2.数据通信基础知识2.1 数据通信基本概念2.2 信道基本概念2.2.1 基带调制(编码)方式2.2.2 带通调制方式 2.3 信道的极限速率影响因素2.3.1 **频率范围**2.3.2 **信噪比** 内容笔记来源于谢希任老师《计算机网络》 物理层重点 …...
[STM32-1.点灯大师上线】
学习了江协科技的前4课,除了打开套件的第一秒是开心的,后面的时间都是在骂娘。因为51的基础已经几乎忘干净,c语言已经还给谭浩强,模电数电还有点底子,硬着头皮上吧。 本篇主要是讲述学习点灯的过程和疑惑解释。 1.工…...
Web测试自动化工具Selenium的使用
Web测试自动化工具Selenium的使用 Selenium是一个Web应用测试的自动化工具,它通过模拟点击实现对Web应用的功能测试。测试时,除了Selenium,还需要对应的浏览器驱动,如在Chrome实现自动点击,则需要chromedriver。 Sel…...
VUE2+THREE.JS 按照行动轨迹移动人物模型并相机视角跟随人物
按照行动轨迹移动人物模型并相机视角跟随人物 1. 初始化加载模型2. 开始移动模型3. 人物模型启动4. 暂停模型移动5. 重置模型位置6. 切换区域动画7. 摄像机追踪模型8. 移动模型位置9.动画执行 人物按照上一篇博客所设定的关键点位置,匀速移动 1. 初始化加载模型 //…...
Hadoop YARN组件
1. 请解释Yarn的基本架构和工作原理。 YARN,也被称为"Yet Another Resource Negotiator",是Apache HadoopYARN,也被称为"Yet Another Resource Negotiator",是Apache Hadoop的一部分,它被设计为一…...
Java架构师技术架构路线
目录 1 概论2 如何规划短中长期的技术架构路线图3 如何规划面向未来的架构4 如何修订路线图执行过程中的偏差5 如何落地路线图-阿里系糙快猛之下的敏捷模式想学习架构师构建流程请跳转:Java架构师系统架构设计 1 概论 首先,规划一个短中长期的技术路线图是非常重要的。短中…...
guacamole docker一键部署脚本
前言 在我学习guacamole的过程中发现全网大致有两种方式安装guacamole的方式: 1. 直接安装(下载java环境/mysql/, 修改配置) 2. docker安装(和直接安装类似,需要下载相关环境,然后做配置) 然…...
蓝桥杯算法心得——想吃冰淇淋和蛋糕(dp)
大家好,我是晴天学长,dp题,怎么设计状态很重要,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .想吃冰淇淋和蛋糕 想吃冰淇淋与蛋糕 输入格式 第一行输入一个整数n。…...
LLM之RAG实战(二):使用LlamaIndex + Metaphor实现知识工作自动化
最先进的大型语言模型(LLM),如ChatGPT、GPT-4、Claude 2,具有令人难以置信的推理能力,可以解锁各种用例——从洞察力提取到问答,再到通用工作流自动化。然而,他们检索上下文相关信息的能力有限。…...
【容器】Docker打包Linux操作系统迁移
0x0 场景 因老服务器操作系统文centos6.5,现要迁移至uos v20 1050a(底层centos8),其中需要迁移的应用组件有: mysql 、tomcat、apachehttpd,因版本跨越太大,导致centos8直接安装无法完全恢复原…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
