使用 Python 预测房价

2025年3月17日 | 阅读 12 分钟

在本教程中,我们将介绍如何使用线性回归创建模型来预测受经济活动影响的房价。本教程将涵盖探索性分析、逻辑诊断和高级回归建模等相关主题。让我们立即开始,以便读者可以开始处理数据。

什么是回归?

以下示例说明了线性回归模型如何预测预测变量(绘制在 X 轴上)和感兴趣变量(绘制在垂直或 Y 轴上)之间成正比的相互作用,从而形成一条直线

Predicting Housing Prices using Python

在建模过程中,我们将更详细地介绍线性回归。

变量选择

我们将使用追踪住宅房地产成本变化的住房价格指数1 (HPI) 作为我们的因变量。

我们凭直觉选择宏观经济(或“大局”)活动驱动因素作为我们的预测变量,例如失业率、抵押贷款利率和国内生产总值。(总生产力)。有关本文中使用的所有数据集的细分、我们因素的解释、它们如何影响房价的假设以及变量。

以下是房价、联邦基金和国内生产总值表(样本数据集)

Predicting Housing Prices using Python
Predicting Housing Prices using Python

读取数据

源代码片段

数据准备好后,使用 pandas 中的合并方法将数据集成到单个数据框中进行分析。在某些情况下,数据是按月或按季度报告的。不用担心。为了测量目的,我们将信息框合并到某个列上,以便将每一行放置在正确的位置。在这种情况下,日期列是理想的合并列。请看下面。

源代码片段

让我们使用 pandas 的 head 方法扫描我们的变量。加粗的标题标识了日期和将为我们的模型调查的参数。每一行都描绘了不同的历史时期。

输出

date        sp600     Consumer_price_index1  Long_interest_rate1  housing_price_index1  total_unemployed1  more_than_16_weeks
4011-01-01   1484.64	440.44               3.39                 181.36                 16.4                 8393
4011-04-01   1331.61	444.91               3.46                 180.80                 16.1                 8016
4011-07-01   1346.19	446.94               3.00                 184.46                 16.9                 8177
4011-10-01   1407.44	446.44               4.16                 181.61                 16.8                 7804
4014-01-01   1300.68	446.66               1.97                 179.13                 16.4                 7433

通常,探索性分析将在数据收集之后进行。探索性分析是过程阶段,我们在此阶段检查变量(使用绘图和汇总统计数据)并确定因变量最有效的预测因子。我们将跳过初步评估以保持简短。但是,请记住,它至关重要,跳过它将使您在现实世界中永远无法达到预测部分。

我们将使用普通最小二乘法 (OLS) 这种简单而有效的方法来评估我们的模型。

普通最小二乘法的假设

OLS 评估线性回归模型的精度。

OLS 基于表明该模型可能是理解我们数据的最佳模型。如果假设错误,我们的模型的结论将无效。特别努力选择合适的模型以防止自恋和鲁布 - 戈德堡病。

普通最小二乘法假设

  1. 线性:因变量和预测变量呈线性关系。如果不存在线性关系,则线性回归不是解释我们数据的最佳模型。
  2. 无多重共线性:预测变量之间没有关联或共线性。如果它们高度相关,请尝试删除一个或多个预测变量。删除额外的预测变量不应显着降低调整后的 R 方,因为它们提供了重复信息。
  3. 每个观测值与趋势线之间的平均差(或残差)为零,称为零条件均值。会有一些有利的,也有一些不利的,但它们不会有偏差。
  4. 同方差性:残差没有模式,因为因变量的确定性(或不确定性)在所有预测变量值中都是相同的。方差是恒定的,因此使用统计术语。
  5. 没有自相关(序列相关):自相关是一种现象,其中变量在观测值之间相互关联。例如,如果股票价格影响第二天股票价格,则股票价格可能存在序列相关性。

让我们开始建模。

简单线性回归

简单线性回归使用单个预测变量来解释变量的依赖性。以下是一个简单的线性回归方程

Predicting Housing Prices using Python

其中

ß = 回归系数

y = 因变量

α = 截距(如果我们的自变量为 0,则房价的预期平均值)

x = 这用于预测 Y

ε = 误差项考虑了我们模型无法解释的不可预测性。

我们通过使用 statsmodels 的 ols 函数将 housing_price_index1 设置为 total_unemployed1 的表达式来构建我们的模型。我们预计总失业率的上升将导致房价面临下行压力。我们可能走错了路,但我们必须从某个地方开始!

以下代码演示了如何使用预测变量 total_unemployment1 创建一个简单的线性回归模型。

源代码片段

输出

Predicting Housing Prices using Python

上述代码的解释

我们将对一些度量进行高级描述,以理解我们模型的效力,参考上面 OLS 回归的结果:系数、标准误差、p 值和调整后的 R 方。

澄清一下

根据调整后的 R 方,total_unemployed1 预测变量可以解释房价 96% 的变异。

回归系数 (coeff) 表示在其他因素保持不变的情况下,预测变量每减少一个单位导致因变量的变化。根据我们的模型,总失业人数每增加一个单位,房价指数就会降低 8.33。根据我们的预测,失业率上升似乎会降低房价。

标准误差将计算在我们的总体上进行相同测试时系数值的差异,以确定 total_unemployed1 系数的准确性。我们的 0.41 标准误差似乎准确,因为它很小。

鉴于每个变量之间没有相关性,p 值表明,total_unemployed1 每增加一个单位导致 housing_price_index1 减少 8.33 的可能性为 0%。低 p 值(通常小于 0.06)意味着结果具有统计学意义。

