一、定义

数据分箱(Binning)作为数据预处理的一部分,也被称为离散分箱或数据分段。其实分箱的概念其实很好理解,它的本质上就是把数据进行分组

  • 分箱就是把数据按特定的规则进行分组,实现数据的离散化,增强数据稳定性,减少过拟合风险。逻辑回归中进行分箱是非常必要的,其他树模型可以不进行分箱。

二、分箱原因

在建立逻辑回归模型的过程中,基本都会对特征进行分箱的操作。有些树模型,虽然不是必须,也会对一些特征进行一些分箱,这里主要的原因是增强鲁棒性与避免过拟合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMLWURl7-1624412436437)(
在实际建模中,分箱一般都是针对连续型数据(如价格、销量、年龄)进行的。但是从理论上,分箱也可以对进行。比如,有些分类型数据可取的值非常多,像中国的城市这种数据,这种情况下可以通过分箱,让已经是离散型的数据变得更加离散,比如,城市可以被划分为一级城市、二级城市、三级城市,或者把垃圾分为有害垃圾、可回收垃圾、湿垃圾、干垃圾等等。

所以经过分箱后的数据,有以下如下特点:

  • 数据可取值的范围变小了

  • 数据的可取值会更加确定与稳定

  • 数据中信息会变得模糊,不再那么精确

三、分箱方法与python实现

1、分箱方法

2、连续型特征的分箱

连续型特征的分箱分为无监督分箱与有监督分箱两类,分别各有2种应用的比较广的方法:

  • 无监督分箱:不需要提供Y,仅凭借特征就能实现分箱

    • 等宽分箱
    • 等频分箱
  • 有监督分箱:需要结合Y的值,通过算法实现分箱
    • 决策树分箱
    • 卡方分箱
  • python实现分箱

等距分箱:pd.cut()

等频分箱:pd.qcut()

import pandas as pd# 导入一列数据
df = pd.DataFrame({'年龄':[29,7,49,12,50,34,36,75,61,20,3,11]})df['等距分箱'] = pd.cut(df['年龄'],4)    # 实现等距分箱,分为4个箱
df['等频分箱'] = pd.qcut(df['年龄'],4)    # 实现等频分箱,分为4个箱df

3、有监督分箱

有监督分箱相比无监督分箱要复杂一些,主要是因为有监督分箱会应用卡方检验与决策树算法来确定边界。当然,这种方法虽然复杂,但是实际分箱的效果一般会更好,也更加合理。

之所以这两种算法叫有监督分箱,就是因为分箱边界的切分是需要Y的值才能进行的。

  • 决策树分箱:用要进行分箱的这个特征与Y进行决策树的拟合,决策树训练后的结果会提供内部节点的阈值,这个阈值就会成为分箱的边界。

简单点讲,我们如果想对年龄这组数据进行决策树分箱,我们首先要拿到预测目标Y的值。

那么决策树分箱的方法,就是通过这两列数据训练决策树模型,并将结果中树的分支点作为分箱的边界。

一般来说,我们可以直接通过Python中的sklearn拟合决策树,并进行分箱结果提取。但是在Github中,有一个很好用的分箱包scorecardpy,可以直接实现决策树分箱。

示例如下,如图所示,我们不需要输入箱的个数,决策树分箱会自动计算并提供最合理的分箱逻辑。

import pandas as pd
import scorecardpy as sc# 导入两列数据
df = pd.DataFrame({'年龄': [29,7,49,12,50,34,36,75,61,20,3,11],'Y'   : [0,0,1,1,0,1,0,1,1,0,0,0]})bins = sc.woebin(df, y='Y', method='tree')  # 决策树分箱
sc.woebin_plot(bins)

  • 卡方分箱:以卡方检验为基础衍生出来的,卡方检验原本是测试数据是否符合卡方分布的。在这里其实就是对两个相邻的区间进行卡方检验,检测它们是否存在分布上的差异。通过卡方分箱得到的箱数是通过预先设定的阈值决定,这个方法有点类似合并同类项,算法会将具有最小卡方值的区间与相邻的最小卡方区间进行合并,合并到分箱个数达到阈值为止。

在Python中,之前提到的scorecardpy包同样可以实现卡方分箱。

import pandas as pd
import scorecardpy as sc# 导入两列数据
df = pd.DataFrame({'年龄': [29,7,49,12,50,34,36,75,61,20,3,11],'Y'   : [0,0,1,1,0,1,0,1,1,0,0,0]})bins = sc.woebin(df, y='Y', method='chimerge')  # 卡方分箱
sc.woebin_plot(bins)

四、分箱与算法应用
分箱操作一般只在分类问题中进行,在分类问题中,对逻辑回归算法,分箱是极为重要且必须的。而对于树模型,如lightGBM、XGBoost等模型,分箱不是一个必须操作,但是却能够预防模型的过拟合并使模型的稳定性更好。

就是分类问题中的逻辑回归(LR,Logistic Regression)算法。之所以它必须用分箱,原因是逻辑回归的本质是线性模型,如果不进行分箱,不只特征的鲁棒性会极差,而且会导致模型的倾斜,很可能无法产生很好的结果。

而树模型(lightGBM、XGBoost等)对所有的输入特征都当做数值型对待,如果是离散型的数据,是需要进行One-Hot编码的,即将特征转化为哑变量(Dummy Variables)。因此分箱不是必须的,但是分箱仍然可以帮助模型预防过拟合。需要注意的只是,分箱后,还是需要把数据进行哑变量处理的。

数据预处理 -----数据分箱相关推荐

  1. 数据预处理的分箱操作

    介绍 我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险.尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化.而特征离散化处理通常采 ...

  2. python抽样_python数据预处理 :数据抽样解析

    何为数据抽样: 抽样是数据处理的一种基本方法,常常伴随着计算资源不足.获取全部数据困难.时效性要求等情况使用. 抽样方法: 一般有四种方法: 随机抽样 直接从整体数据中等概率抽取n个样本.这种方法优势 ...

  3. 一、数据预处理——数据归一化 数据标准化

    一.数据预处理--数据归一化 & 数据标准化 点击标题即可获取文章相关的源代码文件哟! 1.1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据 ...

  4. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  5. python数据预处理——数据分箱(将值归类)

    数据分箱的常用案例便是:根据成绩分为不及格.及格.良.优秀 示例 无标签 import pandas as pdvalue_list = [10, 20, 30.4, 59, 61, 79, 80, ...

  6. mysql 分组排序_Python、PowerBI、Excel、MySQL,都能做?搞清楚数据聚合与分箱

    阅读提示 本内容为日常频繁使用的数据处理操作,不涉及底层技术问题,烦请爱钻牛角的杠精绕行. 本内容尽量简单直白.步骤详细,适合数据分析入门.特别喜欢技术语言的大佬们,可自行跳过. 上一篇:数据更新删除 ...

  7. 数据预处理+数据清理

    1.概述 实际的数据库极易受噪声.缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源.低质量的数据将会导致低质量的挖掘结果.有大量的数据预处理技术: - - 数据清理:可以用来清楚数 ...

  8. Pandas数据预处理|数据清理

    Pandas数据预处理(Data Preprocess)-数据清理 日期:2021/4/27 作者:就叫易易好了 注:本篇文章采用的数据集为"vgsales.csv",下载链接:h ...

  9. 超全面 pandas 数据预处理+数据概览 处理技巧整理(持续更新版)

    这篇文章主要是整理下使用pandas的一些技巧,因为经常不用它,这些指令忘得真的很快.前段时间在数模美赛中已经栽过跟头了,不希望以后遇到相关问题的时候还去网上查(主要是太杂了).可能读者跟我有一样的问 ...

最新文章

  1. KMPLAYER无法播放rmvb格式的解决办法
  2. PHP实现类似百度搜索自动完成(代码简单)
  3. SQLServer 2012重启服务后,自增1的标识列一次增长了1000左右
  4. 【M1芯片兼容】office 2021 Mac正式版最新更新
  5. day1作业:登录接口
  6. fastapi 基础使用
  7. Interesting Finds: 2008.04.06
  8. 年薪百万是社会认同,更是自身价值体现
  9. c++图书管理系统_我用Python帮学校写了一款图书管理系统!教导员居然请我吃饭
  10. jQuery的回调支持
  11. 你要的《高性能MySQL》.pdf
  12. 改变空间参考,文本框显示prj文件内容
  13. 上海航芯 | 从STM32F103到ACM32F403的U盘程序移植工程
  14. 计算机cs怎么使用技巧,CS里的fps设置方法(显卡篇)
  15. 【JavaScript】网页轮播图
  16. 字符串比较 python
  17. 使用C/C++来打开与关闭文件(fopenfclose)
  18. break如何跳出多层循环?
  19. springboot整合mina
  20. 还原系统就是这么简单

热门文章

  1. Python读书笔记-每日篇-20190219|激活码生成器
  2. Tampermonkey(油猴)去除谷歌翻译换行符脚本
  3. 字节面经|年薪70W|大数据|四面+定级面|已拿Offer
  4. 报表类大数据数据存储方案和财务数据脱敏
  5. PS调节图片:拉伸、变形
  6. 微信小程序开放「分享到朋友圈」功能
  7. TE/TM/TEM波简要对比
  8. 2022 ACM Fellow名单出炉!北大梅宏、CMU邢波、腾讯俞栋等13位华人入选
  9. python编写万年日历
  10. JS姓名和手机号脱敏处理