TOPIC 42 · PHASE H

建模的陷阱TRAPS IN MODELING

拟合得越好,越可能什么都没学到(A better fit is not a better model)

2026-08-29 · 方法与限度

一个模型对着已有数据拟合得越漂亮,它对明天说的话往往越不值钱。这不是修辞——它是一条可以画出来、也确实被画出来过的曲线。

每到年底,总有人把这一年的市场、这一年的公司、这一年的世界局势复盘一遍,讲得严丝合缝:因为那件事,所以这件事;因为这个结构,所以那个结果。你听完会觉得"确实是这样"。而同一批人在年初写下的预测,事后翻出来看,错得相当整齐。

这两件事同时成立,本身就是这一期要解释的现象:解释得通和猜得中不是同一种能力,甚至常常是互相拆台的。一个模型(或一套说辞)对着已经发生的事拟合得越紧,它能剩下多少对没发生的事的约束,就越少。

前面四十一期都在造工具:幂律、网络、临界、韧性、复杂度的度量。这一期是回头检查这些工具怎么用会用错。它不讲新机制,讲的是四道关卡——过拟合、事后叙事、"看起来像幂律"的统计误判、以及一个模型要怎样才算被真正检验过。第 43 期会接着问一个更大的问题:这门学科整体上被指控了什么。

01拟合得越好,越可能是在背噪声(Overfitting)

先从最小的例子开始。你手上有八个点,想找出它们背后的规律。你可以画一条直线穿过它们中间,也可以画一条弯弯绕绕的曲线,让它恰好经过每一个点。

第二条曲线在这八个点上的误差是零。按"拟合得好"这个标准,它完胜。但如果你再去测第九个点,它多半会离那条弯曲线很远——远到还不如那条笨拙的直线。

原因不复杂:这八个点里既有真实的规律,也有测量误差、偶然波动、当天的心情。而模型不知道哪部分是哪部分。你给它足够的自由度(也就是足够多可以调的参数),它就会把误差也一并记住,当成规律。这叫过拟合(overfitting)。

同一批数据,三种拟合 — 谁在学规律,谁在背答案 ① 欠拟合(太简单) 在这批点上的误差:大 ② 刚好 在这批点上的误差:中 ③ 过拟合(穿过每个点) 在这批点上的误差:0 三张图是同一批点。第三条曲线把每一个点都记住了 — 包括其中的测量误差。
灰点是同一批数据。误差为零的那条曲线,恰恰是最不该被信任的那条。

物理学家冯·诺伊曼(John von Neumann)有一句被反复引用的话,据费曼的同事戴森转述:"给我四个参数,我能拟合出一头大象;给我五个,我还能让它甩鼻子。"这句话后来真的被人当成挑战做了出来——2010 年有篇论文用四个复数参数画出了一头可辨认的大象。参数不是知识,参数是自由度。

所以判断一个模型好不好,不能看它在已经用来调参的那批数据上表现如何。那批数据叫样本内(in-sample),它上面的误差只反映"你记住了多少"。真正有信息的是样本外(out-of-sample)——一批模型从未见过、也从未参与过任何调参的数据。把这两条误差画在同一张图上,事情就清楚了。

两条误差曲线 — 只有一条和明天有关系 误差 最佳复杂度 样本内 样本外 这一段:对旧数据越拟合越好 对新数据越预测越差 模型的自由度(可调参数的个数) 横轴每右移一步 = 多给模型一个自由参数。蓝线永远在降,橙线会掉头。
蓝线单调下降,所以它永远在鼓励你把模型做得更复杂。橙线才是你真正关心的那条,而它有一个拐点。

最要命的一点是:如果你只看蓝线,你会一直觉得自己在进步。过拟合没有痛感。它在发生的时候,所有指标都在变好。

🎯 决策线

任何模型上线前,留出一段从未参与过任何调参的数据,只在它上面报一次误差。而且这段数据要按时间切(拿最靠后的那一段),不要随机抽——随机抽会把同一天、同一批、同一个来源的样本分到两边,等于让模型偷看答案。如果你手上根本没有这样一段数据,那就不要报"准确率"这个数,报了也不成立。

