第四章 回归分析—— 数据挖掘(主编:吕欣 王梦宁)》读书笔记
用数学模型捕捉变量间的统计规律,并用它解决实际问题。想快速建立 baseline?用线性回归;变量太多或有共线性?用LASSO(选变量)或岭回归(稳系数);关系不是直线?用非线性回归(变量变换或迭代算法);永远记住:没有“最好”的模型,只有“最合适”的模型——结合业务场景、数据特点和评价指标,才能选出最优解。回归分析就像一把“瑞士军刀”,掌握它,你就能从数据中挖出更多有价值的规律,而不是停留在“我
第四章 回归分析
在数据分析的工具箱里,回归分析绝对是“扛把子”级别的存在。它不像描述统计那样只停留在“看看数据长啥样”,也不像简单的相关性分析那样只告诉你“两个东西有关系”——回归分析要做的,是找到变量之间具体的数学关系,甚至帮你预测未来、判断因果。无论是预测房价(“面积每增加10平米,价格平均涨多少?”),还是分析影响销量的因素(“广告投入和促销活动,哪个对销量影响更大?”),甚至是验证“教育水平是否真的能提高收入”,回归分析都是绕不开的核心方法。
一、回归分析:不止是“画条线”,更是找规律
回归分析的本质,是用数学模型描述变量之间的依赖关系。但它的诞生,其实源于一个很有趣的发现。
1. 高尔顿的身高研究:“回归”一词的由来
19世纪,高尔顿想搞明白“身高是不是会遗传”。他收集了上千对父子的身高数据,结果发现了一个很有意思的现象:
- 高个子父亲的儿子,通常也比较高,但大概率比父亲矮一点(更接近人群的平均身高);
- 矮个子父亲的儿子,通常也比较矮,但大概率比父亲高一点(同样向平均值靠拢)。
这种“往中间看齐”的趋势,被他称为“回归(Regression)到平均值”。这就是“回归”这个词的由来。
虽然这只是一个具体案例,但它揭示了回归分析的核心思想:变量之间的关系不是绝对的,而是带有某种“趋势”和“误差”的统计规律。比如父亲身高和儿子身高的关系,可以用一条直线来近似描述(这就是后来的线性回归),但总会有偏差。
2. 回归分析到底能做什么?
简单说,回归分析有三个核心用途:
- 描述关系:比如“教育年限每增加1年,收入平均增加多少?”(量化变量间的影响程度);
- 预测未来:比如根据过去10年的房价数据,预测明年的房价(用已知数据推测未知结果);
- 验证因果:比如通过控制其他变量,验证“吸烟是否真的会增加患癌风险”(排除干扰,接近因果结论)。
它的应用场景几乎无处不在:经济学用它分析政策影响,医学用它研究药物效果,互联网用它做用户增长预测,甚至体育界都用它分析球员表现对胜率的影响。
3. 模型好不好,怎么说了算?回归的“评分标准”
建完回归模型后,第一件事就是问:这个模型靠谱吗?预测准不准?这就需要评价指标来打分。常用的有四个:
(1)R²(决定系数):模型能“解释”多少规律?
核心逻辑:R²衡量的是“因变量的变化中,能被自变量解释的比例”。公式是:
R2=1−SSESSTR² = 1 - \frac{SSE}{SST}R2=1−SSTSSE
(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=n1∑i=1n∣yi−y^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=n1∑i=1n(yi−y^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=n1∑i=1n
yiyi−y^i
×100%
- 比如预测销量:A产品真实销量100,预测90(误差10,占10%);B产品真实销量1000,预测990(误差10,占1%),
MAPE = (10% + 1%)/2 = 5.5%,更能反映“相对准确性”。
优点:不受数据单位影响,适合比较不同量级的预测(比如同时预测手机销量和电脑销量,用MAPE比RMSE更合理)。
缺点:当真实值yiy_iyi接近0时,百分比会爆炸(分母太小),这时候不能用。
总结一下四个指标的选择:
- 看模型解释力?用R²;
- 想直观看平均误差?用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=1−Ri21
(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(yi−∑jβ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−Xβ)2+λ∑βj2。
2. 岭回归的特点:“温和收缩”而非“删除”
- 和LASSO不同,岭回归不会把系数压到0,而是“整体收缩”(让大的系数变小,小的系数更接近0);
- 适合处理“变量都有点用,但存在共线性”的情况(比如预测销量,广告、促销、季节因素都有关,但它们可能相关);
- λ\lambdaλ越大,收缩越强,系数越稳定,但偏差可能越大(需要平衡“偏差”和“方差”)。
3. LASSO和岭回归怎么选?
- 想精简变量(比如从100个变量里挑10个关键的):用LASSO;
- 变量都重要,只是有共线性(比如预测股票,多个指标都相关但都有用):用岭回归;
- 实在纠结?用弹性网络(Elastic Net):同时加L1L_1L1和L2L_2L2惩罚,兼顾两者优点。
六、非线性回归:当关系不是“直线”时
不是所有关系都是线性的。比如“年龄和医疗支出”:年轻时支出低,中年稳定,老年急剧上升——这是曲线关系,需要用非线性回归。
1. 本质线性模型:“曲线”变“直线”
有些非线性关系可以通过变量变换变成线性。比如:
- 指数关系y=aebxy = ae^{bx}y=aebx,取对数后变成lny=lna+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(选变量) 或岭回归(稳系数);
- 关系不是直线?用非线性回归(变量变换或迭代算法);
- 永远记住:没有“最好”的模型,只有“最合适”的模型——结合业务场景、数据特点和评价指标,才能选出最优解。
回归分析就像一把“瑞士军刀”,掌握它,你就能从数据中挖出更多有价值的规律,而不是停留在“我觉得”“可能是”的猜测里。

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