# Empirische Zwift-inspanningsscore

Bijgewerkt op 3 oktober 2026. Dit is een schatting, niet een door Zwift gepubliceerde formule.

## Berekening

1. Lees het doelvermogen per seconde uit het ZWO-bestand, uitgedrukt als verhouding tot FTP. Warmups worden lineair geïnterpoleerd, inclusief hun begin- en eindwaarde.
2. Bereken het rollende gemiddelde over 30 seconden. Gebruik alleen volledige vensters. Neem de vierde macht, het gemiddelde daarvan en vervolgens de vierde wortel: dit geeft `p = NP30 / FTP`.
3. Bereken `a`, het gemiddelde doelvermogen gedeeld door FTP, en `t`, de duur in uren.
4. Gebruik de ijktabel hieronder. Interpoleer lineair in vermogen en in `t^1,5`, tussen de twee aangrenzende rijen en kolommen. Buiten de tijdsgrenzen wordt met het eerste of laatste rijpaar geëxtrapoleerd. Onder 50% FTP wordt het eerste kolompaar gebruikt. Boven 100% FTP volgt extrapolatie de helling tussen 85% en 100%, zodat een vlakke afgeronde 95–100%-score de schatting niet vastzet.
5. Pas de correctie toe: `ruwe score = tabelwaarde + -0.3121578362161662 × (p − a)`.
6. Rond af op een half punt en begrens op 1–5.

De tabel bevat ongeronde tussenwaarden uit de kalibratie. Het zijn geen afzonderlijke opgegeven Zwift-scores. De pagina gebruikt de volledige precisie uit [het model](zwift-score-model.json).

| Tijd | 50% | 60% | 65% | 70% | 75% | 80% | 85% | 90% | 95% | 100% |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| 0.5 uur | 1.000000 | 1.000000 | 1.000000 | 1.475981 | 1.970480 | 2.004723 | 2.468835 | 3.429353 | 4.500000 | 4.500000 |
| 1 uur | 1.000000 | 1.000000 | 1.434348 | 1.737099 | 2.077215 | 2.571733 | 3.665039 | 4.400388 | 4.500000 | 5.000000 |
| 2 uur | 1.500000 | 2.000000 | 2.599188 | 2.932068 | 3.567764 | 4.556632 | 5.244894 | 5.244894 | 5.244894 | 5.244894 |

Bij vrije blokken zonder vast doelvermogen blijft de geschatte score onbekend. De 58 rechtstreeks gemeten bronworkouts tonen in de pagina hun echte opgegeven score. Bij de nauwkeurigheidscontrole hieronder zijn die vervangingen uitgeschakeld: alleen de berekening wordt vergeleken met de metingen. Gewijzigde testkopieën overschrijven nooit de score van hun bronbestand.

## Meetresultaten

De 72 nieuwste metingen bevatten zeven herhalingen van eerder gemeten bronworkouts. Na samenvoeging zijn er 102 verschillende bestands- en variantvoorbeelden. Eén nieuw bronbestand, `workout_9007.zwo`, heeft hetzelfde doelvermogensprofiel als het eerder gemeten `workout_5007.zwo`.

| Controle | Exact | Gemiddelde afwijking |
|---|---:|---:|
| Vorige formule op dezelfde 102 voorbeelden | 73/102 (71,6%) | 0,142 punt |
| Laatste formule op alle bekende voorbeelden | 98/102 (96,1%) | 0,020 punt |
| Laatste formule op 58 gemeten bronbestanden | 56/58 (96,6%) | 0,017 punt |
| Interne groepscontrole, zonder de 32 vaste-vermogensproeven | 59/70 (84,3%) | 0,079 punt |

Alle afwijkingen van de laatste formule zijn hoogstens een half punt. De interne controle houdt een bronbestand en zijn gewijzigde testkopieën in dezelfde groep; de bekende identieke profielen 5007 en 9007 worden ook samen weggelaten. De 32 vaste-vermogensproeven blijven als ijkpunten beschikbaar. De modelkeuze is mede gebaseerd op deze interne controle, dus dit is geen volledig onafhankelijke validatie.

De eerste formule die vóór het verwerken van de controlescores werd vastgezet, haalde 16/23 (69,6%) op de onafhankelijke controleset. De identieke kopie 9007 was daarbij uitgesloten. Die controle liet vooral problemen met lange workouts en de ramptest zien. Deze scores zijn daarna meegenomen in de laatste verfijning. Daarom bewijst de huidige 96,1% **geen 95% nauwkeurigheid op nieuwe workouts**.

## Resterende afwijkingen

| Voorbeeld | Zwift | Schatting |
|---|---:|---:|
| workout_9922.zwo | 2 | 2.5 |
| T07 | 3.5 | 4 |
| A14 | 2 | 1.5 |
| workout_8034.zwo | 4.5 | 4 |

## Bestanden

- [Alle meetgegevens en controles](zwift-score-calibration.json)
- [De 72 nieuwste metingen met hun schermafbeeldingsbron](zwift-score-lab-01.json)
- [De oude berekening en haar 37 meetpunten](zwift-score-calibration-v1.json)
- [Het model dat vóór de eerste controleset werd vastgezet](zwift-score-model-initial-validation.json)

De 30-secondenberekening volgt de beschrijving van [TrainingPeaks](https://help.trainingpeaks.com/hc/en-us/articles/204071804-Normalized-Power). De toepassing daarvan in deze score is empirisch gekozen en niet bevestigd door Zwift.
