python线性回归预测房价_通过使用Python、pandas和statsmodels线性回归预测房屋的价格...

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

通过使用Python、pandas和statsmodels线性回归预测房屋的价格

在这篇文章中,我们将逐步通过建立线性回归模型来预测经济活动导致的房屋价格。其中涵盖的主题包括:

1.    什么是回归

2.    变量的选择

3.    利用pandas读取数据

4.    普通最小二乘假设

5.    一元线性回归

6.    回归图像

7.    多元线性回归

8.    另一个角度看偏回归图像

9.    总结

10.    实际浏览内容的缺陷

未来的文章将涵盖例如探索性分析、回归诊断和先进的回归模型等话题,但是我打算先跳过这些,以便读者可以试着动手处理数据。

什么是回归?

线性回归是一个模型,通过预测因变量(绘制在垂直或y轴上)和预测变量之间的正比例关系,从而绘制出一条直线,如图所示:

当进行建模过程时,我们会更详细地讨论线性回归。

变量的选择

我们将使用房价指数(HPI)作为因变量,通过房价指数测量住宅房的价格变动。

而对于预测变量,我们选择对宏观经济活动有影响的指标,例如失业率、利率和国内生产总值(总生产率),这样选择完全是出于直觉。对于这些变量的解释,以及它们是如何影响房价的解释,以及所有的源数据都在https://github.com/LearnDataSci/blog-post-resources/tree/master/Housing%20Price%20Index%20Regression。

利用pandas读取数据

当我们下载了本文的源数据后,请通过使用pandas的read_csv方法来读取数据。

拥有数据后,为了便于分析,我们可以调用merge方法将数据合并在一个简单的数据帧内。其中一些数据是按月份记录,而另一些是按季度记录。不必担心。我们依据某一列来合并数据帧,所以每个用于测量目的行都在其该在的位置。在下面的例子中,合并的最佳列是日期列,看下图。

让我们使用pandas的head方法快速得到变量的统计表。其中粗体的首行代表日期和将要测试线性回归模型的变量,每一行对应不同时期的变量值。

日期    sp500    居民消费价格指数    长期利率    房价指数    总失业率

0    2011-01-01    1282.62    220.22    3.39    181.35    16.2

1    2011-04-01    1331.51    224.91    3.46    180.80    16.1

2    2011-07-01    1325.19    225.92    3.00    184.25    15.9

3    2011-10-01    1207.22    226.42    2.15    181.51    15.8

4    2011-01-01    1300.58    226.66    1.97    179.13    15.2

超过15周    没有在工会找到工作的    多份工作    离开者    失败者    联邦基金利率

0    8393    2800    6816    6.5    60.1    0.17

1    8016    2466    6823    6.8    59.4    0.10

2    8177    2785    6850    6.8    59.2    0.07

3    7802    2555    6917    8.0    57.9    0.07

4    7433    2809    7022    7.4    57.1    0.08

支出总额    劳动力的公关    生产者价格指数    国内生产总值

0    5766.7    64.2    192.7    14881.3

1    5870.8    64.2    203.1    14989.6

2    5802.6    64.0    204.6    15021.1

3    5812.9    64.1    201.1    15190.3

4    5765.7    63.7    200.7    15291.0

通常聚集数据的下一步将会是探索性分析。探索性分析是我们分析变量过程的一部分(通过画图和描述性统计)和得出对于因变量最好的预测因素。为了简洁,我们将跳过探索性分析。将探索性分析记在你的脑海中,它非常重要,尽管在现实中跳过它将会影响预测额结果。

我们将使用普通最小二乘法(OLS),一个基本的但功能强大的方法来评估我们的模型。

普通最小二乘假设

OLS测量了一个线性回归模型的准确性。

OLS是基于假设,如果成立,则表明该模型大概是一个正确的透镜,通过它可以解释我们的数据。但如果假设不成立,模型的结论会失去它的有效性。所以你应该采取额外的努力来选择正确的模型,不应该有个人神秘主义和小题大做的毛病。

下面是一些OLS的假设:

1.    线性关系:一个线性关系存在于因变量和预测变量之间。而如果没有线性关系存在,线性回归不是一个解释我们数据的正确模型。

2.    无多重共线性:因变量之间不是共线的,例如它们之间没有密切的关系。如果某些因变量之间存在密切联系,可以尝试删去一个或多个共线的因变量。由于额外的预测提供了冗余信息,消除他们不应该大大减少(Adj的判定系数)(看下面)。

3.    零条件均值:观察与趋势线的平均距离(或残差)为0。结果有些是积极的,有些是消极的,但它们不会偏向于一组值。

