Fraværsgrensa

Fraværsgrensa i videregående skole er på 10%. Det betyr at dersom en elev har udokumentert fravær på 10% eller mer i et fag, så mister eleven karakter i faget. I Reddit-tråden “Videregående skole er no bullshit” har en elev fått varsel fordi han eller hun var borte én dag, som utløste 3 timers fravær i kroppsøving og oversteg 5%.

Kroppsøving inneholder 56 undervisningstimer totalt, mens f.eks. matematikk har 140 timer. Det betyr at fraværsgrensen har ulik effekt avhengig av hvor mange skoledager som inneholder faget:

  • Om kroppsøving er på 3 timer per dag, så vil 2 dager med fravær betyr at man mister karakteren, fordi \(6 / 56 \approx 0.107 \geq 0.1\).
  • Om matematikk er på 2 timer per dag, så vil 7 dager med fravær betyr at man mister karakteren, fordi \(14 / 140 = 0.1 \geq 0.1\).

Selv om det er mye fravær som kan unntas fraværsgrensen, er det rimelig å anta at noe udokumentert fravær vil forekomme. Denne artikkelen svarer på spørsmålet: “gitt at udokumentert fravær inntreffer tilfeldig, hva er sannsynligheten for at en elev mister karakteren i et fag?”

Sannsynligheten for å miste karaktergrunnlaget i et fag

La oss gjøre to forenklinger før vi fortsetter:

  • Vi antar at hver dag med et fag inneholder like mange timer. Dette er tilfellet om man har 3 timer gym hver onsdag. Det er ikke tilfellet om man for eksempel har 2 timer matte på mandager og 1 time på torsdager. Denne antagelsen betyr at vi slipper å telle opp antall timer innad i hver dag og antall timer i faget totalt. Dette gjør utregningene litt enklere fordi vi slipper å forholde oss til faktiske timeplaner, som uansett vil variere fra skole til skole.
  • Vi antar at udokumentert fravær inntreffer tilfeldig med en viss sannsynlighet, og at fravær er uavhengig. Med andre ord: om en elev hadde fravær i går påvirker ikke sannsynligheten for at eleven har fravær i dag.

Figuren nedenfor viser sannsynligheten for å miste karakter et fag, som funksjon av antall dager med faget. \(P(\text{fravær})\) er sannsynligheten for fravær på en gitt dag, og utregningen er visualisert for 1%, 2% og 3%.

Den overordnede trenden er at sannsynligheten for å miste karakter er høyere desto mindre antall dager man har med faget. Det stemmer med de innledende observasjonene om kroppsøving og matematikk.

Vi skal nå forklare knekkene i grafen: før man har 11 dager med et fag, vil én fraværsdag føre til at man overstiger grensa på 10%. På 11 dager har man litt rom for fravær ettersom én dag ikke lengre gjør at man overstiger grensa. Situasjonen blir likevel verre fra 11 dager til og med 20 dager. I dette intervallet vil to eller flere fraværsdager utløse grensa, og med flere dager er det større sannsynlighet for at det skjer—derfor stiger grafen. På 21 dager har man igjen litt mer slingring, og slik fortsetter mønsteret.

Utregning

La sannsynligheten for fravær være \(p = P(\text{fravær})\), la fraværsgrensa være \(g=0.1\) og la antall dager med faget være \(d\). Antall fraværsdager \(X \sim \text{Binom}(p, d)\) er da en stokastisk variabel med binomisk sannsynlighetsfordeling.

Sannsynligheten for at man mister karakter er \(P(X \geq \lceil g d \rceil)\), der \(\lceil \cdot \rceil\) er matematisk notasjon for å runde opp, f.eks. så er \(\lceil 1.7 \rceil = 2\). Vi regner oss frem til sannsynligheten ved hjelp av den kumulative sannsynlighetsfordelingen.

\begin{equation*} P(X \geq \lceil g d \rceil) = 1 - P(X < \lceil g d \rceil) = 1 - (P(X \leq \lceil g d \rceil) - P(X = \lceil g d \rceil)). \end{equation*}

Eksempel
Om vi setter \(p=0.02\) og antall dager lik \(d=13\), så er

