第四章 回归分析

在数据分析的工具箱里,回归分析绝对是“扛把子”级别的存在。它不像描述统计那样只停留在“看看数据长啥样”,也不像简单的相关性分析那样只告诉你“两个东西有关系”——回归分析要做的,是找到变量之间具体的数学关系,甚至帮你预测未来、判断因果。无论是预测房价(“面积每增加10平米,价格平均涨多少?”),还是分析影响销量的因素(“广告投入和促销活动,哪个对销量影响更大?”),甚至是验证“教育水平是否真的能提高收入”,回归分析都是绕不开的核心方法。

一、回归分析:不止是“画条线”,更是找规律

回归分析的本质,是用数学模型描述变量之间的依赖关系。但它的诞生,其实源于一个很有趣的发现。

1. 高尔顿的身高研究:“回归”一词的由来

19世纪,高尔顿想搞明白“身高是不是会遗传”。他收集了上千对父子的身高数据,结果发现了一个很有意思的现象:

  • 高个子父亲的儿子,通常也比较高,但大概率比父亲矮一点(更接近人群的平均身高);
  • 矮个子父亲的儿子,通常也比较矮,但大概率比父亲高一点(同样向平均值靠拢)。

这种“往中间看齐”的趋势,被他称为“回归(Regression)到平均值”。这就是“回归”这个词的由来。

虽然这只是一个具体案例,但它揭示了回归分析的核心思想:变量之间的关系不是绝对的,而是带有某种“趋势”和“误差”的统计规律。比如父亲身高和儿子身高的关系,可以用一条直线来近似描述(这就是后来的线性回归),但总会有偏差。

2. 回归分析到底能做什么?

简单说,回归分析有三个核心用途:

  • 描述关系:比如“教育年限每增加1年,收入平均增加多少?”(量化变量间的影响程度);
  • 预测未来:比如根据过去10年的房价数据,预测明年的房价(用已知数据推测未知结果);
  • 验证因果:比如通过控制其他变量,验证“吸烟是否真的会增加患癌风险”(排除干扰,接近因果结论)。

它的应用场景几乎无处不在:经济学用它分析政策影响,医学用它研究药物效果,互联网用它做用户增长预测,甚至体育界都用它分析球员表现对胜率的影响。

3. 模型好不好,怎么说了算?回归的“评分标准”

建完回归模型后,第一件事就是问:这个模型靠谱吗?预测准不准?这就需要评价指标来打分。常用的有四个:

(1)R²(决定系数):模型能“解释”多少规律?

核心逻辑:R²衡量的是“因变量的变化中,能被自变量解释的比例”。公式是:
R2=1−SSESSTR² = 1 - \frac{SSE}{SST}R2=1SSTSSE
(SSE是“残差平方和”,即预测值和真实值的差距;SST是“总平方和”,即真实值和平均值的差距)

  • R²的范围是[0,1]:越接近1,说明模型能解释的规律越多(比如R²=0.8,意味着80%的变化能被模型解释);
  • 但要注意:R²不是越高越好!比如加入很多无关变量,R²可能会虚高(这就是“过拟合”),这时候需要看调整后的R²(Adjusted R²),它会惩罚多余的变量。

适用场景:判断模型的整体解释力,比如“这个工资预测模型能解释60%的收入差异,还不错”。

(2)MAE(平均绝对误差):误差的“平均水平”

核心逻辑:计算预测值和真实值之间的“平均绝对差距”,公式:
MAE=1n∑i=1n∣yi−y^i∣MAE = \frac{1}{n}\sum_{i=1}^n |y_i - \hat{y}_i|MAE=n1i=1nyiy^i

  • 比如预测房价时,MAE=5万元,说明平均每个预测值和真实房价差5万;
  • 优点:直观易懂,对异常值不敏感(比如个别极端高房价不会大幅拉高MAE);
  • 缺点:没有考虑误差的平方,对大误差的“惩罚”不够(比如差10万和差1万,在MAE里只是数值差异,没有权重区别)。
(3)RMSE(均方根误差):对“大误差”更敏感

核心逻辑:先算误差的平方,再求平均,最后开根号,公式:
RMSE=1n∑i=1n(yi−y^i)2RMSE = \sqrt{\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2}RMSE=n1i=1n(yiy^i)2

  • 和MAE相比,RMSE会“放大”大误差的影响。比如同样是预测房价,一个误差10万,一个误差1万:
    MAE = (10+1)/2 = 5.5万,
    RMSE = √[(10² + 1²)/2] ≈ 7.1万,
    显然RMSE更能反映“大误差”的存在。

