Skip to content

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 24 Oct 01:03
· 11 commits to main since this release
Immutable release. Only release title and notes can be modified.
7153b8a

hessboost v0.4.3

Adds calendar-aligned purged forward cross-validation folds and a Student-t distributional family (dist:student_t), plus two XGBoost-parity fixes and a substantially faster CI.

Full Changelog: v0.4.2...v0.4.3

Highlights Since v0.4.2

Cross-validation

  • New Fold::purged_forward_at(decision_at, label_end, block_starts, min_train) and its Python wrapper hessboost.folds.purged_forward_at(decision_at, label_end, block_starts, *, min_train=1) build walk-forward folds from caller-supplied block starts, so a test block can be one day, week, month or quarter instead of an equal count of distinct decision times.
  • Fold j tests rows decided in [block_starts[j], block_starts[j + 1]) (the last block runs to the end) and trains on rows decided before the block whose label_end is at or before the block start — exactly purged_forward's purge rule. Rows decided before the first start are only ever trained on; a block with no test rows or too few purged training rows is refused with a message naming the block. Folds plug into hessboost.cv(..., folds=...); purged_forward itself is unchanged.

Distributional objectives

  • objective = "dist:student_t" fits a Student-t with natural parameters (loc, scale, df) and learned degrees of freedom, so heavy-tailed targets no longer under-predict tail exceedance probabilities the way dist:normal does.
  • Fitted df is always > 1; CDF, quantile, log density and CRPS are available in closed form, and Dist::new(DistFamily::StudentT, &[loc, scale, df]) accepts any df > 0.

XGBoost parity

  • gblinear now refuses categorical features (InvalidData on feature_types, naming the dataset), matching XGBoost's "gblinear doesn't support categorical features" across training, eval sets, cross-validation, continuation and online updates. Numerically typed category codes still train as before.
  • verbosity = 0 is accepted as a parameter (hessboost writes no log output); other values are refused like other fixed settings.

CI and packaging

  • CI reuses cached builds and packages instead of rebuilding: lavapipe .debs are cached per runner image, Rust jobs use an objects cache covering all features, the uv cache key includes the uv version, fuzz/target is cached, and Python wheels, the sdist round trip and the CUDA runtime build through the compiler cache. Median wall time dropped from 591 s to 443 s, with the parity job at 124 s versus a 344 s median.

Pull Requests by Category

Features

  • feat(training): purged forward folds at given block starts (#183)
  • feat(objective): dist:student_t, a heavy-tailed distributional family (#185)

Bug Fixes

  • fix: match XGBoost on gblinear categoricals and verbosity (#184)

Misc