DS4-OLS模型建立

引言

想象一下,你是一位健身教练,想要帮助客户制定合理的体重目标。当你看到一位身高165cm的女性时,你会如何建议她的理想体重?或者,你是一位服装设计师,需要根据客户的身高来估算衣服尺寸。这些问题都可以通过线性回归分析来解决!

本文将以女性身高与体重的关系为例,深入浅出地讲解Python中statsmodels库的OLS(普通最小二乘法)线性回归,让你不仅学会代码,更能理解背后的统计学原理。


一、什么是OLS?——找一条"最佳拟合线"

1.1 OLS的定义

**OLS(Ordinary Least Squares,普通最小二乘法)**是统计学中最经典的线性回归方法。它的核心思想可以用一句话概括:

找一条直线,让所有数据点到这条直线的垂直距离的平方和最小。

1.2 生动的比喻

想象你在玩飞镖游戏:

  • 每个飞镖代表一个数据点(比如一位女性的身高-体重数据)
  • 你要在墙上画一条直线
  • OLS的目标就是找到这样一条线:所有飞镖到这条线的垂直距离的平方和最小

这就像是在说:“我要找一条最公平的线,让所有人的’误差’加起来最小!”

1.3 数学表达式

OLS的数学模型是:

y = Xβ + ε

其中:

  • y:因变量(dependent variable)——我们要预测的东西,比如体重
  • X:自变量(independent variable)——用来预测的东西,比如身高
  • β:回归系数——表示X对y的影响程度
  • ε:误差项——模型无法解释的部分

在我们的例子中,模型可以写成:

体重 = β₀ + β₁ × 身高 + ε

二、实战案例:女性身高与体重的关系

2.1 数据介绍

我们有一份包含15位女性身高和体重的数据:

编号 身高(height) 体重(weight)
1 58 115
2 59 117
3 60 120
15 72 164

业务理解:通过建立线性回归模型,实现根据身高预测体重的目的。

2.2 数据可视化

首先,让我们看看数据的分布:

import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
frame = pd.read_csv("women.csv")

# 绘制散点图
plt.scatter(frame['height'], frame['weight'])
plt.xlabel("身高")
plt.ylabel("体重")
plt.title("女性身高与体重散点图")
plt.show()

观察:数据点呈现出明显的线性趋势——身高越高,体重越重。这正是线性回归大展身手的时候!

2.3 建立OLS模型

import statsmodels.api as sm

# 准备数据
X = frame['height']  # 自变量:身高
y = frame['weight']  # 因变量:体重

# 添加常数项(截距)
X_add = sm.add_constant(X)

# 创建OLS模型
model = sm.OLS(y, X_add)

# 拟合模型
results = model.fit()

# 查看结果摘要
print(results.summary())

2.4 结果解读

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 weight   R-squared:                       0.991
Model:                            OLS   Adj. R-squared:                  0.990
Method:                 Least Squares   F-statistic:                     1433.
Date:                Tue, 05 May 2026   Prob (F-statistic):           1.09e-14
Time:                        11:17:52   Log-Likelihood:                -26.541
No. Observations:                  15   AIC:                             57.08
Df Residuals:                      13   BIC:                             58.50
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const        -87.5167      5.937    -14.741      0.000    -100.343     -74.691
height         3.4500      0.091     37.855      0.000       3.253       3.647
==============================================================================
关键指标解读:

1. 回归系数(coef)

  • const = -87.5167:截距项。当身高为0时,体重为-87.5(这在现实中没有意义,只是数学上的截距)
  • height = 3.4500每增加1单位身高,体重增加3.45单位

实际意义:如果一个女性身高从160cm增加到161cm,预计体重会增加约3.45磅。

2. R-squared = 0.991

  • 表示模型解释了99.1%的数据变异
  • **极高的拟合度!**说明身高几乎可以完美预测体重

3. P值(P>|t|)

  • 两个系数的P值都是0.000(< 0.05)
  • 说明身高对体重的影响是统计显著的

三、总结与建议

3.1 核心知识点回顾

概念 说明 应用场景
OLS 普通最小二乘法,最小化误差平方和 建立线性关系模型
R-squared 模型解释力,越接近1越好 评估模型拟合度
F检验 检验模型整体显著性 判断模型是否有用
Durbin-Watson 检验残差自相关 诊断模型问题
Jarque-Bera 检验残差正态性 验证模型假设

来自菜鸟编程

3.2 完整代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.stats.stattools import durbin_watson, jarque_bera

# 1. 读取数据
df = pd.read_csv('women.csv')

# 2. 数据可视化
plt.scatter(df['height'], df['weight'])
plt.xlabel('身高')
plt.ylabel('体重')
plt.show()

# 3. 建立线性回归模型
X = sm.add_constant(df['height'])
y = df['weight']
model = sm.OLS(y, X)
results = model.fit()

# 4. 查看结果
print(results.summary())

# 5. 模型诊断
print(f"F检验P值: {results.f_pvalue}")
print(f"Durbin-Watson: {durbin_watson(results.resid)}")
jb_stat, jb_pvalue, skew, kurt = jarque_bera(results.resid)
print(f"Jarque-Bera P值: {jb_pvalue}")

# 6. 预测
new_height = 65
prediction = results.predict([1, new_height])
print(f"身高{new_height}英寸的预测体重: {prediction[0]:.2f}磅")

结语

线性回归就像是一把瑞士军刀——简单、实用、适用范围广。通过本文的学习,你不仅掌握了statsmodels中OLS的使用方法,更理解了背后的统计学原理。

记住:好的模型不仅要拟合得好,还要经得起检验!

希望这篇文章能帮助你在数据分析的道路上走得更远。祝你一天都开心

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