成为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 np

def 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)

    # 计算 PSI
    psi = 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_datatest_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/217032.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习率设置(写给自己看)

现往你的.py文件上打上以下代码: import torch import numpy as np from torch.optim import SGD from torch.optim import lr_scheduler from torch.nn.parameter import Parametermodel [Parameter(torch.randn(2, 2, requires_gradTrue))] optimizer SGD(mode…

12.04 二叉树中等题

513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路:找到最低层中最左侧的节点值,比较适合层序遍历,返回最…

【matlab】QR分解

QR分解 给定一个mn的矩阵A,其中m≥n,即矩阵A是高矩阵或者是方阵,QR分解将矩阵A分解为两个矩阵Q和R的乘积,其中矩阵Q是一个mn的各列正交的矩阵,即QTQI,矩阵R是一个nn的上三角矩阵,其对角线元素为…

初识动态规划算法(题目加解析)

文章目录 什么是动态规划正文力扣题第 N 个泰波那契数三步问题使用最小花费爬楼梯 总结 什么是动态规划 线性动态规划:是可以用一个dp表来存储内容,并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案 >dp表:dp表就是用一…

【数据结构】——栈|队列(基本功能)

目录 栈 基本概念 栈的常见基本操作 栈的存储 ✌栈的基本操作实现 栈的构建 栈的初始化 入栈 打印栈 出栈 获取栈顶元素 获取栈的有效元素个数 判断栈是否为空 销毁栈 队列 基本概念 队列的常见基本操作 ✌队列的基本操作实现 队列的构建 初始化 入队列 出…

不再只是android,华为自爆Harmony将对标iOS

今年10月,华为官方宣布,鸿蒙OS 4升级设备数量已突破1亿,成为史上升级最快的鸿蒙OS版本。 日前,据数码博主“定焦数码”消息,大厂技术员工做适配,通过线下沟通时,华为反复提到一个问题&#xff…

实战技巧:为Android应用设置独立的多语言

原文链接 实战技巧:为Android应用设置独立的多语言 通常情况下多语言的设置都在系统设置中,应用需要做的就是提供本应用所使用的字串的多语言翻译,使用时使用R.string.app_name类似的引用,然后系统会根据用户在系统设置中的选项来…

不瞒各位,不安装软件也能操作Xmind文档

大家好,我是小悟 作为搞技术的一个人群,时不时就要接收产品经理发过来的思维脑图,而此类文档往往是以Xmind编写的,如果你的电脑里面没有安装Xmind的话,不好意思,是打不开这类后缀结尾的文档。 打不开的话…

【雷电模拟器桥接问题解决方法】

1.ROOT权限开启 2.开启网络桥接模式,选择静态IP设置,点击安装桥接网卡,填写IP地址(注意:IP地址要与host主机在同一IP段内) 3.重启后 adb shell就能进入到模拟器控制台中了,如果出现以下内容&…

进程程序替换和shell实现

先前fork说创建子进程执行代码,如何让子进程执行和父进程完全不一样的代码?程序替换。 一 单进程替换演示 1 execl函数使用 最近转到在vs code下写代码,之前也在xhell下用过execl函数,所以才想写篇博客总结总结,没想到在vs code…

(C语言)计算n的阶乘

要求使用双精度 #include<stdio.h> double factorial(int n) {if(n 1)return 1;return n * factorial(n-1); } int main() {int n ;double res;scanf("%d",&n);res factorial(n);printf("%lf",res); return 0; } 运行截图&#xff1a; 注&am…

oops-framework框架 之 界面管理(三)

引擎&#xff1a; CocosCreator 3.8.0 环境&#xff1a; Mac Gitee: oops-game-kit 注&#xff1a; 作者dgflash的oops-framework框架QQ群&#xff1a; 628575875 回顾 在上文中主要通过oops-game-kit大家了一个新的模版项目&#xff0c; 主要注意项是resources目录下的两个文…

Python Opencv实践 - Yolov3目标检测

本文使用CPU来做运算&#xff0c;未使用GPU。练习项目&#xff0c;参考了网上部分资料。 如果要用TensorFlow做检测&#xff0c;可以参考这里 使用GPU运行基于pytorch的yolov3代码的准备工作_little han的博客-CSDN博客文章浏览阅读943次。记录一下自己刚拿到带独显的电脑&a…

卷积神经网络(CNN):艺术作品识别

文章目录 一、前言一、设置GPU二、导入数据1. 导入数据2. 检查数据3. 配置数据集4. 数据可视化 三、构建模型四、编译五、训练模型六、评估模型1. Accuracy与Loss图2. 混淆矩阵3. 各项指标评估 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&#xf…

继承 多态 拆箱装箱 128陷阱 枚举类

继承 在java里一个类只能继承一个类&#xff0c;但可以被多个类继承&#xff1b;c里一个类可以继承多个类&#xff1b; 子类可以使用父类的方法&#xff1b; 在java中&#xff0c;Object是所有类的父类&#xff1b; equals方法比较的是对象是否指向同一个地方&#xff0c;这个方…

原生横向滚动条 吸附 页面底部

效果图 /** 横向滚动条 吸附 页面底部 */ export class StickyHorizontalScrollBar {constructor(options {}) {const { el, style } optionsthis.createScrollbar(style)this.insertScrollbar(el)this.setScrollbarSize()this.onEvent()}/** 创建滚轴组件元素 */createS…

Windows下打包C++程序无法执行:无法定位程序输入点于动态链接库

1、问题描述 环境&#xff1a;CLionCMakeMinGW64遇到问题&#xff1a;打包的exe无法运行&#xff0c;提示无法定位程序输入点于动态链接库。 2、解决思路 ​ 通过注释头文件的方式&#xff0c;初步定位问题是因为使用了#include <thread> 多线程库引起的。而且exe文件…

外包干了2个月,技术倒退2年。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;20年通过校招进入深圳某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

如何创建maven项目的多模块项目

Maven多模块项目是指一个Maven项目中包含多个子模块&#xff0c;每个子模块又是一个独立的Maven项目&#xff0c;但它们之间可以存在依赖关系。Maven多模块项目可以方便地管理多个子模块的依赖和构建过程&#xff0c;同时也可以提高项目的可维护性和可扩展性。创建maven项目的父…

ChatGPT发布一年后,搜索引擎的日子还好吗?

导读&#xff1a;生成式AI&#xff0c;搜索引擎的终结者还是进化加速器 ChatGPT发布刚刚一年&#xff0c;互联网世界已经换了人间。 2023年&#xff0c;以ChatGPT和大模型为代表的生成式AI浪潮对全球互联网、云计算、人工智能领域都带来巨大冲击。而且生成式AI在各行各业的应用…