- Blind mode tutorial
lichess.org
Donate

Feature Request: Updates to Rating Graphs

Here are my suggestions to improve rating graphs:

  1. If possible, include every game rather than day by day. I'd like to see my highs and lows better.

  2. Smooth the rating graphs (i.e. include a trend line that estimates a player's "true rating"). This should filter out the noise (randomness) and just show the signal (improvements in skill).

For implementing 2, here's a quick overview of how to do it:

Option 1: reverse filter

  • the graph will end at time n with the user's current rating r[n], so s[n] = r[n], then we can find all previous values using a formula like s[n-1] = s[n]a + r[n-1](1-a) where alpha represents a smoothing factor. alpha should be smaller if there's a large amount of time between game n and game n-1.
  • here's an example of calculating what the alpha should be for a highly active player (rating deviation = 45): a rating deviation of 45 means variance of 452 = 2025. If I did the math correctly, playing an equally rated player means your rating should change by ±5.73 with a win/loss and since the rating deviation stays at 45, that means the 5.732 = 32.9 variance of information gained from the result of the game was counterbalanced by the loss of 32.9 variance in time.

Doing some math, ratings are roughly calculated as (previous rating)*0.984 + (current performance)*0.016, so alpha should be 0.984. On general, 1-alpha should be around 0.08 × (rating deviation ÷ 100)2

Option 2: rolling average - should be simpler to implement. just do a 12, 24, or 60 game rolling average

Option 3: something based on the rate of change of ratings. If a player's rating is changing at a rate of ~x points per game, you can say they're over or underrated by ~y points. Use that to smooth out the random fluctuations.

Here are my suggestions to improve rating graphs: 1. If possible, include every game rather than day by day. I'd like to see my highs and lows better. 2. Smooth the rating graphs (i.e. include a trend line that estimates a player's "true rating"). This should filter out the noise (randomness) and just show the signal (improvements in skill). For implementing 2, here's a quick overview of how to do it: Option 1: reverse filter - the graph will end at time n with the user's current rating r[n], so s[n] = r[n], then we can find all previous values using a formula like s[n-1] = s[n]*a + r[n-1]*(1-a) where alpha represents a smoothing factor. alpha should be smaller if there's a large amount of time between game n and game n-1. - here's an example of calculating what the alpha should be for a highly active player (rating deviation = 45): a rating deviation of 45 means variance of 452 = 2025. If I did the math correctly, playing an equally rated player means your rating should change by ±5.73 with a win/loss and since the rating deviation stays at 45, that means the 5.732 = 32.9 variance of information gained from the result of the game was counterbalanced by the loss of 32.9 variance in time. Doing some math, ratings are roughly calculated as (previous rating)*0.984 + (current performance)*0.016, so alpha should be 0.984. On general, 1-alpha should be around 0.08 × (rating deviation ÷ 100)2 Option 2: rolling average - should be simpler to implement. just do a 12, 24, or 60 game rolling average Option 3: something based on the rate of change of ratings. If a player's rating is changing at a rate of ~x points per game, you can say they're over or underrated by ~y points. Use that to smooth out the random fluctuations.

This topic has been archived and can no longer be replied to.