数据分桶:等宽分箱、等频分箱、分位数分箱,卡方分箱、WOE分箱、机器学习分箱

特征分箱的目的
从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
数据分桶的对象:
将连续变量离散化
将多状态的离散变量合并成少状态

分箱的原因
数据的特征内的值跨度可能比较大,对有监督和无监督中如k-均值聚类它使用欧氏距离作为相似度函数来测量数据点之间的相似度。都会造成大吃小的影响,其中一种解决方法是对计数值进行区间量化即数据分桶也叫做数据分箱,然后使用量化后的结果。

分箱的优点
处理缺失值:当数据源可能存在缺失值,此时可以把null单独作为一个分箱。
处理异常值:当数据中存在离群点时,可以把其通过分箱离散化处理,从而提高变量的鲁棒性(抗干扰能力)。例如,age若出现200这种异常值,可分入“age > 60”这个分箱里,排除影响。
业务解释性:我们习惯于线性判断变量的作用,当x越来越大,y就越来越大。但实际x与y之间经常存在着非线性关系,此时可经过WOE变换。

特别要注意一下分箱的基本原则
(1)最小分箱占比不低于5%
(2)箱内不能全部是好客户
(3)连续箱单调

以下是对各种数据分桶方法的详细介绍及相应的 Python 代码示例:

一、等宽分箱(Equal Width Binning)

  1. 原理:

    • 将数据的取值范围划分为若干个等宽的区间。
  2. 步骤:

    • 确定数据的取值范围。
    • 计算区间宽度。
    • 将数据分配到各个区间中。
  3. Python 代码示例:

import pandas as pd

data = [22, 25, 30, 35, 40, 45, 50, 55, 60, 65]
df = pd.DataFrame(data, columns=['value'])

# 假设分为 3 个等宽区间
bins = range(20, 70, 15)
labels = ['20-34', '35-49', '50-64']
df['equal_width_binned'] = pd.cut(df['value'], bins=bins, labels=labels)

print(df)

二、等频分箱(Equal Frequency Binning)

  1. 原理:

    • 将数据分成若干个区间,使得每个区间中的数据数量大致相等。
  2. 步骤:

    • 对数据进行排序。
    • 根据要划分的区间数量,确定每个区间应包含的数据数量。
    • 将数据分配到各个区间中。
  3. Python 代码示例:

data = [22, 25, 30, 35, 40, 45, 50, 55, 60, 65]
df = pd.DataFrame(data, columns=['value'])

# 假设分为 3 个等频区间
quantiles = pd.qcut(df['value'], q=3, labels=['low', 'medium', 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rubyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值