当前位置: 首页 > article >正文

离散型变量的 PSI-群体稳定性指标计算

文章目录

    • PSI-群体稳定性指标(离散型)
      • 单个指标计算
      • 所有指标计算

PSI-群体稳定性指标(离散型)

单个指标计算

  • 代码

    import pandas as pd
    
    df = pd.read_csv('/Users/mengzhichao/Desktop/文件/图表/小微企业用电量数据.csv')
    
    X_train = df.sample(n=7000)
    X_test = df.sample(n=3000)
    
  • 计算单个psi

    def psi_calculate_category(origin,new,feature_name):
        """计算单个类别型变量的psi
           origin为实际数据,new为预期数据
    
        Parameters
        ----------------------------------------------------------------------
        :param               origin               DataFrame,实际数据
        :param               new                  DataFrame,预期数据
        :param               feature_name         string,需要计算PSI的字段(类别型)
    
        Returns
        ----------------------------------------------------------------------
                             psi:                  float,psi值
                             psi_df:               DataFrame,psi详细
        Examples
        ----------------------------------------------------------------------
        >>> psi,psi_df = psi_calculate_category(origin=X_train
                                               ,new=X_test
                                               ,feature_name='dimvl_name')
    
        """
        origin_cut = origin[feature_name].value_counts(dropna=False).reset_index()
        origin_cut.columns = ['buckets','origin_cnt']
        origin_cut['feature'] = feature_name
        origin_cut = origin_cut[['feature','buckets','origin_cnt']]
    
        new_cut = new[feature_name].value_counts(dropna=False).reset_index()
        new_cut.columns = ['buckets','new_cnt']
        new_cut['feature'] = feature_name
        new_cut = new_cut[['feature','buckets','new_cnt']]
        
        psi_df = pd.merge(origin_cut,new_cut,on=['feature','buckets'])
        # print(psi_df)
        
        # 计算占比,分子加1,防止计算PSI时分子为0(这里分母不可能为0)
        psi_df['origin_percent'] = (psi_df['origin_cnt'] + 1) / psi_df['origin_cnt'].sum()
        psi_df['new_percent']    = (psi_df['new_cnt'] + 1) / psi_df['new_cnt'].sum()
        psi_df['minus']          = psi_df.apply(lambda x: x['origin_percent']-x['new_percent'],axis=1)
        psi_df['log']            = psi_df.apply(lambda x: np.log(x['origin_percent']/x['new_percent']),axis=1)
        
        psi_df['psi_bucket']  = psi_df.apply(lambda x: x['minus'] * x['log'],axis=1)
        psi_df['psi']         = psi_df['psi_bucket'].sum() 
        
        psi = psi_df['psi_bucket'].sum()
        
        return psi,psi_df
      
    psi,psi_df = psi,psi_df = psi_calculate_category(origin=X_train
                                       ,new=X_test
                                       ,feature_name='区域')
    

    20230309GV2nHj

    202303092lv0Yl

所有指标计算

  • 计算所有类别型:
## 所有的类别型特征列表
all_category_feature_list = df.select_dtypes(include='object').columns.tolist()

psi_list = []
psi_df_list = []
for feature in notebook.tqdm(all_category_feature_list):
    psi,psi_df = psi_calculate_category(X_train,X_test,feature_name=feature)
    psi_list.append((feature,psi))
    psi_df_list.append(psi_df)
    
psi = pd.DataFrame(psi_list,columns=['feature','psi'])
psi_df = pd.concat(psi_df_list,ignore_index=False)

20230309BnWV26

20230309xIhnzt



http://www.kler.cn/a/539202.html

相关文章:

  • 棱光PDF工具箱:一站式解决你的各种需要
  • 【Javascript Day12】数组操作方法及String规则和方法
  • 数据结构——【二叉树模版】
  • 【韩顺平linux】部分上课笔记整理
  • 基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • golang使用sqlite3,开启wal模式,并发读写
  • C# 创建 Windows 应用程序教程
  • 辛格迪客户案例 | 安领生物医药(苏州)有限公司电子合约系统(eSign)项目
  • 洛谷P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值
  • 李飞飞团队 S1 与 DeepSeek R1 技术对比
  • 基于Python实现的完整解决方案,用于对包含四个类别的1500张图像数据集进行分割、训练模型,并提供简易前端和可视化结果
  • Java 网络原理 ⑤-DNS || 以太网
  • 【RocketMQ 存储】- 异步刷盘服务 FlushRealTimeService
  • Python 报错分析:IndexError: list index out of range
  • Node.js 中模块化
  • 什么是Prompt工程?
  • 蓝耘智算平台与DeepSeek R1模型:推动深度学习发展
  • 企业如何利用DeepSeek提升网络安全管理水平
  • 【JAVAFX】textarea插入数据后滚动条自动到底部
  • 量化交易数据获取:xtquant库的高效应用
  • Transformer中的嵌入位置编码
  • Golang:Go 1.23 版本新特性介绍
  • 小程序实现消息订阅通知完整实践及踩坑记录
  • AI绘画:开启艺术与科技融合的未来之门(10/10)
  • Unity3D仿星露谷物语开发28之切换场景
  • 【神经网络框架】非局部神经网络