Methodology

How Glicko.app computes ratings, where data comes from, and what the numbers mean.

Glicko-2 overview

Glicko.app is built on Glicko-2, a rating system developed by Mark Glickman that extends the classic Elo model with two additional dimensions: rating deviation (RD) and volatility. These extra dimensions let the engine express confidence in a rating, not just its central estimate.

The algorithm was originally designed for chess but is game-agnostic. Today we apply it to Valorant; the engine is built to extend to other titles on the same terms, so ratings will be structurally consistent across games as they ship — even though absolute values are not comparable between titles.

Rating components

Every team and player carries three values that are updated together after each completed match:

r

Rating

The central performance estimate. Starts at 1500 for every new entrant. Increases after wins against strong opponents, decreases after losses. The magnitude of the change scales with how surprising the result was.

RD

Rating deviation

How confident the system is in the rating. A new team has a high RD (~350); a team with hundreds of matches has a low RD (~50). Think of the true rating as lying within roughly two RD of the displayed value.

σ

Volatility

How erratic the team's or player's performance has been. High volatility means results have been inconsistent; the engine responds to upsets more quickly for high-volatility entrants and more slowly for stable ones.

Core update equations (simplified)
r′  = r  + q·Δ              (new rating)
RD′ = √(RD²_pre + σ²)      (deviation, pre-period)
RD″ = 1 / √(1/RD′² + 1/v)  (after match results)

Where q is a scaling constant, Δ is the performance delta, v is the estimated variance, and σ is volatility. Full derivation: Glickman (2012).

Update cycle

Ratings are updated incrementally: every time the worker scrapes a completed match result, the engine processes that match and writes new r / RD / σ values. This means the leaderboard reflects results within minutes of a match ending, rather than being recalculated in nightly batches.

The worker runs on a configurable schedule (typically every 15 minutes during active tournament windows, every few hours during off-season) and can be triggered manually from the admin panel.

Rating decay

Glicko-2 handles inactivity by widening the rating deviation over time. When a team or player has not played for an extended period, their RD grows toward its starting value. This means a historically strong team that has gone inactive will show a wider confidence interval, signaling that their current strength is uncertain — not that they have become weaker.

RD inflation is continuous, not a discrete calendar step: it widens in proportion to the time elapsed since an entrant’s last match. We measure that gap against a rating period of roughly 4.67 days (derived from the Lichess periodsPerDay constant), so the longer the idle stretch, the wider the confidence interval grows.

Data sources

Glicko.app ingests match data from multiple upstream sources and normalises them into a unified schema before the rating engine processes them. Priority is given to official Riot data wherever available.

SourceGamesNotes
Riot API (VCT)ValorantOfficial match data for VCT International and Challengers. Highest fidelity.
VLR.ggValorantSupplementary community tracker for broader tournament coverage.
BO3.ggValorantSupplementary community source for tournament structure and live/ongoing match coverage.
News & RedditAllCommunity and media sentiment. Entity-tagged by Gemini Flash; linked to teams and players via ContentTag.
YouTubeAllVideo content from official and partner channels; sentiment-analysed.

Community signals & Pulse

Beyond match ratings, we surface a Pulse feed of community signals — concise narrative moments derived from sentiment, match scores, news coverage, and community discussion on Reddit, YouTube comments, and the VLR forum threads. Pulse sits alongside the leaderboard as a separate narrative layer: it captures what people are talking about, not just who is winning.

Signals are classified into 19 archetypes — TEAM_MOMENTUM, SENTIMENT_SWING, UPSET, ROSTER_CHANGE, TOURNAMENT_MILESTONE, REGION_SHIFT, PLAYER_BREAKOUT, HEAD_TO_HEAD, EVENT_PREVIEW, COMEBACK, FREE_AGENCY, BRACKET_FINALIZED, QUALIFICATION_CLINCH, VIRAL_TAKE, FAN_OUTCRY, HYPE_WAVE, DIVIDED_COMMUNITY, FORUM_DEBATE, and MEME_MOMENT — and ranked by an importance score that combines normalised magnitude, community upvote rank, and freshness.

Signals are read-only: they do not move Glicko ratings. They are auditable, too — each signal links back to the underlying content (news article, Reddit thread, VLR forum post, YouTube video) so claims can be traced to source.

Cross-game comparisons

The Glicko-2 engine uses the same initial values and scale regardless of game, so the shape of ratings will be consistent as additional titles ship — a rating of 1800 will mean "significantly above average" in every game. Absolute numbers will not be directly comparable across games, though: when a second title launches, a Valorant team rated 1800 cannot be said to be "as good" as a team rated 1800 in that other game because match pools, activity levels, and team counts differ.

Within a single game, ratings are fully comparable. Percentile ranks and leaderboards are always scoped to a single title for this reason.

Tier system

Glicko organises Valorant competition into four tiers: VCT (Tier 1 — the top international league and its regional Americas, EMEA, Pacific, and China stages), VCL (Tier 2 — the Challengers regional leagues that feed into VCT), Game Changers (the women's and marginalised genders circuit), and Tier 3 (the broader open and community circuit).

Tier assignment is a combination of explicit tournament metadata (VCT-tagged events) and the GCD (Global Contract Database), which maps teams to leagues. When neither an explicit league tag nor a GCD entry is available, tier is inferred from match composition — i.e. the tiers of the opponents a team has actually played.

Tier ceilings limit how high a team can rank inside its own tier (e.g. a Tier 2 team is capped at 1850 for tier-2-scoped views) so that the leaderboard within a tier reflects competitive position rather than absolute strength relative to higher tiers. Cross-tier match results still update Glicko ratings normally — the tier filter is a display lens, not a separate rating system.

Leaderboard sort order

Team leaderboards sort by raw rating — the pure-Glicko number shown on the team detail page — grouped into tier buckets (VCT, then VCL, then GC, then T3). Provisional, high-uncertainty teams are filtered out of the primary surface rather than penalised in the sort, so the ladder stays readable without distorting any one team’s number.

Player rankings sort by lower-bound rating (rating − RD), not raw rating. This penalises high-uncertainty entrants and rewards consistent performance over flash-in-the-pan runs.

For example, for players: one with rating 1850 and RD 200 (after 5 matches) has a lower bound of 1650. One with rating 1750 and RD 50 (after 200 matches) has a lower bound of 1700. The second player ranks higher even though their raw rating is lower.

This is intentional. It matches how confidence intervals work in any statistical estimator — we list the conservative read. In every case the raw rating is still displayed on the detail page.

Limitations

  • Ratings reflect match outcomes only — map scores and individual player stats are not yet factored into the team rating update.
  • Roster instability is not modelled. A team that replaces all five players carries the same rating as before, which may overstate or understate true strength during transition periods.
  • Very new teams have high uncertainty (wide RD) and can appear misleadingly high or low after only a few results. Filter by minimum match count for more stable comparisons.
  • Data completeness varies by region and tournament tier. Tier-3 events have less coverage than VCT International.

Questions or data corrections? hi@glicko.app