„Cinci grupuri de cercetare universitare au concurat să recruteze prognozatori, să le obțină predicțiile și să le agrege, pentru a atribui evenimentelor cele mai exacte probabilități, într-un turneu de prognoză geopolitică de doi ani.”Barbara Mellers, Lyle Ungar, Jonathan Baron, Philip E. Tetlock et al. · Psychological Strategies for Winning a Geopolitical Forecasting Tournament · 2014 · Mellers, Ungar, Baron et al., «Psychological Strategies for Winning a Geopolitical Forecasting Tournament», Psychological Science 25(5), 2014, pp. 1106–1115, Abstract, p. 1106
Un turneu de prognoză transformă o dispută despre metode într-o măsurătoare: aceleași întrebări, același termen, același scor.
Din 2011, IARPA, agenția de cercetare a comunității de informații americane, a organizat programul ACE: cinci grupuri de cercetare universitare au recrutat prognozatori, le-au cules probabilitățile și le-au agregat (Mellers et al. 2014). Zilnic, fiecare grup trimitea prognozele agregate, scorate toate cu aceeași regulă, scorul Brier în forma originală pe două fețe, de la 0 (perfect) la 2. Întrebările le alegea IARPA, nu cercetătorii: puțin peste 100 pe sezon în primii doi ani, circa 150 în al treilea, deschise în medie 102 zile (Mellers et al. 2015). Good Judgment Project (GJP) a tratat turneul ca pe un experiment. În primul an, participanții au fost repartizați aleator în 3 tipuri de antrenament × 4 forme de lucru (singur, singur dar văzând distribuția celorlalți, în echipă, pe o piață de predicție) — 12 condiții. A câștigat cu patru pârghii: antrenament probabilistic, echipe, gruparea celor mai buni în echipe de elită și un algoritm care pondera prognozatorii după istoric, dădea mai puțină greutate prognozelor vechi și «extremiza» media. Autorii avertizează singuri că o strategie care «a câștigat» nu e neapărat optimă. Cifra care circulă — superprognozatori «cu aproximativ 30% mai buni» decât analiștii care aveau acces la interceptări — vine dintr-un editorial al lui David Ignatius (Washington Post, 2013): relatarea unei comparații nepublicate în formă evaluată de colegi. Lecția sigură e alta: un turneu face metodele comparabile.
Exemplu aplicat: un mini-turneu pe biroul olivLaw. Ana, analistă fictivă, vrea să afle dacă echipa ei prognozează mai bine decât fiecare membru luat separat. Alege o întrebare scorabilă — «Va depăși cursul EUR/RON 5,30 până la 31 decembrie 2027?» — și cere cinci probabilități independente. Ca să se vadă calculul, simulăm rezolvarea: întrebarea se închide cu NU (rezultat 0). Scorul folosit e forma binară pe o față, (p − o)², de la 0 la 1; forma GJP, pe două fețe, ar dubla fiecare valoare.
prognozator p Brier (p − 0)²
Mihai 0,20 0,0400
Ioana 0,35 0,1225
Radu 0,30 0,0900
Elena 0,60 0,3600
Dan 0,25 0,0625
-----------------------------------
media scorurilor individuale 0,1350
mediana scorurilor (regula GJP) 0,0900
scorul prognozei medii, p = 0,34 0,1156
scorul prognozei mediane, p = 0,30 0,0900Trei lucruri reies din tabel. Primul: mediana scorurilor (0,09) nu e trasă în sus de singurul membru care a greșit tare (Elena, 0,36), pe când media (0,135) este — de aceea GJP nota echipele cu mediana. Al doilea: scorul prognozei medii (0,1156) e mai bun decât media scorurilor (0,135); fiindcă scorul Brier e o funcție convexă, media probabilităților nu poate pierde niciodată față de media scorurilor. Al treilea: o singură întrebare nu dovedește nimic; un turneu are nevoie de zeci de întrebări comune.
Designul contează la fel de mult ca aritmetica. GJP a avut în primul an 3 tipuri de antrenament × 4 forme de lucru = 12 condiții, cu repartizare aleatoare; de aceea la sfârșitul anului putea spune care pârghie a ajutat. Ana, cu cinci colegi, nu poate face asta — dar poate ține aceleași întrebări, același termen și același scor pentru toți.
În motorul olivLaw. Astăzi, singurele prognoze scorate sunt cele din articole: tabelul forecast_resolution păstrează pentru fiecare predicție o probabilitate (point_probability), termenul, rezultatul și scorul Brier pe o față, iar scorul public e calculat de funcția `build` din forecast_score, în api_service. Celelalte componente prognozează, dar nu concurează: jocul de război din agents_core (funcția `_calibrate` a lui WarGamingAgent) amestecă trei surse cu ponderi fixe 0,5 / 0,3 / 0,2; firele Seldon pornesc din probabilități de bază scrise de mână; Monte Carlo-ul din analytics_service produce benzi p5–p95 pe care nu le verifică nimeni. Fiecare răspunde la alte întrebări, deci niciun clasament nu e posibil — exact situația pe care IARPA a corectat-o impunând întrebări comune.
Propunerea (nu există încă): un set comun de întrebări binare pe săptămână, la care fiecare componentă trebuie să dea o probabilitate, scorată numai pe intersecția întrebărilor la care au răspuns toți.
from statistics import mean, median
def brier(p: float, o: int) -> float:
# forma binară pe o față, ca în forecast_resolution: 0..1
return (p - o) ** 2
def tournament(forecasts: dict[str, dict[str, float]], outcomes: dict[str, int]):
common = set(outcomes)
for answers in forecasts.values():
common &= set(answers) # doar întrebările la care au răspuns toți
table = [(name, round(mean(brier(a[q], outcomes[q]) for q in common), 4))
for name, a in forecasts.items()]
return sorted(table, key=lambda row: row[1])
forecasts = {
"articole_icd203": {"q1": 0.70, "q2": 0.20, "q3": 0.55},
"war_gaming": {"q1": 0.60, "q2": 0.35, "q3": 0.50},
"fire_seldon": {"q1": 0.25, "q2": 0.25, "q3": 0.25},
}
outcomes = {"q1": 1, "q2": 0, "q3": 1}
print(tournament(forecasts, outcomes))
team = {q: median(a[q] for a in forecasts.values()) for q in outcomes}
print("echipa (mediana):", round(mean(brier(team[q], outcomes[q]) for q in outcomes), 4))Pe datele de jucărie, clasamentul iese 0,1108 / 0,1775 / 0,3958, iar echipa formată din mediane ia 0,1575 — mai slabă decât cel mai bun membru, fiindcă o componentă care spune mereu 25% trage mediana. Asta e informația pe care GJP o folosea ca să ponderize după istoric în loc să facă o simplă medie.
De ce contează Fără aceleași întrebări, același termen și același scor, două metode de prognoză nu pot fi comparate — pot fi doar lăudate.