【Python】理解WOE(Weight of Evidence)和IV(Information Value)


忠孝东路走九遍
脚底下踏著曾经你我的点点
我从日走到夜
心从灰跳到黑
我多想跳上车子离开伤心的台北
忠孝东路走九遍
穿过陌生人潮搜寻你的脸
有人走的匆忙
有人爱的甜美
谁会在意擦肩而过的心碎
                     🎵 动力火车《忠孝东路走九遍》


在信用评分和风险管理领域,WOE(Weight of Evidence)和IV(Information Value)是两种常用的特征选择和评估方法。这些方法有助于我们理解每个特征对目标变量(如好坏客户)的区分能力。本文将介绍WOE和IV的概念,并通过示例说明如何使用它们进行特征分析。

WOE(Weight of Evidence)的概念

WOE是一种衡量特征分箱中好坏客户(或正负样本)分布的方法。它通常用于处理二分类问题,如信用评分中的好客户和坏客户。WOE的计算公式如下:
在这里插入图片描述
WOE的主要优点在于:

  1. 线性化特征:WOE可以将原始特征转换为线性特征,有助于线性模型的训练。
  2. 处理缺失值:WOE能够较好地处理缺失值,通过合理分箱可以降低其影响。

IV(Information Value)的概念

IV用于衡量特征对目标变量的区分能力。IV值越高,表示该特征对目标变量的预测能力越强。IV的计算公式如下:
在这里插入图片描述

示例:使用WOE和IV进行特征分析

下面是一个简单的Python示例,展示如何计算WOE和IV值并分析特征。

  1. 导入必要的库
import pandas as pd
import numpy as np
  1. 定义WOE和IV计算函数
def calculate_woe_iv(df, feature, target, bins=10, is_categorical=False, epsilon=1e-6):
    total_bad = df[target].sum()
    total_good = len(df) - total_bad

    if is_categorical:
        grouped = df.groupby(feature)[target].agg(['count', 'sum'])
    else:
        df['bin'] = pd.qcut(df[feature].rank(method='first'), bins, duplicates='drop')
        grouped = df.groupby('bin')[target].agg(['count', 'sum'])

    grouped['good'] = grouped['count'] - grouped['sum']
    grouped['bad_rate'] = (grouped['sum'] + epsilon) / (total_bad + epsilon)
    grouped['good_rate'] = (grouped['good'] + epsilon) / (total_good + epsilon)

    grouped['woe'] = np.log(grouped['good_rate'] / grouped['bad_rate'])
    grouped['iv'] = (grouped['good_rate'] - grouped['bad_rate']) * grouped['woe']
    iv = grouped['iv'].sum()
    
    return iv, grouped
  1. 创建示例数据
data = {
    'online_nums': np.random.random(100),
    'user_balance': np.random.random(100),
    'avg_arpu': np.random.random(100),
    'mz_flag': np.random.randint(0, 2, 100),
    'target': np.random.randint(2, size=100)
}
df = pd.DataFrame(data)
  1. 计算IV值并输出结果
continuous_features = ['online_nums', 'user_balance', 'avg_arpu']
categorical_features = ['mz_flag']

iv_values = {}

# 连续变量
for feature in continuous_features:
    iv, iv_table = calculate_woe_iv(df, feature, 'target', is_categorical=False)
    iv_values[feature] = iv
    print(f"IV值 - {feature}: {iv}")
    print(iv_table)

# 分类变量
for feature in categorical_features:
    iv, iv_table = calculate_woe_iv(df, feature, 'target', is_categorical=True)
    iv_values[feature] = iv
    print(f"IV值 - {feature}: {iv}")
    print(iv_table)

# 打印所有特征的IV值
print("所有特征的IV值:")
for feature, iv in iv_values.items():
    print(f"{feature}: {iv}")

结果分析

通过上述代码,我们可以得到每个特征的IV值,并查看其分箱后的详细信息。IV值高的特征对目标变量的区分能力较强,可以优先考虑在模型中使用;IV值低的特征可以考虑剔除或进一步处理。

结论

WOE和IV是两个强大且常用的特征选择和评估工具,尤其在信用评分和风险管理领域。通过合理的分箱和WOE计算,我们可以将原始特征转化为线性特征,并通过IV值评估其预测能力。希望本文的介绍和示例能帮助你更好地理解并应用WOE和IV进行特征分析。

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

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

相关文章

可视化 FlowChart 0.4.1 最强的拖拽组件

主要解决以及目标: ti-flowchart 能满足 二次开发的大部分需求。 下发GIF图可见,左边的模块A 由二次开发人员设计,通过向flowchart注册模块Dom,实现符合拖拽,编辑,布局,以及响应事件上抛。 实…

Debian12安装后更换为国内镜像源,切换root用户,解决用户名不在sudoers文件中此事将被报告

选择Debian作为编程开发最佳Linux的理由: Debian是面向程序员的最古老,最出色的Linux发行版之一。Debian提供了具有.deb软件包管理兼容性的超稳定发行版。Debian为程序员提供了许多最新功能。因此,它具有一个特殊的编程空间。Debian是开发人员…

第十六节:图 (20节)

一 图的概念 1)由点的集合和边的集合构成 2)虽然存在有向图和无向图的概念,但实际上都可以用有向图来表达 3)边上可能带有权值 二 图结构的表达 1)邻接表法 2)邻接矩阵法 3)除此之外还有其他众多…

