5D Library › 概率判断、布莱尔分数校准与群体智慧的统计理论 · English

第六章 群体智慧的统计理论

称牛重

1906 年秋天,英国普利茅斯的一次家畜展览会上举行了一场猜重比赛:一头牛宰杀并处理之后有多重?参赛者买一张票,写下自己的估计。弗朗西斯·高尔顿事后拿到了这些票,并于 1907 年 3 月在《自然》上发表了一篇短文,题为「民意」(Vox populi)。

证据

高尔顿的数字及其更正。 去掉 13 张无法辨认的票后,高尔顿分析了 787 个估计。他报告的是中位数:1,207 磅,而实际重量为 1,198 磅,相差不到 1% (Galton 1907b)。在回应读者来信时,他又报告了所有估计的平均数为 1,197 磅 (Galton 1907a)。一个多世纪后,沃利斯重新核对了高尔顿留下的手稿,发现中位数应为 1,208 磅(手稿草稿中正是 1,208,发表时误为 1,207),而组织者来信中的实际重量换算为 1,197 磅,不是 1,198 磅。所以,正确的说法是:中位数偏差 11 磅(约 0.9%),平均数恰好等于实际重量 (Wallis 2014)。

苏罗维茨基的《群体的智慧》以这个故事开篇,并把群体判断准确的条件概括为四条:意见多样、彼此独立、分散(每个人依据自己的局部知识)、有适当的汇总方式 (Surowiecki 2004)。这四条中,统计学最能说清楚的是前两条。

多样性预测定理

政治学家斯科特·佩奇把一个简单的代数恒等式称为多样性预测定理 (Page 2007)。设 nn 个人对真实值 θ\theta 的估计为 s1,…,sns_1, \dots, s_n,群体平均为 c=1n∑sic = \frac{1}{n}\sum s_i,则

(c−θ)2⏟群体误差=1n∑i(si−θ)2⏟个人平均误差−1n∑i(si−c)2⏟多样性.\underbrace{(c – \theta)^2}_{\text{群体误差}} = \underbrace{\frac{1}{n}\sum_i (s_i – \theta)^2}_{\text{个人平均误差}} – \underbrace{\frac{1}{n}\sum_i (s_i – c)^2}_{\text{多样性}}.

推导

推导。 把 si−θs_i – \theta 写成 (si−c)+(c−θ)(s_i – c) + (c – \theta),平方后求平均:1n∑(si−θ)2=1n∑(si−c)2+(c−θ)2+2n(c−θ)∑(si−c)\frac{1}{n}\sum(s_i – \theta)^2 = \frac{1}{n}\sum(s_i – c)^2 + (c – \theta)^2 + \frac{2}{n}(c – \theta)\sum(s_i – c)。最后一项中 ∑(si−c)=0\sum(s_i – c) = 0,移项即得。这是一个对任何数字都成立的恒等式。

下面的程序生成 787 个模拟的估计(不是高尔顿的数据),每个估计等于真实重量 1,197 磅,加上一个所有人共有的误差,再加上一个各自的误差(标准差 75 磅);然后在 10,000 组随机数字上检验恒等式。

推导

# Diversity prediction theorem: crowd error = average individual error - diversity. 787
# simulated guesses (not Galton's data): truth 1,197 lb + shared error + private N(0,
# 75).
import random

rng = random.Random(1907)

def parts(s, theta):
    n = len(s)
    c = sum(s) / n
    crowd = (c - theta) ** 2
    avg = sum((x - theta) ** 2 for x in s) / n
    div = sum((x - c) ** 2 for x in s) / n
    return c, crowd, avg, div

if __name__ == "__main__":
    theta = 1197
    for shared in (0, 30):
        s = [theta + shared + rng.gauss(0, 75) for _ in range(787)]
        c, crowd, avg, div = parts(s, theta)
        beat = sum((x - theta) ** 2 < crowd for x in s)
        print(f"shared error {shared:+d} lb: crowd mean {c:.1f} lb;"
              f" {beat} of 787 individuals closer than it")
        print(f"   crowd error {crowd:.2f} = average error {avg:.2f} - diversity {div:.2f}"
              f"  (difference {avg - div:.2f})")
    worst = 0.0
    for _ in range(10000):
        n = rng.randint(2, 30)
        s = [rng.uniform(-100, 100) for _ in range(n)]
        _, crowd, avg, div = parts(s, rng.uniform(-50, 50))
        worst = max(worst, abs(crowd - (avg - div)))
    print(f"identity on 10,000 random sets of guesses: largest discrepancy {worst:.1e}")