🌀 工程与技术史 · 谷歌流感趋势 2008 年谷歌上线了一个用搜索词预测流感就诊率的模型,从五千万个候选词里挑出四十五个,在历史数据上拟合得极漂亮,登上了《自然》。然后它错过了 2009 年的甲流暴发,又在 2012–13 流感季把就诊比例高估到实际值的两倍以上。四十五个词是从五千万里挑的——这个比例本身就是"自由度"的另一种写法。推论不显然的地方在于:它不是模型不够好,而是用它去挑词的那个过程已经把噪声选进来了;再多的数据也修不好一个在选变量阶段就过拟合的东西。

EN With enough free parameters a model memorises noise as if it were signal — von Neumann's four-parameter elephant, later actually drawn. In-sample error falls monotonically with complexity; out-of-sample error is U-shaped. Google Flu Trends picked 45 search terms out of 50 million, fit history beautifully, then overshot the 2012–13 season by more than a factor of two.

02叙事是免费的参数(Narrative as Free Parameters)

上一节的参数是数字。而人做预测和复盘时用的不是数字,是词——"团队有韧性""领导果断""时机成熟""行业风口"。这些词有一个数字参数没有的性质:它们不要钱,数量也没有上限。

后果是直接的。既然可用的词无限多,那么无论结果是什么,你总能拼出一套顺畅的解释。而且用的往往是同一批事实。

同一批事实,两个相反的结果,两套同样顺畅的解释 同一批事实 小团队 · 老板强势 时间紧 · 押了新技术 小团队沟通快 · 老板有决断 时间紧倒逼聚焦 · 新技术拉开差距 人手不够 · 老板一言堂 时间不够打磨 · 新技术不成熟 结果:项目做成了 结果:项目黄了 能同时解释两个相反结果的说法,事先没有排除掉任何东西。
叙事的自由度不是"多",是"无限且免费"。所以它在历史数据上的误差永远是零。

把这张图和上一节的图叠起来看,就得到本期最有用的一句话:事后叙事是过拟合的极限情形。参数无限多、成本为零、误差恒等于零——它落在上一张图橙线的最右端,那里样本外误差最高。这不是比喻,这是同一条曲线上的同一个位置。

心理学上还有一个东西在给它加固:后见之明偏误(hindsight bias)。事情发生之后,人会真心实意地记错自己当初的判断,觉得"我早就觉得会这样"。所以你甚至意识不到自己在事后编——记忆已经替你把参数调好了。

那怎么区分一个真解释和一套顺畅的话?只有一个操作性的判据:解释必须提前排除某些结果。如果一套说法在结果相反的情况下同样成立,它的信息量就是零——不管它听起来多有道理。这就是"可证伪"(falsifiable)这个词在日常里的全部含义:不是"能被推翻"这个哲学姿态,而是"它事先划掉了哪些可能"。

🎯 决策线

把解释力和预测力分开记账,别让前者冒充后者。任何一套解释——公司的、市场的、别人行为的——先做一次反向测试:"如果结果是反的,这套说法还能不能同样顺畅地讲一遍?"能,就把它从决策依据里删掉,它只是让你舒服,不提供约束。剩下来那些做不到反向讲的,才是你真正学到的东西。

🌀 文学与艺术 · 传记里的童年细节 几乎每一本成功者传记都能从童年里挑出一个决定性的细节:那次搬家、那本书、那个严厉的老师。这条推理线之所以永远走得通,是因为可选的童年细节数量近乎无限,而只需要挑出与结果匹配的那几个——参数免费、事后挑选。由此可以推出一个比"传记不可信"更硬的结论:传记的解释力和它的预测力无关,所以它作为"该怎么培养一个人"的输入,信息量接近于零——同样的童年细节,在那些没成功的人身上一样存在,只是没人替他们写书。

EN Verbal explanations have unlimited free parameters at zero cost, so any outcome — and its opposite — can be fitted from the same facts. Post-hoc narrative is therefore the limiting case of overfitting: zero in-sample error, maximal out-of-sample error. Hindsight bias hides the fitting from the fitter. The only operational test: would this account run just as smoothly if the outcome had been reversed?

