小白如何写Python算法-计算模型稳定性评估指标PSI(上)

简介: 小白如何写Python算法-计算模型稳定性评估指标PSI(上)

前言


最近在研究如何存储和查询十亿数据的事情
突然插了一档子事
公司让我临时救个🔥
python算法需求比较多 人手紧缺
让我来弄个算法需求
计算PSI
我一听懵逼了 啥是PSI
临危受命 不行也得上啊


PSI知识储备


简介

PSI反映了验证样本在各分数段的分布与建模样本分布的稳定性
在建模中,我们常用来筛选特征变量、评估模型稳定性
稳定性是有参照的
因此需要有两个分布——实际分布(actual)和预期分布(expected)
在建模时通常以训练样本(In the Sample, INS)作为预期分布
而验证样本通常作为实际分布

image.png

大白话解释

训练数据中的标签列即y列 表示实际数据
训练数据用于模型训练 得到一个模型
用该模型进行数据预测 预测出来的y列即预期数据
将实际数据和预期数据进行同样的分段 
每一段内分别计算数据分布 然后比较
用来反映模型的稳定性

必要性

风控 稳定性压倒一切
一套风控模型 通常一年以上 才会被替换下线
如果模型不稳定 意味着模型不可控
对于业务本身而言就是一种不确定性风险
直接影响决策的合理性 
直观理解上的系统稳定 通常是指某项指标波动小(低方差)
指标曲线几乎是一条水平的直线
此时就会觉得系统运行正常稳定 很有安全感

变异系数cv

变异系数 cv 来衡量这种数据波动水平
变异系数越小,代表波动越小,稳定性越好
变异系数 C·V =( 标准偏差 SD / 平均值Mean )× 100%

只用变异系统来表示稳定性是不够的

因为实际中由于受到客群变化(互金市场用户群体变化快)
数据源采集变化(比如爬虫接口被风控了)等等因素影响
实际样本分布将会发生偏移
就会导致模型不稳定
所以才需要PSI

PSI公式

image.png


计算步骤


步骤一

将变量预期分布(excepted)进行分箱(binning)离散化
统计各个分箱里的样本占比

分箱方式

分箱可以是等频、等距或其他方式
分箱方式不同,将导致计算结果略微有差异

变量类型

  • 连续型变量
对于连续型变量(特征变量、模型分数等)
分箱数需要设置合理,一般设为10或20
  • 离散型变量
如果分箱太多可以提前考虑合并小分箱
分箱数太多,可能会导致每个分箱内的样本量太少而失去统计意义
分箱数太少,又会导致计算结果精度降低


步骤二

按相同分箱区间
对实际分布(actual)统计各分箱内的样本占比


步骤三

算各分箱内的A - E和Ln(A / E)
计算index = (实际占比 - 预期占比)* ln(实际占比 / 预期占比)


步骤四

将各分箱的index进行求和,即得到最终的PSI


image.png


业务含义

PSI数值越小,两个分布之间的差异就越小,代表越稳定


image.png


PSI近似概念相对熵


相对熵/KL散度/信息散度
是两个概率分布间差异的非对称性度量

物理含义

1、当两个随机分布相同时,它们的相对熵为零
当两个随机分布的差别增大时,它们的相对熵也会增大
2、相对熵是一个从信息论角度量化距离的指标 与数学概念上的距离有所差异
数学上的距离需要满足:非负性、对称性、同一性、传递性等
而相对熵不满足对称性

计算公式

在信息理论中,相对熵等价于两个概率分布的信息熵(Shannon entropy)的差值


image.png


P(x)表示数据的真实分布,而Q(x)表示数据的观察分布

简单理解

概率分布携带着信息,可以用信息熵来衡量
若用观察分布Q(x)来描述真实分布P(x),还需要多少额外的信息量

image.png

相关文章
|
9天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
39 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
9天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
31 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
9天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
48 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
14天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
30 2
|
26天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
72 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
30天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
69 1
|
3天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
9天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
9天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!