关于变量分箱主要分为两大类:有监督型和无监督型

对应的分箱方法:

A. 无监督:(1) 等宽 (2) 等频 (3) 聚类

B. 有监督:(1) 卡方分箱法(ChiMerge) (2) ID3、C4.5、CART等单变量决策树算法 (3) 信用评分建模的IV最大化分箱 等

本篇使用python,基于CART算法对连续变量进行最优分箱

由于CART是决策树分类算法,所以相当于是单变量决策树分类。

简单介绍下理论:

CART是二叉树,每次仅进行二元分类,对于连续性变量,方法是依次计算相邻两元素值的中位数,将数据集一分为二,计算该点作为切割点时的基尼值较分割前的基尼值下降程度,每次切分时,选择基尼下降程度最大的点为最优切分点,再将切分后的数据集按同样原则切分,直至终止条件为止。

关于CART分类的终止条件:视实际情况而定,我的案例设置为 a.每个叶子节点的样本量>=总样本量的5% b.内部节点再划分所需的最小样本数>=总样本量的10%

python代码实现:

import pandas as pd

import numpy as np

#读取数据集,至少包含变量和target两列

sample_set = pd.read_excel('/数据样本.xlsx')

def calc_score_median(sample_set, var):

'''

计算相邻评分的中位数,以便进行决策树二元切分

param sample_set: 待切分样本

param var: 分割变量名称

'''

var_list = list(np.unique(sample_set[var]))

var_median_list = []

for i in range(len(var_list) -1):

var_median = (var_list[i] + var_list[i+1]) / 2

var_median_list.append(var_median)

return var_median_list

var表示需要进行分箱的变量名,返回一个样本变量中位数的list

def choose_best_split(sample_set, var, min_sample):

'''

使用CART分类决策树选择最好的样本切分点

返回切分点

param sample_set: 待切分样本

param var: 分割变量名称

param min_sample: 待切分样本的最小样本量(限制条件)

'''

# 根据样本评分计算相邻不同分数的中间值

score_median_list = calc_score_median(sample_set, var)

median_len = len(score_median_list)

sample_cnt = sample_set.shape[0]

sample1_cnt = sum(sample_set['target'])

sample0_cnt = sample_cnt- sample1_cnt

Gini = 1 - np.square(sample1_cnt / sample_cnt) - np.square(sample0_cnt / sample_cnt)

bestGini = 0.0; bestSplit_point = 0.0; bestSplit_position = 0.0

for i in range(median_len):

left = sample_set[sample_set[var] < score_median_list[i]]

right = sample_set[sample_set[var] > score_median_list[i]]

left_cnt = left.shape[0]; right_cnt = right.shape[0]

left1_cnt = sum(left['target']); right1_cnt = sum(right['target'])

left0_cnt = left_cnt - left1_cnt; right0_cnt = right_cnt - right1_cnt

left_ratio = left_cnt / sample_cnt; right_ratio = right_cnt / sample_cnt

if left_cnt < min_sample or right_cnt < min_sample:

continue

Gini_left = 1 - np.square(left1_cnt / left_cnt) - np.square(left0_cnt / left_cnt)

Gini_right = 1 - np.square(right1_cnt / right_cnt) - np.square(right0_cnt / right_cnt)

Gini_temp = Gini - (left_ratio * Gini_left + right_ratio * Gini_right)

if Gini_temp > bestGini:

bestGini = Gini_temp; bestSplit_point = score_median_list[i]

if median_len > 1:

bestSplit_position = i / (median_len - 1)

else:

bestSplit_position = i / median_len

else:

continue

Gini = Gini - bestGini

return bestSplit_point, bestSplit_position

python多项分时求和_python实现连续变量最优分箱详解--CART算法相关推荐

  1. python实现连续变量最优分箱详解--CART算法

    今天小编就为大家分享一篇python实现连续变量最优分箱详解–CART算法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 关于变量分箱主要分为两大类:有监督型和无监督型 对应的分箱方 ...

  2. python在统计专业的应用_Python统计学一数据的概括性度量详解

    一.数据的概括性度量 1.统计学概括: 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析.总结,并进而进行推断和预测,为相关决策提供依据和参考.统计学主 ...

  3. python输入参数改变图形_Python基于Tensor FLow的图像处理操作详解

    本文实例讲述了Python基于Tensor FLow的图像处理操作.分享给大家供大家参考,具体如下: 在对图像进行深度学习时,有时可能图片的数量不足,或者希望网络进行更多的学习,这时可以对现有的图片数 ...

  4. python内置序列类型_Python序列内置类型之元组类型详解

    Python序列内置类型之元组类型详解 1.元祖的概念 Python中的元组与列表类似,都是一个序列,不同的是元组的元素不能修改而已. 2.元组的创建 元组使用小括号,列表使用方括号. tup = ( ...

  5. python爬虫常见报错_Python爬虫常见HTTP响应状态码详解

    在使用Python进行网页数据抓取时,经常会遇到无数据返还或错误等异常,这个时候可以通过status_code命令来查看获得http请求返回的状态码,以便查找原因并制定相应的解决方案.import r ...

  6. python代码覆盖率怎么统计的_Python代码覆盖率统计工具coverage.py用法详解

    1.安装coverage pip install coverage 安装完成后,会在Python环境下的\Scripts下看到coverage.exe: 2.Coverage 命令行 coverage ...

  7. python多线程读取数据库数据_Python基于多线程操作数据库相关知识点详解

    Python基于多线程操作数据库相关问题分析 本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢 ...

  8. python的xpath用法介绍_python爬虫之xpath的基本使用详解

    本篇文章主要介绍了python爬虫之xpath的基本使用详解,现在分享给大家,也给大家做个参考.一起过来看看吧 一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XM ...

  9. python的常量和变量_python中的常量和变量代码详解

    局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...

最新文章

  1. 适合自己的vim配置文件
  2. Python基本语法_运算符详解
  3. Android获取网速的方法
  4. tms脚本演示代码之一
  5. python屏幕的交互(读取输出信息)input,raw_input的区别
  6. 学Python可以用来干什么?就业情况究竟怎么样?
  7. 计算机科学创新大赛,计信学院举办第六届科技创新小发明大赛
  8. 李宏毅机器学习homework0
  9. FreeSWITCH 初步
  10. 人脸识别考勤机软件驱动安装和设置
  11. 华为hcia认证有哪些方向?华为hcia认证哪些方向比较好,值得推荐?
  12. PS通道抠图及选区白边处理
  13. 照相机的曝光(光圈和快门)
  14. 英文期刊催稿信模板_英文投稿,询问进展,催稿 模版信
  15. 微信小程序springboot在线考试系统小程序+后台管理系统 | 计算机毕业设计
  16. light-4j真的比springboot快44倍吗?
  17. C语言实现设置桌面壁纸
  18. 五分钟理解MVC三层架构
  19. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程03:碰撞检测》
  20. 数据可视化,BizCharts图表库入坑历程

热门文章

  1. 扩增子统计绘图7三元图
  2. R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)
  3. R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片
  4. pandas使用shift方法进行特征差分
  5. R假设检验之Grubbs异常检测(Grubbs’ Test)
  6. R可视化多元线性回归模型
  7. pandas分层索引(层级索引、MultiIndex)的创建、取值、切片、统计计算以及普通索引和层级索引的转换方法
  8. 社会网络计算与社会网络分析、核心指标有哪些?社会网络计算有什么意义?
  9. 一、网络爬虫----爬取豆瓣网前250条数据
  10. 【ES6】Module模块详解