JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

回归:用其他事物来解释一件事

在一团杂乱的散点中画出最贴合的那条直线,读懂它的斜率与截距在告诉你什么,再让多个预测变量同时发声——同时始终把这个领域最爱的告诫记在心头:拟合得好不等于模型为真,相关也不等于因果。

穿过杂乱的一条线

到目前为止,本阶教会了你去估计一个数字、去检验一个论断。但精算师真正靠它领薪水去回答的问题,几乎从来不是一次只来一个变量。它们听起来像这样:随着一位车主年龄渐长,给他承保的成本会怎么变?吸烟真的会推高医疗成本吗,又推高多少?回归正是为这类问题而生的工具——它是一门用其他一项或多项事物(预测变量)来解释某一件事(结果变量)的学问。

想象一张散点图。每一位投保人都是一个点:横轴是他的年龄,纵轴是他每年的成本。这团点明显地朝右上方飘移——年纪越大、成本越高——但它是一团云,而不是一条曲线。没有哪一条线能穿过每一个点。简单线性回归下了一个谦逊却有力的赌注:在这片散乱之下,存在一种直线式的趋势,成本大致等于一个起始金额,再加上随年龄每增一岁就稳定上升的一份量,剩下的不过是一个个生命各自的噪声。我们把它写成 成本 = a + b·年龄 + 误差,而整场游戏就是去挑出那条线——也就是 a 和 b 这两个数——使它最贴合这团云。

我们怎么判断哪条线最好?对任何一条候选线来说,每个点都会落在它的上方或下方一点点。那段竖直的间隔——实际发生的值减去这条线预测的值——就是这条线在那个点上的误差。最小二乘法就是这样一条规则:它挑出能让所有这些间隔(先各自平方)之总和尽可能小的那一条线。我们之所以要把间隔平方,理由和当初构建方差时把偏差平方的诚实理由一模一样:偏高和偏低都应算作误差、而不应相互抵消,并且大的偏离要比小的偏离受罚更重。赢得这场比赛的那条线,就是回归线。

读懂斜率与截距

一旦最小二乘法把那条获胜的线交到你手上,它找出的这两个数就讲出了一个你能脱口而出的故事。斜率 b 是变化率:预测变量每往前走一个单位,结果会移动多少。截距 a 是当预测变量取零时这条线给出的预测值——也就是这条线穿过成本轴的那一点。假设我们为医疗成本拟合出的线是 成本 = 400 + 70·年龄。斜率 70 说的是:年龄每多一岁,每年成本大约多出 70。截距 400 则是这条线在年龄为零处给出的预测。

这里有一条漂亮的线索把我们带回上一条主线。回归线的斜率,与预测变量和结果之间的协方差密切相连:它正是这两者的协方差,除以预测变量的方差。所以回归并不是从外面硬装上来的全新想法——它就是你已经见过的那种共同变动,被重新塑造成一种可用的预测。正相关把线向上倾斜;相关越强,这团云就越紧地裹在线的周围。回归所做的,不过是把“这两者倾向于一起动”翻译成“给我一个年龄,我就还你一个预测的成本”。

残差:模型坦白之处

我们靠把平方间隔最小化找到了那条线——可一旦线画好了,这些间隔并不会就此消失。每一段剩下的间隔,对照最终拟合出的那条线算出来,都有一个名字:残差。对每一个数据点,残差 = 实际发生的值 减去 模型预测的值。一位 52 岁、花费 4,200 的投保人,对照一条预测为 400 + 70·52 = 4,040 的线,残差就是 +160:模型对他低估了 160。残差不是需要道歉的失误。它们是模型对自己解释不了的一切,所做的诚实坦白。

而这份坦白,正是真正的诊断力量所在。如果你的线真的抓住了规律,那么留下的残差就应当看起来像一片没有特征的随机噪声——均匀地散布在零的上下,毫无形状。所以你把残差画出来,然后去搜寻形状,因为任何形状都是模型在告诉你它漏掉了什么。一团弯成微笑状的残差云,意味着真实关系从来就不是一条直线。一片随着预测值增大而张开的残差扇形,意味着离散程度并非恒定。少数几个孤零零地远离其余的残差,则是离群点——也许是几笔巨灾理赔,正悄悄地把整条线拉向它们自己。

当一个预测变量不够用时

真实的结果很少只倚靠单一原因。医疗成本会随年龄上升,没错——但它也随吸烟、随地区、随慢性病而上升。多元回归让每一个预测变量都在同一个方程里同时发挥作用:成本 = a + b1·年龄 + b2·吸烟 + b3·地区 + 误差。最小二乘法照样在干活,只是现在它要同时挑出好几个系数,使所有这些项加在一起时的平方残差尽可能小。那条线变成了多维空间里一张倾斜的平面,但想法没变:找出那张被数据贴得最紧的曲面。