4.    同方差性:因变量的确定性(或不确定性)是等价映射一个预测变量的所有值;也就是说在残差中没有模式。即在统计学术语中,方差是不变的。

5.    无自相关(序列相关性):自相关是指变量在观测中与本身相关。例如,如果某一天的股价影响第二天的股票价格,那么股票价格可能会连续相关的。

让我们开始建模吧。

一元线性回归

一元线性回归使用了一个预测变量来解释一个因变量。一元线性回归方程如下:

其中:

y=因变量,

ß=回归系数,

α=截距(即当独立变量为0时的预期平均价格),

x=用来预测Y的预测变量(或独立变量),

ε=误差项,占我们模型无法解释的随机性的比例。

使用statsmodels的ols函数,构造我们的模型,设定房价指数作为总失业率的一个函数。我们假定总的失业人数的增长将迫使房价下降。可能这样是错的,但我们至少得从某个方面先开始!

下面的代码展示了如何将总失业率作为预测变量的一元线性回归模型。

Out[24]:

OLS回归的结果如下:

部分变量    房价指数    决定系数    0.952

模型    OLS    邻近决定系数    0.949

方法    最小二乘法    F-统计量    413.2

日期    2017年2月17日,星期五    概率(F-统计量)    2.71e-15

时间    17:57:05    对数似然    -65.450

观测次数    23    AIC    134.9

Df残差    21    BIC    137.2

Df模型    1

协方差类型    覆盖

协同系数    标准差    t    P>|t|    [95.0%Conf.Int]

截距    313.3128    5.408    57.938    0.000    302.067

324.559

总失业率    -8.3324    0.410    -20.327    0.000    -9.185

-7.480

综合性    0.492    杜宾-沃森    1.126

概率(综合性)    0.782    雅克-贝拉(JB)    0.552

倾斜    0.294    概率(JB)    0.759

峰态    2.521    Cond.No.    78.9

根据上面得出的OLS回归结果,我们将提供一些参数的高层次解释,以了解我们的模型的实力:Adj.R-squared、系数、标准差和p值。

Adj.R-squared,我们的预测变量,总失业率可以解释95%的房价。

回归系数(coef)表示因变量的改变导致预测变量一个单位的改变,而其他变量保持不变。在我们的模型中,总失业率一个单位的增加会减少8.33的房价指数。符合我们的假设,失业率的增加似乎会降低房价。

标准差测量了总失业率系数的准确性,通过评估在相同的测试运行在不同样本的人口的情况下得到的系数变化。我们的标准差0.41是比较低的,所以表现得比较准确。

P值指当总失业率没有变化的情况下,房价指数降低8.33的可能性,即假定这两个变量之间没有关系。一个低的p值表明这些结果具有统计显著性,即通常情况下p值低于0.05。

置信区间是一个系数可能下降在内部的范围。我们有95%的自信说,总失业率的系数将落在[-9.185,-7.480]的置信区间内。

让我们使用statsmodels的plot_regress_exog函数来帮助我们理解我们的模型。

回归图像

请看下面的四幅图像。

1. “Y和拟合x”图绘制了因变量相对于我们的预测值与置信区间。相反的关系在图中表明房价指数与总失业率是负相关的,例如当一个变量增加时另一个变量减少。

2.“残差与总失业率”的图像显示了模型关于确定预测变量对应的误差。图像中每一个具体的点都是观测的值;图中的线表示那些观测值得平均值。因为有些点与平均没有距离关系,所以OLS假设同方差性成立。

3.“偏回归图像”显示了房价指数与总失业率之间的关系,考虑到在已存在的总失业率的协同因素中添加其他独立变量的影响。之后我们会看到当增加更多的变量后同样的图像会怎样变化。

4.分量和分量加残差的图像是一个偏回归图像的扩展,但显示了在总失业率的协同因素中添加了其他的独立变量后,增加的影响使得趋势线有错误。更多有关图像在这里。

下一张图描绘了我们的趋势线(绿色),观测值(点)和我们的置信区间(红色)。

到目前为止,我们的模型看上去不错,让我们增加更多的变量来看看会对总失业率产生怎样的影响。

多元线性回归

数学角度的多元线性回归方程为:

我们知道失业率不能完全解释房价。为了得到更能说明影响房价的图像,我们增加并测试了不同变量并通过分析回归结果得到了不同预测变量中更满足OLS假设的组合,同时从经济角度也保持了直观的吸引力。

我们得到的模型包含如下的变量:

联邦基金、居民消费价格指数、长期利率和国内生产总值,除此之外还有我们最初的预测变量,总失业率。