03「看起来像幂律」多半不是(It Only Looks Like a Power Law)

本站前面反复出现过一条直线:把事件规模和出现频率都取对数(也就是画在双对数坐标上),很多现象会排成一条直线。这条直线叫幂律(power law) → 参考 · 幂律分布,它意味着没有"典型规模",大事件比直觉常见得多。

问题出在"看起来像"这三个字上。在双对数坐标下,人眼判断直线的能力差得离谱。对数把差异压扁了,一段缓慢弯曲的曲线看上去和直线几乎没区别。而好几种完全不同的分布画出来都是这个样子——最常见的竞争者是对数正态分布(log-normal,取对数之后变成钟形)和指数截断的幂律(尾巴到某处突然掉下去)。

更糟的是,常见的画法会制造直线。尾部的数据天然稀疏,如果你按等宽的区间去数每个区间里有几个事件,尾部那些区间大多是零零一一,画出来抖成一片,然后人就开始"看趋势"。(专业做法是画互补累积分布,也就是"大于等于 x 的事件占比",它不需要分箱,尾部要干净得多。)

2009 年,Aaron Clauset、Cosma Shalizi 和 Mark Newman 三个人把这件事系统化了,给出一套统一的检验流程(下文简称 CSN 流程),并用它重审了二十多个被广泛引用的"幂律"数据集。结论相当扫兴:只有少数几个能干净地通过,相当一部分根本无法和对数正态区分开。

双对数坐标下,前两个数量级几乎重合 → 事件规模(对数) 频率(对数) 前两个数量级里,三条线分不开 幂律 对数正态 指数截断 CSN 流程:五步,少一步都不算检验 ① 先定尾部从哪里开始(x_min) ② 用最大似然法估幂指数 α ③ 量出拟合与数据的最大偏离 ④ 模拟出 p 值:太小就否掉幂律 ⑤ 和对数正态比:哪个更像
左:三种分布在真实数据能覆盖的量程里几乎重合。右:CSN 流程。第 ⑤ 步最常被跳过,而它恰恰是最容易翻车的一步。

这里要说清两个术语。最大似然法(maximum likelihood)就是"在所有可能的参数里,挑出让这批数据最不意外的那个";它比在双对数图上拉一条回归直线可靠得多,因为后者默认了每个点的误差一样大,而尾部的点显然不是。p 值(p-value)在这里的意思是:如果这批数据真的是幂律生成的,那么出现"偏离程度不小于我们实测到的这么大"的情况,概率有多少;概率很小,就说明幂律这个假设撑不住。

但真正值得琢磨的不是统计,而是:为什么大家这么想要那条直线?因为幂律不只是一个分布形状,它在本站前面几期里一直挂着机制故事——自组织临界、优先连接、分形。宣称幂律,等于顺手宣称了那个机制。而在决策层面,幂律和对数正态的区别其实小得多:两者都是重尾(heavy-tailed),都意味着均值不可靠、尾部风险被低估、不能拿历史平均值定杠杆。所以人们坚持要"幂律"这两个字,往往不是因为决策需要它,是因为故事需要它。

🎯 决策线

下次想说"这是幂律"时,先做一次降级测试:把这句话改成"这是重尾",你的决策会变吗?绝大多数时候不会变——那就说"重尾",这个更弱的断言你有证据支持。只有当你确实要靠幂指数 α 的具体数值做事(比如推断某个机制、外推尾部概率),才值得跑完整套 CSN 流程,并且必须一起报出 x_min ——因为 α 是可以靠挪动 x_min 调出来的。

🌀 经济与制度 · 城市规模的那条直线 "城市人口服从幂律"是被引用得最多的例子之一,但这条直线对"什么算一座城市"极度敏感:按行政边界统计和按连片建成区统计,同一个国家能得到明显不同的指数,边界画法一变,尾部的那几个点就换了位置。这推出一个统计课本上不会讲的结论——在这类数据里,"直线"有一部分是测量口径造出来的,而不是系统长出来的。所以看到一条漂亮的幂律,第一个该问的不是"机制是什么",是"这条数据的单位是谁定的、按什么切的"。

