
走进AI之旅:探索房价预测的新境界
作者:Max Ghenis
在房地产领域,预测房价是一项至关重要的任务。分析师们通常会考虑诸多因素,如家庭位置、年龄以及到就业中心的距离等,来预测房价。他们的主要目标是在给定这些因素的情况下,生成最可能的房价点估计。而评估这种预测的最佳标准通常是预测值与现实之间的偏差。
我们是否只能预测单一的房价点估计呢?是否可以预测一个价格区间,即预测区间?这种方法的实现被称为分位数回归。本文将详细解释这个概念是如何形成的,以及如何在Python中通过六种方法实现它,包括传统的线性方法、基于决策树和深度学习的方法等。
一、理解分位数回归与分位数损失最小化
就像回归通过最小化平方误差损失函数来预测单点估计一样,分位数回归则是最小化预测某个分位数时的分位数损失。当我们关注于中位数或第50%分位数时,分位数损失就是绝对误差的总和。而其他分位数则可以定义预测区间的终点,例如,中间80%的范围可以由第10%和第90%来界定。分位数损失会根据所评估的分位数而有所不同。
假设我们预测一个真实值为零的点,预测范围在-1到+1之间。也就是说,我们的误差范围也在-1到+1之间。在深入研究公式之前,我们可以通过图表来展示分位数损失是如何随误差而变化的,这取决于分位数。
其中,中蓝色线代表第50%分位数(中位数),它在零附近对称,此时所有损失均等于零,因为预测是完美的。浅蓝色线显示第10个百分位数,它为负误差分配较低的损失,对正误差分配较高的损失。深蓝色线则显示第90个百分位数的相反模式。
基于这种理解,我们可以将分位数损失公式表示为Python代码中的形式,用最大语句替换分支逻辑来实现分位数损失的计算。
二、六种方法的实际应用与实现
接下来,我们将探索六种方法:最小二乘法(OLS)、线性分位数回归、随机森林、梯度提升、Keras和TensorFlow,并了解它们是如何与真实数据一起工作的。
我们将使用波士顿住房数据集进行分析,该数据集包含代表波士顿地区城镇的506个观测值。特征包括目标旁边的13个特征,目标是自住房屋的中位价值。分位数回归将预测城镇(非住宅)的比例,其中位价值低于一个特定值。详细数据可访问指定链接。
对于每种方法,我们均将对测试集上的第10个、第30个、第50个、第70个和第90个百分位数进行预测。
1. 普通最小二乘法(OLS):虽然OLS预测的是均值而非中位数,但我们仍可根据标准误差和逆正态累积分布函数(CDF)计算预测区间。这种基线方法产生的预测区间是以均值为中心的线性和平行分位数。在调整良好的模型中,顶部和底部线之间将显示大约80%的点。请注意,这些点与之前的散点图不同,因为我们在此处显示的是用于评估样本外预测的测试集结果。
2. 线性分位数回归:该方法从平均值扩展到中位数和其他分位数,通过放松最小二乘法的平行趋势假设,同时仍然施加线性约束(即最小化分位数损失),对给定的分位数进行预测。我们可以使用statsmodels库轻松实现这一方法。
3. 随机森林:接下来我们转向非线性模型的一种集合——随机森林。虽然随机森林没有显式地预测分位数,但我们可以将每棵树视为一个可能的值,并使用其经验CDF计算分位数。但由于随机森林更常用于高维数据集,我们计划在添加更多特征后返回这种方法进行讨论。
4. 梯度提升:另一种基于决策树的方法是梯度提升。虽然该方法在单一特征模型上的表现并不突出,但随着更多特征的加入可能会得到改善。我们将探索使用scikit-learn的实现来支持显式分位数预测的可能性。
5. Keras(深度学习):Keras是一个用户友好的深度学习框架。我们将利用其进价预测,并将结果可视化展示为城镇住宅价值随房龄变化的趋势线。最底层的网络将采用称为整流线性单元(ReLU)的线性模型。从目前的预测结果来看,Keras对测试数据的拟合情况良好。
6. TensorFlow:Keras的一个缺点是需要分别训练每个分位数。而TensorFlow作为更强大的深度学习框架,(此处可以进一步描述如何利用TensorFlow进行分位数预测的实现和优化)。我们将探讨如何在Python中使用TensorFlow来实现更为高效的分位数预测方法。(待续)