\begin{align*} P(X \geq \lceil (0.1) 13 \rceil) &= P(X \geq 2 ) \\ &= 1 - P(X < 2) \\ &= 1 - \left[ P(X = 0) + P(X = 1) \right] \\ &= 1 - \left[ \binom{13}{0} 0.02^{0} (1 - 0.02)^{13} + \binom{12}{1} 0.02^{1} (1 - 0.02)^{12} \right] \\ &= 1 - \left[ 1 (0.98)^{13} + 12 0.02 (0.98)^{12} \right] \\ &\approx 1 - \left[ 0.769 + 0.188 \right] \approx 0.0426455. \end{align*}

Hva bør fraværsgrensa være?

Dette er et verdispørsmål som matematikk alene ikke kan svare på, men la oss gjøre noen antagelser og undersøke hva en rimelig fraværsgrense som funksjon av antall dager \(d\) bør være:

  • Anta at vi ønsker at \(P(\text{ingen karakter}) \leq 0.001\), gitt et normalt udokumentert fravær.
  • Anta at noe udokumentert fravær vil forekomme, f.eks. at \(p = 0.02\) eller lignende er normalnivå.

Da kan vi spørre “Hva er minste (strengeste) fraværsgrense \(g\) vi kan ha som oppfyller \(P(\text{ingen karakter}) \leq 0.001\)?”

Svaret er gitt grafisk i figuren nedenfor, for tre ulike verdier av \(p\) og ulike verdier av dager \(d\) med et gitt fag.

Å velge \(P(\text{ingen karakter})\) og \(p\) er en skjønnsmessig vurdering. Uansett er konklusjonen at antall dager med faget spiller en viktig rolle. Desto lavere (strengere) fraværsgrense, desto høyere sannsynlighet for at man har uflaks og mister karaktergrunnlaget, selv når sannsynligheten for fravær \(p\) i utgangspunktet er lav.

Personlig ville jeg heller straffet elever med nedsatt karakter dersom fraværet blir stort, heller enn å ta bort hele karaktergrunnlaget. Dette gir en mer glidende overgang, i motsetning til en hard statisk grense på 10%. Det er litt rart at politikerne ikke har valgt en annen mekanisme enn en statisk grense på 10% for alle fagene. Kanskje de selv hadde fravær? All matematikken vi har brukt i denne artikkelen er i hvert fall VGS-pensum.

Kode

# Python 3.12.9,
import numpy as np  # numpy: 2.1.3
import scipy as sp  # scipy: 1.15.1


def prob_lose_grade(num_days, prob_absence=0.01, limit_absence=1 / 10):
    """Probability of losing your grade, given a course with `num_days` days."""
    # Limit for losing grades, in days. Hitting this means losing the grade.
    days_limit = int(np.ceil(num_days * limit_absence))
    # Probability of absence is Binomial
    distr = sp.stats.binom(n=num_days, p=prob_absence)
    # P(X >= limit) = 1 - P(X < limit) = 1 - (CDF(limit) - P(X=limit))
    return float(1 - distr.cdf(days_limit) + distr.pmf(days_limit))


def find_limit(num_days, prob_absence=0.01, max_prob_lose_grade=0.001):
    """Find largest fraværsgrense (limit), such that the probability of
    losing grade is <= target_value."""

    def objective(limit):
        return prob_lose_grade(num_days, prob_absence, limit) - max_prob_lose_grade

    # The goal is to find the largest possible limit that ensures that the
    # return value of prob_lose_grade is smaller than or equal to target_value.
    optimal_limit = sp.optimize.bisect(objective, a=0, b=1) + 1e-8
    # print(f"The absence limit should be set to {optimal_limit:.4f}")

    prob_lose = prob_lose_grade(num_days, prob_absence, optimal_limit)
    # print(f"Then the prob of losing the grade is {prob_lose:.4f}")
    assert prob_lose < max_prob_lose_grade
    return float(optimal_limit)


if __name__ == "__main__":
    # Test case - single day
    assert np.isclose(prob_lose_grade(1, prob_absence=0.01, limit_absence=1 / 10), 0.01)

    # Test case - two days
    prob = 0.01 * 0.01 + 2 * 0.01 * (1 - 0.01)
    assert np.isclose(prob_lose_grade(2, prob_absence=0.01, limit_absence=1 / 10), prob)

    # Test case - tree days
    p = 0.01
    prob = p * p * p + 3 * p**2 * (1 - p) + 3 * p * (1 - p) ** 2
    assert np.isclose(prob_lose_grade(3, prob_absence=0.01, limit_absence=1 / 10), prob)