Here are my suggestions to improve rating graphs:
-
If possible, include every game rather than day by day. I'd like to see my highs and lows better.
-
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.