适用场景:当你特别在意“避免大错误”时,比如预测库存(多进了1000件货比少进100件后果更严重)。

(4)MAPE(平均绝对百分比误差):“相对误差”更重要时

核心逻辑:计算误差占真实值的“百分比”的平均值,公式:
MAPE=1n∑i=1n∣yi−y^iyi∣×100%MAPE = \frac{1}{n}\sum_{i=1}^n \left| \frac{y_i - \hat{y}_i}{y_i} \right| \times 100\%MAPE=n1i=1n yiyiy^i ×100%

  • 比如预测销量:A产品真实销量100,预测90(误差10,占10%);B产品真实销量1000,预测990(误差10,占1%),
    MAPE = (10% + 1%)/2 = 5.5%,更能反映“相对准确性”。

优点:不受数据单位影响,适合比较不同量级的预测(比如同时预测手机销量和电脑销量,用MAPE比RMSE更合理)。
缺点:当真实值yiy_iyi接近0时,百分比会爆炸(分母太小),这时候不能用。

总结一下四个指标的选择

  • 看模型解释力?用
  • 想直观看平均误差?用MAE
  • 怕出现大误差?用RMSE
  • 数据量级差异大?用MAPE

二、线性回归:最简单也最常用的“ baseline 模型”

线性回归是回归分析的“入门款”,但也是实战中用得最多的模型。它的核心是:因变量和自变量之间的关系,能用一条直线(或平面)来近似

1. 一元线性回归:两个变量的“直线关系”

比如“房屋面积”和“房价”的关系,我们猜想:面积越大,房价越高,且大致成一条直线。这就是一元线性回归,模型是:
y^=β0+β1x+ε\hat{y} = \beta_0 + \beta_1 x + \varepsilony^=β0+β1x+ε

  • y^\hat{y}y^是预测的房价(因变量),xxx是面积(自变量);
  • β0\beta_0β0是“截距”(当x=0x=0x=0时的预测值,比如面积为0时的基础房价,实际中可能无意义);
  • β1\beta_1β1是“斜率”(核心!表示xxx每增加1单位,y^\hat{y}y^平均增加多少,比如β1=1万/平米\beta_1=1万/平米β1=1/平米,即每多1平米,房价多1万);
  • ε\varepsilonε是“误差项”(总有一些因素没考虑到,比如装修、楼层,导致预测不准)。

怎么找到这条“最优直线”?最小二乘法:让所有点到直线的“误差平方和”最小(为什么是平方?因为平方能放大 outliers 的影响,让直线更“稳健”)。

2. 多元线性回归:多个因素的“综合影响”

现实中,一个结果往往受多个因素影响。比如房价不仅看面积,还看地段、房龄、学区等。这时候就需要多元线性回归,模型是:
y^=β0+β1x1+β2x2+⋯+βpxp\hat{y} = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_py^=β0+β1x1+β2x2++βpxp

  • x1x_1x1(面积)、x2x_2x2(房龄)、x3x_3x3(学区)等是多个自变量;
  • 每个βi\beta_iβi表示:在其他变量不变的情况下,xix_ixi每增加1单位,yyy的平均变化(这叫“偏回归系数”)。

举个例子
假设模型是:房价 = 50万 + 1万×面积 - 2万×房龄 + 30万×学区(是=1,否=0),
则意味着:

  • 面积每多1平米,房价多1万(其他条件不变);
  • 房龄每多1年,房价少2万(其他条件不变);
  • 有学区的房子,比没学区的贵30万(其他条件不变)。

这就是多元回归的价值:量化每个因素的“独立影响”

3. 线性回归的“三大假设”:违反了会怎么样?

线性回归不是随便用的,它有三个重要假设,违反了会导致模型“不靠谱”:

  • 线性关系:自变量和因变量真的是线性关系吗?如果实际是曲线(比如“年龄和收入”,年轻时收入随年龄增长快,老了增长慢甚至下降),硬用直线拟合就会错。
    怎么办?可以对变量做变换(比如加个x2x^2x2项,变成曲线回归)。

  • 误差项独立且同方差

    • 独立:一个样本的误差,不能影响另一个(比如时间序列数据,今天的误差可能影响明天,这叫“自相关”);
    • 同方差:误差的大小不能随xxx变化(比如低收入人群的收入预测误差小,高收入人群误差大,这叫“异方差”)。
      违反了怎么办?用加权最小二乘法、或者广义线性模型(GLM)。
  • 误差项正态分布:主要影响后面的“显著性检验”,如果样本量大,这个假设可以放宽(中心极限定理)。

