You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将单pandas列的IV计算函数扩展为多列批量处理函数

IV计算函数批量改造方案

本次改造完全保留原有单特征IV的计算逻辑,仅在函数入口增加入参类型识别能力,同时兼容单特征、多特征列表两种调用形式,无需重复手动逐次调用。

改造核心逻辑

  • 入口处判断第二个入参的类型:如果是字符串格式,直接走原有单特征计算逻辑,返回单个IV数值,完全不改变原有使用习惯
  • 如果检测到入参是存储列名的列表/可迭代序列,自动循环遍历每个特征调用单特征计算分支,最终汇总为带Column、IV两列的DataFrame返回,匹配预期输出格式

改造后完整代码

import pandas as pd
import numpy as np

def get_IV(df, feature, target):
    # 多特征入参分支:批量计算并返回DataFrame结果
    if not isinstance(feature, str):
        result = []
        for col in feature:
            col_iv = get_IV(df, col, target)
            result.append([col, col_iv])
        return pd.DataFrame(result, columns=['Column', 'IV'])
    
    # 以下为完全保留的原有单特征计算逻辑
    lst = []
    unique_values = df[feature].unique()
    for val in unique_values:
        lst.append([
            feature,
            val,
            df[(df[feature] == val) & (df[target] == 0)].count()[feature],
            df[(df[feature] == val) & (df[target] == 1)].count()[feature]
        ])
 
    data = pd.DataFrame(lst, columns=['Variable', 'Value', 'Good', 'Bad'])
        
    total_bad = df[df[target] == 1].count()[feature]
    total_good = df.shape[0] - total_bad
    
    data['Distribution Good'] = data['Good']/ total_good
    data['Distribution Bad'] = data['Bad'] / total_bad
    data['WoE'] = np.log(data['Distribution Good'] / data['Distribution Bad'])
    data = data.replace({'WoE': {np.inf: 0, -np.inf: 0}})

    data['IV'] = data['WoE'] * (data['Distribution Good'] - data['Distribution Bad'])
    data = data.sort_values(by=['Variable', 'Value'], ascending=[True, True])
    data.index = range(len(data.index))

    iv = data['IV'].sum()
    return iv

调用示例

  1. 多特征批量计算场景
    直接传入存储列名的列表即可,无需循环手动调用:

    cols = ['Column1', 'Column2', 'Column100']
    iv_result = get_IV(data, cols, 'Label')
    

    输出结果严格匹配预期格式:

    ColumnIV
    Column10.00035
    Column20.01085
    Column1000.01281
  2. 原有单特征调用兼容
    改造后的函数完全支持原有的单特征传参方式,返回值和改造前完全一致,不会破坏已有代码的运行逻辑:

    single_iv = get_IV(data, 'Column1', 'Label')
    

改造说明

  • 对原有代码的改动量极小,仅在函数开头增加了多特征判断的分支,没有修改任何单特征IV的计算逻辑,保证计算结果和原函数完全一致
  • 不需要额外编写单独的批量计算函数,所有逻辑统一封装在get_IV内部,降低后续代码维护成本
  • 自动适配入参类型,不需要为不同计算场景切换不同函数

内容的提问来源于stack exchange,提问作者Nabih Bawazir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 21:45:07