当前位置:   article > 正文

多元线性回归多重共线性的危害_多元线性回归识别危险因素

多元线性回归识别危险因素

多元线性回归多重共线性的危害

作者:居居
日期:2021-11-05

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False   # 步骤二(解决坐标轴负数的负号显示问题)
  • 1
  • 2
  • 3
  • 4
  • 5
#载入数据:
data=pd.read_clipboard()
data.columns=["日期","需求量","本品价格","竞品价格","平均收入水平","广告投入"]
  • 1
  • 2
  • 3

这是一份真实的数据,来自美国某高校商学院的示例数据库。阿三国(印度)某地方企业的芥末油(调味品)产品的需求量和其他影响因素的统计数据见下表。

研究目标是,根据统计数据,研究本品的"需求量"和其他的四个变量究竟有没有关系,注意:时间维度并不影响需求量

data.head(10)
  • 1
日期需求量本品价格竞品价格平均收入水平广告投入
0Apr-111289065.0069.224343.171170.00
1May-111285065.9070.674347.591162.26
2Jun-111318065.4074.774356.441164.06
3Jul-111378565.3475.004369.711193.13
4Aug-111388066.0075.004387.401241.55
5Sep-111268069.0077.294409.511254.15
6Oct-111329069.0079.064436.051149.57
7Nov-111349869.2581.374467.011200.06
8Dec-111198074.5684.004502.401220.40
9Jan-121208578.0091.614542.201082.70

通常,我们会先画出因变量与其他四个自变量的关系,也就是绘制散点图。

从下面四张图中我们可以看出,4个自变量和因变量之间似乎存在线性关系。

fig,ax=plt.subplots(1,4,figsize=(18,4),dpi=150)
for i,xName in zip(np.arange(0,4,1),data.columns[2:]):
    ax[i].scatter(data.loc[:,"需求量"],data.loc[:,xName])
    ax[i].set_xlabel("需求量")
    ax[i].set_ylabel(xName)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

然后我们进行多元线性回归

import statsmodels.api as sm
X=data.loc[:,["本品价格","竞品价格","平均收入水平","广告投入"]]#解释变量
X["const"]=1#添加常数项
Y=data['需求量']#被解释变量
model = sm.OLS(Y, X).fit()#模型拟合
model.summary2()#统计信息汇总
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Model:OLSAdj. R-squared:0.670
Dependent Variable:需求量AIC:869.0905
Date:2021-11-05 11:53BIC:879.0355
No. Observations:54Log-Likelihood:-429.55
Df Model:4F-statistic:27.96
Df Residuals:49Prob (F-statistic):4.07e-12
R-squared:0.695Scale:5.2354e+05
Coef.Std.Err.tP>|t|[0.0250.975]
本品价格-136.616844.8461-3.04630.0037-226.7384-46.4952
竞品价格117.407839.31162.98660.004438.4081196.4074
平均收入水平-0.28230.1511-1.86880.0676-0.58600.0213
广告投入7.86511.04747.50930.00005.76039.9699
const5024.57531945.09482.58320.01281115.76098933.3897
Omnibus:1.001Durbin-Watson:1.434
Prob(Omnibus):0.606Jarque-Bera (JB):0.556
Skew:-0.241Prob(JB):0.757
Kurtosis:3.123Condition No.:115795

以上结果在我们通常看来是非常漂亮的,调整后的R2=0.67,F检验和T检验都在0.05水平显著。

然后结论就是:

在其他变量都保持不变的情况下,需求量

1.跟本品价格成负相关

2.跟竞品价格成正相关

3.跟收入水平成负相关

4.跟广告投入成正相关

这些结论貌似很合理?!

我们来做一个相关系数矩阵看看,竞品价格和本品价格存在共线性,相关系数大于0.7,为0.95,几乎就是完全相关。

import seaborn as sns
sns.heatmap(data.corr(), cmap='Blues', annot=True)

  • 1
  • 2
  • 3

在这里插入图片描述

绘制本品价格和竞品价格的散点图,可以看出本品和竞品真的相关性极强,回归方程的R2高达0.896。

plt.scatter(data["本品价格"],data["竞品价格"])
plt.xlabel("本品价格")
plt.ylabel("竞品价格")
plt.show()
X=data.loc[:,["竞品价格"]]#解释变量
X["const"]=1#添加常数项#添加常数项
Y=data['本品价格']#被解释变量
model = sm.OLS(Y, X).fit()#模型拟合
model.summary2()#统计信息汇总
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

Model:OLSAdj. R-squared:0.896
Dependent Variable:本品价格AIC:258.5114
Date:2021-11-05 11:53BIC:262.4893
No. Observations:54Log-Likelihood:-127.26
Df Model:1F-statistic:459.1
Df Residuals:52Prob (F-statistic):1.82e-27
R-squared:0.898Scale:6.7736
Coef.Std.Err.tP>|t|[0.0250.975]
竞品价格0.76490.035721.42550.00000.69330.8366
const9.03523.41502.64580.01082.182615.8878
Omnibus:4.083Durbin-Watson:0.724
Prob(Omnibus):0.130Jarque-Bera (JB):3.626
Skew:0.550Prob(JB):0.163
Kurtosis:2.366Condition No.:922
fig,ax=plt.subplots(figsize=(15,3),dpi=150)
plt.plot(data.loc[:,"日期"],data.loc[:,"竞品价格"]-data.loc[:,"本品价格"])
plt.xlabel("日期")
plt.ylabel("竞品-本品价格差")
for tick in ax.get_xticklabels():

        tick.set_rotation(90)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