4. 模型“显著”吗?F检验和t检验的区别

建完模型后,我们需要检验:这些变量真的对结果有影响吗?还是纯粹靠运气?这就需要显著性检验

  • F检验:检验“整体模型是否显著”。
    原假设:所有βi\beta_iβi都为0(即自变量整体对yyy没影响)。
    如果F值很大,p值<0.05,就拒绝原假设,说明模型整体是有用的。

  • t检验:检验“每个自变量是否显著”。
    对每个βi\beta_iβi,原假设:βi=0\beta_i=0βi=0(即这个变量对yyy没影响)。
    如果t值的绝对值很大,p值<0.05,就说明这个变量的影响“显著不为0”,应该保留在模型里;否则可以考虑删掉(比如房龄的p值=0.3>0.05,说明房龄对房价的影响不显著)。

一句话总结:F检验看“团队有没有用”,t检验看“每个成员有没有用”。

三、多重共线性:变量之间“太亲密”,模型会“犯迷糊”

做多元回归时,很容易遇到一个坑:自变量之间高度相关。比如“身高”和“体重”、“广告费用”和“促销费用”,这就是“多重共线性”。

1. 多重共线性的“坑”:系数不稳定,结论反常识

比如我们想研究“学习时间”和“做题数量”对“成绩”的影响。但“学习时间”和“做题数量”高度相关(学得越久,做题越多),这时候模型可能会“犯迷糊”:

  • 回归系数变得不稳定:换一批数据,β1\beta_1β1(学习时间的系数)可能从正变负;
  • 系数的“标准误”变大:t检验容易不显著(明明有用的变量,却被判断为“没用”);
  • 甚至得出反常识的结论:比如“学习时间增加,成绩反而下降”(其实是因为做题数量的影响被掩盖了)。

2. 怎么发现多重共线性?看VIF值!

方差膨胀因子(VIF) 是最常用的诊断工具。对每个自变量xix_ixi,VIF的公式是:
VIFi=11−Ri2VIF_i = \frac{1}{1 - R_i^2}VIFi=1Ri21
Ri2R_i^2Ri2是把xix_ixi当作因变量,用其他自变量回归得到的决定系数)

  • 含义:VIF表示“由于多重共线性,xix_ixi的系数方差被放大了多少倍”。
  • 判断标准:
    • VIF=1:完全没有共线性;
    • VIF>5:中等共线性;
    • VIF≥10:严重共线性(必须处理!)。

3. 怎么解决多重共线性?

  • 删一个:如果两个变量高度相关(比如“语文成绩”和“文科综合成绩”),可以删掉其中一个(保留更有业务意义的);
  • 合并变量:比如把“身高”和“体重”合并成“BMI指数”,减少变量数量;
  • 增加样本量:样本越多,共线性的影响会被稀释(但实际中可能很难做到);
  • 用正则化方法:比如后面会讲的岭回归、LASSO回归(给系数“加惩罚”,让它们更稳定)。

四、LASSO回归:会“自动做减法”的模型

当自变量很多(比如上百个),或者存在多重共线性时,普通线性回归就扛不住了。这时候,LASSO回归就派上用场了——它能“自动筛选变量”,把不重要的变量系数压缩到0,让模型更简洁。

1. LASSO的“魔法”:加个L1L_1L1惩罚项

LASSO回归的目标函数是:
min⁡β∑i=1n(yi−∑jβjxij)2+λ∑j∣βj∣\min_{\beta} \sum_{i=1}^n (y_i - \sum_j \beta_j x_{ij})^2 + \lambda \sum_j |\beta_j|minβi=1n(yijβjxij)2+λjβj

  • 前半部分和普通线性回归一样(最小二乘);
  • 后半部分是L1L_1L1正则化项(系数的绝对值之和),λ\lambdaλ是“惩罚力度”(λ\lambdaλ越大,惩罚越重,系数越容易被压到0)。

举个例子
预测收入时,自变量有年龄、教育、工作年限、行业、公司规模、地区等。LASSO可能会把“公司规模”的系数压到0(认为它不重要),只保留年龄、教育、行业这几个关键变量。

2. LASSO的优点和局限

优点

  • 自动变量选择:适合高维数据(变量比样本多),比如基因数据(上万个基因预测疾病);
  • 解决共线性:当变量高度相关时,LASSO会选一个“代表”,把其他的系数压到0,避免模型混乱。

