Releases: p00ya/climbing_ratings
Climbing Ratings 4.2.3
Climbing Ratings 4.2.2
Changes since 4.2.1
climbing_ratings Python package
- reduce running time by ~60% (i.e. a 2.7x speed-up) by Cythonizing more code
Climbing Ratings 4.2.1
Changes since 4.2.0
climbing_ratings Python package
- 35% performance improvement when running without styles
- Minimum Python version increased to 3.7; 3.9 is recommended
- Add PEP 484 type annotations and validate with mypy
climbr R package
- Update dependencies (dplyr, Roxygen2)
- Improved band plotting in PlotProgression
Climbing Ratings 4.2.0
Changes since 4.1.0
climbing_ratings Python package
- The
02-run_estimation.py
script is deprecated, use the module script withpython3 -m climbing_ratings
instead - The script handles divergent models better, by writing the best model instead of the last model, and printing a warning
- Better model output with default flags. Scale the maximum number of iterations with the input, and use default hyperparameters that work better with real world data. This isn't a substitute for experimentally tuning these parameters, but it will give better results "out of the box".
- Make the script quiet by default, instead of printing the log-likelihood to stdout every 8 iterations. Using the
--progress
flag will print the iteration and log-likelihood in a CSV format.
climbr R package
No changes.
Climbing Ratings 4.1.0
Changes since 4.0.0:
Estimation script compatibility
The run_estimation
script now has some backwards-compatibility, allowing it to read CSV files produced with version 3 (i.e., without 'styles' and style-pages). This will also provide some forward-compatibility for new columns in future versions.
climbing_ratings Python package
Some minor tweaks were made to the bradley_terry Cython module to improve the precision of the WHR estimate. Credits to Kwan Goddard-Lee for suggesting an alternate form of the logistic formula, which should have improved stability.
climbr R package
No changes of consequence were made to the R package.
Climbing Ratings 4.0.0
Changes since 3.0.1:
Styles and style-pages
Support for ascent styles was added, which fits a "relative" climber rating for each style that can change over time, relative to a base style. For example, this can be used to model the difference between a climber's trad and sports rating. It could also be used to estimate the effect of different tick types on ascent success, on a per-climber basis.
The inputs to the estimation script have changed as a result; there is an additional style_page
column in ascents.csv
, and a completely new file style_pages.csv
. The estimation script produces a new file style_page_ratings.csv
with estimated ratings. The model has two additional hyperparameters: style prior variance (similar to the climber prior variance) and the style Wiener variance (similar to the existing Wiener variance for climbers).
To emulate the previous behaviour of no styles, set the style_page
field to -1
for all ascents, and create style_pages.csv
with just the header row (or make the equivalent calls via the Python API).
Known issues with styles:
- The post-estimation analysis functions have not been updated to take styles into account.
- Experimentation to measure the performance of this more complex model has been quite limited.
Python library API
The public interface to the Python library (through climbing_ratings.WholeHistoryRating
) has changed. Rather than passing in lists, pass in AscentsTable
and PagesTable
types. The computation of "slices" is now encapsulated within the climbing_ratings
package, too, so it's sufficient to pass in the normalized tables. The page ratings are now encapsulated in the PageRatingsTable
type.
Extended Precision Calculations
Internally, calculations involving the exponentiated Bradley-Terry terms now use long double
instead of double
. This improves numerical stability, especially with larger prior variances and more extreme ratings. This change should not break anything (other than changing estimates). However, it makes the estimation slower by 10-25%, and can be expected to consume 25% more memory.
Timestamps
Absolute timestamps can be passed to the estimation library, rather than the data preparation logic calculating relative timestamps. This makes it easier to interpret the CSV files without the original data.
theCrag Data files
The API calls and resulting JSON output files have changed structure. The code that parses the JSON is not backwards-compatible with JSON files downloaded with previous versions.
Pitches and styles are extracted from the JSON. Pitches are extracted from logbook exports using a heuristic.
RDS files
To make backwards-compatibility easier for future releases, the data preparation scripts now write RDS files containing the raw and normalized tables. This also has the benefit of allowing post-estimation analysis to merge the estimation results and normalized tables without having to reprocess the original ascents data (which can be very slow for JSON).
Climbing Ratings 3.0.1
Changes since 3.0.0:
- the performance of the
climbing_ratings
Python package has been improved by 20-30% through cythonization of some hot functions.
There have been no changes to the climbr
R package.
Climbing Ratings 3.0.0
The helper functions used for data preparation and analysis have been moved to the climbr
R package. They're available by running devtools::load_all("climbr")
, instead of source("00-data_preparation_functions.R")
etc.
This should mostly be transparent to users (only minor changes in the way the scripts are invoked) but represents a large enough refactor to warrant a major version bump.
Climbing Ratings 2.0.1
Changes since 2.0.0:
- Improved climber progression chart with correctly interpolated variance
Climbing Ratings 2.0.0
Backwards-incompatible changes since 1.2.0:
- Use a different request to fetch JSON ascent data from theCrag's API.
data_prep_json.R
will no longer process JSON ascents captured by the old code. - Replace the "gap" column in pages.csv with "timestamp".
run_estimation.py
will no longer process pages.csv files generated by the old code, and callers of the WholeHistoryRating constructor must use timestamps instead of time deltas. - Replace the "gamma" columns in routes.csv, pages.csv, page_ratings.csv and route_ratings.csv with a natural "rating" column. The estimation and post-estimation scripts will no longer process files generated with the old code.
- Add a "cov" column to page_ratings.csv.
Other changes since 1.2.0:
- Various changes to avoid loss of precision in the Python package, the most significant of which was using natural ratings instead of gamma ratings where possible. These changes noticeably improve the estimates, in particular, it remedies the biased relationship between Bradley-Terry residuals and ratings estimates.
- Support estimating pitches of a multi-pitch route independently of the full route; pitch 2 of a route with ID "1337" will generate a new route with ID "1337P2".
- Improve tests for top-level scripts.