4.9 KiB
Elo/MMR Monthly Ranking Design
Scope
This repository now exposes a first operational Elo/MMR-like system inspired by
sistema_elo_mensual_hll.pdf, but constrained to signals that are really
available today.
The implementation keeps the same conceptual split:
- persistent
MMR - monthly
MonthlyRankScore
It does not claim full parity with the PDF. Every major signal is labeled as:
exactapproximatenot_available
Real Inputs Available Today
Exact today from persisted historical CRCON/public-scoreboard data:
- closed match identity
- server scope
- player identity
- team side
- kills
- deaths
- support
- teamkills
- combat score
- offense score
- defense score
- match timestamps when present
- final allied/axis score
Exact today from current product state but not required by the core engine:
- player-event V2 summaries for duels, most-killed, death-by and weapon summaries
Approximate only:
role_bucket- inferred from the dominant scoreboard axis among
combat,offense,defenseandsupport
- inferred from the dominant scoreboard axis among
ObjectiveIndex- proxied with
offense + defensebecause there is no tactical event feed
- proxied with
StrengthOfSchedule- proxied with match quality and lobby density because there is no opponent MMR model yet
Not available today:
- explicit squad role / commander / SL role
- garrisons and OPs destroyed
- revives
- AFK and leave events
- precise leadership telemetry
- exact tactical objective event stream
- exact opponent-strength graph by roster
Current Capability Contract
Match validity
Current rule:
- match must be closed
- match duration must be at least
15minutes - match must have at least
20persisted player rows
Duration source:
exactifstarted_atandended_atexistapproximateif we must fall back to max playertime_seconds
Quality factor Q
Current Q is a bounded mix of:
- player density
- match duration
- score completeness
This is an operational approximation of the PDF quality factor and is labelled:
exactfor the density and score-completeness inputsexactorapproximatefor duration depending on timestamp availability
Buckets
Implemented:
- duration bucket
- mode retention through
game_mode - approximate
role_bucket
Not implemented yet:
- literal class role bucket
Subindices
Implemented now:
OutcomeScore:exactCombatIndex:exactObjectiveIndex:approximateUtilityIndex:exactLeadershipIndex:not_availableDisciplineIndex:exactfor teamkills only
ImpactScore
Implemented with role-inspired weights, but the role itself is approximate, so
the final ImpactScore is operationally approximate.
DeltaMMR
Implemented from:
OutcomeScoreImpactScore- quality factor
Q
The resulting DeltaMMR is real and persisted, but inherits the mixed
availability of the inputs above.
Storage Model
Tables added in backend SQLite:
elo_mmr_player_ratingselo_mmr_match_resultselo_mmr_monthly_rankingselo_mmr_monthly_checkpoints
Meaning:
elo_mmr_player_ratings- current persistent rating per player and scope
elo_mmr_match_results- per-match scoring trace used to explain rating movement
elo_mmr_monthly_rankings- monthly ranking rows ready for product/API
elo_mmr_monthly_checkpoints- generated-at metadata plus source policy and capability summary
Scopes persisted:
- per historical server
all-servers
Runtime Source Policy
The Elo/MMR engine follows the same historical policy as the rest of backend:
- primary intent:
rcon - current competitive calculation fallback:
public-scoreboard
Why fallback still exists here:
- the current RCON historical read model only supports coverage and recent activity
- it does not yet expose enough competitive match detail to support this Elo/MMR engine directly
That fallback is exposed in API metadata through:
primary_sourceselected_sourcefallback_usedfallback_reasonsource_attempts
Product Read Model
Current API surfaces:
/api/historical/elo-mmr/leaderboard/api/historical/elo-mmr/player
These payloads expose:
- persistent rating
- monthly ranking score
- eligibility
- component breakdown
- exact/approximate/partial capability metadata
Important Limitations
This first version should be treated as:
- operational
- honest about accuracy
- compatible with future expansion
It should not be described as:
- a perfect Elo system
- full parity with the PDF
- a complete tactical rating model
Planned Expansion Path
The current design is compatible with future upgrades once real telemetry exists:
- replace approximate
ObjectiveIndexwith event-driven tactical signals - add
LeadershipIndexwhen squad/command telemetry exists - replace approximate
StrengthOfSchedulewith opponent MMR graph logic - feed V2 duels and weapon signals into richer combat weighting when their coverage is sufficient