专栏名称: CDA数据分析师
CDA数据分析师品牌官方微信,开放、创新、分享。
目录
相关文章推荐
CDA数据分析师  ·  【内推】银行初级金融数据分析师 ·  18 小时前  
大数据分析和人工智能  ·  20个很强的DeepSeek提问公式 ·  昨天  
CDA数据分析师  ·  【内推】银行初级金融数据分析师 ·  2 天前  
CDA数据分析师  ·  【干货】画用户画像与找相亲对象一样简单 ·  2 天前  
大数据文摘  ·  《封神2》崩的越惨,DeepSeek的刀就越锋利。 ·  4 天前  
51好读  ›  专栏  ›  CDA数据分析师

【干货】比‘红蓝对决’还精彩!哑变量如何在分类变量中扮演关键角色

CDA数据分析师  · 公众号  · 大数据  · 2025-02-07 10:05

正文

1月23日,曼城俱乐部官方宣布签下埃及前锋马尔穆什。英超联赛官方预告,2月23日曼城主场迎战利物浦时,埃及前锋萨拉赫与马尔穆什有望同场竞技。


曼城的新援马尔穆什将对阵利物浦的萨拉赫,这不仅是两位埃及国脚的巅峰较量,更是蓝色与红色的经典对决。

“红蓝对决”在体育比赛中通常指 两支球队的经典对抗 ,而这些球队的代表色是“红色”和“蓝色”。


比如我们文章那篇新闻, 利物浦(红色)、埃弗顿 (蓝色) 这两支球队都位于利物浦市,这场同城德比不仅是球迷的狂欢,也是英超联赛中历史最悠久的对决之一。



在数据分析中,并不是所有变量都能直接用来计算,尤其是像“红蓝”这样的分类变量。


在利用和处理这种分类数据时,经常不能直接拿来使用,比如在CDA数据分析师Level II 新教材《量化策略分析》线性回归这章中强调在进行 线性回归建模 时,需要对 多分类自变量 进行 哑变量变换 ,如下图。

大家看完教材后,可以去CDA认证小程序刷题,巩固基础知识,提升建模方面的能力。


哑变量是什么


哑变量,也叫做 虚拟变量 (dummy variable),“dummy”这个词有“假的”、“虚 拟的”、“哑的”等意思,国内的翻译五花八门,但它们指的其实完全一样的东西。


严格意义上,哑变量并不算一种变量类型(比如连续变量、分类变量),更准确地说,它是一种将 多分类变量 转换为 二元变量 的方法。我们刚才提到哑变量也叫做dummy variable,这个“虚拟”到底体现在哪呢?

假设我们有一个数据集,其中有一个列表示颜色,这列的值可能是“红色”、“蓝色”或者“绿色”。



在这里“颜色”这个变量很明显是多分类变量(颜色有多个选项),我们要让计算机能够理解这些不同颜色的信息,所以需要将这些“红色”、“蓝色”、“绿色”转换为计算机能识别的0和1这种二分变量。

如何构建呢,如下,把 每个颜色对应一个独立的列 ,并且 每一行标明该颜色是否出现。

变成虚拟变量后的数据:


这就是“虚拟”的意思!我们把每个颜色的类别通过0和1表示出来—— 1表示该颜色出现,0表示没有出现。 这样,原本复杂的颜色信息就变得简单直白,通过这种方式,虚拟变量让我们将 分类变量 转化为 数值型数据 ,便于后续的数据分析和机器学习模型使用。


为什么需要哑变量




回归分析的基础:线性

哑变量这种技术我们经常在回归分析中看到,如上文的教材线性回归那章节,回归分析主要探讨自变量X和因变量Y的关系,如下是其数学表示:

无论线性回还是logistic回归都要求x与y或者y的转换存在着线性关系。

通过数学表示,我们知道X对因变量Y的影响,可以用回归系数b1表示。

这种影响可以解释为:X每增加一个单位,Y平均增加b1的量,比如X是收入,Y是支出,那么X每增加1元的收入,支出将变化b1。这样的解释要求X与Y有线性关系。

这意味着X无论是10000元还是20000元,增加1个单位的情况下,支出的变化(增加)的幅度都一致,不然b1不代表X是10000时对支出的影响,也不代表X是2000时对Y的影响。




无序多分类自变量加入回归分析


但令人头痛的是:无序多分类自变量与因变量Y之间不存在线性关系。


比如下面这个 例子

有个研究者想要分析四种不同类型社区(用0、1、2、3表示)中的 SO (即二氧化硫)浓度,看看社区类型是否与 SO 水平有关,或者说,不同类型的社区 SO 水平是否有差异。


在这个例子中, SO 水平是我们想要分析的 因变量 (也就是要研究的结果),而社区类型是 自变量 (也就是我们用来解释或预测结果的因素)。因为社区类型是一个分类数据,我们可以使用线性模型来进行分析。

下图中, 黑色圆点 代表每个社区类型的数据点。 蓝色回归线 表示线性回归拟合的结果,展示了社区类型和 SO 水平之间的关系。


假如,我们把这个线性回归的模型计算出来了,其斜率是200,这意味着随着社区类型从0到3变化, SO 水平是线性增加的,每次变化的幅度(斜率)是200。换句话说,从社区类型0变到1, SO 水平增加200。从社区类型1变到2, SO 水平增加200。从社区类型2变到3, SO 水平增加200。


但是,我们从图上发现并且完全如此,比如从1到2的变化增幅更大,从2到3增加的幅度没有那么明显。也就是说200的变化增幅是平均值。因此,无序多分类变量不能直接纳入回归进行分析。


如何构建哑变量,分析应用时注意什么


我们想要研究的是不同的社区类型对于空气中的 SO 的影响,其实这里就隐含着我们需要有 参照物 ,在 解释分类变量 影响和结果 时,必须要有参照物,比如我们经常看到新闻:60岁以上的群体糖尿病发病率更高,这意味着是与“60岁以下人群”进行对比。如果没有参照组,单单提到“60%”这个数字,无法判断它是高还是低。


因此如果多分类变量有k个类别,则可以转化为k-1个二分变量。如变量x为赋值1、2、3、4的四分类变量,就可以转换为3个赋值为0和1的二分类变量,然后这些变量跟剩下的作为参照。

通过这种 虚拟变换 ,就可以把原来 一个系数 变成 多个系数 ,从而解决了分类变量回归系数无法取平均值的棘手问题。这在非线性关系的模型中,特别重要。


那么如何在软件中实现哑变量的变换呢? 目前大多数软件都可以实现,这里用python加以演示:


函数介绍


pandas 中可以利用 get_dummies() 函数进行哑变量变换。


代码实操


假如我们有一个数据集:


通过prefix='' 参数设置编码后的变量名,默认为:原始列名_取值。




CDA数据分析力测评专业可靠,如果想了解自己的数据分析能力,扫码开测,做到心理有数


往期干货文章:

【干货】画用户画像与找相亲对象一样简单

【干货】5分钟学会数据分析方法之【对比分析法】

【干货】数据可视化很难?不存在的!一文弄懂PyEcharts可视化技术







请到「今天看啥」查看全文


推荐文章
CDA数据分析师  ·  【内推】银行初级金融数据分析师
18 小时前
大数据分析和人工智能  ·  20个很强的DeepSeek提问公式
昨天
CDA数据分析师  ·  【内推】银行初级金融数据分析师
2 天前