https://github.com/niklasb/ctf-glicko2
Source code for Glicko-2 rating app for CTF teams 2016.
https://github.com/niklasb/ctf-glicko2
Last synced: 5 months ago
JSON representation
Source code for Glicko-2 rating app for CTF teams 2016.
- Host: GitHub
- URL: https://github.com/niklasb/ctf-glicko2
- Owner: niklasb
- Created: 2017-01-01T20:11:47.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-01-01T20:26:50.000Z (over 9 years ago)
- Last Synced: 2025-02-26T00:49:58.030Z (over 1 year ago)
- Language: HTML
- Homepage: https://kitctf.de/glicko2/
- Size: 368 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Experiments with Glicko-2 to Rate CTF Teams
Author: [niklasb](https://twitter.com/_niklasb)

If you want to play around with your own parameters and see the results, you can use
[my web app](https://kitctf.de/glicko2/).
## What is this?
This is an application of the
[Glicko-2](http://www.glicko.net/glicko/glicko2.pdf) rating system to the
CTFTime data from 2016, using the [multiplayer implementation by
Matt Sewall](https://github.com/ms2300/multiplayer-glicko2). I scraped the
scoreboards from all 2016 CTFs and applied the ranking to it.
To counter the fact that some teams play with vastly different numbers of
players on different events, I applied some modification to the original
scheme:
* Only the top `max_top` teams are considered for each event. The assumption is
that these teams obviously *tried* to achieve a good result, so it's useful to
compare their result against other top teams.
* Optionally, we can exclude teams that achieved less than `score_percentile`
percent of the score achieved by the winning team
* To counter some of the massive rating loss that some teams would experience
by just a few bad events, we add a damping factor that only applies to
negative rating deltas. I.e. if a team would normally lose X rating points,
we multiply that by the damping factor before appying the delta. This leads
to some rating inflation of course, depending on the value.
My own experiments and intuition show that these values might be a good
starting point for experimentation:
* `max_top = 20`
* `score_percentile = 0` (because `max_top` is small enough)
* `negative_damping = 0.7` (negative deltas are only counted 70%)
* `(initrat, initrd, initvol) = (1500, 100, 0.1)` (these are the standard
Glicko-2 parameters)
## TODO + Known Limitations
* Currently we don't order events by date, but by ID