1.数据分箱

含义:

对连续变量离散化;实际上就是按照属性值划分的子区间,可以简单理解为分段处理(不同的是对特征进行分箱后,需要对分箱后的每组woe编码进行评估,才能放进模型训练);

意义:
1.模型更稳定,特征离散化后,起到简化逻辑回归模型的作用,降低过拟合风险;
2.变量离散化后对异常数据有很强的鲁棒性;
3.将逻辑回归模型转换为评分卡形式的时候,分箱也是必须的;
分组原则:
1.组间差异大;
2.组内差异小;
3.每组占比不低于5%
4.必须有1、0两种分类;

2.分箱方法

2.1无监督分箱:

2.1.1.等距离(宽度)分箱:

将变量的取值范围分为k个等宽的区间,每个区间当作一个分箱。

2.1.2.等频度(深度)分箱:

把观测值按照从小到大的顺序排列,根据观测的个数等分为k部分,每部分当作一个分箱,每箱具有相同的记录数; 例如,数值最小的1/k比例的观测形成第一个分箱,等等。

2.1.3.聚类分箱:

基于K-means聚类法将观测值聚为k类,但在聚类过程中需要保证分箱的有序性:第一个分箱中所有观测值都要小于第二个分箱中的观测值,第二个分箱中所有观测值都要小于第三个分箱中的观测值,等等。

2.1.4.用户自定义区间:

根据需要自定义区间,更多基于专家经验与业务逻辑,比如55岁对于职场女性,35岁对于初级程序员

2.2 有监督分箱: |

有监督分箱方法包括但不限于 最小熵(minimumentropy),Best-KS 分箱,卡方分箱等方法

3.最小熵(minimumentropy)

在分箱时考虑因变量的取值,使得分箱后达到最小熵(minimumentropy):
(1)熵值公式
(2)假设因变量为分类变量,可取值1,…,J。令pl(j)表示第l个分箱内因变量取值为j的观测的比例,l=1,…,k,j=1,…,J;那么第l个分箱的熵值为Jj=1[-pl(j)×log(pl(j))]。如果第l个分箱内因变量各类别的比例相等,即pl(1)=…=pl(J)=1/J,那么第l个分箱的熵值达到最大值;如果第l个分箱内因变量只有一种取值,即某个pl(j)等于1而其他类别的比例等于0,那么第l个分箱的熵值达到最小值。

(3)令rl表示第l个分箱的观测数占所有观测数的比例;那么总熵值为kl= 1rl×Jj=1[-pl(j)×log(pl(j ))]。需要使总熵值达到最小,也就是使分箱能够最大限度地区分因变量的各类别。

4.Best-KS 分箱

4.1 KS统计量的定义

KS(Kolmogorov-Smirnov)统计量由两位苏联数学家A.N. Kolmogorov和N.V. Smirnov提出。KS统计量是基于经验累积分布函数(Empirical Cumulative Distribution Function,ECDF)建立的,一般定义为:

