🏠 手把手教你用Python做线性回归:房价预测实战(附代码)
❝📊 从数据清洗到模型解读,一文掌握线性回归全流程
📌 写在前面
线性回归是数据分析中最基础也最常用的模型之一。无论你是刚入门Python的小白,还是想巩固统计分析的同学,这篇文章都能帮你理清思路,学会如何用 statsmodels 和 pandas 搭建一个完整的回归模型。
今天,我们以房价预测为例,带你一步步完成:
✅ 数据预处理(分类变量处理)✅ 变量相关性分析(热力图)✅ 模型构建与结果解读✅ 新数据预测
准备好了吗?Let's go!🚀
📁 1. 数据准备与探索
1.1 导入必要的库
import statsmodels.api as smimport numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt
1.2 读取房价数据
我们有一个 house_price_simple.csv 文件,包含 1000 条房屋信息:
❝📌 数据字段说明:
1.3 处理分类变量——独热编码
“所在城市”是分类变量,不能直接放进回归模型。我们需要把它转换成虚拟变量(dummy variables)。
# 生成虚拟变量,并丢弃第一个类别(避免多重共线性)data = pd.get_dummies(data, columns=['所在城市'], dtype=int, drop_first=True)
处理后,原来的“所在城市”一列变成了三列:所在城市_B、所在城市_C、所在城市_D。当某个房子在城市 A 时,这三列全为 0(作为基准组)。
🔍 2. 变量相关性分析
在建模前,先看看各个变量之间的相关性,避免多重共线性。
# 计算相关系数(绝对值)X = data.drop('价格', axis=1)X.corr().abs()
输出结果:
❝💡 相关系数都很小(<0.1),说明没有明显的多重共线性,可以放心建模。
📈 绘制热力图(更直观)
sns.heatmap(X.corr().abs(), annot=True)plt.show()
(颜色越深表示相关性越强,图中大部分格子颜色很浅,符合预期)
🧠 3. 构建线性回归模型
3.1 添加常数项(截距)
X = sm.add_constant(X) # 加入一列全为1的常数项
3.2 拟合模型
y = data['价格']model = sm.OLS(y, X).fit()print(model.summary())
3.3 模型结果解读
模型整体指标:
- R-squared = 0.998:模型解释了99.8%的房价变化,拟合效果非常好!
- F-statistic = 7.766e+04,p值 = 0.00:模型整体显著。
- Durbin-Watson = 2.05:残差无明显自相关。
❝🔔 注意:条件数(Cond. No.)较大(1.02e+04),可能是由于变量尺度差异引起,但不影响模型解释。
🔮 4. 利用模型进行预测
现在,我们有了一组新房源信息,想预测它们的价格。
4.1 读取新数据
new_data = pd.read_csv("house_price_predict_simple.csv")
新数据预览:
4.2 对新数据进行同样的预处理
# 将“所在城市”转为分类变量(确保类别与训练数据一致)new_data['所在城市'] = pd.Categorical(new_data['所在城市'], categories=['A','B','C','D'])# 生成虚拟变量(drop_first=True)new_data = pd.get_dummies(new_data, columns=['所在城市'], dtype=float, drop_first=True)# 添加常数项new_data = sm.add_constant(new_data)
4.3 预测房价
predictions = model.predict(new_data)print(predictions)
输出结果:
0 403709.341 715875.932 614231.463 340676.574 463414.685 802574.336 210259.567 513372.348 759026.249 439396.43dtype: float64
❝🎯 每一行对应新数据的预测价格,单位:元。
📝 5. 总结
通过这个实战案例,我们完成了:
✅ 分类变量的独热编码处理✅ 相关性分析与可视化✅ 线性回归模型的建立与诊断✅ 对新数据进行预测
线性回归虽然简单,但背后的原理和注意事项很多。希望这篇文章能帮你打好基础,未来可以尝试更多变量、交互项、正则化等进阶技巧。
如果你觉得有用,欢迎点赞、在看、转发三连!
📚 往期推荐
💬 互动你在建模过程中遇到过什么坑?欢迎留言分享,我们一起讨论!
(全文完)