# shared error +0 lb: crowd mean 1197.2 lb; 2 of 787 individuals closer than it
#    crowd error 0.04 = average error 5706.59 - diversity 5706.54  (difference 0.04)
# shared error +30 lb: crowd mean 1230.4 lb; 244 of 787 individuals closer than it
#    crowd error 1113.20 = average error 7159.50 - diversity 6046.30  (difference 1113.20)
# identity on 10,000 random sets of guesses: largest discrepancy 3.6e-12

当共有误差为零时,群体平均为 1,197.2 磅,群体误差只有 0.04(磅的平方),787 个人中只有 2 个人比群体平均更接近真实值。当所有人都受到同一个 +30 磅的误导时,群体平均变成 1,230.4 磅,群体误差升到 1,113.20;有 244 个人比群体平均更准。两种情况下,恒等式都精确成立;在 10,000 组随机数字上,最大的差异只有 3.6×10−123.6 \times 10^{-12},即舍入误差。

这个定理常被引用为「多样性胜过能力」的证据,需要谨慎:它是恒等式,不是经验发现,只保证群体误差永远不大于个人平均误差,却没有说明群体何时胜过最好的个人;「多样性」也只是估计的分散程度,可以来自不同的信息,也可以只是噪声。洪与佩奇的模拟报告,在某种问题求解模型中随机挑选的多样化团队胜过「最能干」的团队 (Hong and Page 2004);汤普森批评这一结论依赖模型的特定设定,不能支持关于现实群体的一般主张 (Thompson 2014)。本书只采用恒等式本身与下面在明确假设下的模拟。

相关误差:群体何时胜过专家

群体平均之所以准,是因为各人的误差在平均中相互抵消。但只有互不相关的那部分误差会被抵消;所有人共有的那部分误差,无论多少人平均都不会减少。

推导

设每个非专家的误差方差为 1,任意两人误差的相关系数为 ρ\rho;专家的误差方差为 0.25(误差标准差是非专家的一半)。nn 人平均的均方误差为

MSEn=ρ+1−ρn,\text{MSE}_n = \rho + \frac{1 – \rho}{n},

当 nn 趋于无穷时趋于 ρ\rho,而不是 0。有效人数为 neff=n/[1+(n−1)ρ]n_{\text{eff}} = n/[1 + (n-1)\rho]。程序比较理论值与模拟值,并计算群体要胜过专家至少需要多少人。数字是示意性的。

推导

# Crowd of n non-experts (error variance 1, pairwise correlation rho) against one expert
# (error variance 0.25): MSE(crowd) = rho + (1 - rho)/n. Illustrative numbers.
import math, random

rng = random.Random(2004)
V_EXPERT = 0.25

def mse_theory(n, rho):
    return rho + (1 - rho) / n

def mse_sim(n, rho, reps=20000):
    tot = 0.0
    for _ in range(reps):
        shared = rng.gauss(0, math.sqrt(rho))
        m = sum(shared + rng.gauss(0, math.sqrt(1 - rho)) for _ in range(n)) / n
        tot += m * m
    return tot / reps

def n_needed(rho, v=V_EXPERT):
    if rho >= v:
        return None
    return math.floor((1 - rho) / (v - rho) + 1e-9) + 1      # smallest n with MSE < v

if __name__ == "__main__":
    print("rho | crowd MSE, theory: n = 5, 20, 100 | simulated, n = 20 | n to beat expert")
    for rho in (0.0, 0.1, 0.2, 0.3, 0.5):
        th = [mse_theory(n, rho) for n in (5, 20, 100)]
        nn = n_needed(rho)
        need = f"{nn}" if nn else "never"
        print(f"{rho:.1f} |       {th[0]:.3f}  {th[1]:.3f}  {th[2]:.3f}        |"
              f"       {mse_sim(20, rho):.3f}       | {need}")
    for rho in (0.1, 0.3):
        print(f"n_eff of 100 forecasters at rho = {rho}: {100 / (1 + 99 * rho):.1f}")
