数据预处理-分箱(Binning)和 WOE编码

news2024/9/24 16:22:06

数据预处理-分箱(Binning)和 WOE编码

1. 分箱

1.1 理论

1.1.1 定义 分箱就是将连续的特征离散化,以某种方式将特征值映射到几个箱(bin)中。

1.1.2 为什么要进行分箱?

  • 引入非线性变换,增强模型性能。因为原始值和目标值之间可能并不存在线性关系,所以直接使用模型预测起不到很好的效果。
  • 增强模型可解释性。通过分箱可以得到一个分段函数,模型可解释性更强。
  • 对异常值不敏感,增强模型鲁棒性,防止过拟合。异常值终也会被分到一个箱里面,不会影响其他箱内正常特征值,分箱的在一定程度上也可以防止过拟合。
  • 重要的是分箱之后我们还可以对不同的箱做进一步的统计和特征组合。比如WOE编码。

1.1.3 常用分箱方法:

  • 卡方分箱(最稳定,最常用)

卡方值计算公式:

在这里插入图片描述

其中:

m: 箱的数量;

k: 类别数量;

Aij: 第i个箱第j类中样本数量(频数);

Eij: 如果箱的划分和类别独立同分布,第i个箱第j类中样本数量的期望值(频数);设箱的划分和类别独立同分布,则样本同时在第i个箱第j类中的概率为:pij = pi * pj,同时在第i个箱第j类中的有样本数量期望值为:pij * N 。

卡方值计算的例子,设m=2, k=2,

表1 实际频数

类别1类别2行和
箱1A11A12R1
箱2A21A22R2
列和C1C2