EN On log-log axes the eye cannot separate a power law from a log-normal or an exponentially truncated tail, and equal-width binning manufactures straight lines out of sparse tails. Clauset, Shalizi and Newman (2009) gave a five-step test and found that only a minority of widely cited datasets survive it. Note also what is at stake: for most decisions "heavy-tailed" carries the same implications, so insisting on "power law" is usually the mechanism story talking, not the decision.

04校准:让"概率"这个词兑现(Calibration)

前三节都在拆。这一节说建设性的那半:一个关于复杂系统的模型,究竟怎样才算被真正检验过?

复杂系统的预测大多不是"明天是多少",而是"多大可能"。而"多大可能"这种话,单看一次是没法判对错的——你说明天 70% 下雨,结果没下,这不能算你错。但看一百次就能判。在你说过 70% 的那一百天里,如果只有三十天真下了雨,那你说的就不是概率,是修辞。

这个性质叫校准(calibration):你给出的概率,在长期频率上要兑现。它可以画成一张图——横轴是你说的概率,纵轴是那些日子里实际发生的比例。完美校准就是那条对角线。

而复杂系统里"多大可能"这个数是怎么算出来的?主流做法是集合模拟(ensemble simulation):既然初始条件测不准、模型也不完美,那就不要只跑一遍。把初始状态做上百次微小扰动,每次都跑一遍,看这些轨迹散得多开 → 参考 · 蒙特卡罗与集合模拟。散得窄,就是这次可以说得比较肯定;散得宽,就该说不确定——宽度本身就是预报的一部分,不是预报的瑕疵。

集合模拟:把不确定性画出来 今天的状态 时间 扇面的宽度 = 这次预报的不确定性,它本身就是结论 可靠性图:你说的概率兑现了吗 完美校准 = 这条对角线 过度自信 0 100% 你说的概率 实际发生的频率
右图曲线整体压在对角线下方,意思是:他说 80% 的那些次,实际只兑现了约 50%。这条曲线画出来,才叫检验过。

把校准做成产业的,目前基本只有天气预报一家。原因不神秘:它每天都被记分。预报发布,第二天真相揭晓,成千上万次积累下来,可靠性图自然就画出来了。业内还有一个专门的分数叫 Brier 分数(Brier score,1950 年由 Glenn Brier 提出):把每次"你说的概率"和"实际发生与否(1 或 0)"的差取平方再平均,越小越好。它有一个漂亮的性质——可以精确拆成"校准得好不好"和"分辨力强不强"两部分。说得准和说得有内容是两件事:天天说 50% 的人校准可能不差,但毫无分辨力。

这也顺带说清了为什么本站前面那些机制模型很少给出"准确率"这个数:它们大多没有被记分的机会。而一旦有机会,就该去要。

🎯 决策线

汇报模型的时候,把失效条件和结论一起汇报——"这个结论依赖三个前提:A、B、C;其中 B 一旦不成立,结论反向"。没有这段话的模型汇报,读者无法判断该信到什么程度。第二件事:所有带概率的判断(你的、团队的、供应商的)都留档,攒够几十条就画一次可靠性图。这件事的成本是一个表格,收益是你第一次知道自己的"大概率"到底值多少。

🌀 心理学 · Meehl 的那本小书 1954 年,心理学家 Paul Meehl 比较了临床专家的判断和一个简单统计公式的判断,结果是公式在几乎所有对比里不输甚至更好;后来几十年、上百项研究的汇总仍然如此。通常的解读是"专家不如算法",但套上本节的机制会得到一个更准的读法:差别不在聪明程度,在有没有记分回路。公式的每一次输出都被记录、被对照、被修正;而专家的判断分散在多年、多个个案里,从来没有被汇总成一张可靠性图,所以他的信心根本没机会被校准。这条推论有个反直觉的推广:给专家配上记分表,比换掉专家更划算。

