楼主: 滨滨有利123
4263 8

[数据挖掘理论与案例] 数据标准化处理 [推广有奖]

  • 0关注
  • 31粉丝

副教授

24%

还不是VIP/贵宾

-

威望
0
论坛币
198 个
通用积分
25.4545
学术水平
1 点
热心指数
2 点
信用等级
0 点
经验
9596 点
帖子
328
精华
0
在线时间
383 小时
注册时间
2015-4-26
最后登录
2024-7-21

楼主
滨滨有利123 发表于 2019-6-29 23:44:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
之前文章一直在介绍风控领域的催收模型与策略的应用,也提及了风控系统的一些案例:风控应该知道的(风控那些事),接着也提到了风控系统,随着后面内容迭代升级,技术深入,会有越来越干货的内容,大家可以继续关注我们。

今天这篇文章介绍下数据标准化,也算是模型里一个很重要的内容。


WOE

先来介绍WOE,是信贷评分模型里经常会用到的一种编码转换方式。


WOE即证据权重,如果大家有评分卡开发经验,一般都会知道这种编码形式,这也是在逻辑回归里比较常用的编码方式。


WOE的计算公式是:

WOE=ln[(违约/总违约)/(正常/总正常)]。

(关于woe还有很多内容,后续再跟大家好好分享这个知识点)


在传统的评分卡开发里,经常将logistic回归模型转化为标准评分卡格式,WOE是对原始自变量的一种编码形式,要对一个变量进行WOE编码,需要首先把这个变量进行分组处理(也叫离散化、分箱)。


WOE编码后变量就有了某种标准化的性质,也就是说,自变量内部的各个取值之间都可以直接进行比较(WOE之间的比较),而不同自变量之间的各种取值也可以通过WOE进行直接的比较。


而且逻辑回归经过特定的转换后,每个变量跟Y(这里的Y是log(p/1-p))之间又可以用线性来表达。而且能将异常值顺带处理了,所以在传统的评分卡建模里,经常需要用woe对变量进行处理。




本篇文章,当然不仅只是提到于对变量进行woe的转换,因为在机器学习里,对变量处理经常使用其他方式的处理方式:标准化处理。


为什么要进行标准化处理:

1. 使不同的特征变量具有相同的尺度,比如影响评分模型数据里,年龄的范围是0-100岁,收入的范围是0-100万+,这个完全不是同个数量级别的,不能同时进入模型;


2. 能够加速权重参数的收敛,浅白点说就是能很快求到最优解,不用绕很多弯。


3. 简而言之:对数据标准化的目的是消除特征之间的差异性


大家主要记住上面三条重要结论就行了,如果需要更深入的了解,请看中间剖析更深入的地方,如果不想看,直接跳过。剖析之后也有资源+视频+代码指导大家练习。



