介绍

我们在建立模型前,一般需要对特征变量进行离散化,特征离散化后,模型会更稳定,降低模型过拟合的风险。尤其是采用 logsitic 建立评分卡模型时,必须对连续变量进行离散化。而特征离散化处理通常采用的就是分箱法,数据分箱(也称为离散分箱或分段)是一种数据预处理技术,用于减少次要观察误差的影响,提高泛化性。

数据分箱又分为有监督分箱和无监督分箱,是否使用标签进行离散化(分箱)决定了有监督还是无监督的离散化方法。

知识点

  • 无监督分箱
  • split 分箱
  • merge 分箱

无监督分箱

这里为了实验,我们就随机生成了一些实验数据,下面先来看下具体详情:

import pandas as pd
import numpy as npdata = pd.read_csv("data.csv")
data.shape
(252939, 88)
data.head()
datetime category_1 category_14 category_77 category_21 category_13 category_62 category_68 category_42 category_28 ... category_71 category_3 category_34 category_58 category_47 category_25 category_48 y category_74 category_79
0 2020-06-13 0.495720 11638800 90 -999 1 0 0 0 6 ... 0 100007 0.574799 3 1 0.560708 1.0 0 -1.0 79
1 2020-10-22 0.517549 734893200 38 -999 2 0 0 6 5 ... 1 100008 0.390684 5 1 0.495632 1.0 0 100.0 132
2 2020-09-11 0.435992 860778000 21 9 1 0 0 11 229 ... 1 200000 0.473826 37 2 0.462364 1.0 1 400.0 20
3 2020-05-05 0.504451 872010000 143 -999 1 0 0 4 33 ... 1 100008 0.491736 34 2 0.440723 1.0 1 -1.0 53
4 2020-05-13 0.511435 846349200 56 -999 2 0 0 3 0 ... 1 100008 0.529865 0 1 0.474624 1.0 1 400.0 83

其中 datetime 表示数据日期;y 表示标签值,取值1、0;category_1 ~ category_86 表示用户的特征数据。

等频法:

等频法属于自动分箱,每个箱内的样本数量是相同的,假设有 10000 个样本,设置频数为 100,则按照数值排序后,就会分成 100 个箱子。等频法在 python 中的实现如下所示。

"""
qcut函数是根据数据本身的数量来对数据进行分割
:param X: 原始数据,只接收1维矩阵或Series
:param q: 整数,当q为整数时,代表分箱数
:param duplicates: 默认值为raise,如果X中有重复值时会报错。当duplicates='drop'时,X中有重复值时会对分箱合并
:param labels: 接收array型或False型数据,当labels=False时,只返回分箱的索引。当labels为array时,其长度要和q相等
"""
equal_frequency_cut = pd.qcut(data.category_34, q=5, duplicates="drop", labels = range(0, 5))

下面是分箱后的结果,我们可以看到分箱后的数据基本是均匀分布的(最后两个柱子不均匀是因为有重复数据,在分箱时进行了数据合并)。

import pandas as pd
from sklearn import datasetsequal_frequency_cut.hist()

等距法:

等距法同样属于自动分箱,可以理解为每个箱子中的数据极差是相同的,也就是区间的距离是一致的。等距法在 python 中的实现如下所示。

"""
cut函数是根据数据的值来对数据进行分割
:param X: 原始数据,只接收1维矩阵或Series
:param bins: 为整数时,代表分箱数,和qcut的q参数一样
:param labels: 接收array型或False型数据,当labels=False时,只返回分箱的索引。当labels为array时,其长度要和bins相等
"""
equal_distance_cut = pd.cut(data.category_34, 5, labels = range(0, 5))

同样的我们再来看下分箱完的结果,此时分箱后的数据就不再均匀分布。

equal_distance_cut.hist()

自定义法:

通常在业务中,会根据经验,对分箱规则做出定义。这里的经验既可以是专业人员的之前经验,也可以是数据探索性分析中得出的结论。自定义法在 python 中的实现如下所示。

"""
cut函数是根据数据的值来对数据进行分割
:param X: 原始数据,只接收1维矩阵或Series
:param bins: 为array时,代表自定义分箱区间,默认左开右闭
:param labels: 接收array型或False型数据,当labels=False时,只返回分箱的索引。当labels为array时,其长度要和bins相等
"""
user_defined_cut = pd.cut(data.category_34, [0, 0.5, 0.6, 1], labels = ['(0, 0.5]', '(0.5, 0.6]', '(0.6, 1]'])

下面是划分结果

user_defined_cut.hist()
<matplotlib.axes._subplots.AxesSubplot at 0x27b1500ea88>

聚类法:

分箱其实就是一个聚类的应用,我们希望具有相同特征的数据点能够被放置在同一个箱子中,因此可以通过聚类的方式找到具有相同属性的类别。聚类分箱就是用 python 中的 k-means 函数进行划分。