# rho | crowd MSE, theory: n = 5, 20, 100 | simulated, n = 20 | n to beat expert
# 0.0 |       0.200  0.050  0.010        |       0.050       | 5
# 0.1 |       0.280  0.145  0.109        |       0.145       | 7
# 0.2 |       0.360  0.240  0.208        |       0.244       | 17
# 0.3 |       0.440  0.335  0.307        |       0.330       | never
# 0.5 |       0.600  0.525  0.505        |       0.522       | never
# n_eff of 100 forecasters at rho = 0.1: 9.2
# n_eff of 100 forecasters at rho = 0.3: 3.3
群体平均的均方误差随人数的变化。误差相关系数为 0 时,5 个人就能胜过专家(黑色横线);相关系数为 0.2 时需要 17 个人;相关系数达到 0.3 或更高时,无论多少人都胜不过专家,曲线停在 \rho 附近。

误差互不相关时,5 个非专家的平均就胜过专家;相关系数为 0.1 时需要 7 人,0.2 时需要 17 人;相关系数达到 0.3 时,100 人平均的均方误差仍为 0.307,永远胜不过误差方差 0.25 的专家。相关系数为 0.1 时,100 个人只相当于约 9.2 个独立的人;为 0.3 时只相当于约 3.3 个。所以「群体胜过专家」是有条件的:它要求误差的相关程度足够低,而专家又没有好到超过这一极限。

证据

社会影响削弱群体智慧。 洛伦茨等人让参与者回答数量估计题,并在多轮中分别给他们看或不看其他人的答案。看到他人答案后,估计的分散程度明显缩小,但群体平均并没有变得更准;同时,参与者的信心提高了 (Lorenz et al. 2011)。用本章的语言:社会影响提高了误差之间的相关,减少了多样性。按多样性预测定理,多样性减少而群体误差不变,意味着个人平均误差的下降恰好被多样性的减少抵消:大家彼此靠拢,却没有一起靠近真值,于是群体误差没有改善,人们却更加自信。「同温层」是同一问题的极端形式:读同样的信息源、频繁交换意见的人误差高度相关,人数再多也只相当于少数几个独立判断。

平均之后为什么要推向极端

第一章提到,预测锦标赛中效果最好的汇总算法会把平均概率「推向极端」。这似乎与第二章矛盾:难道不是应当避免过度自信吗?

证据

两个原因。 巴伦、梅勒斯、泰洛克、斯通与昂格尔指出,对许多人的概率取简单平均,所得的群体预报往往偏向 50%,把它推向 0 或 1 后与实际结果更吻合。原因有二。第一,概率在接近 0 与 1 的地方被「压缩」,随机误差会把平均值拉向中间;这一点不影响中位数,也可以说不影响对数几率的平均。第二,每个预报者都根据自己不完整的信息恰当地保留了不确定性,但群体合在一起掌握的信息比任何一个人都多;简单平均(包括中位数与对数几率平均)没有把这些分散的信息叠加起来 (Baron et al. 2014)。

推导

第二个原因的一个模型。事件的先验为 50%;每条线索在事件发生时服从 N(+0.5,1)N(+0.5, 1),否则服从 N(−0.5,1)N(-0.5, 1),因此每条线索给对数几率加上它本身的值。10 名预报者都看到同一条公开线索,每人另有一条私人线索;每人报出给定自己所见的正确贝叶斯概率,所以每个人单独看都校准良好。比较:单个预报者、概率平均、对数几率平均、把对数几率平均乘以系数 aa(在 20,000 个训练问题上拟合,在另外 20,000 个问题上检验),以及一个看到全部 11 条线索的理想贝叶斯者。

推导

# Shared information and extremising (Baron et al. 2014). Clues ~ N(+-0.5, 1); 10
# forecasters share one public clue and each has one private clue; each reports a
# correct Bayesian probability. Factor a fitted on 20,000 training questions, scored on
# 20,000 new ones.
import math, random

rng = random.Random(2014)
K, MU = 10, 0.5

def inv(z):
    return 1 / (1 + math.exp(-z))

def questions(n):
    out = []
    for _ in range(n):
        y = 1 if rng.random() < 0.5 else 0
        m = MU if y else -MU
        pub = rng.gauss(m, 1)
        priv = [rng.gauss(m, 1) for _ in range(K)]
        logits = [2 * MU * (pub + x) for x in priv]          # each forecaster's posterior
        ideal = 2 * MU * (pub + sum(priv))
        out.append((y, logits, ideal))
    return out

def brier(pairs):
    return sum((p - y) ** 2 for p, y in pairs) / len(pairs)

def score(qs, a):
    return brier([(inv(a * sum(l) / K), y) for y, l, _ in qs])

