在 Excel 里对一堆散点右键添加趋势线,勾选显示公式,跳出来 y=0.82x+1.3,很多人抄下公式就走了。这条线背后的原理就是最小二乘估计,十九世纪初勒让德和高斯为了处理天文观测数据搞出来的方法,到今天还是回归分析的地基。

标准只有一句话:残差平方和最小

每个样本点到拟合直线的竖直距离叫残差。残差有正有负,直接相加会互相抵消,所以先平方再求和,让这个平方和取到最小值的那组系数,就是最小二乘估计的结果。平方还有个副作用:偏差越大的点被罚得越重,整条线会拼命迁就离群点,这是后面要说的隐患。

一元情形完全可以手算

只有一个自变量时,斜率 b 等于 Σ(xi−x̄)(yi−ȳ) 除以 Σ(xi−x̄)²,截距 a 等于 ȳ 减去 b 乘 x̄,x̄ 和 ȳ 就是各自的均值。十来个数据点用计算器几分钟算完,不必非等软件。自变量超过一个叫多元回归,公式变成矩阵形式 β=(XᵀX)⁻¹Xᵀy,手算不现实,Excel 的数据分析插件、Python 的 sklearn 都能直接出结果。

顺手看一眼 R²

趋势线下方一般还会给个 R²,取值 0 到 1,越接近 1 说明直线解释掉的波动越多。低于 0.5 就要留个心眼,可能关系本身不是线性,也可能噪声太大,先别急着拿这条线去做预测。

它藏在你天天用的功能里

  • Excel 的趋势线和数据分析插件里的回归,内核都是它
  • 机器学习的线性回归,损失函数就是均方误差,同一路数
  • 电商里估计投放费用和销量的关系,用的也是这套
  • 工程测量里的控制网平差,观测误差靠它分配
  • 卡尔曼滤波的状态更新,推导里也离不开这个思想

动手之前先看两件事

一是有没有异常点。先画散点图,一个录错的坏点能把整条线带偏,必要时先剔除,或者改用抗干扰更强的稳健回归。样本太少也别拟合,十来个点画出来的线稳定性很差。二是关系本身是不是线性,数据明显是曲线还硬拉一条直线,结论会误导人;认真一点的话把残差画出来看看,没有明显规律才算过关,残差排成弯月形状就说明模型没选对。

手头有数据想找数量关系,先从最小二乘估计的直线拟合起步,效果不够再上多项式或其他模型,别一上来就堆复杂方法。