KS = max{|cum(positive_rate|-cum(negative_rate)|}

4.2 KS的计算方式:

计算每个评分区间的正负样本数。
计算各每个评分区间的累计正样本数占总正样本数比率(positive%)和累计负样本数占总负样本数比率(negative%)。
计算每个评分区间累计正样本占比与累计负样本占比差的绝对值(cum(positive_rate|-cum(negative_rate)),然后对这些绝对值取最大值记得到KS值。

在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强。这里要说的ks值是变量的KS值,而不是模型的KS值——指自变量x对于因变量y有没有区分度,我们常会分正负样本群体来观察该变量的分布差异里的KS值。KS值越大,表示该变量越能将正,负客户的区分程度越大。通常来说,KS>0.2即表示特征有较好的准确率。

通常来说,KS越大,表明正负样本区分程度越好。KS在模型中的业务评价标准下所示。由于理解因人而异,不一定完全合理,仅供参考。

KS

区分能力

<0.2

不建议采用

0.2-0.4

较好

0.4-0.5

良好

0.5-0.6

很强

0.6-0.75

非常强

>0.75

太强了,可能有问题

KS-曲线

Python做等距螺旋 python 等距分箱_Python做等距螺旋

4.3 Best-KS分箱

Best-KS分箱的算法执行过程是一个逐步拆分的过程:
1.将特征值值进行从小到大的排序。
2.计算出KS最大的那个值,即为切点,记为D。然后把数据切分成两部分。
3。重复步骤2,进行递归,D左右的数据进一步切割。直到KS的箱体数达到我们的预设阈值即可。

Best-KS分箱的特点:
连续型变量:分箱后的KS值<=分箱前的KS值
分箱过程中,决定分箱后的KS值是某一个切点,而不是多个切点的共同作用。这个切点的位置是原始KS值最大的位置

5.卡方分箱

主要讲卡方分布和卡方检验是什么,分箱算法ChiMerge

5.1 卡方分布

卡方分布(chi-square distribution, χ2-distribution)是概率统计里常用的一种概率分布,也是统计推断里应用最广泛的概率分布之一,在假设检验与置信区间的计算中经常能见到卡方分布的身影。定义如下:

若k个独立的随机变量Z1, Z2,…, Zk 满足标准正态分布 N(0,1) , 则这k个随机变量的平方和:

Python做等距螺旋 python 等距分箱_python_02


为服从自由度为k的卡方分布,记作:

Python做等距螺旋 python 等距分箱_Python做等距螺旋_03


或者

Python做等距螺旋 python 等距分箱_评分卡_04

5.2 卡方检验

χ2检验是以χ2分布为基础的一种假设检验方法,主要用于分类变量之间的独立性检验。其基本思想是根据样本数据推断总体的分布与期望分布是否有显著性差异,或者推断两个分类变量是否相关或者独立。一般可以设原假设为 :观察频数与期望频数没有差异,或者两个变量相互独立不相关。实际应用中,我们先假设原假设成立,计算出卡方的值,卡方表示观察值与理论值间的偏离程度。卡方值用于衡量实际值与理论值的差异程度,这也是卡方检验的核心思想。
卡方值包含了以下两个信息:

1).实际值与理论值偏差的绝对大小。
2).差异程度与理论值的相对大小。

上述计算的卡方值服从卡方分布。根据卡方分布,卡方统计量以及自由度,可以确定在原假设成立的情况下获得当前统计量以及更极端情况的概率p。如果p很小,说明观察值与理论值的偏离程度大,应该拒绝原假设。否则不能拒绝原假设。

5.3 卡方检验实例

某医院对某种病症的患者使用了A,B两种不同的疗法,结果如 表1,问两种疗法有无差别?

表1 两种疗法治疗卵巢癌的疗效比较

组别

有效

无效

合计

有效率(%)

A组

19

24

43

44.2

B组

34

10

44

77.3

合计

53

34

87

60.9

可以计算出各格内的期望频数。
第1行1列: 43×53/87=26.2
第1行2列: 43×34/87=16.8
第2行1列: 44×53/87=26.8
第2行2列: 4×34/87=17.2
先建立原假设:A、B两种疗法没有区别。根据卡方值的计算公式,计算:算得卡方值=10.01。得到卡方值以后,接下来需要查询卡方分布表来判断p值,从而做出接受或拒绝原假设的决定。首先我们明确自由度的概念:自由度k=(行数-1)*(列数-1)。 这里k=1.然后看卡方分布的临界概率表,我们可以用如下代码生成:

import numpy as np
from scipy.stats import chi2
import pandas as pd
# chi square distribution
percents = [ 0.95, 0.90, 0.5,0.1, 0.05, 0.025, 0.01, 0.005]
df =pd.DataFrame(np.array([chi2.isf(percents, df=i) for i in range(1, 30)]))
df.columns = percents
df.index =df.index+1
pd.set_option('precision', 3)
df