adminlte 日期控件设置值

1,属性设置 $(function () {//Date range picker with time picker$(#reservationtime-1).daterangepicker({timePicker: false,timePickerIncrement: 1,timePicker24Hour: true,autoApply: true,singleDatePicker: true,locale: {format: YYYY-MM-DD,daysOfWeek: …

探讨 cs2019 c++ 的STL 库中的模板 conjunction 与 disjunction

(1)在 STL 库源码中这俩模板经常出现,用来给源码编译中的条件选择,模板的版本选择等提供依据。先给出其定义: 以及: 可以得出结论: conj 是为了查找逻辑布尔型模板参数中的第一个 false &#x…

JS中的宏任务和微任务

JavaScript 引擎是建立在一个事件循环系统之上的,它实时监控事件队列,如果有事件就执行,如果没有事件就等待。事件系统是一个典型的生产消费模式,生产者发出事件,接收者监听事件,在UI 开发中是常见的一个设…

LVM - Linux磁盘逻辑卷管理器概念讲解及实践

1、lvm概念 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(Logi…

InternLM-XComposer2-4KHD开拓性的4K高清视觉-语言模型

大型视觉-语言模型(LVLM)在图像字幕和视觉问答(VQA)等任务中表现出色。然而,受限于分辨率,这些模型在处理包含细微视觉内容的图像时面临挑战。 分辨率的限制严重阻碍了模型处理含有丰富细节的图像的能力。…

推荐5个实用的工具软件,提高效率

​ 现在,有很多实用的工具和软件可以帮助我们更高效地完成各种任务。以下是几个值得推荐的工具和软件,能够极大地提高我们的工作效率。 1.浏览器插件——SuperCopy ​ SuperCopy是一款浏览器插件,主要用于增强网页文本的复制功能。它解决了…

SQL注入工具sqlmap安装使用详解靶场实验

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、sqlmap简介 sqlmap 是一款开源的渗透测试工具&#…

主从Reactor服务器

目录: 目录: 目标: 本文讲解思路: 各模块的功能以及代码: 1.服务器相关模块:服务器模块的功能是对所有的连接以及线程进⾏管理 2.协议相关模块:协议模块是对当前的Reactor模型服务器提供应…

全球排名第一的质量管理(QMS)系统介绍,100%免费开源

什么是Odoo全程质量管理? 开源智造Odoo免费开源质量管理系统将政策、标准和实践规范化并自动化,以最小的开销提供最高质量的产品。快速轻松地选择要执行的测试,设置参数以评估结果,并定义接收时和生产过程中的测试策略。Odoo会自动…

Vue 快速入门:Vue初级

语法规则 前端渲染 渲染有几种方式:原生js、js模板、Vue模板语法 原生js 使用字符串拼接 js模板语法 Vue.js 模板语法概述 Vue.js 是一个用于构建用户界面的渐进式框架,其模板语法非常灵活和直观。Vue 的模板语法基于 HTML,可以通过指令…

达梦sql中参数个数太多导致出现SOH等特殊字符报错无效的序列号是不是达梦的bug

mybatis的Mapper.xml中如下: in中的参数大概有1万6千多个,分成每1000个一组拼接成sql,然而在达梦中执行时报如下: Caused by: dm.jdbc.driver.DMException: Invalid sequence noat dm.jdbc.driver.DBError.throwException(DBError.java:710)…

号卡极团分销管理系统 ue_serve.php 任意文件上传漏洞复现

0x01 产品简介 号卡极团分销管理系统,同步对接多平台,同步订单信息,支持敢探号一键上架,首页多套UI+商品下单页多套模板,订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定,内置敢探号、172平台、号氪云平台第三方接口以及号卡网同系统对接! 0x02 漏洞概述…

web入门练手案例(一)

下面是一下web入门案例和实现的代码,带有部分注释,倘若代码中有任何问题或疑问,欢迎留言交流~ 新闻页面 案例描述: 互联网的发展使信息的传递变得方便、快捷,浏览新闻称为用户获取信息的重要渠道。下面将实现一个简…

【doghead】mac与wsl2联通

mbp 设置为发送端,那么要能与windows上 wsl2的ubutnu通信。 mbp的 uv 构建ok zhangbin@zhangbin-mbp-2  ~/tet/Fargo/zhb-bifrost/Bifrost-202403/worker/third_party/libuv   main clion使用lldb cmake构建 更新git2.45.0啊

从零开始开发企业培训APP:在线教育系统源码剖析

今天,小编将深入剖析企业培训APP的开发,从零开始为企业构建一个高效、实用的在线教育系统。 一、需求分析 1.主要功能需求 包括但不限于: -用户管理 -课程管理 -学习计划 -互动功能 -考核评估 -统计分析 二、技术选型 1.前端技术 …

将jar打包成exe可安装程序,并在html页面唤醒

一、exe4j将jar打包成exe 1.exe4j下载 下载地址:https://www.ej-technologies.com/download/exe4j/files 2.exe4j打包jar 2.1. welcome 可以选择历史配置,新增则直接下一步 2.2. project type选择“jar in exe” mode 2.3. application info设置应用…

17-LINUX--线程与fork()

一.多线程程序fork() 多线程出现fork()后&#xff0c;只复制一条执行路径&#xff0c;是fork()所在的那条执行路径 主程序fork()示例代码&#xff1a; include<stdio.h> #include<stdlib.h> #include<string.h> #include<pthread.h> #include<un…