实操|特征变量多重共线性的分析与检验(含代码)

对于Linear回归、Logistic回归等线性模型来讲,特征变量的多重共线性是衡量模型性能的一个重要维度。因此,如何有效识别并解决模型特征的多重共线性问题,是实际业务场景建立线性模型过程的必要环节。本文首先对特征多重共线性的定义进行描述,然后结合实际样例重点介绍多重共线性的常用检验方法。
1、多重共线性定义
对于多元线性模型
Y=k0+k1X1+k2X2+…+knXn,如果特征变量X1、X2、Xn之间存在高度线性相关关系,则称为多重共线性。从特征共线性程度的大小进行区分,可以分为完全共线性和近似共线性。
例如,对于多个特征变量,多重共线性的公式可以表示为
a1X1+a2X2+…+anXn=0,
如果系数an不全为0,即某个特征变量可以用其他特征变量的线性组合表示,则称特征变量之间存在完全共线性,假设系数an均为1,则X1=-(X2+X3+…+Xn)。
近似共线性可以通过公式a1X1+a2X2+…+anXn+b=0说明,若系数an不全为0,b为误差随机项,则称特征变量之间存在近似共线性,假设系数an均为1,b为-1,则X1=1-(X2+X3+…+Xn)。
现举个实际回归模型样例,进一步解释特征多重共线性的影响。对于Y=X1+1000,其中Y为授信额度,X1为消费等级,公式表明当消费等级X1增加1个单位时,授信额度Y也会增加1个单位。假设此模型引入另一个特征变量X2,含义为网购等级,且样本数据分布与X1完全相同,则对于模型Y=X1+1000可变换为Y=0.5X1+0.5X2+1000,此时当X1(消费等级)增加1个单位时,Y(授信额度)仅会增加0.5个单位,这个结果有些不符合实际业务情况,X2(网购等级)在很大程度上减弱了X1(消费等级)的信息价值。从这里可以看出,多重共线性会降低模型某些特征的实际重要性,对模型的预测结果产生不利的影响。
因此,在实际业务场景中,多重共线性会对模型产生较多影响,使得线性模型的方程式精准度下降,标准误差增大,降低某些重要特征的贡献性,甚至使模型输出不符合实际应用的结论。根据特征变量的多重共线性问题,在工作实际场景中经常采用的分析方法是相关系数判断、方差膨胀系数检验,接下来我们分别对其原理逻辑进行阐述。在具体分析过程中,本文采用的样例数据共包含6000条样本和8个特征变量,其中前10条样本如图1所示,详见附件样本数据。
实操|特征变量多重共线性的分析与检验(含代码)_第1张图片
图1 样本数据示例
2、相关系数判断
特征变量之间的相关性系数主要是通过pearson、spearman等指标来衡量,在Python语言中采用corr()函数可以很方便算出特征变量之间的相关性系数,默认输出pearson相关系数。若需要算出spearman相关系数,则需要在函数中定义对应参数,即corr(method=‘spearman’)。
对于pearson、spearman系数的区别,pearson系数反映了数据的线性关系,而spearman并不一定是线性关系。一般情况下,对于连续型线性关系数据或符合正态分布数据,用pearson相关系数是最为合适的,虽然用spearman相关系数也可以,只是效率相比pearson系数较低。但是,对于定序数据,代表了样本数据的等级或顺序的逻辑关系,此时需要采用spearman系数来衡量数据的相关性程度。
在分析pearson、spearman系数时,二者的业务意义是一致的,取值范围均为[-1,1],正值代表正相关,负值代表负相关,绝对值越大,说明变量之间的相关性越强。在实际业务理解中,当系数值在<0.5时,相关性程度较弱;当系数值在0.5~0.7之间时,相关性程度较强;当系数值>0.7时,相关性程度很强。
根据图1数据样例可知,待评估特征变量X1~X6均为连续型数据,因此可以采用pearson、spearman系数来分析各特征的相关性程度,实现代码如图2所示,最终输出的相关系数结果如图3、4所示,当然,我们优先关注pearson系数。
实操|特征变量多重共线性的分析与检验(含代码)_第2张图片
图2 相关性系数代码

实操|特征变量多重共线性的分析与检验(含代码)_第3张图片
图3 pearson系数

实操|特征变量多重共线性的分析与检验(含代码)_第4张图片
图4 spearman系数

