v0.6.6¶
Patch release landing the evaluation-governance switches for CreditModelPipeline (audit items G13/G14/G15/G16): one frozen score evaluated against multiple labels, with trustworthy bins, a consistent direction, and explicit evaluation weights. All new fields default to legacy behavior — default-config outputs are byte-identical to 0.6.5 (regression-asserted).
Multi-Label Evaluation (G13)¶
eval_target_cols— extra labels evaluated against the same frozen model scores; the effective label set is[target_col] + eval_target_cols(deduplicated). Perf tables concatenate per-label rows with atgt_namecolumn and figures are emitted per label (nativePerformanceEvaluatormulti-label support, now exposed). Thepred_{model}score is computed once per dataset and reused across labels. When unset, output shape is unchanged.- All evaluation labels are validated up front against the input data and every
extra_eval_datasetsframe.
All-Missing Score Override (G14)¶
all_missing_score_value— rows whose raw model features are ALL missing receive this score (e.g.-1). The membership test is shared withCore.scoring'sall_missing_spec_value(Pipeline/_common.all_missing_mask), so pipeline evaluation and production scoring flag identical rows — parity-tested end to end.- The rule is defined on raw features: WOE-source models map their feature set back to raw columns. Saved model metadata carries
all_missing_score_valueandall_missing_raw_features; production alignment is one call:Core.scoring(..., all_missing_spec_value=metadata_value).
Special Score Bins (G15)¶
special_score_values— sentinel scores (e.g.[-1]) get their own evaluation bin: excluded from quantile edges, reported as dedicatedspecial:<value>gains rows (ranking columns NaN), and excluded from AUC/KS/avgScore.- The weighted evaluation path gained full special-value support (previously none): special rows are split out before
rank_bins, and weighted summaries reportN_SPECIAL/N_SPECIAL_RAW. Non-special bins are numerically identical to a clean-frame run. - Combined with G14,
-1overrides flow automatically into their own special bin.
Gains Direction & Evaluation Weights (G16)¶
gains_ascending—None(default) keeps every underlying path's legacy default (summary descending, some figures ascending, weighted descending); an explicit bool threads one direction through summary/gains and the weighted path uniformly.rank_binsgained anascendingparameter (previously hard-locked to descending — bin 1 was always the high-score bucket) andTRUE_BAD_SHIFTfollows the direction.eval_weight_col—"inherit"(default) reusesweight_colas before;Noneevaluates unweighted even when training is weighted (training weights no longer leak into evaluation implicitly); any other string names the evaluation weight column. The same resolution drives lr-search/optunaeval_weight_coland backward'svalidation_weight_col.
Behavior Notes¶
- Byte-identical outputs under default configs (seeded regression assertion).
- Known limitation:
gains_ascendingdoes not yet controlevaluate_model.evaluate_performance's distribution figures (legacy fixed-signature plotting); special rows ARE pre-filtered from those figures. Slated for the default-flip release. - Announced default flips (next minor, 0.7.0):
gains_ascendingNone→True— joining the already-announcedsynthesize_missing_ootNone→False,search_eval_splitsNone→["oos"], andbackward_report_splitsNone→[].
Validation¶
- Full local pytest suite:
721 passed, 0 skipped(11 new evaluation-governance regressions;test_eval_weighted_*safety net unchanged). - Source package verification and wheel/sdist build passed (
tasks.py verify). - Documentation passed
mkdocs build --strict.