EN Most complex-system forecasts are probabilistic, and a single probabilistic statement cannot be scored — a hundred of them can. Calibration means the 70% days rain about 70% of the time; a reliability diagram makes it visible, and the Brier score decomposes cleanly into calibration and resolution. Ensemble simulation produces the probability in the first place: perturb the initial state a hundred times and let the spread be the answer. Weather forecasting is the one field that industrialised this, for the boring reason that it is scored every single day.

05这套说法在哪儿不成立(Where This Breaks Down)

前面四节都在要求模型接受检验。现在说反面:这套要求本身有几处会用错,而且用错的方式相当常见。

第一,不是所有模型都以预测为目的,拿预测精度去评价它们是用错了尺子。谢林的隔离模型 → 参考 · 谢林隔离模型 从来没打算预测任何一座城市的隔离程度,它证明的是一个充分性命题:非常温和的邻居偏好,足以产生高度隔离的格局,不需要谁抱有敌意。这个命题不靠拟合数据成立,靠的是它推翻了"看到隔离就说明有强烈歧视"这个默认推论。这类模型该被检验的不是准确率,而是三件事:前提有没有被偷偷加强、结论是不是真的从规则推出来的、以及换一批合理的参数会不会翻盘(也就是稳健性)。

第二,"所有模型都是错的,但有些是有用的"被滥用成了免责声明。这句话出自统计学家 George Box,他的原意是提醒你把力气花在"错得要紧不要紧"上——而不是给任何模型发一张通行证。这句话的正确用法是后面必须跟上两个具体的量:错在哪个方向(系统性地高估还是低估)、量级多大。说不出这两样,就说明这个模型压根没被检验过,那句话只是在提前挡住提问。

第三,校准在一次性事件上做不到。气候的百年演化、一次金融危机、一个国家的转型——这些事只发生一次,不存在"一百次里兑现了七十次"。所以第 4 节那套标准在这里直接失灵。能做的是替代品,而且要说清它们更弱:在已知的历史片段上能不能重现关键的定性行为(不是数值,是"有没有出现那个转折");换一批合理的参数结论会不会翻;以及事先写下一句"如果观察到 X,这个模型就完了"。这三样都比可靠性图弱,但比什么都不做强得多。

第四,过拟合有一个同样致命的镜像:过度简化。本期一路在批"参数太多",容易读成"越简单越好"——这是错的。上一张误差图的左半边同样在爬坡:一个漏掉了关键变量的模型不会因为简洁而变得安全,它只是把错误藏得更深。2008 年之前主流宏观经济模型的问题不是参数太多,恰恰相反:那一类被称为动态随机一般均衡模型(dynamic stochastic general equilibrium,缩写 DSGE)的框架里,普遍没有金融中介和杠杆这两个变量。真正的选择从来不是"简单还是复杂",是丢掉什么。

第五,样本外数据是消耗品。它只在"从未见过"的时候有效。你拿它评估了第一版模型,看到结果不满意,回去改一版再评估——从第二次开始,那批数据就已经通过你的手参与了调参,它不再是样本外的了。这就是公开排行榜和共用基准数据集的通病:整个社区在同一批测试数据上反复迭代,集体地、无人察觉地过拟合到了它上面。

🎯 决策线

给你手上每一个模型贴一个标签,标签只有三种:点预测(该报样本外误差)、概率预测(该报可靠性图,攒不够次数就明说"还没被检验过")、机制演示(该报前提和稳健性,不该报准确率)。贴错标签是本期所有陷阱里最省事也最常见的一个——用机制模型的口气去做点预测,或者用点预测的精度去嘲笑机制模型,都是同一个错误的两面。

EN Four caveats. Some models are sufficiency demonstrations, not predictors — Schelling's segregation model should be judged on premises and robustness, never on accuracy. "All models are wrong, but some are useful" is a demand for the direction and size of the error, not a licence. Calibration is impossible for one-off events, so weaker substitutes must be labelled as weaker. And the mirror image of overfitting is a model missing the variable that matters — pre-2008 DSGE frameworks generally had no financial intermediation at all. Finally, held-out data is consumable: reuse it and it quietly becomes in-sample.