增加的新变量降低了总失业率对房价指数的影响,总失业率的影响是最不可预知的(标准误差从0.41增加到2.399),而且因为p值更高(从0增长到0.943),所以总失业率不太可能影响到房价。

虽然总失业率可能与房价指数是有关联的,我们的其他预测变量似乎是为抓住更多的房价的变化。我们给出的变量在现实生活中联系不能仅仅由一个一元线性回归封装;我们需要一个更具有鲁棒性的模型。这就是为什么当我们引入新变量时,得到的多元线性回归模型的结果发生了巨大的改变。

我们所有新引入的变量在5%阈值上具有统计学显著性,而且伴随我们假设的系数表明,我们的多元线性回归模型比一元线性回归模型更好。

下面的代码利用我们的新预测变量建立起了多元线性回归。

Out[27]: OLS回归结果

部分变量    房价指数    决定系数    0.980

模型    OLS    邻近决定系数    0.974

方法    最小二乘法    F-统计量    168.5

日期    2017年2月17日,星期五    概率(F-统计量)    7.32e-14

时间    18:02:42    对数似然    -55.164

观测次数    23    AIC    122.3

Df残差    17    BIC    129.1

Df模型    5

协方差类型    覆盖

协同系数    标准差    t    P>|t|    [95%Conf.Int.]

截距    -389.2234    187.252    -2.079    0.053    -784.291

5.844

总失业率    -0.1727    2.399    -0.072    0.943    -5.234

4.889

长期利率    5.4326    1.524    3.564    0.002    2.216

8.649

联邦基金利率    32.3750    9.231    3.507    0.003    12.898

51.852

居民消费价格指数    0.7785    0.360    2.164    0.045    0.020

1.537

国内生产总值    0.0252    0.010    2.472    0.024    0.004

0.047

综合性    1.363    杜宾-沃森    1.899

概率(综合性)    0.506    雅克-贝拉(JB)    1.043

倾斜    -0.271    概率(JB)    0.594

峰态    2.109    Cond.No.    4.58e+06

另一个角度看偏回归图像

现在让我们再次画出偏回归图像,以显示出通过包含其他预测变量导致总失业率变量是如何被影响的。总失业率在偏回归图像中缺少趋势(在上面的右上角图),相对于回归图的总失业率(上面的左下角图),表明了总失业率的作用并不是像第一个模型解释的那样。我们也看到最新变量所观测到的值始终比总失业率的观测值更接近于趋势线。重复一遍,联邦基金、居民消费价格指数、长期利率和国内生产总值对房价指数有更好的解释。

这些偏回归图像重申了多元线性回归模型较于一元线性回归模型的优越性。

总结

我们已经通过建立基本的一元线性和多元线性回归模型来预测宏观经济力量造成的房价和如何评估质量的线性回归模型的基本水平。

可以肯定的是,解释房价是一个难题。有许多可以使用的预测变量。因果关系可以以另一种方式运行,即房价可能会推动我们的宏观经济变量,甚至更复杂的,这些变量可能同时相互影响。

我鼓励你深入挖掘数据,通过增加和移除变量来调整这个模型,同时记住OLS假设和回归结果的重要性。

最重要的是,要知道基于科学的建模过程如下:测试,分析,失败和继续进一步的测试。

实际浏览内容的缺陷

本文是对基本的回归模型的入门引导,但是有经验的数据科学家会看到在方法和模型中存在几个缺陷,如下:

没有点燃审查:虽然很容易深入到建模过程中,但忽略了现存的知识结构是危险的。一个点燃的回顾可能表明,线性回归可能不是正确预测房价的模型。它也可能有改进的变量选择。从长远来看,在一开始花时间做一次点燃审查可以节省大量的时间。

小样本:建模复杂的房屋市场需要超过六年的数据。我们的小样本是偏向住房危机后的事件,并不代表房地产市场的长期趋势。

多重共线性: 一个细心的观察者会注意到警告模型关于多重共线性的产生。我们有两个或两个以上变量得到大致相同的结果,通过高估每一个预测变量的意义。

自相关:当预测的过去值影响其当前和未来值时会发生自相关。仔细阅读的杜宾-沃森评分将揭示,自相关的情况是存在于我们的模型中。

在未来的文章中,我们将试图解决这些缺陷,以更好地理解关于房价的经济预测。

英文原文:http://www.learndatasci.com/predicting-housing-prices-linear-regression-using-python-pandas-statsmodels/?imm_mid=0eddcf&cmp;=em-data-na-na-newsltr_20170301

译者:一叶障慕

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值