Why Elo for Esports?
Traditional esports rankings (HLTV, VLR) use a mix of editorial judgment and point-based systems. I wanted something purely mathematical — a system where every match result automatically updates team rankings.
The Algorithm
The base Elo formula is simple:
New Rating = Old Rating + K * (Actual - Expected)
Where:
- K-factor = how much each match matters (I use 32 for regular matches, 48 for playoffs, 64 for grand finals)
- Expected = probability of winning based on rating difference
- Actual = 1 for win, 0 for loss
My Modifications
Standard Elo doesn't account for esports-specific factors, so I added:
1. Tournament Tier Weighting
const tierMultiplier = {
S: 1.5, // Majors, Worlds, TI
A: 1.2, // ESL Pro League, Masters
B: 1.0, // Regular tournaments
C: 0.7, // Qualifiers
}
2. Recency Decay
Matches from 6+ months ago contribute less to current rating. This prevents teams that were good a year ago but haven't played recently from staying ranked high.
3. Score Margin
A 2-0 sweep is weighted more than a 2-1 win. Close series suggest teams are evenly matched.
Results
After processing 50,000+ matches across CS2, Valorant, LoL, and Dota 2, the rankings at esport.is/rankings closely match expert consensus while being fully automated.
The system correctly predicted ~62% of match outcomes in backtesting — better than random (50%) and comparable to betting market implied probabilities.
Implementation
Built with TypeScript, running on Vercel serverless functions. Rankings recalculate after every match via webhook from our data pipeline.
Check it out: esport.is/rankings
Have you implemented rating systems? What modifications worked for you?
Top comments (0)