竞品在任何时间点上的价格都高于本品,说明价格上竞品没有优势。

所以我们完全可以忽略竞品价格的影响,消除多重共线性,剔除竞品价格再次进行回归得到以下结果:

X=data.loc[:,["本品价格","平均收入水平","广告投入"]]#解释变量
X["const"]=1#添加常数项#添加常数项
Y=data['需求量']#被解释变量
model = sm.OLS(Y, X).fit()#模型拟合
model.summary2()#统计信息汇总
  • 1
  • 2
  • 3
  • 4
  • 5
Model:OLSAdj. R-squared:0.618
Dependent Variable:需求量AIC:876.1214
Date:2021-11-05 11:53BIC:884.0773
No. Observations:54Log-Likelihood:-434.06
Df Model:3F-statistic:29.61
Df Residuals:50Prob (F-statistic):3.78e-11
R-squared:0.640Scale:6.0647e+05
Coef.Std.Err.tP>|t|[0.0250.975]
本品价格-9.104414.7697-0.61640.5404-38.770220.5614
平均收入水平-0.00740.1289-0.05730.9546-0.26640.2516
广告投入8.59761.09597.84500.00006.396310.7989
const3420.31522012.07041.69990.0954-621.04717461.6774
Omnibus:0.946Durbin-Watson:1.749
Prob(Omnibus):0.623Jarque-Bera (JB):0.336
Skew:-0.093Prob(JB):0.846
Kurtosis:3.338Condition No.:111271

突然本品价格和平均收入水平两个变量也不显著了,那么。。。。这个结果就很难看了。甚至此时,很多人可能会认为不能踢掉竞品价格,因为它会让模型的表现变差,但是。。。事实果真如此吗?

然后我们做出4个自变量和因变量的时序图

我们从最简单的分析开始:

1.图1可以看出,需求量一直在波动,而图4的人均收入一直在增长,讲真,关系不大。

2.图2和图3似乎也跟图1的相关性不明显,结合相关关系矩阵可以知道,他们线性相关性极弱。即便是在本品价格很高的时候,需求量也可以很大啊。。。

3.图5和图1的趋势几乎相同。

说明:

就数据而言,需求量真的就只和广告投入有关

fig,ax=plt.subplots(5,1,figsize=(15,28),dpi=100)

for i,xName in zip(np.arange(0,5,1),data.columns[1:]):
    ax[i].plot(data.loc[:,"日期"],data.loc[:,xName],)
    ax[i].set_xlabel("日期")
    ax[i].set_ylabel(xName)
    
    
    for tick in ax[i].get_xticklabels():

        tick.set_rotation(90)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

于是乎,我们得到了正确的方程:

其实这个芥末油的推广模式就是。。。在小卖部贴小广告,每个月的花费只有1000多印度卢比,差不多只有100元人民币。

通过方程,我们可以很容易计算出,每多花10卢比贴海报,就可以多销售125瓶,是不是很划算?

X=data.loc[:,["广告投入"]]#解释变量
X["const"]=1#添加常数项#添加常数项
Y=data['需求量']#被解释变量
model = sm.OLS(Y, X).fit()#模型拟合
model.summary2()#统计信息汇总
  • 1
  • 2
  • 3
  • 4
  • 5
Model:OLSAdj. R-squared:0.630
Dependent Variable:需求量AIC:872.5980
Date:2021-11-05 11:53BIC:876.5760
No. Observations:54Log-Likelihood:-434.30
Df Model:1F-statistic:91.12
Df Residuals:52Prob (F-statistic):5.05e-13
R-squared:0.637Scale:5.8831e+05
Coef.Std.Err.tP>|t|[0.0250.975]
广告投入8.85270.92749.54580.00006.991710.7136
const2361.8148993.49182.37730.0212368.22774355.4019
Omnibus:1.747Durbin-Watson:1.800
Prob(Omnibus):0.417Jarque-Bera (JB):0.960
Skew:-0.239Prob(JB):0.619
Kurtosis:3.445Condition No.:10197

百度百科词条中,多重共线性存在的影响主要有:

(1)完全共线性下参数估计量不存在

(2)近似共线性下OLS估计量非有效

(3)参数估计量经济含义不合理

(4)变量的显著性检验失去意义,可能将重要的解释变量排除在模型之外

(5)模型的预测功能失效。变大的方差容易使区间预测的“区间”变大,使预测失去意义。

所以,第一个模型中,由于本品价格和竞品价格高度相关,所以得出的结果对我们产生了误导。

因此,正确使用统计学方法才能得到准确的结果,及时它是违背直觉的。你说。。。是吧?

多说两句,正确的结果可能会让你发不出论文(手动狗头),但是能给你企业省一大笔钱。就像上面的例子中,

现阶段我只要增加广告投入即可。 但是如果你只是关注模型的预测能力,似乎。。。你不关注共线性也行。。。

本文还有一些坑,需要填,因为时间关系,我并没有考察偏相关性。这个请大家自行验证。

然后,根据我老师的建议,如果大家想深入学习,可以阅读《统计反思》第五章关于多重共线的相关章节。

我不是经济学人,所以对竞品市场之类的概念不太懂,就数据论结果,欢迎交流,不喜勿喷。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/605283
推荐阅读
相关标签
  

闽ICP备14008679号