from sklearn.cluster import KMeansnum_clusters = 3 km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=40,init='k-means++',n_jobs=-1)
result = km_cluster.fit_predict(np.array(data.category_34).reshape(-1,1))
cluster_cut = pd.DataFrame({'Data':np.array(data.category_34),"Categories":result})
cluster_cut.head()
Data Categories
0 0.574799 1
1 0.390684 2
2 0.473826 0
3 0.491736 0
4 0.529865 0

下面是用聚类方式划分的分布情况

cluster_cut.Categories.hist()

同时在聚类分析中还有一个对聚类效果的评价,这里简单介绍一下,常用的聚类效果评价标准。

对于每个点

数据预处理的分箱操作相关推荐

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

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

  2. 【Python】使用Pandas对数值进行分箱操作的4种方法

    使用Pandas对数值进行分箱操作的4种方法 方法1:between & loc 方法2:cut 方法3:qcut 方法4:value_counts 补充材料 分箱是一种常见的数据预处理技术, ...

  3. python 数据处理之分箱操作

    什么是分箱? 简单点说就是将不同的东西,按照特定的条件放到一个指定容器里,比如水果 把绿色的放一个篮子里,红色一个篮子等等,这个篮子就是箱,而水果就是数据 颜色就是条件 什么样式的数据要进行分箱 数据 ...

  4. Pandas 对数值进行分箱操作的4种方法总结对比

    分箱是一种常见的数据预处理技术有时也被称为分桶或离散化,他可用于将连续数据的间隔分组到"箱"或"桶"中.在本文中,我们将讨论使用 python Pandas 库 ...

  5. 三、数据预处理——处理分类型数据:编码与哑变量

    三.处理分类型特征:编码与哑变量 点击标题即可获取文章相关的源代码文件哟! 在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法等都只能够处理数值型数据,不能处理文字,在sklearn ...

  6. 6 机器学习 IV与WOE 分箱 过抽样与欠抽样

    机器学习 1 IV与WOE 1.1 IV IV,Information Value,指的是信息价值或者信息量. IV可以理解为特征筛选的量化指标, 用于衡量数据特征的预测能力或者在模型预测过程中对预测 ...

  7. mysql内数据离散化,R语言数据预处理操作——离散化(分箱)

    一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入数据 # 这里我们使用的是鸢尾花数据 ...

  8. 数据科学猫:数据预处理 之 数据分箱(Binning)

    进击的橘子猫正式改名上线啦! 我的CSDN主页:https://blog.csdn.net/Orange_Spotty_Cat 也欢迎大家搜索微信公众号"进击的橘子猫",我也会定期 ...

  9. R语言数据预处理——离散化(分箱)

    R语言数据预处理--离散化(分箱) 一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入 ...

最新文章

  1. 006_Ajax发送POST请求
  2. mysql异步非阻塞方式_如何理解swoole异步非阻塞?
  3. eolinker使用初体验(一)
  4. protobuf导出golang,调整默认tag的方法
  5. python中class什么意思_【转载】在python的class中的,self到底是什么?
  6. 计算机类中外合作办学情况,郑州大学2021年河南省本科一批各专业录取分数统计...
  7. YOLO v3网络结构分析
  8. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海),签到题G Fibonacci
  9. HTML图片跟随鼠标移动代码,网页怎么实现图片跟随鼠标移动
  10. project.management.cattle.io not found
  11. Android高手笔记 - 网络优化
  12. mac远程连接腾讯云虚拟机
  13. 激战和ErgoDex DX1
  14. DataFrame详解——缺失数据处理
  15. pbootcms开发助手3.15 下载地址
  16. 金立手机电话录音在哪里找
  17. 院士领衔,BAT齐聚,世界区块链大会·武汉早鸟票被“秒光”
  18. html 小程序开发 搭建,云开发(小程序端,web端+博客搭建部署)
  19. python输出字符串居中_字符串函数第一个大写以及字符串居中显示打印金字塔
  20. 无线局域网基础知识(一)

热门文章

  1. minio图片展示(minio图片上传地址为内网,展示时为外网)
  2. 药物相关 PK(药代动力) 、PD(药效)指标知识
  3. [DP解题] 切割钢锯条问题
  4. CNN简单实战:PyTorch搭建CNN对猫狗图片进行分类
  5. VSCode python 路径设置为 anaconda 路径
  6. 单面机51小车程序_车辆工程学院举行“51单片机智能小车”电子设计成果答辩展示...
  7. 互联网、云大数据相关书籍推荐
  8. HTML:链接的使用
  9. 本地linux安装php环境,linux安装php环境
  10. 数据库中的数据完整性(实体完整性、域完整性、引用完整性)