机器学习:租金价格预测

机器学习:租金价格预测

数据集: 卡格尔

为租赁价格设定公允价值并非易事,因为它的价值取决于许多经常相互影响的变量。

在本教程中,我将描述在机器学习中创建回归模型以预测 5 个巴西城市的租金值的所有步骤。该模型必须能够根据其特征(城市、面积、卧室数量、浴室数量、停车位、公寓楼层、是否接受动物以及是否提供家具)来估算巴西的房地产价格。

关于机器学习的说明图

使用的数据库经过了一个数据清洗步骤(Data Cleaning),整个过程在一篇文章中描述 中等的 .文章标题为:数据清洗:巴西房产出租数据,可在此阅读 关联 .除了清洗,还进行了一次探索性数据分析(Exploratory Data Analysis),同样以文章的形式在 中等的。 文章标题为:探索性数据分析:巴西房产出租数据,可在此阅读 关联 .

一、数据来源

本文使用的原始数据库来自于网站 卡格尔 .卡格尔 支持多种数据集发布格式,但我们强烈建议数据集发布者尽可能以可访问的非专有格式共享其数据。

kaggle 网站上的数据库页面

数据库作者 已将作品用于公共领域,在法律允许的范围内放弃其在世界各地根据版权法对作品的所有权利,包括所有相关和相关权利。

2. 了解数据集

数据集 包含10692间出租房屋( 条目 ) 有 13 个不同的类别 ( )。班级划分如下:

  • 0 城市 — 房产所在城市
  • 1 个区域 — 物业面积(平方米)
  • 2 间客房 - 卧室数量
  • 3 间浴室 — 浴室数量
  • 4个停车位 — 停车位数量
  • 5楼 — 公寓楼层
  • 6 动物 — 宠物友好(接受 = 是;不接受 = 否)
  • 7 家具 — mobiliada(带家具 = Sim;不带家具 = Não)
  • 8 ho​​a (雷亚尔) — 公寓价值(雷亚尔)
  • 9 租金金额(雷亚尔) — 租金金额(雷亚尔)
  • 10 财产税(雷亚尔) — IPTU(雷亚尔)
  • 11 火灾保险(雷亚尔) — 火灾保险(雷亚尔)
  • 共 12 个(雷亚尔) — 总租金(雷亚尔)

3. 数据库

本文将使用的数据库进行了预处理,即数据清洗。导入的数据为csv格式,可在我的 GitHub 为了 下载 .使用命令执行数据导入 read_csv() 从图书馆 __熊猫 .关于 head() 方法 演示查看前五个条目:

Visualização das cinco primeiras entradas do dataset

4. 相关矩阵

相关矩阵是一种快速有效的方法,可以对所有变量及其相互关系有一个大致的了解。相关系数是衡量两个理事会之间线性关联的指标,介于 [-1, 1] 之间,其中 -1 表示完全负关联,1 表示完全正关联。为了可视化矩阵,使用了 sns.heatmap() 函数,它将矩形数据绘制为颜色编码的矩阵。

我们可以看到,忽略 特征地面 ”, “ 动物 “e” 家具 “,所有其他人 特征 彼此呈正相关。这是有道理的,因为越高 特征 与面积相关的,房产成本越高。步行 地面 有一种特殊的行为,它与房地产成本呈正相关,与房地产成本呈负相关或几乎为零。 特征 的面积。

物业的租金价值由以下总和定义: 呵呵 (公寓费)+ 租赁价格 (租金金额)+ 财产税 (IPTU)+ 火灾保险 (火灾保险)。所以在继续建模之前,我们将删除这些 特征 ,当我们添加这些变量时,我们就到达了目标变量。如果将这些变量提供给我们,我们将直接收集并命中目标变量。因此,如果我们不猜测这些变量之一,我们应该排除它们并专注于影响我们的目标变量的其他变量。

5. 因变量 X 解释变量

我们将使用一些变量之间的散点图 数据集 以图形方式查看因变量上的自变量行为

通过图表可以看出所有自变量都有正趋势。 “区域”倾向于与其他区域更接近线性关系,因为它的数据不那么分散。

6. 分类编码 (OneHotEncoder)

一个 特征 ' 城市 ' 是分类变量,因此不能用作 特征 创建模型 机器学习 .对于它的使用,它必须应用于 一键编码 . 一热编码 是我们对数据进行的转换,以二进制形式表示分类变量(指示值的存在或不存在)。

7. 数据集标准化

