低纬度房价预测入门测试

Submitted by neurta on Thu, 04/25/2019 - 13:29
房价预测

The most difficult thing in life is to know yourself

一、明确目的

本次练习需要围绕以下目的进行:

  • 理解问题 : 观察每个变量特征的意义以及对于问题的重要程度
  • 研究主要特征 : 也就是最终的目的变量----房价
  • 研究其他变量 : 研究其他多变量对“房价”的影响的他们之间的关系
  • 基础的数据清理 : 对一些缺失数据、异常点和分类数据进行处理
  • 测试假设

房价预测02

 

 

 

Comments

Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition SalePrice
0 1 60 RL 65.0 8450 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 208500
1 2 20 RL 80.0 9600 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2007 WD Normal 181500
2 3 60 RL 68.0 11250 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 223500
3 4 70 RL 60.0 9550 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 2 2006 WD Abnorml 140000
4 5 60 RL 84.0 14260 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 12 2008 WD Normal 250000
5 6 50 RL 85.0 14115 Pave NaN IR1 Lvl AllPub ... 0 NaN MnPrv Shed 700 10 2009 WD Normal 143000
6 7 20 RL 75.0 10084 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 WD Normal 307000
7 8 60 RL NaN 10382 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN Shed 350 11 2009 WD Normal 200000
8 9 50 RM 51.0 6120 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 4 2008 WD Abnorml 129900
9 10 190 RL 50.0 7420 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 1 2008 WD Normal 118000
10 11 20 RL 70.0 11200 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 129500
11 12 60 RL 85.0 11924 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 7 2006 New Partial 345000
12 13 20 RL NaN 12968 Pave NaN IR2 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 144000
13 14 20 RL 91.0 10652 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 New Partial 279500
14 15 20 RL NaN 10920 Pave NaN IR1 Lvl AllPub ... 0 NaN GdWo NaN 0 5 2008 WD Normal 157000
15 16 45 RM 51.0 6120 Pave NaN Reg Lvl AllPub ... 0 NaN GdPrv NaN 0 7 2007 WD Normal 132000
16 17 20 RL NaN 11241 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN Shed 700 3 2010 WD Normal 149000
17 18 90 RL 72.0 10791 Pave NaN Reg Lvl AllPub ... 0 NaN NaN Shed 500 10 2006 WD Normal 90000
18 19 20 RL 66.0 13695 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 6 2008 WD Normal 159000
19 20 20 RL 70.0 7560 Pave NaN Reg Lvl AllPub ... 0 NaN MnPrv NaN 0 5 2009 COD Abnorml 139000
20 21 60 RL 101.0 14215 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 11 2006 New Partial 325300
21 22 45 RM 57.0 7449 Pave Grvl Reg Bnk AllPub ... 0 NaN GdPrv NaN 0 6 2007 WD Normal 139400
22 23 20 RL 75.0 9742 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 230000
23 24 120 RM 44.0 4224 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 6 2007 WD Normal 129900
24 25 20 RL NaN 8246 Pave NaN IR1 Lvl AllPub ... 0 NaN MnPrv NaN 0 5 2010 WD Normal 154000
25 26 20 RL 110.0 14230 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 7 2009 WD Normal 256300
26 27 20 RL 60.0 7200 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2010 WD Normal 134800
27 28 20 RL 98.0 11478 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2010 WD Normal 306000
28 29 20 RL 47.0 16321 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 12 2006 WD Normal 207500
29 30 30 RM 60.0 6324 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 5 2008 WD Normal 68500
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1430 1431 60 RL 60.0 21930 Pave NaN IR3 Lvl AllPub ... 0 NaN NaN NaN 0 7 2006 WD Normal 192140
1431 1432 120 RL NaN 4928 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 10 2009 WD Normal 143750
1432 1433 30 RL 60.0 10800 Pave Grvl Reg Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 WD Normal 64500
1433 1434 60 RL 93.0 10261 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 5 2008 WD Normal 186500
1434 1435 20 RL 80.0 17400 Pave NaN Reg Low AllPub ... 0 NaN NaN NaN 0 5 2006 WD Normal 160000
1435 1436 20 RL 80.0 8400 Pave NaN Reg Lvl AllPub ... 0 NaN GdPrv NaN 0 7 2008 COD Abnorml 174000
1436 1437 20 RL 60.0 9000 Pave NaN Reg Lvl AllPub ... 0 NaN GdWo NaN 0 5 2007 WD Normal 120500
1437 1438 20 RL 96.0 12444 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 11 2008 New Partial 394617
1438 1439 20 RM 90.0 7407 Pave NaN Reg Lvl AllPub ... 0 NaN MnPrv NaN 0 4 2010 WD Normal 149700
1439 1440 60 RL 80.0 11584 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 11 2007 WD Normal 197000
1440 1441 70 RL 79.0 11526 Pave NaN IR1 Bnk AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 191000
1441 1442 120 RM NaN 4426 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2008 WD Normal 149300
1442 1443 60 FV 85.0 11003 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 4 2009 WD Normal 310000
1443 1444 30 RL NaN 8854 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2009 WD Normal 121000
1444 1445 20 RL 63.0 8500 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 11 2007 WD Normal 179600
1445 1446 85 RL 70.0 8400 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2007 WD Normal 129000
1446 1447 20 RL NaN 26142 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 4 2010 WD Normal 157900
1447 1448 60 RL 80.0 10000 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 12 2007 WD Normal 240000
1448 1449 50 RL 70.0 11767 Pave NaN Reg Lvl AllPub ... 0 NaN GdWo NaN 0 5 2007 WD Normal 112000
1449 1450 180 RM 21.0 1533 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 8 2006 WD Abnorml 92000
1450 1451 90 RL 60.0 9000 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 9 2009 WD Normal 136000
1451 1452 20 RL 78.0 9262 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2009 New Partial 287090
1452 1453 180 RM 35.0 3675 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2006 WD Normal 145000
1453 1454 20 RL 90.0 17217 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 7 2006 WD Abnorml 84500
1454 1455 20 FV 62.0 7500 Pave Pave Reg Lvl AllPub ... 0 NaN NaN NaN 0 10 2009 WD Normal 185000
1455 1456 60 RL 62.0 7917 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 WD Normal 175000
1456 1457 20 RL 85.0 13175 Pave NaN Reg Lvl AllPub ... 0 NaN MnPrv NaN 0 2 2010 WD Normal 210000
1457 1458 70 RL 66.0 9042 Pave NaN Reg Lvl AllPub ... 0 NaN GdPrv Shed 2500 5 2010 WD Normal 266500
1458 1459 20 RL 68.0 9717 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 4 2010 WD Normal 142125
1459 1460 20 RL 75.0 9937 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 6 2008 WD Normal 147500