0.950

0.900

0.500

0.100

0.050

0.025

0.010

0.005

1

0.004

0.016

0.455

2.706

3.841

5.024

6.635

7.879

2

0.103

0.211

1.386

4.605

5.991

7.378

9.210

10.597

3

0.352

0.584

2.366

6.251

7.815

9.348

11.345

12.838

4

0.711

1.064

3.357

7.779

9.488

11.143

13.277

14.860

5

1.145

1.610

4.351

9.236

11.070

12.833

15.086

16.750

6

1.635

2.204

5.348

10.645

12.592

14.449

16.812

18.548

7

2.167

2.833

6.346

12.017

14.067

16.013

18.475

20.278

8

2.733

3.490

7.344

13.362

15.507

17.535

20.090

21.955

9

3.325

4.168

8.343

14.684

16.919

19.023

21.666

23.589

10

3.940

4.865

9.342

15.987

18.307

20.483

23.209

25.188

11

4.575

5.578

10.341

17.275

19.675

21.920

24.725

26.757

12

5.226

6.304

11.340

18.549

21.026

23.337

26.217

28.300

13

5.892

7.042

12.340

19.812

22.362

24.736

27.688

29.819

14

6.571

7.790

13.339

21.064

23.685

26.119

29.141

31.319

15

7.261

8.547

14.339

22.307

24.996

27.488

30.578

32.801

16

7.962

9.312

15.338

23.542

26.296

28.845

32.000

34.267

17

8.672

10.085

16.338

24.769

27.587

30.191

33.409

35.718

18

9.390

10.865

17.338

25.989

28.869

31.526

34.805

37.156

19

10.117

11.651

18.338

27.204

30.144

32.852

36.191

38.582

20

10.851

12.443

19.337

28.412

31.410

34.170

37.566

39.997

21

11.591

13.240

20.337

29.615

32.671

35.479

38.932

41.401

22

12.338

14.041

21.337

30.813

33.924

36.781

40.289

42.796

23

13.091

14.848

22.337

32.007

35.172

38.076

41.638

44.181

24

13.848

15.659

23.337

33.196

36.415

39.364

42.980

45.559

25

14.611

16.473

24.337

34.382

37.652

40.646

44.314

46.928

26

15.379

17.292

25.336

35.563

38.885

41.923

45.642

48.290

27

16.151

18.114

26.336

36.741

40.113

43.195

46.963

49.645

28

16.928

18.939

27.336

37.916

41.337

44.461

48.278

50.993

29

17.708

19.768

28.336

39.087

42.557

45.722

49.588

52.336

查表自由度为1,p=0.05的卡方值为3.841,而此例卡方值10.01>3.841,因此 p < 0.05,说明原假设在0.05的显著性水平下是可以拒绝的。也就是说,原假设不成立。

5.4 ChiMerge分箱算法

ChiMerge卡方分箱算法由Kerber于1992提出。包括以下两个阶段:

(1).初始化阶段:

首先按照属性值的大小进行排序(对于非连续特征,需要先做数值转换,比如转为坏人率,然后排序),然后每个属性值单独作为一组。

(2).合并阶段:

a.对每一对相邻的组,计算卡方值。

b.根据计算的卡方值,对其中最小的一对邻组合并为一组。

c.不断重复a,b直到计算出的卡方值都不低于事先设定的阈值,或者分组数达到一定的条件(如最小分组数5,最大分组数8)。值得注意的是,小编之前发现有的实现方法在合并阶段,计算的并非相邻组的卡方值(只考虑在此两组内的样本,并计算期望频数),因为他们用整体样本来计算此相邻两组的期望频数。

参考引用

1.IV WOE & 评分卡 & 分箱2.数据分箱的常用方法3.Python评分卡建模—卡方分箱4.模型指标—KS5.【有监督分箱】方法二: Best-KS分箱6.Python评分卡建模—卡方分箱