🎒 场景 · BigCat

  1. 工程与系统设计每次线上故障之后加一条告警规则、或者把某个阈值往下调一格——这是拿一个样本更新参数,做上两年,告警系统就是一条穿过所有历史故障点的过拟合曲线:对已经发生过的事完美,对下一次沉默,同时把人淹在噪声里。可改的东西很具体:给每条告警规则记一个命中率(真实故障数 ÷ 触发次数),每季度把命中率垫底的那批直接删掉;新增规则前先拿过去 90 天的数据回放一遍,看它会响多少次。该停掉的动作:以"上次那个要是早点告警就好了"作为新增规则的唯一理由。
  2. 带团队与组织给新项目排期时,用一段推理来修正估算——"这次架构更熟""这次不用等外部依赖"。这些修正项就是免费参数,它们的作用是让估算贴合你想要的结论。可改的东西:把团队过去十个项目的「实际耗时 ÷ 当初估的」都算出来,取中位数当固定乘数,先乘上去再讨论。讨论的内容从"这次会不会更快"换成"有什么理由认为这次和过去十次不同"——后者需要举证,前者不需要。
  3. 健康与精力每天早上打开手环或睡眠 App 看昨晚的分数,然后给波动找原因:下午那杯咖啡、睡前刷手机、房间太热。日间波动大部分落在测量噪声里,逐日归因就是对着噪声拟合,而且会拟合出一堆你其实并不需要遵守的规矩。可改的东西:只看 7 日滚动平均和它的走向,日分数直接不看;要归因就一次只改一个变量、连续保持两周以上,再比较两段的 7 日均值。该停掉的动作:把当天的精力状态归因给昨晚那个分数——那是分数在影响你,不是睡眠在影响你。

🌀 越界 · 跨学科的联想(Crossings)

深入思考(Going Deeper)

如果事后叙事是"零误差、零信息",那历史学还剩下什么?

剩下的恰恰是它最不像叙事的那部分:确定发生了什么、什么时候、谁在场、当时的人手上有哪些信息。这些是可以被新证据推翻的,因此携带信息。真正没信息的是那一层"因此他必然会那样做"的因果连缀。一个可用的判据:把这段历史讲给一个不知道结局的人听,他能不能排除掉某些结局?排不掉,那段就是叙事而不是史实。

为什么样本外检验在金融里比在其他领域更难做?

因为金融数据的"新样本"极其昂贵:可用的历史就那么长,而且非平稳——制度、参与者、交易机制都在变,二十年前的样本外未必和今天同分布。更麻烦的是策略研究的社会性过拟合:全行业在同一段历史上试过无数种策略,能被发表和流传的天然是那些恰好拟合了这段历史的。所以在金融里,"这个策略回测很好"这句话的先验信息量比在其他领域还要低。

一个模型必须能预测,才算科学吗?

不一定,但它必须在某处承担风险。演化论对具体物种的演化路径预测力很弱,可它做了大量可被推翻的断言——化石出现的地层顺序、不同物种基因组的相似度排序。所以判据不是"能不能报数",是"有没有一类可观察的结果会让它出局"。说不出这类结果的模型,无论多精致,都还没进场。

既然人几乎必然会过拟合叙事,为什么大脑还要这么干?

一个常见的解释是代价不对称:在信息稀少、必须马上行动的处境里,一个错的因果故事往往比一片空白更划算——它至少给出一个可执行的动作。但这解释了它的起源,没有为它在今天的用法背书。值得注意的是,现代决策环境恰好把这个代价结构反过来了:数据不再稀少,行动也大多不必即刻。

如果大家都在同一批基准数据上迭代,整个领域该怎么止损?

目前几种做法都不完美:定期换新测试集(成本高,且旧结果不可比)、把测试集完全封存只允许提交一次(限制了迭代)、或者用只公布聚合结果的隐藏集。更根本的一条是记录"这批数据被查询过多少次"——因为过拟合的程度和查询次数直接相关,而这个次数在今天几乎从来没有人统计。

延伸阅读(Further Reading)