online-go / goratings

This repository contains the (future) official rating and ranking system for online-go.com, as well as analysis code and data to develop that system and compare it to other reference systems.
MIT License
19 stars 6 forks source link

Add --aging-period to experiment with expanding deviation in stale ratings #62

Closed dexonsmith closed 9 months ago

dexonsmith commented 9 months ago

New option --aging-period (a duration measured in days) makes ratings age continuously. --aging-period=0 (the default) turns it off.

E.g., setting --aging-period=7 mimicks a window of one week, where the deviation for each rating is expanded according to the (fractional) number of weeks that have passed since the rating was established.

Currently only implemented in analysis/analyze_glicko2_one_game_at_a_time.py. I'll also add it to the ratings-grid script when I get that going again...

One thought: with this in place, I wonder if "step 6" should be skipped. I.e.,

    # step 6
    phi_star = sqrt(player.phi ** 2 + new_volatility ** 2)

is both (a) evaluated fully on every game and (b) continuously, averaging once per period (via --aging-period). Maybe the every-game evaluation should be skipped (and phi_star = player.phi instead inside glicko2_update). I'll experiment with that tomorrow/this week.

anoek commented 9 months ago

One thought: with this in place, I wonder if "step 6" should be skipped. I.e.,

In some sense I think it's basically intended, there's this from the glicko2.pdf:

Note that if a player does not compete during the rating period, then only Step 6 applies

However the context is a little since he's talking about updating everyone's deviation right before a tournament, everyone plays a bunch of games, and then updating it again after all those games, where as we're doing it every game, so maybe it's different.

If we do find that doubling up all the time like this is a problem, I would think that we couldn't skip step 6 though, as that's a function of the outcome of the game. If anything, my gut would point in the direction of doing something in the deviation expansion code or making the periods passed a parameter of the glicko2_update function itself so we account for it there, but both of those would take a bit of pondering.

Alternatively, and perhaps this would be a better experience anyways, we could only run the expansion code if more than X time has passed, then we side step the whole question of how to correctly handle the constant application of that expansion code.