How the F3K Pilot Rating System Works

The Idea

Every F3K pilot has a single number — their rating — that reflects how strong they are right now. Win against tough opponents, your rating climbs. Lose to weaker pilots, it drops. Stop competing for a while, it gradually fades.

The system borrows from chess ELO but adapts it for F3K's unique structure: multiple pilots competing simultaneously in a flight group, where seconds of flight time determine who outperformed whom.


The Match Unit: Flight Groups

In F3K competitions, pilots are assigned to flight groups. Everyone in a group flies the same task, at the same time, under the same weather conditions. This is what makes the rating system fair — we never compare pilots who flew in different conditions.

Each group becomes one "match" for the rating system. A typical competition has 7–14 rounds with 2–4 groups each, so a weekend event generates 20–50 rating events per pilot.


How a Single Group Updates Ratings

When a group finishes flying, the system compares every pilot against every other pilot in that group. For a group of 8 pilots, that's 28 pairwise matchups per pilot.

Worked Example

Four pilots compete in a Task B2 (Best 2 flights, 4 min max, 10 min working time):

PilotFlight TimesTotal (seconds)Rating Before
Alice3:58 + 3:554731650
Bob3:52 + 3:474591580
Carol3:41 + 3:384391520
Dave3:10 + 2:553651490

For each pair, the system computes three things:

1. Expected Score — what should happen based on current ratings:

E = 1 / (1 + 10^((opponent_rating - your_rating) / 400))

Expected score based on rating difference

Alice vs Bob: E = 1 / (1 + 10^((1580-1650)/400)) = 0.60 Alice vs Carol: E = 1 / (1 + 10^((1520-1650)/400)) = 0.68 Alice vs Dave: E = 1 / (1 + 10^((1490-1650)/400)) = 0.72

Alice is expected to beat all three — she's the highest rated.

2. Actual Score — what did happen, with margin of victory:

S = 1 / (1 + e^(-(your_points - their_points) / margin_scale))

The margin scale varies by task (see below). For Task B2 (scale=45):

Alice vs Bob (473 - 459 = +14): S = 0.58 (slight win) Alice vs Carol (473 - 439 = +34): S = 0.68 (solid win) Alice vs Dave (473 - 365 = +108): S = 0.92 (dominant win)

3. How Much Each Comparison Counts — the margin weight:

Two pilots who finish a second apart haven't really shown who's better. Each pairwise comparison is weighted by how much the two pilots actually separated, measured against the same task scale:

w = |your_points - their_points| / margin_scale     (capped at 1.0, floored at 0.10)

Alice vs Bob (+14): w = 14/45 = 0.31 — close finish, counts less Alice vs Carol (+34): w = 34/45 = 0.76 — clear gap Alice vs Dave (+108): w = capped at 1.00 — decisive, counts fully

4. Rating Change:

delta = K × group_scale × (S_total - E_total) / sqrt(N - 1)

Where both totals are weighted sums, and group_scale = min(1.0, (N - 1) / 7). For this 4-pilot group: group_scale = 3/7 = 0.43.

Alice's totals: S_total = 0.31×0.58 + 0.76×0.68 + 1.00×0.92 = 1.61 E_total = 0.31×0.60 + 0.76×0.68 + 1.00×0.72 = 1.41

delta = 24 × 0.43 × (1.61 - 1.41) / sqrt(3) = +1.2

Alice performed slightly better than expected — she gains 1.2 points. Her rating moves from 1650 to 1651.2. The small group size (4 pilots) reduces the impact compared to a full 8+ pilot group.

Rating change after one group (Task B2)

What about Dave?

Dave lost all three matchups, but the system considers how much he was expected to lose:

Dave vs Alice: E = 0.28, S = 0.08, w = 1.00 Dave vs Bob: E = 0.37, S = 0.11, w = 1.00 Dave vs Carol: E = 0.46, S = 0.16, w = 1.00

