使用Python+Pandas+Statsmodels建立线性回归模型预测房价

【综述】

本文通过使用Python+Pandas+Statsmodels建立简单一元线性回归模型、多元线性回归模型来预测房价。

主要内容来源自网页:https://www.learndatasci.com/tutorials/predicting-housing-prices-linear-regression-using-python-pandas-statsmodels/

我在原文基础上增加了大量知识点的说明及解释,以达到学习线性回归的效果。

数据来源:https://github.com/LearnDataSci/article-resources/tree/master/Housing%20Price%20Index%20Regression

目录

1 什么是线性回归?

2 数据集说明

3 变量选择

4 导入分析所用工具包

5 用Pandas读取数据

5.1 读取数据

5.2 了解数据

5.3 数据整理

6 探索性分析

7 最小二乘法

8 简单线性回归

8.1 回归模型

8.2 建模

8.3 结果分析

8.4 线性回归图像

8.4.1 关于自变量的线性回归图像

8.4.2 置信区间

9 多元线性回归 

9.1 回归模型

9.2 建模

9.3 结果分析

9.4 偏回归图

10 总结


 

 

1 什么是线性回归?

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。

在回归术语中,我们将被预测的变量称为因变量(dependent variable),用y表示。把用来预测应变量值的一个或多个变量称为自变量(predictor variable/independent variable),用x表示。

2 数据集说明

本文用于分析的样本数据集主要有下图中5个csv文件:monthly-hpi.csv,unemployment-macro.csv,fed_funds.csv,shiller.csv,gdp.csv。

每个数据表内的数据列也罗列了出来,可以看到:每张表中都有“date”列,每张表中用于多元线性分析的自变量也用数字2进行了标注。

3 变量选择

【因变量】 我们选择housing_price_index(HPI)作为因变量,该变量度量了住宅房屋的价格变化。

【自变量】我们选择了影响宏观经济的相关因素,比如失业人数、利率、国内生产总值、消费者物价指数。

关于我们选择的自变量的解释,包括他们分别如何影响着房屋价格,以及本文使用的数据源,请参见文章开头给出的Github网址。

4 导入分析所用工具包

import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.sandbox.regression.predstd import wls_prediction_std

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set_style("darkgrid")

import pandas as pd
import numpy as np

5 用Pandas读取数据

5.1 读取数据

你可以直接从Github导入数据,本文选择直接下载到本地后导入。

housing_price_index = pd.read_csv("monthly-hpi.csv")
umemployment = pd.read_csv("unemployment-macro.csv")
federal_funds_rate = pd.read_csv("fed_funds.csv")
shiller = pd.read_csv("shiller.csv")
gross_domestic_product = pd.read_csv("gdp.csv")

5.2 了解数据

查看数据表的内容及信息,我们以housing_price_index数据框为例:

housing_price_index.head()   # 罗列表格前5行数据

housing_price_index.info()  #参看表格信息

通过逐一了解各个表格的数据信息和info信息,了解到:

housing_price_index    RangeIndex: 73 entries, 0 to 72

umemployment    RangeIndex: 74 entries, 0 to 73

federal_funds_rate    RangeIndex: 74 entries, 0 to 73

shiller    RangeIndex: 70 entries, 0 to 69

gross_domestic_product    RangeIndex: 24 entries, 0 to 23

 其中,gross_domestic_product数据条数少。而且,除了gross_domestic_product中的date日期列按季度时间记录,其他数据中的date日期按照每月记录。

5.3 数据整理

我们现在已经成功导入了数据,使用Pandas的merge函数,将所有表格合并为一张总表格,以便数据分析。

5.2节中提及的时间按月,按季度记录方式不同的问题不需要担心,合并后的数据每一行每一列的数据都符合逻辑,可以满足计算目的。本示例中,最好的是按照共有的date列进行合并,得到的数据是按照季度date保留

  • 22
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值