数据科学中的陷阱II:定性变量的处理

作者: tgbaggio | 来源:发表于2018-09-09 09:23 被阅读8次

在之前的文章里《数据科学中的陷阱I:变量的数学运算合理吗?》,我们讨论过定性变量,也就是表示类别的变量,比如性别、省份等。对于这类变量,不能在模型里直接使用它们,因为定性变量之间的数学计算是毫无意义的。另一方面,定性变量是一类很常见的变量,通常带着很有价值的信息。因此,这篇文章就将讨论如何正确地在模型里使用定性变量。

对于定性变量,常见的处理方法有两种:一种是将定性变量转换为多个虚拟变量,另一种对将有序的定性变量转换为定量变量。

一、虚拟变量

正如前文中讨论的,直接对定性变量数字编码,得到的变量将无法进行有意义的数学运算。那么,相应的解决方法就是使得变换之后的变量不能直接做数学运算。

为了便于理解,我们先来看一个简单的例子:使用身高和性别对体重构建线性回归模型。性别是一个二元定性变量,可能的取值为男或女。用两个新生成的变量来取代性别,记为x_1, x_2。其中,x_1 = 1表示性别为男,x_1 = 0表示性别不为男;x_2类似,表示性别是否为女。在学术上,新生成的变量x_1, x_2被称为虚拟变量(dummy variable)。虚拟变量是一种特殊的离散型变量,可能的值只有两个:0或1,因此也被称为0/1变量。

下面我们来看一个例子,我们希望用身高和性别来一个人的体重,用y表示体重,z表示身高,于是有:

y = ax_1 + bx_2 + cz + d + \varepsilon \tag{1}

注意到x_1 + x_2 = 1,也就是变量和变量成线性关系。这会导致另外一个问题:多重共线性(多重共线性源自线性模型,它是指由于自变量之间存在高度相关关系而使模型参数估计不准确,我们会在后面的文章里详细讨论)这个由虚拟变量引起的多重共线性问题在学术上被称为虚拟变量陷阱(dummy variable trap)。为了规避这个问题,我们对公式(1)做如下的数学变换,得到:

y = a(x_1 + x_2) + (b - a)x_2 + cz + d + \varepsilon \\ y = (b - a)x_2 + cz + (a + d) + \varepsilon \tag{2}

上面的数学转换可翻译为:首先选择性别男为基准类别,生成一维虚拟变量x_2,变量的含义与之前相同。这个变量前面的系数b - a表示性别女相对于性别男(基准类别)的体重差异。需要注意的是,针对二元定性变量,从表面上来看,直接对变量数字编码同虚拟变量效果一样。但这只是一个巧合而已,两种方法有本质的区别。

将上面的方法推广到n元定性变量(可能取值为n个的定性变量)。选择一个类别作为基准类别,并生成n - 1个虚拟变量,分别表示剩下的n - 1个类别。在搭建模型时,用这n - 1个新生成的虚拟变量代替原来的定性变量。具体过程如图1所示。

图1

二、从定性变量到定量变量

前面讨论的虚拟变量的方法是比较通用的处理方法。但这种方法有一个很明显的缺点:每个虚拟变量都是0或1,无法提供更多的信息。特别是对于多个有序的定性变量,这会损失掉每个定性变量本身的顺序信息和定性变量间的关联信息。为了解决这个问题,常常根据类别的顺序,将定性变量转换为定量变量。具体的转换方法有很多,但限于篇幅,这里只讨论其中的一种:针对二元分类问题的Ridit scoring(此方法在保险业中应用很广),如图2所示。

假设有序的定性变量xt个可能的取值,记为(1, 2, ..., t)。而且对于被预测值,排在后面的类别,y = 1发生的可能性越小。也就是说,对于y = 1这件事,其他变量相同时,类别1的概率最大,类别t的概率最小。用(p_1, p_2, ..., p_t)分别表示各个类别所占比例,于是类别的Ridit scoring为:

B_i = \sum_{j < i} p_j - \sum_{j > i}p_j \tag{3}

图2

对于一般的定性变量,我们也可以使用所谓的WOE(weight of evidence)方法来将其转换为定量变量,这种方法在信贷风控领域十分广泛。具体来说,假设二元分类问题里有两个类别,用B和G表示(这样标记源自金融领域,B表示bad,G表示good)。同样假设,定性变量xt个可能的取值,记为(1, 2, ..., t)。那么对于取值i,它的WOE值为:

WOE_i = \ln \frac{B_i / B_t}{G_i / G_t} \tag{4}

其中B_i表示x = i时,B类别的数量,B_t表示B类别的总数量;G_iG_t表示的意思类似。

三、广告时间

这篇文章的大部分内容参考自我的新书《精通数据科学:从线性回归到深度学习》

李国杰院士和韩家炜教授在读过此书后,亲自为其作序,欢迎大家购买。

相关文章

  • 数据科学中的陷阱II:定性变量的处理

    在之前的文章里《数据科学中的陷阱I:变量的数学运算合理吗?》,我们讨论过定性变量,也就是表示类别的变量,比如性别、...

  • 数据科学中的陷阱:变量的数学运算合理吗?

    数据科学中有各种各样的模型,有的听起来很简单,比如线性回归;有点呢,听起来就很吓人,比如深度学习。但是不管什么样的...

  • 5. Java 中的变量 【连载 5】

    1. 理解 Java 中的变量 程序中需要处理数据,Java 中的变量是用来装载数据。变量类似一个盒子,我们通过这...

  • 大数据学习导图

    数据获取 数据获取与查看 数据处理 数据处理I:缺失值填补 数据处理II:数据转换 数据处理III:无量纲化 特征...

  • 数据科学中的陷阱I:变量的数学运算合理吗?

    数据科学中有各种各样的模型,有的听起来很简单,比如线性回归;有的呢,听起来就很吓人,比如深度学习。但是不管什么样的...

  • 005_wz_hm_python中变量的定义与使用

    程序是用来处理数据的,而变量是用来存储数据的。 在python中,每个变量在使用前都必须赋值,变量赋值以后,该变量...

  • 2018-11-01

    《R数据科学》--前言 整洁数据的标准:每列是一个变量,每行是一个观测。数据处理:数据转换和整理数据可视化与建模沟...

  • [Python与数学建模-入门使用]-2Python基础知识

    1基础数据处理   数据处理最基本的对象就是变量和常数。变量的值可变动,常数则是固定不变的数据。变量命名规则如下:...

  • R入门笔记-R数据集基本操作(1)

    R数据集的基本操作:增加变量、删除变量、变量重命名、缺失值处理、数据框合并、数据排序 增加变量 变量删除 变量重新...

  • Task 2:EDA

    EDA目标 熟悉数据集 了解变量间的相互关系 为数据处理和特征工程做准备 内容介绍 载入数据科学库和可视化库 数据...

网友评论

    本文标题:数据科学中的陷阱II:定性变量的处理

    本文链接:https://www.haomeiwen.com/subject/omyrgftx.html