我们的系数最有可能落在置信区间内。我们有 96% 的信心认为 total_unemployed1 的系数将落在 [-9.186, -7.480] 的范围内。

让我们使用 stats models 中的 plotting_regress_exog1 函数来更好地理解我们的模型。

回归绘图

回归图 查看下面的四个图。

  1. 在“Y 和拟合与 X”图中,因变量与我们的预测值一起显示,并带有置信区间。我们图中的反向链接显示 housing_price_index1 和 total_unemployed1 之间存在负相关,这意味着当一个度量上升时,另一个下降。
  2. “残差与 total_unemployed1”图显示了我们模型的误差与指定的预测变量。该线表示所有观测值的平均值,每个点表示一个观测值。由于点与平均值之间的距离没有明显的模式,因此 OLS 同方差性假设成立。
  3. 考虑到包含额外不相关变量对我们当前 total-unemployed 系数的影响,“部分回归绘图”描绘了 housing_price_index1 和 total_unemployed1 之间的关系。稍后,当添加更多变量时,我们将观察到这个确切的图如何变化。
  4. 分量和构成加上残差 (CCPR) 绘图补充了部分回归绘图;它显示了在我们的 total_unemployed1 系数上添加了额外自变量的影响后,我们的趋势线的位置。

源代码片段

输出

Predicting Housing Prices using Python

以下绘图显示了我们的置信区间、趋势向量(绿色)和观测值(点)。(红色)。

源代码片段

输出

Predicting Housing Prices using Python

我们的模型到目前为止都很好。我们将增加变量的数量并观察 total_unemployed1 的响应。

多元线性回归

在数学上,多元线性回归是

Predicting Housing Prices using Python

我们知道房价不能仅仅归因于失业。我们测试并添加了额外的变量,以更好地了解影响房价的因素。然后通过查看回归结果来确定满足 OLS 原则并从经济角度来看不错的预测变量组合。

除了我们最初的预测变量 total_unemployed1,我们最终的模型还包括变量:fed_funds1、consumer_price_index1、long_interest_rate1 和 gross_domestic_product1。

由于新变量,total_unemployed1 对 housing_price_index1 的影响减弱了。total_unemployed1 的影响现在不那么可预测(标准误差从 0.41 增加到 4.399),并且影响房价的可能性更小(p 值从 0 增加到 0.943)。

尽管 housing_price_index1 和 total_unemployed1 之间可能存在相关性,但我们的其他预测变量解释了房价更多的变化。需要一个更可靠的模型来捕捉我们变量之间真实世界的相互关联性,而简单的线性回归无法捕捉这种关联。这就是为什么添加更多变量会导致我们的多元回归模型结果发生显着变化的原因。

我们的多元线性回归模型比我们的简单线性回归模型表现更好,因为我们新纳入的变量在 6% 的水平上显着不同,并且我们的系数证实了我们的假设。

使用以下代码设置带有我们新添加的预测变量的多元线性回归。

源代码片段

输出

Predicting Housing Prices using Python

再次查看部分回归绘图

让我们再次绘制我们的部分逻辑图,看看包含其他因素如何改变了 total_unemployed1 变量。总失业率可能不像第一个模型所声称的那样具有解释性,total_unemployed1 的部分回归绘图(在下图中,右上角)与 total_unemployed1 的回归图(上方,左下角)相比缺乏趋势就证明了这一点。联邦基金1、消费者物价指数1、长期利率1和国内生产总值1是房价指数1的更优解释因素的进一步证据是,最新变量的结果始终比总失业率的结果更接近时尚线。

这些部分回归图支持了我们的多元线性回归方法优于传统线性回归模型的效率。

源代码片段

使用 Python 预测房价的综合代码

输出

Predicting Housing Prices using Python

最重要的是要理解,因为建模是基于科学的,所以过程如下:检查、评估、失败和测试。

规避陷阱

本文介绍了基本回归建模,但经验丰富的数据科学家可能会注意到我们方法和模型中的各种缺陷,包括

  • 没有文献综述:虽然直接进入建模过程可能很诱人,但这样做可能会忽略现有信息体系。文献分析会表明预测房价的最佳模型不是线性回归。它还会导致更好的变量选择。此外,预先投入文献综述可以帮助您以后节省大量工作。
  • 样本量小:要对住房市场这样复杂的事物进行建模,需要一年以上的数据。我们的小样本量偏向于住房危机后的事件,不能充分反映长期住房市场模式。
  • 多重共线性:敏锐的观察者会注意到我们的模型关于多重共线性的警告。我们有多个变量通过本质上讲述相同的故事来夸大每个预测变量的重要性。
  • 自相关:当预测变量的过去值影响其当前和未来值时,就会发生自相关。仔细检查 Durbin - Watson 分数,自相关在我们模型中的存在是显而易见的。

我们将在后续文章中尝试解决这些问题,以便更好地理解影响房价的经济因素。

结论

我们已经介绍了如何设置基本的简单线性回归和多元线性回归模型,这些模型可用于预测受宏观经济变量影响的房价,以及如何从根本上评估线性回归模型的质量。

确实,解释房价具有挑战性。可以包含其他额外的预测因素。或者,房价可能是我们宏观经济变量的主要驱动力。这些变量可能同时相互作用,使情况进一步复杂化。

请探索数据并通过包含和排除变量来微调此模型,同时考虑 OLS 假设和回归结果的重要性。