Forstå A/B-testing med eksempelet på Optimalisering av konverteringer og Python kode

crop laboratory technician examining interaction of chemicals in practical test modern lab

A/B-testing er en metode for å sammenligne to versjoner av en nettside, e-post, annonse eller annen digital ressurs for å finne ut hvilken som gir best resultat. Testen går ut på å vise to varianter – versjon A og versjon B – til ulike segmenter av brukerne og deretter analysere hvilken versjon som gir bedre ytelse basert på en bestemt måleparameter, for eksempel klikkrate, konverteringsrate eller engasjement.

Hvordan fungerer A/B-testing?

  1. Definer mål – Bestem hva du ønsker å optimalisere (for eksempel flere kjøp, høyere engasjement, lavere fluktfrekvens).
  2. Lag to versjoner – Versjon A (kontrollversjonen) og versjon B (den modifiserte versjonen).
  3. Tilordne brukere tilfeldig – Besøkende fordeles tilfeldig mellom de to versjonene.
  4. Samle data – Overvåk hvordan brukerne interagerer med hver versjon.
  5. Analyser resultatene – Bruk statistiske metoder for å avgjøre hvilken versjon som presterer best.
  6. Implementer vinneren – Rull ut den beste versjonen til alle brukere.

Hvor brukes A/B-testing?

  • Nettsider og landingssider – For å forbedre brukeropplevelsen og konverteringer.
  • E-postmarkedsføring – For å teste emnelinjer, innhold og CTA-knapper.
  • Digitale annonser – For å finne ut hvilke budskap, bilder eller videoer som gir best resultat.
  • App-design – For å optimalisere brukergrensesnitt og funksjonalitet.

Fordeler med A/B-testing

  • Datadrevet beslutningstaking – Valg baseres på faktiske brukerdata, ikke antakelser.
  • Bedre brukeropplevelse – Optimaliserer innholdet for maksimal effekt.
  • Høyere konverteringsrate – Identifiserer hvilke elementer som påvirker brukeratferd.
  • Redusert risiko – Tester endringer i liten skala før full utrulling.

A/B-testing er en viktig metode innen digital markedsføring, produktutvikling og UX-design for å sikre at endringer og optimaliseringer gir best mulig resultat.

For å bruke statistiske metoder til A/B-testing og forbedre konverteringsraten, må du følge en strukturert prosess. Her er en detaljert guide:


1. Definer mål og hypoteser

Før du starter testen, må du definere:

  • Nullhypotese (H?): Det er ingen forskjell i konverteringsrate mellom versjon A og B.
  • Alternativ hypotese (H?): Versjon B har en høyere (eller lavere) konverteringsrate enn versjon A.

Eksempel:

  • H?: Konverteringsraten for versjon A (p_A) = konverteringsraten for versjon B (p_B).
  • H_1: p_B > p_A (hvis du tester en forbedring).

2. Velg statistisk test

Den vanligste metoden for A/B-testing av konverteringsrater er Z-test for proporsjoner fordi vi sammenligner to grupper av binære utfall (konvertering vs. ikke-konvertering).

Hvis samplet er lite, kan en Fisher’s exact test eller en chi-kvadrat-test brukes.


3. Bestem nødvendig utvalgsstørrelse

For å sikre at testen har nok statistisk styrke, må du beregne en passende utvalgsstørrelse. Formelen for dette avhenger av:

  • Signifikansnivå (?): Vanligvis 0.05 (5% risiko for falskt positivt resultat).
  • Statistisk styrke (1 – ?): Vanligvis 80% (sannsynligheten for å oppdage en sann effekt).
  • Forventet konverteringsrate: Basert på historiske data.

4. Gjennomfør testen

  • Tilordne brukere tilfeldig til versjon A eller B.
  • Samle inn data (antall besøkende og konverteringer per gruppe).

5. Analyser resultatene

Bruk en Z-test for proporsjoner for å sammenligne de to konverteringsratene:

Z = \frac{(p_A - p_B)}{\sqrt{p(1-p) \left( \frac{1}{n_A} + \frac{1}{n_B} \right)}}

hvor:

  • p_A = konverteringsrate i gruppe A
  • p_B = konverteringsrate i gruppe B
  • p er den kombinerte konverteringsraten for begge grupper
  • n_A og n_B er utvalgsstørrelsene

P-verdi

  • Hvis p < 0.05, avvis nullhypotesen – det er en signifikant forskjell.
  • Hvis p ? 0.05, kan vi ikke konkludere at versjon B er bedre enn A.

6. Beregn konfidensintervaller

For å være mer sikker på forskjellen mellom versjonene, beregn konfidensintervallet (CI):

CI = (p_B - p_A) \pm Z_{\alpha/2} \sqrt{p(1-p) \left( \frac{1}{n_A} + \frac{1}{n_B} \right)}

Hvis 0 ikke er inkludert i intervallet, har vi en signifikant forskjell.


7. Implementer den vinnende versjonen

Hvis versjon B har en signifikant bedre konverteringsrate, rull den ut til alle brukere.


Eksempel

La oss si at:

  • Gruppe A: 5000 besøkende, 250 konverteringer (p_A = 5\% )
  • Gruppe B: 5000 besøkende, 300 konverteringer (p_B = 6\% )

