python归一化处理_数据标准化处理(附视频

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

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

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的区间里而已,下面的文字里,帮大家理清楚两者的区别。

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

dfe35698e1635aca91e2a17de04ba85a.png

归一化跟标准化

不同:

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

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

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

相同:

从上图的推导来分析

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里运行以上代码,先看下用标准化处理后,数据有什么不同:

762b6d30469224fcff92ce1cff51aeec.png

可以看到用的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))

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

(建议在pc端观看会更清晰)

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

=>

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


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

c87456c330c7a598aff13e7c1f022d2d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值