PR #887 – Add Rank-weighted Average Treatment Effect (RATE) Metric
Merged: Mar 2026
causalml/metrics/rate.py with three public functions — get_toc(), rate_score(), and plot_toc() — following the exact same API conventions as get_qini / qini_score / plot_qiniget_toc() computes the Targeting Operator Characteristic curve via O(n) cumulative sums; rate_score() computes the RATE scalar with AUTOC (1/q) or Qini (q) weighting; plot_toc() visualizes the TOC curvetau) and observed RCT mode (y + w); fixed normalize division-by-zero by using max(|TOC|) instead of TOC(1); added logger.warning for observed-outcome fallbacktests/test_rate.py; addressed all blocking and non-blocking review comments across two review rounds; passed black and pre-commit cleanPR #860 – Add Native NaN Support for UpliftTree and UpliftRandomForest
Merged: Mar 2026
DecisionTree node and applied it consistently during training, pruning, filling, and predictionnp.isnan() calls with np.issubdtype(..., np.number) to prevent TypeError on string/categorical columnsNone values in object-dtype columns