Hoppa till innehållet
AI-grafen
E· Universitetstatistik-sannolikhet· ca 60 min· utvecklande· verifierad 2026-09-20

A/B-test och experimentdesign

Kunna designa ett kontrollerat experiment, beräkna stickprovsstorlek och undvika p-hacking.

Förkunskaper

Intuition

Ett A/B-test randomiserar användare till två varianter och mäter en förbestämd metrik. Randomiseringen är det som gör orsakssambandet giltigt — allt annat är i genomsnitt lika mellan grupperna.

Innan testet startar ska du ha bestämt:

  1. Primär metrik — en enda. (Sekundära får rapporteras, men de avgör inte.)
  2. Minsta intressanta effekt (MDE) — hur stor skillnad är värd att agera på?
  3. Stickprovsstorlek ur MDE, baslinje, α = 0,05 och styrka 0,8.
  4. Testets längd — minst en hel vecka (veckodagseffekter).
  5. Stoppregel.

Skriv ner det. Annars blir varje resultat efterhandskonstruerat.

Formellt

Stickprovsstorlek per grupp för att upptäcka en absolut skillnad δ\delta i andelar kring baslinjen pp:

n≈2 (z1−α/2+z1−β)2  p(1−p)δ2n \approx \frac{2\,(z_{1-\alpha/2} + z_{1-\beta})^2\;p(1-p)}{\delta^2}

Med α=0,05\alpha = 0{,}05 (z = 1,96) och styrka 0,8 (z = 0,84) blir konstanten (1,96+0,84)2≈7,85(1{,}96+0{,}84)^2 \approx 7{,}85.

Exempel: p=0,10p = 0{,}10, vill upptäcka δ=0,01\delta = 0{,}01 (10 % → 11 %): n≈2⋅7,85⋅0,09/0,0001≈n \approx 2 \cdot 7{,}85 \cdot 0{,}09 / 0{,}0001 \approx 14 100 per grupp.

Tre fällor:

  • Peeking: titta varje dag och stoppa när p < 0,05 → den faktiska falsklarmsrisken blir 20–30 %, inte 5 %. Lösning: förbestämd längd, eller sekventiella test (always-valid p-values).
  • Multipla metriker: 20 metriker ger i snitt en «signifikant» av slump. Korrigera eller förbestäm en.
  • Interferens: användare påverkar varandra (sociala nätverk, marknadsplatser) → randomisera på grupp- eller marknadsnivå i stället.

Kod

from math import ceil

def n_per_grupp(baslinje, mde_absolut, alfa=0.05, styrka=0.8):
    z = {0.05: 1.96}[alfa] + {0.8: 0.84, 0.9: 1.28}[styrka]
    return ceil(2 * z**2 * baslinje * (1 - baslinje) / mde_absolut**2)

for mde in (0.005, 0.01, 0.02):
    print(f"MDE {mde:.1%}: {n_per_grupp(0.10, mde):>7,} per grupp")
# MDE 0.5%:  56,376 per grupp
# MDE 1.0%:  14,094 per grupp
# MDE 2.0%:   3,524 per grupp

Halverad MDE → fyrdubblat n. Det är därför små förbättringar kräver stor trafik — och varför team med lite trafik ska testa stora förändringar, inte knappfärger.

Behärskning innebär

  • Designar ett A/B-test med förbestämd metrik
  • Beräknar nödvändig stickprovsstorlek
  • Undviker p-hacking och peeking

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser