预测华盛顿州金县的房价
预测华盛顿州金县的房价

华盛顿州金县是华盛顿州人口最多的县。它也是美国第 12 大人口大国。华盛顿人口最多的城市是西雅图。我的目标是根据 2014 年 5 月至 2015 年 5 月期间在美国华盛顿州金县售出的房屋来预测房屋价格,并创建一个模型,供购房者、房屋卖家和在线房地产清单用来确定价格的一个家。
你可以查看我的 G 机会 查看整个项目。
数据整理
这个 是我正在使用的数据。下面是列及其描述和数据类型的列表。

让我们使用 df.info() 来查看数据的信息。

数据清洗
- 数据集中没有重复项。
- 有两行(索引 10 和 17)的“sqft_above”为空值。我刚刚删除了这些行。
异常值
- “卧室”列中有一行有 33。这是一个异常值,我删除了该行。
- 有 13 行的“卧室”列为 0。我把它们过滤掉了。
- 对于“sqft_lot”列,有 5 行的面积大于 75,000 平方英尺。我也过滤掉了这些行。这些房子很可能是农田。
探索性数据分析
绘制区域
进口 plotly.express 作为 像素 price_per_sqft = df['价格'] . 申请(np . 日志) / df['sqft_lot']
图 = 像素 . scatter_mapbox(df,纬度 = “纬度”,经度 = “长”,
颜色 = price_per_sqft,
最大尺寸 = 15,
飞涨 = 10,
mapbox_style = 'carto-positron',
标题 = “华盛顿州金县房屋每平方英尺的价格”,
color_discrete_sequence = [像素 . 颜色 . 周期性的 . 冰火]) 图 . 节目()

上图显示了房屋每平方英尺的价格。靠近华盛顿州西雅图的房子,每平方英尺的价格越贵。我用了 情节地 为图表。
价格分布
图,斧头 = plt . 子图(图大小 = (15,10))
斧头 = sns . 直方图(x = “价格”,数据 = df,在哪里 =真 ) . 设置(标题 = '价格分布')

上图显示了目标变量(价格)的分布。房价有$350,000和$450,000两种模式。
随机森林特征重要性
特征重要性 = PD . 数据帧(rf . 特征重要性,索引 =
X_train . 列,列 = ['重要性'])
. sort_values('重要性',升序 =假 )
#情节重要性
特征重要性 . 情节(种类 = '巴') . invert_yaxis()

上图显示了使用随机森林特征重要性的特征重要性。特征重要性图表告诉我们在确定房屋价格时最重要的特征。 “sqft_living”、“grade”、“lat”和“long”是前四个重要特征。 “sqft_living”是决定房屋价格的最重要特征。
SHAP 特征重要性
进口 形状
# 加载 JS 可视化代码到 notebook
形状 . initjs() 解说员 = 形状 . TreeExplainer(rf)
形状值 = 解说员 . 形状值(X) #阴谋
一世 = 4
形状 . force_plot(解释器 . 预期值,shap_values[i],特征 = X . iloc[i],特征名称 = X . 列) #摘要条形图
形状 . summary_plot(shap_values,特征 = X,特征名称 = X . 列,plot_type = “酒吧”,情节大小 = (2.0, 5.0))

SHAP Feature Importance
上图显示了基于 SHAP 的特征重要性。 SHAP 基于特征属性的大小。基于 SHAP 特征重要性,“sqft_living”、“grade”、“long”、“sqft_living15”是前 4 个特征。随机森林特征重要性和 SHAP 特征重要性具有相似的前 4 个重要特征。
我们将看看 EDA 的这四大功能。
主要功能
图,斧头 = plt . 子图(图大小 = (10,5))
斧头 = sns . 散点图(x = “sqft_living”,是的 = “价格”,色调 = “价格”,
数据 = df,调色板 = '岩浆') . 放(
标题 = '价格与 sqft_living')

上图显示了“price”和“sqft_living”之间的关系。通常,房子的面积越大,价格就越高。最昂贵的房子有12,000平方英尺。大多数房屋的面积在 2,000 到 6,000 平方英尺之间。
图,ax = plt.subplots(figsize=(12,7)) ax = sns.boxplot(x="grade", y="price", data=df,
调色板='岩浆').set(标题='价格与等级')

上图显示了“价格”和“等级”之间的关系。成绩基于金县的评分系统。如果你有更好的成绩,你应该期待更高的房价。通常情况下,档次越高的房子房价越高。
图,ax = plt.subplots(figsize=(15,5)) ax = sns.scatterplot(x="lat", y="price", hue='price',
数据=df,调色板='岩浆').set(标题='价格与纬度')

上图显示了“价格”和纬度(“纬度”)之间的关系。华盛顿州西雅图的纬度为 47.608013。房子离西雅图越近,房价可能越高。价格较高的房屋位于纬度 47.5 到 47.7 之间。
图,斧头 = plt . 子图(图大小 = (15,5))
斧头 = sns . 散点图(x = “长”,y = “价格”,色调 = '价格',数据 = df,
调色板 = '岩浆') . 设置(标题 = '价格与长期')

上图显示了“价格”和经度(“长”)之间的关系。华盛顿州西雅图的经度为 -122.335167。房子的经度越靠近西雅图,它的房价就有可能更高。价格较高的房屋位于经度 -122.4 和 -122.2 之间。
预处理和训练
我测试了三种不同的基本模型以确定最佳模型。我选择线性回归是因为它显示了 2 个变量之间的关系,岭回归是因为它是一种有助于过度拟合的 L2 正则化,而随机森林回归是因为它使用集成学习方法进行回归,从而比单个模型做出更准确的预测。

基于 GridScarchCV 中的“最佳参数”列来确定每个模型的最佳参数。
随机森林回归器基于 RMSE(均方根误差)表现最好。
均方根误差是均方误差的平方根。 RMSE 用于通过显示预测与测量的真实值相差多远来评估预测的质量。
平均绝对百分比误差 (MAPE) 用于衡量预测准确性。 MAPE 是百分比误差的平均值
造型
我想看看我是否可以改进模型,所以我创建了四个具有不同自变量的不同随机森林模型。
所有模型的参数如下:
- 最大深度=30
- max_features='自动'
- n_estimators=400
模型概述
- 'Rf_model' 是具有原始自变量的模型。
- “rf_model2”没有基于随机森林特征重要性的无关紧要的变量。
- “rf_model3”是基于随机森林特征重要性的顶级特征。
- “rf_model4”是基于 SHAP 特征重要性的顶级特征。

“rf_model”是基于所有指标表现最好的模型。
残差图

上图是“rf_model”的残差图。残差图显示了观测值和预测值之间的预测误差。该图还表明我们的数据存在过度拟合。改善过拟合的一种方法是收集更多数据。
结论
面积、等级、纬度和经度是决定房屋价格的四大重要因素。最佳模型的平均绝对百分比误差为 13%,但仍需要一些改进。根据“rf_model”的残差图,表明存在过拟合。下一步是纠正过拟合。纠正过度拟合的一种方法是获取更多关于已售房屋的数据。希望在进行这些改进后,此模型可用于购房者/卖方或在线房产列表。
完整的代码 Github .
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

浙公网安备 33010602011771号