Extended Elo rating system implementation exploiting the equivalence with logistic regression.
Project description
:chess_pawn: EloGrad
Extended Elo rating system implementation exploiting the equivalence with logistic regression.
EloGrad (Elo as Gradient descent) leverages the framing of the
Elo rating system
as logistic regression with stochastic gradient descent
(see Elo as Logistic Regression for a walkthrough)
to offer a collection of extensions to the rating system.
All models are scikit-learn
compatible.
:sparkles: Features
- Standard Elo rating system for binary outcomes.
pandas
andscikit-learn
compatible.- See
examples/nba.ipynb
for an example using NBA data.
- Elo rating system for binary outcomes with additional regressors, e.g. home advantage.
- L1 and L2 regularisation supported for additional regressors (see Regularisation).
- See Additional Regressors for the theory and
examples/nba.ipynb
for an example using NBA data.
- Elo rating system for count data based on Poisson regression.
pandas
andscikit-learn
compatible.- See Poisson Elo for the theory and
examples/football.ipynb
for an example using Premier League football data.
:book: Installation
You can install elo-grad
with:
pip install elo-grad
:zap: Quick Start
Detailed example notebooks are provided in the examples/
directory.
To install any extra dependencies required to run the notebooks install with:
pip install elo-grad[examples]
:clipboard: Minimal Example
from elo_grad import EloEstimator, Regressor
# Input DataFrame with sorted index of Unix timestamps
# and columns entity_1 | entity_2 | score | home
# where score = 1 if player_1 won and score = 0 if
# player_2 won and home is a boolean flag indicating if
# entity_1 has home advantage.
df = ...
estimator = EloEstimator(
k_factor=20,
default_init_rating=1200,
entity_cols=("player_1", "player_2"),
score_col="result",
init_ratings=dict(home=(None, 0)),
additional_regressors=[Regressor(name='home', k_factor=0.1)],
)
# Get expected scores
expected_scores = estimator.predict_proba(df)
# Get final ratings (of form (Unix timestamp, rating))
ratings = estimator.model.ratings
:compass: Roadmap
In rough order, things we want to add are:
- Support for Polars
- Head-to-head ratings
- Skellam model support
- Interaction terms
- Other optimizers, e.g. momentum
- Extend plotting support, e.g. plotly
- Support for handling correlation in scores
- Explore any ways we can approximate standard errors for the ratings
:blue_book: References
- Elo rating system: https://en.wikipedia.org/wiki/Elo_rating_system
- Elo rating system as logistic regression with stochastic gradient descent: https://stmorse.github.io/journal/Elo.html
- Elo rating system for NFL predictions: https://fivethirtyeight.com/methodology/how-our-nfl-predictions-work/
- Elo rating system based on Poisson regression: https://github.com/octonion/puzzles/blob/master/elo/poisson.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file elo_grad-0.4.1.tar.gz
.
File metadata
- Download URL: elo_grad-0.4.1.tar.gz
- Upload date:
- Size: 689.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.4.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8832afdd1f47e828ca020f9524a55c12c19c9dc43017ebc47ff22c259c3b4f30 |
|
MD5 | 84aabba238dfd6f917896fef5455bc51 |
|
BLAKE2b-256 | 7fe3d54379dc85e7c73ab670bb23e245f261a52b8d2683867667c8ba73f7d770 |
File details
Details for the file elo_grad-0.4.1-py3-none-any.whl
.
File metadata
- Download URL: elo_grad-0.4.1-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.4.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1245b4cfc7c6b649798101cdb05360a24546d96f729a246d5cd7eb20fd1a3c8d |
|
MD5 | 4eb94cc5650749959f6f30ed6ccb273e |
|
BLAKE2b-256 | 59f2284cfe9b93a40d30ce1a25411a36c3ba30179dff7009c66ab1e9f18616ba |