Hoppa till innehållet
AI-grafen
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

Intuition

Två modeller, samma 200 evalfall, 84 % mot 87 %. Verklig skillnad eller brus?

Gör tre saker, i den ordningen:

  1. 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.
  2. Bootstrap för intervall. Fungerar för vilket mått som helst — accuracy, F1, grundningsgrad, kostnad per löst uppgift.
  3. 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

Alla källor och licenser