开始部位,就等着你不看(#^.^#)

这一部分涉及的内容比较比较羞涩难懂,如果没有兴趣看,就知道跳过,不影响后面的内容。


其实我这里,是把标准化跟归一化混在一起了,其实如果深究起来,他们还真的是不同的概念。


不过为了方便大家的记忆,快速进入模型领域,我暂且把他们都称为数据标准化,只不过归一化只是把值锁定在0到1的区间里而已,下面的文字里,帮大家理清楚两者的区别。


归一化跟标准化的计算方法

5.jpg


归一化跟标准化


不同:

归一化:缩放仅仅跟最大和最小值的差别有关

标准化:缩放和每个点都有关系,他的值主要是通过方差体现出来的


所以两者是数据的缩放不同,从输出的范围来看,归一化理论上输出值范围不会受到范围的限制,不过其值还是会在特定狭窄的范围内。


相同:

从上图的推导来分析

1. 归一化和标准化都是一种线性变换

2. 归一化跟标准化都不会改变原始数据的数值排序


什么时候用归一化,什么时候用标准化?

如果对输出结果必须限定在0跟1之间,用归一化

如果数据存在异常值比较少,用归一化

如果存在比较多的异常点,用标准化


~到此为止~



为了帮助大家理解,来点代码实操会更好点:

from sklearn import preprocessing

a = np.array([[21, 3.5, 4.6],

                     [-150, 6, -6],

[150, 52, 100]],      dtype=np.float64)

print(a)

print(preprocessing.scale(a))


在python里运行以上代码,先看下用标准化处理后,数据有什么不同:


可以看到用的preprocessing处理数据后,之前跨度很大的数据都会压缩一定的范围内。


这里你需要用到python去练习这段代码,如果你还没用过python,请用我下面的链接下载。当然你也可以上去官网下载。为了方便广大同学,已经上传到网盘里。



练习前大家需要进行工具的下载使用,推荐anaconda:

链接:

https://pan.baidu.com/s/1e5pfZM72K_T4E32hqR6q9A

提取码:

gwyx



下面给个简易模型来进行训练,代码如下:

from __future__ import print_function

from sklearn import preprocessing

import numpy as np

from sklearn.model_selection import train_test_split

from sklearn.datasets.samples_generator import make_classification

from sklearn.svm import SVC


import matplotlib.pyplot as plt

X,y=make_classification(n_samples=300,n_features=2 , n_redundant=0, n_informative=2,

random_state=22, n_clusters_per_class=1, scale=100)

plt.scatter(X[:, 0], X[:, 1], c=y)

plt.show()

X = preprocessing.scale(X)   

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)

clf = SVC()

clf.fit(X_train, y_train)

print(clf.score(X_test, y_test))


最后大家可以参考视频,好好做下练习:


观测标准化后的结果为0.93,没有标准化的结果为0.51,所以经过标准化处理过后得分还是提升了0.4个点,是一个非常有效的处理方式。

1.png

2.png


相关的代码解释已经放到知识星球里,有兴趣的可以去观看学习,后续可留意更多相关的视频讲解操作。谢谢!



十年职场老司机,从事数据工作,长期混迹在风控界和科技界,如果想了解他,欢迎找他聊一下 !



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 1 人评分经验 论坛币 学术水平 热心指数 收起 理由
阿扁V5 + 20 + 10 + 1 + 1 精彩帖子

总评分: 经验 + 20  论坛币 + 10  学术水平 + 1  热心指数 + 1   查看全部评分

沙发
maixiaopan 发表于 2019-7-3 11:40:07
谢谢分享

藤椅
滨滨有利123 发表于 2019-7-5 17:21:20
欢迎关注公众号或者微信,里面有介绍。

板凳
瘦如刀 学生认证  发表于 2019-7-10 20:46:47
滨滨有利123 发表于 2019-7-5 17:21
欢迎关注公众号或者微信,里面有介绍。
公众号是啥啊,也没说

报纸
蛋羹1 发表于 2019-8-28 12:20:33
不错,谢谢分享

地板
滨滨有利123 发表于 2019-8-28 21:38:19
瘦如刀 发表于 2019-7-10 20:46
公众号是啥啊,也没说
番茄风控大数据

7
奥利奥甜甜圈 发表于 2019-9-20 17:28:16
谢谢分享

8
506649264 发表于 2019-11-14 21:25:10
插个眼,已关注“番茄风控大数据”,但是有一个问题,从来没接触过phython不会用,stata能不能处理呢?另外,这个数据标准化是对其中某些变量进行数据标准化还是要对所有变量进行标准化,包不包括因变量呢?求大佬解惑~~

9
滨滨有利123 发表于 2019-11-15 16:05:08
506649264 发表于 2019-11-14 21:25
插个眼,已关注“番茄风控大数据”,但是有一个问题,从来没接触过phython不会用,stata能不能处理呢?另外 ...
因变量不需要做标准化处理的。都是对全体的自变量做处理,你刚提到的那几个工具其实都不难,稍微学以下就会用了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 20:09