表2 期望频数(Eij

类别1类别2
箱1E11 = pi * pj * N =(R1 /N) * (C1 / N) * N = R1 * C1 / NE12 = R1 * C2 / N
箱2E21 = R2 * C1 / NE22 = R2 * C2 / N

表1和表2中的数据带入卡方值计算公式,即可求出箱1和箱2合并的卡方值。卡方值越小,说明真实值与期望值越接近,箱的划分和类别越接近独立同分布(类的划分和箱的划分没有关系),那么两个箱具有相同的标签分布,可以合并。

卡方检验步骤:

(1)初始化:根据连续变量值大小进行排序,构建最初的离散化,即把每一个单独的值视为一个箱体。这样做的目的是从每个单独的个体开始逐渐合并。

(2)合并:遍历相邻两项合并的卡方值,将卡方值最小的两组合并,不断重复直到满足分箱数目的限制。决策树分箱

  • 聚类分箱

    使用k-means进行聚类分箱,算法比较简单,不再详细说:先初始化k个类中心,每一次迭代将样本划分到最近的类中,然后修正类中心,直到类中心不再发生变化,停止迭代。

  • 等频分箱

    每一个箱中的样本数相同,实现很简单,先排序,按顺序放到对应的箱中即可。

  • 等距分箱

    箱的大小相同,例如年龄分箱:0-5岁,5-10岁,10-15岁,…

  • 决策树分箱

    将某一列数据作为训练集,将label作为结果,直接训练一个决策树,然后根据决策树的分裂节点的阈值作为分箱的依据。

1.1.4 实验

  • 这个实验使用toad库(https://toad.readthedocs.io/en/stable/tutorial_chinese.html)来做分箱。
  • 数据集使用(https://archive.ics.uci.edu/dataset/350/default+of+credit+card+clients),数据集介绍:

UCI数据集包含30,000名客户及其在台湾一家银行的信用卡交易数据。除了客户的静态特征外,该数据集还包含某年4月至9月的信用卡账单支付历史,以及客户信用卡的余额限制。目标是客户是否会在接下来的一个月,即该年10月拖欠信用卡付款。可以想象,在这个数据上训练出来的模型在实践中可以用来确定客户是否有资格获得其他产品,如汽车贷款等。该数据集包含23个输入变量(input variable)和一个响应变量(response variable)。该数据集来源于UCI machine learning repository,为某银行的信用卡客户信息数据,共有30000个样本,包括过去六个月的账单还款情况。

ID:信用卡客户ID号

LIMIT_BAL:以新台币计算的信贷金额(包括个人和家庭/补充信贷)/ 信用卡限额,会被替换成一个合成的更具典型性的特征。

SEX: 性别 (1代表男性,2代表女性)

EDUCATION:受 教育程度(1=研究生, 2=大学, 3=高中, 4=其他 5=未知, 6=未知)

MARRIAGE:婚姻状况(1=已婚,2=单身,3=其他)

AGE:年龄

X1:信用额度,包括其个人和家庭补充信用

X2:性别(1=male;2=female)

X3:教育(1=研究生,2=大学,3=高中,4=其他)

X4:婚姻状况(1=已婚,2=单身,3=其他)

X5:年龄,age

X6-X11:过去六个月的还款情况。其中,-1,代表按时还款;1,代表延时一个月还款;2,代表延时两个月还款…依次类推,XN=n,代表延时n个月还款,

X12-X17:过去六个月的账单数额情况。

X18-X23:过去六个月的还款数额情况。

Y:目标属性,客户下个月还款违约情况(1=逾期,0=未逾期)

# 导入数据集
import os
import eda
import pandas as pd
import numpy as np
import toad

data_dir = "./"
df = pd.read_csv(os.path.join(data_dir, "default_of_credit_card_clients.csv"))
df["SEX"] = df["SEX"].map({1: "男", 2: "女"})
df["EDUCATION"] = df["EDUCATION"].map({1: "研究生", 2: "大学", 3: "高中", 4: "其他",  5: "未知", 6: "未知"})
df["MARRIAGE"] = df["MARRIAGE"].map({1: "已婚", 2: "单身", 3: "其他"})
df.head()

在这里插入图片描述

# 分箱,并查看分箱结果
X = df.drop(["ID", "default payment next month"], axis=1)
y = df["default payment next month"]

combiner = toad.transform.Combiner()
combiner.fit(X, y, method='chi', n_bins=6, min_samples=0.05, exclude=[])

在这里插入图片描述

在这里插入图片描述

# 查看分箱后的数据数据分布,使用了卡方分箱和决策树分箱
from toad.plot import bin_plot
for method in ['chi', 'dt']:
    c = combiner.fit(X[["AGE"]], y, method=method, n_bins=6, min_samples=0.05)
    bin_plot(c.transform(df, labels=True), x='AGE', target="default payment next month")                 

在这里插入图片描述
在这里插入图片描述

在图中,蓝色bar代表了样本量占比,红线代表了正样本占比(e.g. 坏账率),也就是target的汇总。

2.WOE编码

WOE(Weight of Evidence),证据权重,它是一种对原始自变量有标准化功能的编码形式。WOE编码的定义为:
在这里插入图片描述

其中,pyi是当前分组中响应客户占样本中所有响应客户的比例,pni是当前分组中未响应客户占样本中所有未响应客户的比例,而WOE表示的实际上是二者之间的差异。WOE也可以理解为,当前组中响应的客户和未响应客户的比值与所有样本中这个比值的差异。这个差异是通过对这两个比值取对数来表示的。WOE越大,差异越大,这个分组里的样本响应的可能性就越大;WOE越小,差异越小,这个分组里的样本响应的可能性也就越小。

用调整好的Combiner(分箱器)进行WOE转化

t = toad.transform.WOETransformer()
tt = 'default payment next month'
woe = t.fit_transform(c.transform(df[["AGE", tt]]), df[tt], exclude=[tt])
woe.head()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot实现“闲一品”交易平台电商系统项目【项目源码+论文说明】分享

基于springboot实现“闲一品”交易平台电商系统项目 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开…

Light Image v6.1.8.0批量调整图片大小

Light Image Resizer,批量调整图片大小工具,图片批量添加水印, 批量转换图像格式、调整图片大小、缩放裁剪,图片格式转换、 重命名,排序;添加效果,旋转,自定义元数据,优…

安装深度(Deepin)系统

Deepin系统安装 Deepin是和Ubuntu一样,是一个基于Debian的Linux的发型版本。 Deepin相对于Ubuntu,Deepin更适合中国用户的使用习惯。 一 官网工具制作启动盘 制作启动盘、和安装系统,操作非常简单,nice! 官网提供了…

【数据结构】串的模式匹配:简单的模式匹配算法,KMP算法

欢~迎~光~临~^_^ 目录 知识树 1、什么是串的模式匹配 2、简单的模式匹配算法 3、KMP算法 3.1 算法原理 3.2 C语言实现KMP算法 3.3 求next数组 3.4 KMP算法优化(对next数组的优化) 知识树 1、什么是串的模式匹配 串的模式匹配是在一个字符串中…

NSA SELinux将在Linux 6.6中去品牌化为SELinux

导读安全增强型 Linux (Security-Enhanced Linux,SELinux) 是一个 Linux 内核模块,也是 Linux 的一个安全子系统;提供了一个实施访问控制安全策略的安全模块,现在已被广泛用于增强生产型 Linux 服务器和其他系统的安全性。 安全增…

ChatGPT 或其它 AI,能用在文书创作上吗?

新的申请季已经正式开始,一些热门项目的ED截止日期也不再遥远,因此很多准留学生们都已经开始了关于文书的创作。 而随着科技的不断发展,以ChatGPT为首的一众AI工具也作为一种辅助手段愈发融入了我们的生活。 那么不免就会有一些同学在准备申…

基于springboot实现“闲一品”交易平台电商系统项目【项目源码+论文说明】

基于springboot实现“闲一品”交易平台电商系统项目 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开…

redis的基础底层篇 zset的详解

一 zset的作用以及结构 1.1 zset作用 redis的zset是一个有序的集合,和普通集合set非常相似,是一个没有重复元素的字符串集合。常用作排行榜等功能,以用户 id 为 value,关注时间或者分数作为 score 进行排序。 1.2 zset的底层结…

【计算机网络】Tcp详解

文章目录 前言Tcp协议段格式TCP的可靠性面向字节流应答机制超时重传流量控制滑动窗口(重要)拥塞控制延迟应答捎带应答标志位具体标志位三次握手四次挥手粘包问题TCP异常情况listen的第二个参数 前言 前面我们学习了传输层协议Udp,今天我们一…

春秋云镜 CVE-2013-2134

春秋云镜 CVE-2013-2134 S2-015 靶标介绍 2.3.14.3 之前的 Apache Struts 2 允许远程攻击者通过标记在通配符匹配期间未正确处理的所提出的操作名称的请求执行任何 OGNL 代码,这是与 CVE-2013-2135 不同的漏洞。 启动场景 漏洞利用 工具利用 得到flag flag{b92…

.360勒索病毒和.halo勒索病毒数据恢复|金蝶、用友、ERP等数据恢复

导言: 随着数字化时代的持续发展,网络安全威胁也变得前所未有地复杂和难以应对。在这个充满挑战的网络环境中,勒索病毒已经成为了一种极为危险和破坏性的威胁。最近引起广泛关注的是.360勒索病毒,一种可怕的恶意软件,…

基于深度学习的加密恶意流量检测

加密恶意流量检测 研究目标定位数据收集数据处理基于特征分类算法的数据预处理基于源数据分类算法的数据预处理 特征提取模型选择基于数据特征的深度学习检测算法基于特征自学习的深度学习检测算法 训练和评估精确性指标实时性指标 应用检验改进 摘录自:Mingfang ZH…

如何实现 pdf 转 word

前言:最直接的方式 wps 充会员可以直接转,但是单纯为了 使用这个功能有没啥必要 pdf转word方法 在线转换wps转换其他收费转换方式 在线转换 介绍在线转换,虽然样式简陋但是可以转换成功,转换以后也没有失真 http://ssyr.mynatap…

#循循渐进学51单片机#步进电机与蜂鸣器#not.8

1、能够理解清楚单片机IO口的结构。 2)t1相当于PnP三级管,t2相当于npn三极管 3) 强推挽io具有较强的驱动能力,电流输出能力很强。 2、能够看懂上下拉电阻的电路应用,并且熟练使用上下拉电阻。 3、理解28BYJ-48减速步进电机的工作…

Android 官方屏幕适配之ScreenMatch

背景: Android 项目的一个app需要适配手机平板,为了一套UI和可以适配2个不同屏幕,记录一个适配的技巧: 前提,使用这个框架:GitHub - wildma/ScreenAdaptation: :fire:一种非常好用的 Android 屏幕适配——…

#循循渐进学51单片机#c语言基础和流水灯实现#not.3

1、熟练掌握二进制、十进制和十六进制的转换方法。 多少进制就是多少之间相加,比如十六进制就是十六一次一加;二进制转化十六进制,分成四个一组。 2、C语言变量类型与取值范围,for、while等基本语句的用法。 for、while等基本语句…

基于Y向连贯性算法的多边形扫描线生成(适用于凸多边形和凹多边形)【原理+java实现】

问题介绍 给定一个多边形,可能是凸多边形,也可能是凹多边形,现需要生成一系列线条将多边形描述出来,示例如下图 原始方法 遇到这个问题,大家首先想到的方法可能是:使用一系列的竖线来和多边形进行相交&…

Java入坑之语法糖

一、for和for-each 1.1for和for-each概念 for 循环是一种常用的循环结构,它可以通过一个变量(通常是 i)来控制循环的次数和范围。for 循环的语法格式如下: for (初始化; 布尔表达式; 更新) {//代码语句 }for-each 循环是 Java …

数据库系统的三级模式和二级映射

数据库系统的三级模式结构基本概念模式(schema)外模式(external schema)内模式 (Internal Schema) 数据库系统的二级映射外模式/模式映象模式/内模式映象 总结感谢 💖 数据库系统的三级模式结构 数据库系统…

Web安全与攻防

Web安全概述 在Internet大众化及Web技术飞速演变的今天,在线安全所面临的挑战日益严峻。伴随着在线信息和服务的可用性的提升,以及基于Web的攻击和破坏的增长,安全风险达到了前所未有的高度。Web安全可以从以下三个方面进行考虑:…