【学习】PSI、IV、WOE的计算

PSI

  • PSI(模型分布稳定性):稳定度指标(population stability index ,PSI)可衡量测试样本及模型开发样本评分的的分布差异,为最常见的模型稳定度评估指针。其实PSI表示的就是按分数分档后,针对不同样本,或者不同时间的样本,population分布是否有变化,就是看各个分数区间内人数占总人数的占比是否有显著变化。

     

    其中,bins是分箱数量,Actual是实际占比,Expected是预期占比。
    一般来说,PSI小于0.1模型稳定性较高,0.1至0.2之间稳定性一般,大于0.2建议重新迭代模型。

  • 对于模型稳定性,即考虑在不同数据集上。公式: psi = sum((实际占比-预期占比)* ln(实际占比/预期占比))

    举个例子解释下,比如训练一个logistic回归模型,预测时候会有个类概率输出,p。在你的测试数据集上的输出设定为p1,将它从小到大排序后将数据集10等分(每组样本数一直,此为等宽分组),计算每等分组的最大最小预测的类概率值。

    现在你用这个模型去对新的样本进行预测,预测结果叫p2,利用刚才在测试数据集上得到的10等分每等分的上下界。按p2将新样本划分为10分(不一定等分了哦)。实际占比就是新样本通过p2落在p1划分出来的每等分界限内的占比,预期占比就是测试数据集上各等分样本的占比。

    意义就是如果模型更稳定,那么在新的数据上预测所得类概率应该更建模分布一致,这样落在建模数据集所得的类概率所划分的等分区间上的样本占比应该和建模时一样,否则说明模型变化,一般来自预测变量结构变化。通常用作模型效果监测。

    一般认为PSI小于0.1时候模型稳定性很高,0.1-0.2一般,需要进一步研究,大于0.2模型稳定性差,建议修复。 

    参考地址

  • 数据样本分布稳定性,psi = sum((样本A分布占比-样本B分布占比)* ln(样本A分布占比/样本B分布占比))

WOE

参考地址

  • WOE(Weight Of Evidence 证据权重)是一种对自变量编码的方法,需注意的是在WOE编码前需对数据进行分箱(分组或离散化)操作。

    对于特征每个分组WOE的计算方法:

     

    其中,pyi是分组i中正样本(响应客户,目标列Y=1)占所有正样本的比例,pni是分组i中负样本(未响应客户,目标列Y=0)占所有负样本的比例,yi是分组i中正样本数量,yT是所有正样本数量,ni是分组i中负样本数量,nT是所有负样本数量。从公式可以看出,WOE即分组内正负占比与样本整体正负占比的差异。WOE越大,这种差异越大,这个分箱里的样本响应的可能性就越大,WOE越小,分箱内样本响应的可能想性越低。

  • # 逻辑代码
    import math
    
    def cal_woe(df, col, y = 'xxx'):
      """
      df:数据集
      col:特征名
      y:样本定义根据的列名(1:黑样本,0:白样本)
      """
      # 黑样本
      black_cnt = df.groupby(col)[y].sum()
      # 白样本
      white_cnt = df.groupby(col)[y].sum()
      
      #所有黑样本
      black_cnt_total = df[y].sum()
      #所有白样本
      white_cnt_total = df.shape(0) - df[y].sum()
      
      #pyi
      pyi = black_cnt / black_cnt_total
      #pni
      pni = white_cnt / white_cnt_total
      
      #woe
      woe = (pyi / pni).map(lambda x:math.log(x))
      
      return woe, pyi, pni

     

IV

参考地址

  • IV(Information Value 信息量)是评分卡模型中的一个常见指标,在金融评分卡常用于衡量自变量对因变量预测能力的指标。基本思想是根据该特征所命中正负样本的比率与总正负样本的比率,来对比和计算其关联程度。

    对于特征每个分箱的iv值计算方法:

     

特征的IV值,即所有分箱iv值的总和:

 

# 逻辑代码
def cal_iv(df, col, y = 'xxx' ):
  """
  df:数据集
  col:特征名
  y:样本定义根据的列名(1:黑样本,0:白样本)
  """
  # 获取woe、pyi、pni
  woe, pyi, pni = cal_woe(df, col, y)
  # 计算特征每个分箱的iv值
  iv_i = (pyi - pni) * woe
  # 返回该特征的iv值
  return iv_i.sum()
Python 是一种广泛应用于数据分析和科学计算的编程语言,可以利用它进行计算IV(Information Value)和WOE(Weight of Evidence)。 IV 是一种常用于评估变量的预测能力的指标。它衡量了自变量与因变量之间的相关性,也可以用于特征选择。计算 IV 的一般步骤如下: 1. 对于某个自变量,根据其不同取值将数据集划分成多个子集。 2. 在每个子集中,计算该子集中因变量的事件发生率和非事件发生率。 3. 根据每个子集中的事件发生率和非事件发生率计算每个子集的 IV 值。 4. 将每个子集的 IV 值相加得到最终的 IV 值。 下面是一个计算 IV 值的示例代码: ```python import pandas as pd import numpy as np def calculate_iv(dataset, feature, target): dataset['Event'] = np.where(dataset[target] == 1, 1, 0) dataset['NonEvent'] = np.where(dataset[target] == 0, 1, 0) event_total = dataset['Event'].sum() nonevent_total = dataset['NonEvent'].sum() dataset['EventRate'] = dataset['Event'] / event_total dataset['NonEventRate'] = dataset['NonEvent'] / nonevent_total dataset['WOE'] = np.log(dataset['EventRate'] / dataset['NonEventRate']) dataset['IV'] = (dataset['EventRate'] - dataset['NonEventRate']) * dataset['WOE'] iv = dataset['IV'].sum() return iv # 使用示例 dataset = pd.read_csv('data.csv') iv_value = calculate_iv(dataset, 'feature', 'target') print("IV value:", iv_value) ``` WOE 是一种衡量特征的预测能力的指标,它将每个特征的每个取值映射到一个权重值。计算 WOE 的一般步骤如下: 1. 对于某个自变量,根据其不同取值将数据集划分成多个子集。 2. 在每个子集中,计算该子集中事件发生的概率和非事件发生的概率。 3. 根据每个子集中事件发生的概率和非事件发生的概率计算每个子集的 WOE 值。 4. 将每个子集的 WOE 值相加得到最终的 WOE 值。 下面是一个计算 WOE 值的示例代码: ```python import pandas as pd import numpy as np def calculate_woe(dataset, feature, target): dataset['Event'] = np.where(dataset[target] == 1, 1, 0) dataset['NonEvent'] = np.where(dataset[target] == 0, 1, 0) event_total = dataset['Event'].sum() nonevent_total = dataset['NonEvent'].sum() dataset['EventRate'] = dataset['Event'] / event_total dataset['NonEventRate'] = dataset['NonEvent'] / nonevent_total dataset['WOE'] = np.log(dataset['EventRate'] / dataset['NonEventRate']) return dataset['WOE'] # 使用示例 dataset = pd.read_csv('data.csv') woe_values = calculate_woe(dataset, 'feature', 'target') print("WOE values:", woe_values) ``` 以上就是利用 Python 计算 IVWOE 的简单示例,根据数据的不同特点和需求,可以对代码进行相应的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值