F· AI engineeringevals-benchmarks· ca 90 min· volatil — kontrolleras ofta· verifierad 2026-09-20
Statistisk signifikans i evals
Kunna avgöra om en skillnad mellan två modeller är verklig.
Förkunskaper
- EBygg en eval-harnesskrävs
- EKonfidensintervallkrävs
Intuition
Två modeller, samma 200 evalfall, 84 % mot 87 %. Verklig skillnad eller brus?
Gör tre saker, i den ordningen:
- Parat, inte oberoende. Samma fall för båda → titta på fallen där de skiljer sig. Med 200 fall och 12 diskordanta säger totalsiffran mycket mindre än de 12.
- Bootstrap för intervall. Fungerar för vilket mått som helst — accuracy, F1, grundningsgrad, kostnad per löst uppgift.
- Rapportera effektstorleken med intervall, inte bara p. «+3,0 pe [0,4; 5,6]» säger vad man behöver veta.
Kod
import numpy as np
from scipy import stats
def parad_bootstrap(a, b, n=10_000, seed=0):
"""a, b: binära utfall per fall (samma ordning). Returnerar skillnad med 95 %-intervall."""
a, b = np.asarray(a, float), np.asarray(b, float)
d = b - a
rng = np.random.default_rng(seed)
idx = rng.integers(0, len(d), size=(n, len(d)))
fordelning = d[idx].mean(axis=1)
lo, hi = np.percentile(fordelning, [2.5, 97.5])
return {"skillnad": float(d.mean()), "ki": (float(lo), float(hi)),
"andel_over_noll": float((fordelning > 0).mean())}
def mcnemar(a, b):
b_bara = int(((b == 1) & (a == 0)).sum())
a_bara = int(((a == 1) & (b == 0)).sum())
p = stats.binomtest(b_bara, b_bara + a_bara, 0.5).pvalue if (b_bara + a_bara) else 1.0
return {"b_vinner": b_bara, "a_vinner": a_bara, "p": float(p)}
rng = np.random.default_rng(0)
a = rng.binomial(1, 0.84, 200); b = a.copy()
b[rng.choice(np.where(a == 0)[0], 12, replace=False)] = 1
b[rng.choice(np.where(a == 1)[0], 6, replace=False)] = 0
print(parad_bootstrap(a, b)) # {'skillnad': 0.03, 'ki': (0.0, 0.06), ...}
print(mcnemar(a, b)) # {'b_vinner': 12, 'a_vinner': 6, 'p': 0.238}
Hur många fall behövs? För att upptäcka 3 procentenheters skillnad kring 85 % med parat test krävs storleksordningen 400–600 fall. Har du 100 kan du bara upptäcka skillnader på ~8 procentenheter — vilket är värt att veta innan du tolkar resultatet.
Behärskning innebär
- Använder parade test på eval-resultat
- Beräknar bootstrap-intervall för godtyckliga mått
- Rapporterar effektstorlek med osäkerhet
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Wikipedia — McNemar's test (CC BY-SA 4.0) — CC BY-SA 4.0
- arXiv — Show Your Work: Improved Reporting of Experimental Results — arXiv (öppen åtkomst; licens per artikel)