Skip to content

0.34.0

Latest

Choose a tag to compare

@bbstats bbstats released this 26 Sep 15:42
· 2 commits to main since this release
92fa591

Update a fitted model with new rows, and sharper predictive distributions.

Update a model with new data: refresh

New labelled rows keep arriving after you train. refresh(X, y) folds them in without a full retrain: it keeps every tree the model already learned and recomputes the leaf values on the old and new rows together. Turn it on with store_training_data=True, which keeps the training rows in compact form.

model = ChimeraBoostRegressor(store_training_data=True).fit(X, y)
model.refresh(X_new, y_new)

On a 3.3-million-row regression, folding in a day of new rows took 70 seconds against 232 for a full refit, at the same accuracy. Refreshing with no new rows reproduces the model bit for bit. It works on the regressor and the binary classifier (#131, first slice); bagged models, multiclass, loss="Quantile" and random_effects=True are not supported yet.

Quantile regression: two more candidates, and all your rows

ChimeraBoostQuantileRegressor changes two defaults.

  • Five candidates, one kept. The audition adds "fixed", an ordinary squared-error model's prediction plus the quantiles of its held-out errors, and "scaled", the same centre plus a second model's predicted spread, so the width follows the data. It now beats CatBoost's MultiQuantile on 29 of the 36 Grinsztajn regression datasets (it was 27), with the biggest gains on low-noise data (pol +31%, visualizing_soil +17%).
  • Trained on all your rows. Called without an eval_set, the model used to keep the 20% it holds out for early stopping, calibration and the candidate choice out of the final model. It still makes those choices on that 20%, then retrains the winner on all rows (refit_full=True). That improves CRPS on 35 of the 36 datasets (median +0.9%).
model = ChimeraBoostQuantileRegressor().fit(X, y)
model.audition_["selected"]     # "head", "bins", "recentred", "fixed" or "scaled"
model.refit_                    # what was retrained on all rows

A quantile fit without an eval_set takes about 40% longer than in 0.33.0.

Faster, with identical predictions

  • Fits with linear leaves are faster: a 500,000-row fit went from 15.9 to 13.4 seconds, and a refresh from 5.0 to 3.6.

Behaviour changes

  • ChimeraBoostQuantileRegressor predictions change. audition=False, refit_full=False gives the single calibrated model, as 0.33.0 did with audition=False; 0.33.0's three-candidate choice has no switch.
  • Nothing else changes: other regressors and classifiers give the same predictions as 0.33.0, and refresh is opt-in.

Full notes: CHANGELOG.