这就解锁了那个让这门技术如此宝贵的问题。多元回归里的每一个系数,都是在把其余所有变量都固定住的前提下、它对应那个预测变量的效应。仔细读 成本 = 400 + 70·年龄 + 1,200·吸烟:这里的 70,如今是在已经计入吸烟状态之后、年龄每增一岁的成本;而 1,200,则是在已经计入年龄之后、身为吸烟者的成本。若没有这一点,年龄和吸烟就会缠在一起——如果你样本里上了年纪的人恰好抽烟更多,单变量模型就会把吸烟造成的损害记在年龄头上。多元回归正是那台把彼此交叠的影响一一拆解开来的机器。

随着预测变量增多,有两条诚实的告诫会变得更尖锐。第一,当两个预测变量本身就高度相关时——这叫多重共线性——模型就难以判断该把效应记到哪一个头上,于是它们各自的系数变得不稳定、难以解读,哪怕整体预测仍然不错。第二,不断往里塞更多变量,总会把样本内的拟合往上推一点,这就诱发了过拟合:一个过分热心的模型,开始去背诵这份数据集里随机的怪癖,而不是去学真正的信号。这正是为什么像调整后 R 平方、AIC 和 BIC 这些诚实的指标,只有在为每多加一个旋钮收取一份罚分之后,才会因模型拟合得好而给它奖励。

从直线到精算师的主力工具

普通线性回归所做的假设,恰恰被保险数据爽快地一一违反。它期望结果可以是直线上的任意数、且离散程度恒定——可理赔次数是非负的整数,理赔金额为正且严重右偏,而概率必须待在 0 和 1 之间。广义线性模型(GLM)就是那个优雅的修补。它保留了“把加权后的预测变量相加”这套熟悉的机器,却允许结果服从一个更合身的分布——次数用泊松、偏斜的金额用伽马——并通过一个连接函数把预测变量与结果连起来,最常用的是对数连接,好让各因子相乘而非相加。

现代保险公司给个人险种定价,走的正是这条路。一个泊松GLM为“你多久理赔一次”建模;一个伽马 GLM 为“每次理赔花多少钱”建模;两者相乘,你就从基础那条主线把纯保费重新搭了出来。各个费率变量——年龄、车辆、地区、既往理赔——都各自作为一个乘法相对系数进入模型,把一个基准费率往上或往下缩放。这些系数不再用最小二乘法去拟合,而是用极大似然估计——也就是本阶前面那条估计原则:选出能让你真正观测到的数据出现的概率尽可能大的那组参数。监管者之所以接受 GLM,恰恰是因为它的每一个系数都有一份朴素而站得住脚的含义。

Fitted multiple regression:  cost = 400 + 70*age + 1200*smoker

 A 52-year-old smoker:
   predicted = 400 + 70*52 + 1200*1 = 5240
   if actual cost was 5500 -> residual = 5500 - 5240 = +260

GLM (auto pricing), log link makes factors MULTIPLY:
   premium = base * f(age) * f(territory) * f(vehicle)
   e.g.    = 300  * 1.40   * 0.90        * 1.15  = 435
上半部:一次拟合好的多元回归预测,以及它留下的残差。下半部:一个对数连接的 GLM 如何把每个费率变量变成一个去乘基准费率的相对系数——这就是保险定价日常的样子。

这个领域最常重复的告诫

现在,把这个领域最爱的告诫落到实处:相关不是因果。 一个回归系数度量的是关联——也就是两样东西一起动——而绝不是“一个导致了另一个”的证明。一年之中,冰淇淋的销量和溺水死亡数会一同上升,斜率为正、漂漂亮亮,可两者谁也不是对方的起因;是夏日的炎热同时驱动了二者。把气温也放进模型里,冰淇淋与悲剧之间那条虚假的联系便会轰然瓦解。回归嗅不出潜伏的第三个变量;你喂给它什么样的共同变动,它就忠实地把那个变动拟合出来,再配上一个看着信心十足的系数报告给你。

与它成对出现的告诫同样重要:拟合得好不等于模型为真。 一个把你的历史数据贴得严丝合缝的模型,学到的可能是噪声、而非这个世界;把过去拟合得最好的那个模型,几乎从来不是把未来预测得最好的那个——这正是过拟合教给我们的一课。唯一诚实的裁决,来自模型从未见过的数据:一份留出样本,或者交叉验证——用一部分去拟合,用其余去衡量误差。每个模型还都悄悄地把自己的假设烤了进去——正确的分布、正确的变量、一种在它所选标度上确实是线性的关系——而且只有当你亲手把预测变量之间的交互项放进去时,它才会去捕捉那个交互。

这一切都不会让回归变得不那么有力——它只会让一个用回归的人变得值得信赖。同样的告诫一路延伸进机器学习:在那里,随机森林、提升树和神经网络预测得更锐利,却仍旧只能找到相关、永远找不到因果,而且会悄悄学会拿一个邮政编码去当某样它绝不能据以定价之物的替身。精算师的角色,正从亲手搭建每一个模型,转向去验证它、治理它、为它背书。无论用的是什么工具,所遵循的纪律都和整条这一阶始终在教的那一条一样:诚实地估计、诚实地检验,永远不要把一个拟合得好的数字,错当成关于这个世界的一条真相。