E· Universitetstatistik-sannolikhet· ca 60 min· utvecklande· verifierad 2026-09-20
Konfidensintervall
Kunna beräkna och tolka konfidensintervall för medelvärden och andelar.
Förkunskaper
Intuition
Ett 95 %-konfidensintervall är ett intervall beräknat så att, om du upprepade hela stickprovsproceduren många gånger, 95 % av intervallen skulle täcka det sanna värdet. Det är inte «95 % sannolikhet att sanningen ligger här» — sanningen är fast, intervallet slumpar.
För ett medelvärde: x̄ ± 1,96·s/√n (stort n). För en andel: p̂ ± 1,96·√(p̂(1−p̂)/n). Vid små n eller andelar nära 0/1: Wilson-intervall.
Användning i ML: rapportera testmått med intervall; två intervall som överlappar mycket → skillnaden är inte visad. Bootstrap ger intervall för vilket mått som helst (F1, BLEU, agentens lösningsgrad) utan formel.
Kod
import numpy as np
from scipy import stats
# medelvärde, t-fördelning (litet n)
fel = np.array([3.1, 2.4, 4.0, 3.3, 2.9, 3.8, 3.5, 2.7]) # MAE per körning
m, se = fel.mean(), fel.std(ddof=1) / np.sqrt(len(fel))
lo, hi = stats.t.interval(0.95, len(fel) - 1, loc=m, scale=se)
print(round(m, 2), round(lo, 2), round(hi, 2)) # 3.21 2.75 3.67
# andel: Wilson
def wilson(k, n, z=1.96):
p = k / n; d = 1 + z**2 / n
c = (p + z**2 / (2 * n)) / d; h = z * np.sqrt(p * (1 - p) / n + z**2 / (4 * n**2)) / d
return c - h, c + h
print(wilson(87, 100)) # (0.79, 0.92)
# bootstrap för F1
from sklearn.metrics import f1_score
rng = np.random.default_rng(0); idx = np.arange(len(y_true))
f1s = [f1_score(y_true[i], y_pred[i], average="macro") for i in (rng.choice(idx, len(idx)) for _ in range(2000))]
print(np.percentile(f1s, [2.5, 97.5]))
Behärskning innebär
- Beräknar konfidensintervall för medelvärde och andel
- Tolkar intervallet korrekt (frekventistiskt)
- Använder bootstrap för godtyckliga mått
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Wikipedia — Konfidensintervall (CC BY-SA 4.0) — CC BY-SA 4.0
- Wikipedia — Binomial proportion confidence interval (CC BY-SA 4.0) — CC BY-SA 4.0