1460 rows × 81 columns

二、观察各项主要特征与房屋售价的关系

为了能更好的判断各项特征对“房价”的关系,我们需要花上一点时间来对数据进行研究和处理。虽然比较耗时和费事,但是这会让我们后面构建模型的时候事半功倍。

1. 分析“SalePrice”

data_train['SalePrice'].describe()

房价预测saleprice

通过上面的结果可以知道“SalePrice”没有无效或者其他非数值的数据,下面通过图示化来进一步展示“SalePrice”

sns.distplot(data_train['SalePrice'])

<matplotlib.axes._subplots.AxesSubplot at 0x7f23ac874a58>

kde密度曲线

可以看到与使用matplotlib作的直方图最大的区别在于有一条密度曲线(KDE),可以通过设置参数去掉这条默认的曲线。 另外由上图可以知道房价呈现正态分布。下面还可以看到两个统计学中的概念: 峰度(Kurtosis)和 偏度(Skewness)

峰度:峰度(Kurtosis)是描述某变量所有取值分布形态陡缓程度的统计量。

它是和正态分布相比较的。

  • Kurtosis=0 与正态分布的陡缓程度相同。

  • Kurtosis>0 比正态分布的高峰更加陡峭——尖顶峰

  • Kurtosis<0 比正态分布的高峰来得平台——平顶峰计算公式:β = M_4 /σ^4 偏度:

偏度:偏度(Skewness)是描述某变量取值分布对称性的统计量。

  • Skewness=0 分布形态与正态分布偏度相同
  • Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。
  • Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。 计算公式: S= (X^ - M_0)/δ Skewness 越大,分布形态偏移程度越大。

 #skewness and kurtosis

print("Skewness: %f" % data_train['SalePrice'].skew())

print("Kurtosis: %f" % data_train['SalePrice'].kurt())

计算结果 长尾

将上面的计算结果、理论和图形相对比可以看到,长尾巴确实拖在右边,而且高峰陡峭。

 

2. 分析特征数据

2.1 数据再分类

为了让我们对数据的分析更具科学性,我们可以新建一个excel文件,具体需要记录的数据如下:

  • Variable:变量名
  • Data Type:各变量的数据类型,分为“数值型--0”和“类别型--1”
  • Segment:变量的类型。分为:“building--0”、“space--1”、“location--2”。具体解释如下:
    • building:比如房屋材料、造型等与房屋物理特性相关的特征(e.g. 'OverallQual')
    • space:即与房屋空间有关的特征,如面积(e.g. 'TotalBsmtSF')
    • location:如地段、道路情况等(e.g. 'Neighborhood')
  • Expectation:表示我们认为该变量对于“SalePrice”的影响程度,划分为“High---3”,“Medium---2”,“Low---1”
  • Conclusion:与“Expectation”类似,这个表示我们在观察完数据后得出的结论,其实也可和“Expectation”相同。
  • Comments:其他关于该变量的一些看法

 