Every one of Dave's margins exceeded the task scale, so all three comparisons count at full weight — he separated unambiguously from the field, just in the wrong direction.

S_total = 0.36, E_total = 1.12

delta = 24 × 0.43 × (0.36 - 1.12) / 1.73 = -4.5

Dave loses 4.5 points. He was expected to lose, but he lost by larger margins than his rating predicted. In a full-size group (8+ pilots), the loss would be larger — but the small group size limits the impact.


Margin of Victory Matters

The system doesn't treat a win as just a win. Beating someone by 200 seconds counts more than beating them by 5 seconds.

The margin sigmoid converts point differences into scores between 0 and 1:

Margin of victory sigmoid — task-specific scales

Task-Specific Margin Scales

Not all tasks have the same range of possible margins. In Task A2 (Last Flight, 7 min), most good pilots land within seconds of 5:00 — the ceiling is hard to exceed and easy to hit. In Task E1 (Poker), declared times create huge variance and margins of 60+ seconds are common.

A fixed scale would punish top pilots in ceiling-capped tasks: they'd be "expected" to win by margins that are physically impossible. The system accounts for this by using a task-specific margin scale that reflects how spread out scores naturally are for each task:

Task-specific margin scales

Task GroupMargin ScaleWhy
A1, A2, B1, G35Hard time ceiling — everyone near max, margins compressed
F, J40Short max flight time limits differentiation
B2, H, I, K, L245Moderate ceiling effects
C1, C250Multiple flights add variance
C3, D, L155Longer tasks with more room to differentiate
N60Single long flight — high risk/reward
E1, M65Poker / long working window — wide natural spread
E370Extended poker — even wider margins
E275Longest working window, maximum variance

This means a 10-second win in Task G (2 min max, scale=35) generates the same ELO impact as a 19-second win in Task E1 (scale=65). Both represent "winning by a typical competitive margin for that task."

Point DifferenceScore (scale=35)Score (scale=50)Score (scale=65)
+50.570.550.54
+150.650.570.56
+300.700.650.61
+500.810.730.68
+1000.950.880.82

This means maxing out a flight (landing exactly at the target time) matters — every second counts toward your rating. But it also means you won't be penalized for "only" winning by 10 seconds in a task where 10 seconds is a dominant margin.

The same scale drives the margin weight — how much each comparison counts at all:

How much a head-to-head comparison counts

Point DifferenceWeight (scale=35)Weight (scale=45)Weight (scale=75)
0 (exact tie)0.100.100.10
+50.140.110.10
+100.290.220.13
+200.570.440.27
+451.001.000.60
+1001.001.001.00

A 10-point gap is nearly three times as meaningful in Task A2 (scale 35) as in Task E2 (scale 75) — in the capped task it represents real separation, in the poker task it's noise. See Easy Rounds Count Less below.


Beating Stronger Pilots Rewards You More

The expected score is based on the rating gap between you and your opponent. When you beat someone rated much higher than you, your expected score was low — so the surprise factor is large.

Example: The Upset

Scenario: A 1500-rated pilot beats a 1700-rated pilot by 30 seconds in Task C1 (scale=50).

Expected score against the 1700 pilot: E = 1 / (1 + 10^((1700-1500)/400)) = 0.24 Actual score (30-second margin): S = 1 / (1 + e^(-30/50)) = 0.65

Surprise = S - E = 0.65 - 0.24 = +0.41

Scenario: The same 1500-rated pilot beats a 1480-rated pilot by 30 seconds.

Expected score: E = 1 / (1 + 10^((1480-1500)/400)) = 0.53 Actual score: S = 0.65 (same margin, same score)

Surprise = 0.65 - 0.53 = +0.12

The same flight performance (winning by 30 seconds) generates 3.4x more rating gain when it's against a pilot rated 200 points above you versus one rated 20 points below you.

This is why competing in strong groups at major events is the fastest path to a high rating — and why dominating weak local fields produces only modest gains.

Rating gain vs opponent strength


