Skip to content

Releases: p00ya/climbing_ratings

Climbing Ratings 4.2.3

19 Aug 10:32
Compare
Choose a tag to compare

Changes since 4.2.2

climbing_ratings Python package

  • reduce running time by ~35% (i.e. a 1.7x speed-up) by using an alternative mathematical form for logistic derivatives that's faster to compute

Climbing Ratings 4.2.2

18 Aug 10:25
Compare
Choose a tag to compare

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

14 May 13:21
Compare
Choose a tag to compare

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

15 Jan 03:59
Compare
Choose a tag to compare

Changes since 4.1.0

climbing_ratings Python package

  • The 02-run_estimation.py script is deprecated, use the module script with python3 -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

31 Dec 05:29
Compare
Choose a tag to compare

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

28 Jul 10:25
Compare
Choose a tag to compare

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

10 Apr 00:16
Compare
Choose a tag to compare

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

30 Mar 03:37
Compare
Choose a tag to compare

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

25 Mar 09:41
Compare
Choose a tag to compare

Changes since 2.0.0:

  • Improved climber progression chart with correctly interpolated variance

Climbing Ratings 2.0.0

24 Mar 06:00
Compare
Choose a tag to compare

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.