房地产价格预测模型构建指南

在这篇文章中,将学习如何构建一个能够准确预测房价的模型。将从数据收集与分析、模型选择评估等方面进行探讨。通过本指南,将获得必要的技能,以做出明智的决策,并引导客户找到最佳的投资机会。让开始吧!

学习目标

在本文中,将: 1. 理解构建价格预测模型的过程。 2. 了解构建模型的过程,如数据分析、选择、预测、解释等。 3. 学习如何根据给定的数据集做出明智的决策。

目录

  • 理解数据和问题陈述
  • 价格预测模型的数据分析
  • 结论

理解数据和问题陈述

将使用的数据集是Ames Housing Dataset,这是一个包含79个解释变量的数据集,描述了爱荷华州Ames市住宅的几乎所有方面。数据集可在Kaggle上找到并下载。数据集包含1460行和81列;目标变量是SalePrice列。数据集分为两个部分:train.csv和test.csv。train.csv文件包含目标变量,而test.csv文件不包含。test.csv文件用于在未见过的数据上测试模型的性能。

问题陈述是根据房屋的特征预测房屋的销售价格。特征是数据集中的列,目标变量是SalePrice列。由于目标变量是连续的,因此这是一个回归问题。

数据描述可在Kaggle上找到。数据描述包含了数据集中每个列的详细描述。数据描述非常有用,因为它提供了数据集中每个列的详细描述。它还提供了数据集中缺失值的信息。

本节将找出缺失值和异常值以及目标变量与特征之间的关系。

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns data = pd.read_csv('train.csv') # 显示数据集中的所有列 pd.set_option('display.max_columns', None) print(data.head())

# 制作包含缺失值的列的列表 missing_values = [col for col in data.columns if data[col].isnull().any()] # 打印每个列的缺失值数量和缺失值百分比 for col in missing_values: print(col, round(data[col].isnull().mean(), 3), ‘ % missing values’)

# 删除缺失值超过15%的列 data.drop(['Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature'], axis=1, inplace=True) # 用最频繁的值填充剩余列的缺失值 new_missing_values = [col for col in data.columns if data[col].isnull().any()] for col in new_missing_values: if data[col].dtype == 'O': data[col].fillna(data[col].mode()[0], inplace=True) else: data[col].fillna(data[col].median(), inplace=True)

continuous_features = [col for col in data.columns if data[col].dtype != 'O'] for col in continuous_features: data_copy = data.copy() if 0 in data_copy[col].unique(): pass else: data_copy[col] = np.log(data_copy[col]) data_copy['SalePrice'] = np.log(data_copy['SalePrice']) plt.scatter(data_copy[col], data_copy['SalePrice']) plt.xlabel(col) plt.ylabel('SalePrice')

plt.figure(figsize=(10, 15)) # 绘制与目标变量'SalePrice'相关特征的热图 sns.heatmap(data.corr()[['SalePrice']].sort_values(by='SalePrice', ascending=False), annot=True, cmap='viridis')

现在已经清理并可视化了数据。下一步是构建一个模型来预测房屋的销售价格。可以使用多种不同的预测模型,包括多元线性回归、KNN回归器等。将使用一系列模型和管道,通过评估模型的准确性、精确度和召回率来找到最佳模型。还将使用交叉验证以确保模型泛化良好。

# 对分类变量进行数值编码 from sklearn.preprocessing import LabelEncoder for col in data.columns: if data[col].dtype == 'O': label_encoder = LabelEncoder() data[col] = label_encoder.fit_transform(data[col]) # 使用Ridge回归构建模型 from sklearn.linear_model import Ridge from sklearn.model_selection import cross_val_score from sklearn.metrics import mean_squared_error # 从特征和目标变量创建X和y变量 X = data[['OverallQual', 'GrLivArea', 'GarageCars', 'GarageArea', 'TotalBsmtSF', '1stFlrSF', 'FullBath', 'TotRmsAbvGrd', 'YearBuilt', 'YearRemodAdd']] y = data['SalePrice'] # 执行Ridge回归的函数 def ridge_regression(alpha, data): ridge = Ridge(alpha=alpha) ridge.fit(X, y) scores = cross_val_score(ridge, X, y, scoring='neg_mean_squared_error', cv=5) rmse = np.sqrt(-scores) return rmse # 寻找Ridge的最佳alpha值 alpha = [0.001, 0.01, 0.1, 1, 10, 100, 1000] for i in alpha: print('Alpha: ', i) print('Mean RMSE: ', ridge_regression(i, data).mean()) print('Standard Deviation: ', ridge_regression(i, data).std()) print()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485