K-Factor: How Fast Ratings Move

New pilots need their ratings to adjust quickly to find their true level. Established pilots should have more stable ratings. The K-factor controls this:

Experience LevelGroups PlayedK-FactorCharacter
Provisional0–1548Rating moves fast — finding your level
Intermediate16–5036Settling in
Established51+24Stable — only big performances shift it

A provisional pilot gaining the same "surprise" as an established pilot will move their rating twice as fast (48/24 = 2x).

What this looks like in practice

A new pilot enters their first competition rated 1500. In a group of 8 with average rating 1550, they score well — finishing 2nd. Their K-factor of 48 might give them +15 points per round. After a 10-round competition, they could jump from 1500 to 1620.

An established pilot (200+ groups) in the same situation with K=24 would gain about +7 per round — moving from 1550 to 1620 over the same event.

K-factor effect: a new pilot's rating journey


Group Size Normalization

Groups range from 3 to 16 pilots. The system applies two layers of group-size adjustment:

1. Matchup normalization: The rating change is divided by sqrt(N-1) so that having more pairwise comparisons doesn't automatically create larger swings:

Group SizeNormalization FactorEffect
3 pilotssqrt(2) = 1.41Moderate per-group impact
6 pilotssqrt(5) = 2.24Slightly diluted per matchup
10 pilotssqrt(9) = 3.00Many matchups, each counts less
16 pilotssqrt(15) = 3.87Lots of information, gentle per-pair

2. Small-group K-factor scaling: The K-factor is further scaled relative to a reference group size of 8 pilots. Groups smaller than 8 produce proportionally reduced rating changes:

effective_K = K × min(1.0, (N - 1) / 7)
Group SizeScale FactorEffect
3 pilots0.29~70% reduction — minimal rating impact
4 pilots0.43Significant reduction
6 pilots0.71Moderate reduction
8+ pilots1.00Full K-factor applied

This prevents rating inflation from small local events where a strong pilot repeatedly beats 2–3 weak opponents across many rounds. Dominating a 4-pilot group over 15 rounds produces far less gain than performing well in a single round at a major competition with 12-pilot groups.


Inactivity Decay

A rating should reflect current ability, not historical peak. If a pilot stops competing, their rating gradually decreases:

  • Grace period: 6 months of inactivity before any decay begins
  • Decay rate: 3 points per month after the grace period
  • Floor: Rating cannot fall below 50% of the distance between 1500 and your peak

Decay Example

A pilot with a peak rating of 1800 stops competing:

Inactivity decay

Floor calculation:

floor = 1500 + (peak - 1500) × 0.5
     = 1500 + (1800 - 1500) × 0.5
     = 1650

After 6 months: no change (grace period) After 12 months: 1800 - (6 × 3) = 1782 After 18 months: 1800 - (12 × 3) = 1764 After 24 months: 1800 - (18 × 3) = 1746 After 56 months: would calculate to 1650 — hits floor, stops

The floor ensures that a pilot who was once world-class doesn't decay all the way to beginner level. Their history is acknowledged — but they still need to prove current form by competing.

Decay is Real, Not Cosmetic

When a pilot returns after a break, their rating has already been reduced. They re-enter the system at their decayed rating and must earn their way back up through results. This ensures the leaderboard always reflects who is performing well now.


Ranked vs Unranked

To appear as a ranked pilot on the leaderboard, you need:

  • At least 30 group appearances (roughly 3–4 full competitions)
  • At least 4 distinct competitions

Until these thresholds are met, a pilot has a rating (visible in their profile and history) but doesn't receive a numbered rank on the leaderboard. This prevents a single strong weekend from placing someone at #1.


Round Batching

Within a competition round, multiple groups fly simultaneously. The system processes all groups in a round using the same pre-round ratings, then applies all changes at once. This means:

  • Group A and Group B in the same round don't influence each other's calculations
  • Your round 3 performance is evaluated against ratings that include rounds 1 and 2
  • No pilot gets an advantage from the order groups are processed

