Algorithm specification

A complete technical description of how sessions are scored, verdicts assigned, and personalisation applied.

Overview

Each completed session is evaluated against four independent signals — race incidents, weather, on-track position changes, and pit strategy. Each signal contributes a bounded number of raw points. The total is normalised to a 0–10 scale against a calibrated ceiling. Sessions that reach a threshold score receive a Worth Watching verdict; those that fall short receive Highlights Only. An optional personalisation layer can upgrade a Highlights Only result to Worth Watching for fans of a driver who featured prominently in that session, but never downgrades a Worth Watching verdict.

The four signals

SignalWhat triggers itMax pts
Race incidentsSafety cars (10 pts each, cap 20), virtual safety cars (4 pts each, cap 8), red flags (12 pts each, cap 12). Combined cap 25.25
WeatherSustained rain (≥40% of readings): 15 pts. Brief shower (10–40%): 7 pts. Dry with track temperature swing >8°C: 5 pts.15
Position changes6 pts per unique leader. 2 pts per driver who gains 5+ places net, or triggers the recovery drive signal. Cap 40.40
Pit strategy10 pts when any driver pits 3+ times, or average stops exceed 2. Zero for standard 1- or 2-stop races.10
Theoretical maximum (essentially unreachable in practice)90

Normalisation and verdict threshold

The raw point total is normalised against a ceiling of 65 points for races and sprints (40 for practice sessions, which have no position or pit signals). The formula is:

score = round(raw / 65 × 10, 1)  ·  capped at 10

The ceiling of 65 was chosen because a genuinely exciting race — one safety car, multiple lead changes, and solid overtaking — produces roughly 45–50 raw points, which normalises to 6–8 out of 10. The theoretical maximum of 90 is unreachable in practice, so anchoring to 90 would compress all real scores into a narrow 5–6 band.

A session scores a Worth Watching verdict when it reaches 4.5 or above. Below that threshold the verdict is Highlights Only. Practice sessions always receive Highlights Only regardless of score.

Personalisation layer

How it works

When a user selects a favourite driver, sessions where that driver featured notably can be upgraded from Highlights Only to Worth Watching. The upgrade is shown with a small "for you" label so users can distinguish personalised verdicts from algorithmic ones. A Worth Watching verdict is never downgraded — personalisation only upgrades.

What qualifies as notable

A driver is added to the notableDrivers list for a session if any of the following apply:

  • Race leader: the driver held P1 at any point in the session.
  • Forward mover: the driver gained 5 or more positions net from their starting position to their finishing position. Retirements are excluded — a driver who drops to last due to a DNF is not a forward mover.
  • Recovery drive: the driver fell 10 or more positions from their starting position at some point in the race but ultimately finished within 2 places of where they started. This captures genuine come-back drives that the net-movement signal would miss.

The notableDrivers list is computed inside the position-scoring module and stored alongside the session score. The personalisation check happens at render time in the client — no server round-trip is needed after the score is fetched. Favourite driver preference is stored inlocalStorage under the key siwr-favourite-driver and never sent to any server.

Cancelled race filtering

Sessions are filtered through two independent gates before appearing in the guide:

  • 1.Jolpica calendar gate: each session's meeting date is matched against the official F1 calendar from the Jolpica API. Sessions that fall outside the calendar (phantom events, test sessions published as races) are silently dropped. The closest-match logic correctly handles back-to-back weekends fewer than 8 days apart.
  • 2.hasLapData check: for recently-completed races (within 60 days), a secondary check verifies that OpenF1 holds lap data for the session. This catches the narrow case of a cancelled session that passes the calendar gate because it falls within 8 days of a real race. Historical seasons skip this check to avoid mass timeouts from concurrent requests.

Both gates must pass for a session to be displayed. A session that fails either gate is excluded from the grid along with all other sessions from the same meeting.

Known limitations

Sparse telemetry

OpenF1 position data is polled at roughly 1–3 Hz. At this resolution, short-duration overtakes (especially at pit exit or in the final lap) may not be captured. Scores for closely-contested races may be slightly understated.

Pit-cycle lead changes

When drivers run different pit strategies, the race leader on-track changes every time a front-runner pits. These virtual lead changes inflate the unique-leaders count and therefore the position score. A dominant performance with two clear strategy phases can score similarly to a genuine on-track battle.

No narrative signals

The algorithm has no awareness of championship stakes, last-lap drama, team orders, driver rivalries, or on-board radio. A statistically quiet race that delivers a memorable moment on the final lap will still receive a Highlights Only verdict.

Sprint session calibration

Sprints use the same ceiling and threshold as full races despite being shorter and structurally less likely to produce multiple lead changes. Sprint verdicts should be read as a relative signal within their shorter format, not compared directly to full race scores.

Want the full formal specification with mathematical notation, proofs, and references?

Read the whitepaper →

Data sources

All race data comes from OpenF1, a free and open real-time F1 data API. Calendar data is sourced from Jolpica. No official F1 data feeds are used. No finishing positions, lap times, or results of any kind are consumed — the algorithm operates entirely on race control messages, weather readings, position telemetry, and pit timing.