数据标准化处理

关注公众号“番茄风控大数据”,获取更多数据分析与风控大数据的实用干货。
 

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

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的区间里而已,下面的文字里,帮大家理清楚两者的区别。
在这里插入图片描述
归一化跟标准化的计算方法:

归一化跟标准化

不同:
归一化:缩放仅仅跟最大和最小值的差别有关
标准化:缩放和每个点都有关系,他的值主要是通过方差体现出来的

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

相同:
从上图的推导来分析

  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))

十年职场生涯,这个长期混迹在风控界和科技界,摸爬滚打的大叔,曾经就职于全国最大的固网运营商平台、国内最大的ERP软件公司和一家老牌的互金公司,如果你想了解他,欢迎关注 “番茄风控大数据”一起学习一起聊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值