Easy Rounds Count Less

Some rounds simply don't tell you who the better pilot is.

On an easy task, or on a calm day when the air is working everywhere, the whole group lands within a couple of seconds of the maximum. Everyone flew well. Nobody separated. A round like that contains almost no information about relative skill — and a rating system that treats it as a full result will move ratings on pure noise.

This is handled by the margin weight introduced earlier. Each pairwise comparison counts in proportion to how much the two pilots actually separated:

w = |point difference| / margin_scale     (capped at 1.0, floored at 0.10)

Because the weight is applied to both the expected and the actual score, a near-tie shrinks its influence on the result rather than inventing an outcome.

There's no special rule for "easy rounds" — the behavior emerges. When the whole field bunches up, every pair in the group is a near-tie, so every weight is low and the round barely moves anyone.

The Same Four Pilots, Two Different Rounds

Round 1 — Task B2, scores spread out (473 / 459 / 439 / 365) — the same group from the worked example above. Real separation, weights 0.31 to 1.00:

PilotResultRating change
Alice1st+1.2
Bob2nd+1.7
Carol3rd+1.7
Dave4th−4.5

Round 2 — Task G, 2-minute ceiling, everyone maxes out (595 / 594 / 593 / 592). Same finishing order, but the entire group is inside 3 points. Every weight drops to the 0.10 floor:

PilotResultRating change(old system)
Alice1st−0.3−2.7
Bob2nd−0.1−0.6
Carol3rd+0.1+1.2
Dave4th+0.2+2.0

Same pilots, same finishing order, two different rounds

Alice won both rounds. In the compressed round the old system charged her −2.7 for it — she was the strongest pilot in the group, so the model expected her to win by a margin the task made physically impossible. Now that round costs her −0.3: still marginally negative (a near-tie against weaker pilots is mild evidence against you), but no longer a meaningful penalty for a round that proved nothing.

Why Not Just Ignore Ties?

An exact tie floors at 0.10 rather than dropping to zero, because tying a much weaker pilot is weak evidence — just very weak. Discarding those comparisons entirely would let a strong pilot bank an unlimited number of ceiling ties with no rating consequence at all.

It Cuts Both Ways

The mechanism is symmetric, and deliberately so. A lower-rated pilot who ties the field at the ceiling used to collect a substantial rating gain for it. They no longer do — matching everyone on a round nobody could lose isn't an upset.

Across the full history, average rating movement per round now scales with how much the round separated the field:

Rounds that prove nothing now count for little

How much the round separated the fieldChange in rating movement
Very compressed — everyone within a fraction of the task's normal spread−68%
Compressed−47%
Normal−24%
Spread out−10%
Very spread out — a round that genuinely sorted the field−5%

Crucially, this is a redistribution, not a softening. Genuinely bad rounds now cost slightly more than before, because weight moves toward the rounds that actually discriminate. Blowing a high-variance task in front of a strong field is one of the most expensive things you can do to your rating.


Peak Rating

Every pilot has a peak rating — the highest rating they've ever achieved. This never decays. It represents the best form a pilot has shown and serves as a historical record, separate from the current (potentially decayed) rating.


Summary

MechanismPurpose
Pairwise within groupsFair comparison (same conditions)
Margin-aware scoringEvery second matters
Task-specific margin scalesCeiling-capped tasks credit small wins fairly
Margin informativeness weightRounds that didn't separate the field count less
Expected vs actualUpsets rewarded, beating weaker pilots less so
K-factor scalingNew pilots settle fast, veterans stay stable
Group size normalizationConsistent impact across group sizes; small groups produce less gain
Inactivity decay with floorReflects current form, respects history
Round batchingNo processing-order advantage
Ranked thresholdsProven track record required

The result: a single number that tells you how a pilot stacks up against the global F3K field right now — updated after every competition, grounded in head-to-head performance, and resistant to gaming through weak fields or cherry-picked events.