由于数据量级不同,我们将对整个数据集进行归一化处理,以防止出现一些 特征 控制目标函数并弄乱估计器。

8. 指标

为了评估模型,将使用以下指标:

确定系数 (r2_score):表示由模型中的自变量解释的方差(y)的比例。它提供了拟合优度的指示,因此通过解释方差的比例来衡量模型预测未见样本的可能性。

在哪里

均方误差(mean_squared_error):定义为估计量值与平方参数之差的平均值。 MSE 是对应于错误或损失的期望值(二次方)的风险度量。由于误差采用平方指数,因此该指标对异常值(离群值)非常敏感,如果您的分析中有许多重大错误,则可以推断该指标。

均方根误差 (RMSE):均方根误差 (RMSE) 只是 MSE 的平方根,其中误差返回模型测量单位(在 MSE 中,测量单位是二次的)。这通常是因为由于产生它的正交过程,它对更大的误差更敏感。

最大误差(max_error):此函数计算最大残差,这是一个衡量预测值和真实值之间最坏情况误差的指标。在完美拟合的单输出回归模型中,训练集中的 max_error 将为 0,虽然这在现实世界中极不可能发生,但该指标显示了模型在拟合时的错误程度。

为了评估模型,cross_validate 将与 cv(确定交叉验证划分策略)等于 10 一起使用。为了方便模型的测试,将创建一个名为 create_model 的函数:

9. 模型

9.1。 线性回归(LinearRegression)

9.2. 决策树回归器(DecisionTreeRegressor)

9.3. 随机森林回归器(RandomForestRegressor)

9.4。 XGB回归器

XGBoost 是一个优化的分布式梯度增强库,旨在高效、灵活和便携。它在 Gradient Boosting 框架下实现机器学习算法。 XGBoost 提供并行树助推器(也称为 GBDT、GBM),可以快速准确地解决许多数据科学问题。

Gradient Boosting 以一组弱预测模型的形式提供预测模型,这些模型通常是决策树。当决策树是弱学习器时,生成的算法称为梯度驱动树;通常优于随机森林。与其他提升方法一样,梯度驱动的树模型以逐步方式构建,但通过允许优化可微损失函数来推广其他方法。

9.5。 CatBoost 回归器

CatBoost 是一种新的梯度提升技术。 CatBoost 在各种数据集的质量方面优于其他公开可用的增强实现。 CatBoost 中引入的两个关键算法进步是有序强化的实现、经典算法的置换驱动替代方案以及用于处理分类特征的创新算法。这两种技术都是为了对抗由目前所有现有的梯度增强算法实现中存在的一种特殊类型的目标泄漏引起的预测偏移。

10. 最佳模型的优化

对于模型优化,将使用对模型的指定参数值进行简单的网格搜索。将被使用 网格搜索 这是库本身中已经定义的方法 CatBoost 回归器。

找到的最佳超参数组合是 {'depth': 6, 'l2_leaf_reg': 1, 'learning_rate': 0.03}。

11. 结论

在中止的回归模型中,获得最佳结果的模型是 CatBoostRegressor,其 RMSE 为 2430.58 雷亚尔,测试数据的确定系数得分等于 0.70。但是,请注意,训练集上的分数仍然远低于验证集上的分数,这意味着该模型过度拟合了训练集。指标 mean_squared_error 和 RMSE 是对异常值(outliers)敏感的指标,因此可以注意到分析中出现了许多重大错误,因为这两个指标都是外推的。

然而,为了更有效的方法,有必要考虑更多的特征。一个极其重要的特征是房产在城市中的地理位置,因为它是一个独立于物理特征的特征,对最终的租金价值有很大的影响。位于城市郊区附近的房产每平方米的租金价值将低于位于市中心的房产。

谢谢阅读!我希望这篇文章可以帮助您了解创建机器学习回归模型背后的一点点,并可以作为您自己项目的指南。所有文章代码都可以在我的 GitHub .

参考:

Biblioteca sklearn: https://scikit-learn.org/stable/

熊猫图书馆: https://pandas.pydata.org/

CatBoostRegressor 库: https://catboost.ai/en/docs/

XGBRegressor 库: https://xgboost.readthedocs.io/en/stable/index.html

卡格尔: https://www.kaggle.com/code/erdicem/brasilian-houses-to-rent-eda-model-all-algorithm/notebook

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/1436/58402915

posted @ 2022-08-29 15:59  哈哈哈来了啊啊啊  阅读(329)  评论(0编辑  收藏  举报