局限

  • “二选一”的粗暴:如果两个变量高度相关(比如“数学成绩”和“理科综合”),LASSO可能只留一个,另一个直接删掉,可能丢失信息;
  • λ\lambdaλ很敏感λ\lambdaλ选大了,可能把有用变量也删掉;选小了,又起不到筛选作用(通常用交叉验证选λ\lambdaλ)。

3. 怎么计算LASSO?用“坐标下降法”

LASSO的目标函数不是“光滑”的(因为有绝对值),普通最小二乘法搞不定。常用坐标下降法

  • 每次固定其他所有系数,只优化一个系数;
  • 轮流优化每个系数,直到所有系数都稳定(收敛)。
    优点是计算快,适合大数据;缺点是可能陷入“局部最优”,但实际中效果通常不错。

五、岭回归:给系数“套上枷锁”,防止“膨胀”

和LASSO类似,岭回归也是一种“正则化方法”,但它的惩罚方式不同,适合处理多重共线性。

1. 岭回归的“套路”:加个L2L_2L2惩罚项

岭回归的目标函数是:
β^=(XTX+λI)−1XTy\hat{\beta} = (X^T X + \lambda I)^{-1} X^T yβ^=(XTX+λI)1XTy

  • 核心是在XTXX^T XXTX(普通最小二乘的系数矩阵)里加了一个λI\lambda IλIλ\lambdaλ是惩罚力度,III是单位矩阵);
  • 本质是L2L_2L2正则化(惩罚系数的平方和):min⁡∑(y−Xβ)2+λ∑βj2\min \sum (y - X\beta)^2 + \lambda \sum \beta_j^2min(y)2+λβj2

2. 岭回归的特点:“温和收缩”而非“删除”

  • 和LASSO不同,岭回归不会把系数压到0,而是“整体收缩”(让大的系数变小,小的系数更接近0);
  • 适合处理“变量都有点用,但存在共线性”的情况(比如预测销量,广告、促销、季节因素都有关,但它们可能相关);
  • λ\lambdaλ越大,收缩越强,系数越稳定,但偏差可能越大(需要平衡“偏差”和“方差”)。

3. LASSO和岭回归怎么选?

  • 精简变量(比如从100个变量里挑10个关键的):用LASSO;
  • 变量都重要,只是有共线性(比如预测股票,多个指标都相关但都有用):用岭回归;
  • 实在纠结?用弹性网络(Elastic Net):同时加L1L_1L1L2L_2L2惩罚,兼顾两者优点。

六、非线性回归:当关系不是“直线”时

不是所有关系都是线性的。比如“年龄和医疗支出”:年轻时支出低,中年稳定,老年急剧上升——这是曲线关系,需要用非线性回归。

1. 本质线性模型:“曲线”变“直线”

有些非线性关系可以通过变量变换变成线性。比如:

  • 指数关系y=aebxy = ae^{bx}y=aebx,取对数后变成ln⁡y=ln⁡a+bx\ln y = \ln a + bxlny=lna+bx(线性);
  • 二次关系y=β0+β1x+β2x2y = \beta_0 + \beta_1 x + \beta_2 x^2y=β0+β1x+β2x2(加入x2x^2x2项,依然是线性回归的形式,只是变量变了)。

举个例子:工资增长可能和工作年限成“对数关系”(刚开始涨得快,后来变慢),可以设y=β0+β1ln⁡(x)y = \beta_0 + \beta_1 \ln(x)y=β0+β1ln(x),用线性回归求解。

2. 本质非线性模型:“硬骨头”只能迭代啃

有些关系无论怎么变换,都不能变成线性(比如y=11+e−(β0+β1x)y = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x)}}y=1+e(β0+β1x)1,这是逻辑回归的变形)。这时只能用迭代算法(比如梯度下降、牛顿法):

  • 先猜一个系数值;
  • 计算预测误差,然后一点点调整系数,让误差变小;
  • 重复上一步,直到误差足够小(收敛)。

总结:回归分析的“心法”

回归分析看似复杂,但核心逻辑很简单:用数学模型捕捉变量间的统计规律,并用它解决实际问题

  • 想快速建立 baseline?用线性回归
  • 变量太多或有共线性?用LASSO(选变量)岭回归(稳系数)
  • 关系不是直线?用非线性回归(变量变换或迭代算法);
  • 永远记住:没有“最好”的模型,只有“最合适”的模型——结合业务场景、数据特点和评价指标,才能选出最优解。

回归分析就像一把“瑞士军刀”,掌握它,你就能从数据中挖出更多有价值的规律,而不是停留在“我觉得”“可能是”的猜测里。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