以上pearson与spearman的系数结果,第i行第j列的数值代表第i个特征变量与第j个特征变量之间的相关系数。例如,特征X1与特征X2的pearson相关系数为0.189056,pearson相关系数为0.177538,由于取值均小于0.5,说明X1与X2的相关性程度较弱。此外,通过pearson系数与spearman系数的结果对比可知,整体分布规律类似,即变量之间的pearson系数较高时,对应的spearman系数也较高,这也反映了二者有较多相似之处,但在具体应用过程中,需要根据数据的分布类型决定哪个系数更为合适。结合本文数据样例的特征属性,以pearson系数来衡量变量的相关性程度,spearman系数仅作为参考。
由图3的pearson系数结果可以了解到,X2与X6的相关性系数为0.998051,相关性很强,此外相关性强的变量组合还有X3与X4(0.762773)、X3与X5(0.846644)、X4与X5(0.735877),这些变量之间的相关系数均大于0.7,说明相关性程度很强。在实际业务中,此种情况为了避免模型变量多重共线性问题,可以对其中相关性较强的变量进行删除,但是具体删除哪个特征,需要从多个维度分析。例如,特征X2与X6的相关性很强,且各自与其他特征(X1、X3、X4、X5)的相关性均较弱,因此可以考虑根据特征信息值IV进行选择,保留IV值较高的特征。现通过代码实现的特征IV的输出,具体如图5所示:
实操|特征变量多重共线性的分析与检验(含代码)_第5张图片
图5 信息值IV代码

通过以上代码得到各特征变量的IV值如图6所示,对于相关性很强的特征X2与X6,由于IV值比较接近(0.042与0.043),删除其中一个均可;对于相关性也很强的特征X3与X5,由于X3的IV值(0.058)明显大于X5的IV值(0.038),可以直接删除特征X5。当然,在具体场景中,对于变量的选择还可以考虑特征的区分度、覆盖率、业务含义等信息,这里是通过较为常用的IV指标,说明下在特征相关性较强的情况下对变量筛选的思路。
在这里插入图片描述
图6 特征IV值

3、方差膨胀系数
方差膨胀系数(Variance Inflation Factor)的计算公式为VIFi=1/(1-Ri2),其中VIFi衡量的是自变量Xi是否与其他自变量具有多重共线性的方差膨胀系数,Ri2是将自变量Xi作为因变量,其他自变量作为特征变量时回归的可决系数,即R-squared值,是用来衡量拟合程度的。当Ri2的取值越大,VIFi值就越大,表示自变量Xi与其他自变量之间的多重共线性较为严重。在实际业务中,一般认为VIFi<10时,该自变量与其余自变量之间的多重共线性不明显;当10<=VIFi<100时,变量之间存在较强的多重共线性;当VIFi>=100时,变量之间存在严重的多重共线性。

在Python中可以通过statsmodels模块的variance_inflation_factor()函数来得到变量之间的方差膨胀系数,如图5所示。
实操|特征变量多重共线性的分析与检验(含代码)_第6张图片
图7 VIF系数代码1

在上图的函数代码中,通过for循环依次算出每个特征变量的方差膨胀系数,并将结果保存至列表中,其中data_X.columns.get_loc(i)返回的是指定列的列序号数字。通过以上代码算出各变量的VIF方差膨胀系数如图8所示。
实操|特征变量多重共线性的分析与检验(含代码)_第7张图片
图8 方差膨胀系数1

从VIF结果来看,特征变量X2与X6的方差膨胀系数都明显大于100,说明变量之间存在严重的多重共线性,这里很容易通过前边分析特征相关性得到的结果来解释,即X2与X6的相关性程度很强(pearson系数=0.998051),此处指标VIF值自然也会很高,进一步说明了特征X2与X6的数据分布很类似。因此,需要删除VIF值较大的特征,但对于X2与X6只需要删除其中一个就可以了,原因是X2与X6的VIF值较大是二者相互导致的,这里删除VIF值最大的变量X6。接着我们看下余下特征的VIF值,具体实现代码与输出结果分别如图9、10所示。
实操|特征变量多重共线性的分析与检验(含代码)_第8张图片
图9 VIF系数代码2

实操|特征变量多重共线性的分析与检验(含代码)_第9张图片
图10 方差膨胀系数2

通过图10的VIF值结果可以看出,当删除特征X6之后,其余特征的方差膨胀系数VIF都低于10,说明这些特征变量的多重共线性较弱,满足业务场景需求,从而较大程度地降低了最终模型可能出现的共线性问题。
综上所述,对于线性回归、逻辑回归等以线性方程表达式为基础的机器学习模型,在数据建模过程中,需要特别关注多重共线性的影响。如果特征变量之间存在较强的多重共线性,必须采取相应处理方法,例如可以删除某个引起多重共线性的特征变量等,尤其是方差膨胀系数的检验,这是实际业务场景中对于判断多重共线性最常用的方法。
为了便于大家对特征变量多重共线性处理方法的理解与掌握,我们准备了具体的样本数据集与Python代码,供各位小伙伴实操练习,详情请大家移步至知识星球查看相关内容。
实操|特征变量多重共线性的分析与检验(含代码)_第10张图片


~原创文章

你可能感兴趣的:(番茄风控大数据公众号,回归,机器学习,算法)