if __name__ == "__main__":
    train, test = questions(20000), questions(20000)
    a_best = min((i / 20 for i in range(20, 161)), key=lambda a: score(train, a))
    print(f"extremising factor fitted on training questions: a = {a_best:.2f}")
    rows = [("a single forecaster", brier([(inv(l[0]), y) for y, l, _ in test])),
            ("mean of probabilities",
             brier([(sum(inv(z) for z in l) / K, y) for y, l, _ in test])),
            ("mean of log-odds", score(test, 1.0)),
            (f"extremised, a = {a_best:.2f}", score(test, a_best)),
            ("ideal: all 11 clues pooled", brier([(inv(z), y) for y, _, z in test]))]
    for name, b in rows:
        print(f"  {name:28s} Brier {b:.4f}")
    print("mean log-odds = public + (1/10) x sum of private clues; ideal counts each once")
# extremising factor fitted on training questions: a = 1.75
#   a single forecaster          Brier 0.1617
#   mean of probabilities        Brier 0.1354
#   mean of log-odds             Brier 0.1290
#   extremised, a = 1.75         Brier 0.1187
#   ideal: all 11 clues pooled   Brier 0.0366
# mean log-odds = public + (1/10) x sum of private clues; ideal counts each once

单个预报者的布莱尔分数为 0.1617;概率平均为 0.1354,对数几率平均为 0.1290;拟合出的系数 a=1.75a = 1.75,推向极端后降到 0.1187。但理想贝叶斯者是 0.0366,远好于任何一种汇总。原因在最后一行:对数几率平均把公开线索算了一次,而把 10 条私人线索各只算了十分之一;理想的做法是每条线索都算一次。单一的推向极端系数无法把公开与私人信息分开,所以只能部分弥补。这也说明,推向极端的合适程度取决于预报者之间共享了多少信息:共享得越多,越不该推得太远。

本章小结

高尔顿 1907 年报告的群体中位数为 1,207 磅(应为 1,208 磅),平均数 1,197 磅是随后才给出的,恰好等于更正后的实际重量。多样性预测定理是一个恒等式:群体误差等于个人平均误差减去多样性;它保证群体不比个人平均差,却不保证群体胜过最好的个人。误差相关时,平均只能消除不相关的部分;相关系数一旦超过专家的相对误差,再多的人也胜不过专家。社会影响会降低多样性、提高信心而不提高准确性。对许多人的概率取平均后适度推向极端可以改善分数,因为每个人只掌握部分信息;推多远取决于信息共享的程度。下一章把这些现代研究与中国古代兵家的「庙算」并读。

参考文献

Baron, Jonathan, Barbara A. Mellers, Philip E. Tetlock, Eric Stone, and Lyle H. Ungar. 2014. “Two Reasons to Make Aggregated Probability Forecasts More Extreme.” Decision Analysis 11 (2): 133–45. https://doi.org/10.1287/deca.2014.0293.
Galton, Francis. 1907a. “The Ballot-Box.” Nature 75: 509–10.
———. 1907b. “Vox Populi.” Nature 75: 450–51. https://doi.org/10.1038/075450a0.
Hong, Lu, and Scott E. Page. 2004. “Groups of Diverse Problem Solvers Can Outperform Groups of High-Ability Problem Solvers.” Proceedings of the National Academy of Sciences 101 (46): 16385–89. https://doi.org/10.1073/pnas.0403723101.
Lorenz, Jan, Heiko Rauhut, Frank Schweitzer, and Dirk Helbing. 2011. “How Social Influence Can Undermine the Wisdom of Crowd Effect.” Proceedings of the National Academy of Sciences 108 (22): 9020–25. https://doi.org/10.1073/pnas.1008636108.
Page, Scott E. 2007. The Difference: How the Power of Diversity Creates Better Groups, Firms, Schools, and Societies. Princeton, NJ: Princeton University Press.
Surowiecki, James. 2004. The Wisdom of Crowds. New York: Doubleday.
Thompson, Abigail. 2014. “Does Diversity Trump Ability? An Example of the Misuse of Mathematics in the Social Sciences.” Notices of the American Mathematical Society 61 (9): 1024–30. https://doi.org/10.1090/noti1163.
Wallis, Kenneth F. 2014. “Revisiting Francis Galton’s Forecasting Competition.” Statistical Science 29 (3): 420–24. https://doi.org/10.1214/14-STS468.

Fan, Y. (2026). Probabilistic Judgement, Brier-Score Calibration and the Statistics of Collective Intelligence: From Base-Rate Neglect and Signal Detection Theory to Superforecasting, Read Beside Classical Chinese Strategic Calculation [概率判断、布莱尔分数校准与群体智慧的统计理论] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23764998 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).