2.2 提取主要特征

接下来要做的就是按照上面要求完成电子表单,Go!!!!

。 。 。

我已经完成了任务,下面将会对整理后的数据进一步分析来选出主要影响售价的特征。

  • Utilities:第一个映入我眼帘的是Utilities,因为公共设施越齐全肯定越贵嘛,但是我又观察了具体的训练数据集,发现每一个房屋都是“AllPub”,即都具备基础的公共设施,所以这一项不能入选。
  • LotArea:英文理解能力有限,并不知道这什么意思,姑且认为是“地皮面积”,很好理解,面积越大肯定越贵嘛。。。
  • Neighborhood:这应表示房屋所处市区的位置,这个必选啊,合不合适在后面再具体分析。
  • OverallQual:对房子的整体材料和装修进行评估
  • YearBuilt:建造年份
  • TotalBsmtSF&GrLivArea:训练数据中有很多特征都涉及到了面积,所以没必要每个都考虑进去,为了简化,选择了TotalBsmtSF(地下室面积)&GrLivArea(生活面积)
  • Heating:供暖方式应该很重要,但是数据显示基本上都是GasA类型,所以不予考虑,
  • CentralAir:中央空调这个可以考虑一下,因为有的有,有的没有。
  • MiscVal: 在其他类别中未涉及的其他功能的价值,一般都是“shed(棚子)”,价格在400-1500美元之间,可以考虑一下
  • GarageCars&GarageArea:车库可容纳的车辆数以及其面积,这个可以算成单位车辆拥有的面积来计算

总结起来入选的特征如下:

Variable                          Segment                      Data Type                     Comments

LotArea                       1                                    0                                     地皮面积

GrLivArea                  1                                    0                                      生活面积

TotalBsmtSF             1                                    0                                     地下室总面积

MiscVal                       0                                   0                                     其他资产

GarageArea/GarageCars     1                    0                                       车库

YearBuilt                              0                      1                                     建造年份

CentralAir                            0                      1                                    中央空调

OverallQual                          0                     1                                   总体评价

Neighborhood                      2                    1                                     地段

如上表所示,入选5个数值型特征,4个分类型特征

3.验证主要特征是否满足要求

3.1 类别型特征

1. CentralAir 中央空调

 

# CentralAir

var = 'CentralAir'

data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)

fig = sns.boxplot(x=var, y="SalePrice", data=data)

fig.axis(ymin=0, ymax=800000);

中央空调房价更高

可以很明显的看到有中央空调的房价明显更高。

 

2. OverallQual 总体评价

# OverallQual

var = 'OverallQual'

data = pd.concat([data_train['SalePrice'],

data_train[var]], axis=1)

fig = sns.boxplot(x=var, y="SalePrice", data=data)

fig.axis(ymin=0, ymax=800000);

overrallqual总体评价

3. YearBuilt 建造年份

# YearBuilt boxplot

var = 'YearBuilt'

data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)

f, ax = plt.subplots(figsize=(26, 12))

fig = sns.boxplot(x=var, y="SalePrice", data=data)

fig.axis(ymin=0, ymax=800000);

建造年份和房价关系

建造超过100年的房价?

# YearBuilt scatter

var = 'YearBuilt'

data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)

data.plot.scatter(x=var, y="SalePrice", ylim=(0, 800000))

房价预测

年份和房价的关系

最开始我是用了箱线图绘制了房价与建造年份的关系,但是并不十分明显,所以又用点图来显示,可以很明显的看到有线性增长的趋势。

 

 

4. Neighborhood 地段

# Neighborhood 地段相关箱线图

var = 'Neighborhood'

data = pd.concat([data_train['SalePrice'], data_train[var]], axis=1)

f, ax = plt.subplots(figsize=(26, 12))

fig = sns.boxplot(x=var, y="SalePrice", data=data)

fig.axis(ymin=0, ymax=800000);

Image removed.

location = []

for x in data['Neighborhood']:

                 if x not in location:

                         location.append(x)

data.sort_values(['Neighborhood','SalePrice'])

nb_data = data

3.2 数值型特征

1.LotArea 地表面积

...

总结起来,最后

Variable                              Segment             Data Type     Comments

GrLivArea                           1                           0                     生活面积

TotalBsmtSF                       1                          0                      地下室总面积

GarageArea/GarageCars   1                         0                      车库

YearBuilt                                0                       1                     建造年份

CentralAir                              0                       1                     中央空调

OverallQual                             0                      1                     总体评价

Neighborhood                         2                      1                    地段

绘制关系点图

sns.set()

cols = ['SalePrice','OverallQual','GrLivArea', 'GarageCars','TotalBsmtSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt'] sns.pairplot(data_train[cols], size = 2.5)

plt.show()

绘制关系图

四、开始模拟数据

xtrain ytrain , svm, randomForestRegressor,bayesianRidge

随机森林回归算法