记录一次使用线性回归和多项式回归为房价定价

2022年6月,笔者准备去北京海淀某地租房,看中了一个小区的房子。笔者囊中羞涩,只想租一个小一居室,大约44.5平米,但是这个小区的房子,各类大小的房子都有,偏偏44.5平米户型房子的价格没有,房东开价6600,但是笔者并不清楚这个价格是否合理,在笔者的印象中,似乎44平米的房子只要6000就可以租下来了,所以为了探求这个44平米房子的定价到底多少比较合适,笔者准备用数学的方式去解析。这主要是因为笔者最近一直在研究股票的定价和走势,并就职于某投资公司。

一、简单线性回归模型

        这个用线性回归去预测房子的价格是最简单直接的想法,因为房子的价格基本上就是正比于房屋的面积。

        首先从安居客平台人肉扒一些数据,这里可以做成爬虫形式,但是鉴于笔者第二天就要和房东见面并讨价还价,现在肯定是没有时间搞爬虫了。人肉的部分数据如下:

     price   area

0    6900  54.00

1    7800  64.00

2    7500  64.00

3    8000  79.47

4    7300  65.00

5    7500  64.00

6    8700  78.00

7    9300  88.00

8    6800  53.00

9    7650  61.00

10   7500  63.00

       使用python的sklearn库做线性回归拟合,代码如下:

 data = pd.read_csv("house_lianjia.csv")
 test_data = pd.read_csv("test_data.csv")
 X_train = data.iloc[:,1:2]
 Y_train = data.price
 X_test = test_data.iloc[:,1:2]
 model = LinearRegression()
 model.fit(X_train, Y_train)
 a = model.intercept_  # 截距
 b = model.coef_  # 回归系数
 Y_pred = model.predict(X_test)
 print(Y_pred)

       结果:

       截距= 2943.219869932199 ,回归系数= [68.76643144],说明每平米的价值是68元,截距2943说明这个房子哪怕是0平米,也有约2943元的价值,2943可以视为该地段的溢价。

       但是发现我们44.5 平米的房子的预测价格是6000,显然与房东和中介的价格6600相去甚远,似乎我们的模型过于简单了。

二、多元线性回归预测房价

        我在猜想,这套房子可能有一些别的因素让它的价格飙升,仔细看了下,这套房子是精装修的,其他的地方,与其他房子并无而致,那么我就加上了是否精装修的数据也作为input参数,继续使用上述代码拟合。

结论:

截距= 2827.2965946558515 ,回归系数= [  73.18208156 -432.21539661]

房屋预测价格5651元,更低了!

  是否装修的回归系数居然是一个负数!也就是说,装修过的房子反而价格更低了,这让我开始怀疑数据有问题。仔细观察数据发现,在安居客平台上,装修和不装修的房子价格差距几乎没有,反而由于不少同平米但是简装的房子要价更高(可能是房东或中介开价不合理),导致反而装修成了负因素。

看来,装修并不能成为影响价格。那么我们怎么改进呢?

三、多项式回归预测房价

  这里我突然想到,我的训练数据,普遍在60-80平左右,是相对比较大的房子。而根据常识,(胡诌的数据),3升的可乐要10元,1升的可乐要6元,500ml的可乐不会1升可乐的价格一半而更可能是4元。由于房子本身就是可以提供诸如学区、交通等诸多属性,面积反而是越大,单位面积越便宜,那么聪明的大家一定想到,用多项式去预测房价和面积的关系更合理。这个大概是因为单位面积是一个导数的概念,我们并不能线性的认为这个导数是不变的。

  修改代码,将其中的linear regression,改为

 poly_reg = PolynomialFeatures(degree = 2)      
 X_poly = poly_reg.fit_transform(X_train)
 model = linear_model.LinearRegression()
 model.fit(X_poly, Y_train)  

结论:

预测模型 y=3913.375914298715+(0.0*x)+(39.629799812165544*x^2)

预测价格是6090

6090相比于6000还是靠谱一点,但是仍然与房东给出的价格差很远,难道房东要黑心的吃我一笔生意?看了看,确实有很多中介打出了如5500租48平,6000租50平,6500租54平之类的数据。

四、修改修改还是修改

  于是我便打定主意,去找房东砍价,我报出了6100元,但是房东说只租6500。似乎结局应该是我们找别的房子,这个交易告吹而结束。

  并不是!房东和中介好心的劝我说6500的价格是合理的,我反过来和他们告知,有很多中介,能给出6500租到54平的数据,那我为什么要花6500去租一个45平的数据?

  但是他们告诉我,建议去实地看看那些小中介的房子,于是我就跑去和那些小中介交流。

  结果令人诧异的是,当我和这些小中介交流的时候,他们纷纷告诉我,有些价格是乱标的,有些只是第一个月的价格,有些根本就是欺诈,他们只是用低价招揽顾客,然后实际并没有那么便宜的房子!而且也有很多小中介会提出,和小中介签约而非和房东直签。这样风险就很大,而且网上也不乏小中介以各种理由扣钱的事例。

  所以,这说明我数据本身就是脏的呀!就像股票中有很多噪音,在房子中,也有很多房子的价格是别人乱标的,这些会极大的干扰你的模型。我于是人肉重新从链家和我爱我家这2个大平台上抄录数据,因为这2个大中介起码还是最靠谱的。

使用新的数据重新跑模型,结论如下:

在多项式回归中

y=5029.849501721333+(0.0*x)+(18.31727360194959*x^2)

44平米的房子的预测价格是6485

虽然这2家大平台数据量有点少,不太适合用多项式拟合。

那么重新用线性拟合呢?

截距= 3472.349750926156 ,回归系数= [63.7437833]

44平米的房子的预测价格是6300.

这下结果就非常接近房东和中介的开价了,这说明如果预测有所偏差,可能不是你模型有问题,而是你的数据有问题!

五、终章

鉴于6月是北京的租房旺季,我也意识到房东给出的6500是合理,于是我火速和房东沟通,房东鉴于我长租,一个人,就降到了6400元。而我,知道6400元是合理的价格。

不知道读者有没有对模型有新的修改意见。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值