Vi bruker en Z-test og finner at p-verdien = 0.03, som er < 0.05. Dette betyr at versjon B har en signifikant høyere konverteringsrate.


8. Ekstra tips

  • Unngå for tidlig stopp – Kjør testen til du har nok data.
  • A/B/n-testing – Hvis du har flere varianter, bruk ANOVA eller multinomiale tester.
  • Multivariat testing – For flere endringer samtidig.

Her er et Python-script for å gjennomføre en A/B-test med en Z-test for proporsjoner. Dette scriptet tar inn antall besøkende og konverteringer for både gruppe A og B, beregner Z-score, p-verdi og konfidensintervaller, og avgjør om forskjellen er signifikant.

Dette scriptet kjører en A/B-test, beregner Z-score og p-verdi, og konkluderer om forskjellen er signifikant. Du kan justere verdiene for n_A, conv_A, n_B og conv_B for å bruke dine egne data. ?

Code (click to download):

import numpy as np
import scipy.stats as stats

def ab_test(n_A, conv_A, n_B, conv_B, alpha=0.05):
    """
    Gjennomfører en A/B-test ved hjelp av en Z-test for proporsjoner.
    
    Parametere:
    n_A: Antall besøkende i gruppe A
    conv_A: Antall konverteringer i gruppe A
    n_B: Antall besøkende i gruppe B
    conv_B: Antall konverteringer i gruppe B
    alpha: Signifikansnivå (standard 0.05)
    """
    # Beregn konverteringsrater
    p_A = conv_A / n_A
    p_B = conv_B / n_B
    
    # Kombinert konverteringsrate
    p_combined = (conv_A + conv_B) / (n_A + n_B)
    
    # Standardfeil
    SE = np.sqrt(p_combined * (1 - p_combined) * (1/n_A + 1/n_B))
    
    # Z-score
    Z = (p_B - p_A) / SE
    
    # p-verdi (ensidig test, hvis vi sjekker om B > A)
    p_value = 1 - stats.norm.cdf(Z)
    
    # Konfidensintervall (95%)
    Z_alpha = stats.norm.ppf(1 - alpha/2)
    CI_lower = (p_B - p_A) - Z_alpha * SE
    CI_upper = (p_B - p_A) + Z_alpha * SE
    
    # Resultater
    print(f"Konverteringsrate A: {p_A:.4f}")
    print(f"Konverteringsrate B: {p_B:.4f}")
    print(f"Z-score: {Z:.4f}")
    print(f"p-verdi: {p_value:.4f}")
    print(f"95% konfidensintervall: ({CI_lower:.4f}, {CI_upper:.4f})")
    
    # Konklusjon
    if p_value < alpha:
        print("Statistisk signifikant forskjell! Implementer versjon B.")
    else:
        print("Ingen statistisk signifikant forskjell.")

# Eksempeldata: Gruppe A (5000 besøkende, 250 konverteringer) og Gruppe B (5000 besøkende, 300 konverteringer)
ab_test(n_A=5000, conv_A=250, n_B=5000, conv_B=300)

Utgangsresultat:

Konverteringsrate A: 0.0500
Konverteringsrate B: 0.0600
Z-score: 2.1932
p-verdi: 0.0141
95% konfidensintervall: (0.0011, 0.0189)
Statistisk signifikant forskjell! Implementer versjon B.

R kode (click to download)

Dette er koden til å bruke prop.test fra base R for å utføre A/B-testen. Denne metoden er mer robust og anbefales for testing av proporsjoner.

# A/B-test i R ved hjelp av en Z-test for proporsjoner med 'prop.test' fra base R
library(stats)

ab_test <- function(n_A, conv_A, n_B, conv_B, alpha=0.05) {
  # Data
  successes <- c(conv_A, conv_B)
  trials <- c(n_A, n_B)
  
  # Utfør proporsjonstest
  test_result <- prop.test(successes, trials, alternative = "two.sided", conf.level = 1 - alpha)
  
  # Resultater
  cat(sprintf("Konverteringsrate A: %.4f\n", successes[1] / trials[1]))
  cat(sprintf("Konverteringsrate B: %.4f\n", successes[2] / trials[2]))
  cat(sprintf("Z-score: %.4f\n", sqrt(test_result$statistic)))
  cat(sprintf("p-verdi: %.4f\n", test_result$p.value))
  cat(sprintf("95%% konfidensintervall: (%.4f, %.4f)\n", test_result$conf.int[1], test_result$conf.int[2]))
  
  # Konklusjon
  if (test_result$p.value < alpha) {
    cat("??  Statistisk signifikant forskjell! Implementer versjon B.\n")
  } else {
    cat("??  Ingen statistisk signifikant forskjell.\n")
  }
}

# Eksempeldata: Gruppe A (5000 besøkende, 250 konverteringer) og Gruppe B (5000 besøkende, 300 konverteringer)
ab_test(n_A=5000, conv_A=250, n_B=5000, conv_B=300)

Utgangsresultat:

Konverteringsrate A: 0.0500
Konverteringsrate B: 0.0600
Z-score: 2.1493
p-verdi: 0.0316
95% konfidensintervall: (-0.0191, -0.0009)
??  Statistisk signifikant forskjell! Implementer versjon B.


Discover more from Science Comics

Subscribe to get the latest posts sent to your email.

Leave a Reply

error: Content is protected !!