python计算方差膨胀因子_【通俗有趣】方差膨胀因子解决多元共线性问题(附Python代码与数据)...

关注一下~,更多商业数据分析案例等你来撩

前言

探索性数据分析、数据清洗与预处理和多元线性回归模型构建完毕后,为提升模型精度及其稳健性,还需进行许多操作。方差膨胀因子便是非常经典的一步,原理简单,实现优雅,效果拔群。源代码源数据可空降文末。

原理趣析

多重线性回归模型的主要假设之一是我们的预测变量(自变量)彼此不相关。我们希望预测变量与反应变量(因变量)相关,而不是彼此之间具有相关性。如言情剧中的 A 喜欢B,B 却喜欢 C,结果发现 C 其实喜欢 A;而 B 的一举一动很有可能影响着 A,所以当我们把 B和C 作为自变量来预测因变量 A 的行为时,这两个自变量之间的相互影响就会有点让人难受。

公式解释

方差膨胀因子(Variance Inflation Factor,以下简称VIF),是指解释变量之间存在多重共线性时的方差与不存在多重共线性时的方差之比。

上图公式可以看出在方差膨胀因子的检测中:每个自变量都会有一个膨胀因子值VIF_i,最后根据值的大小来选择是否删减

Ri^2 表示相关性,是谁跟谁的相关性呢?是自变量中的某一变量与除它外剩余的自变量进行多元线性回归,取回归结果,即模型精度来作为这个变量与剩余自变量的相关性。听起来可能有点绕,这里举一下实例(用 “ 面积、卧室数量和浴室数量 ” 作为自变量来预测房价,在进行自变量的方差膨胀因子的检测时,面积、卧室数和浴室数轮流做单独的因变量,剩下的两个变量作为自变量,来看看这三个自变量中那个变量对其余两个变量的解释性高)

Ri^2 越大,如已经到了 0.9,那分母就很小,vif_i 的值就等于 10,即表示这个自变量已经同时解释了另外的某个或多个自变量,存在多元共线性,可以考虑删除一些自变量。

VIF越大,显示共线性越严重。经验判断方法表明:当0

效果实现

本文将使用 Python 数据分析利器 Jupyter Notebook 实现。虽然前人大神们已经有了完整的实现步骤 https://etav.github.io/python/vif_factor_python.html

但他们的实现方法还是会轻微复杂,笔者这里提供一个自写函数的方法

使用自写函数来检测各自变量的方差膨胀因子

发现变量 bedrooms 和 bathrooms 的方差膨胀因子都超过了 10。其实方差因子通常成对出现,通常较大的两个方差膨胀因子表明这两个变量自身本来就具有高度相关性,即这两个变量一起才解释一种东西,可以考虑去除一个自己并不怎么感兴趣的变量即可,也回到了我们最开始的目的:多重线性回归模型的主要假设之一是我们的预测变量彼此不相关,我们希望预测变量与反应变量相关,而不是彼此之间具有相关性。

bedrooms 和 bathrooms 的方差膨胀因子异常也能从上一张 ols 建模结果的图中看到端倪。将变量之间的相关性以热力图的形式呈现后,发现 ols 建模的结果是 bedrooms 每增加一个单位,房价还减少 -2925.8063 ???而热力图则反映出bedrooms 与房价呈现比较强的正相关关系。

所以我们可考虑去掉方差膨胀因子最大的变量 bedrooms,后再进行一次 ols 建模

对比两次建模结果,发现其实删除某个方差膨胀因子异常的变量后建模结果也不变,但我们需要注意的是:具体问题还得结合具体业务来分析,有时候尽管出现了多元共线性,但也还是需要保留方差膨胀因子异常的变量。注:相关数据源和超详细的代码(python,Jupyter Notebook 版本 + 详细注释)已经整理好,在 “ 数据分析与商业实践 ” 公众号后台回复 “ vif ” 即可获取。案例实战 | 逻辑回归实现客户流失预测​mp.weixin.qq.com案例实战 | Python 实现 RFM 模型​mp.weixin.qq.com

后续会不断更新常见场景下的 Python 实践

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值