You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(ml-causal): DML sensitivity + RATE + BLP/mediate fixes + DAG viz
Cross-cutting polish wave on the machine-learning + causal-inference
module family so the package matches the 2024-2026 reporting frontier
set by DoubleML, EconML, grf, and lmtp.
New capabilities:
- sp.dml_sensitivity / DMLSensitivityResult — Chernozhukov-Cinelli-
Newey-Sharma-Syrgkanis (2022) "Long Story Short" DML-OVB sensitivity
with RV_q, RV_{q,alpha}, scenario bias bounds, benchmark covariates,
and a sensemakr-style bias-contour plot. Refs verified via NBER + arXiv.
- sp.dml_diagnostics / DMLDiagnostics — overlap, score density,
residual balance, orthogonality test in a 2x2 publication panel
matching DoubleML defaults (Bach et al. 2024 JSS).
- sp.cate_eval / CATEEvalResult — backbone-agnostic Yadlowsky 2025
RATE / AUTOC / Qini with closed-form influence-function SEs for any
CATE array (meta-learners, BCF, conformal, neural).
- sp.PolicyTreeResult — promote sp.policy_tree dict return to a rich
result class (subclass of dict for back-compat) with influence-
function SE on policy value, Graphviz-style plot_tree(), summary,
to_latex, to_excel, cite (Athey-Wager 2021).
- Causal discovery viz — every result class (LiNGAM/GES/FCI/ICP/PCMCI/
LPCMCI/DYNOTEARS) and the dict returns from sp.notears /
sp.pc_algorithm (now DAGDict) expose to_networkx / to_dot / plot /
edge_list. Module-level sp.causal_discovery.{to_networkx, to_dot,
plot_dag, edge_list, shd} work on any adjacency matrix.
- MediateSensitivityResult.plot() upgraded to publication-style ACME(rho)
with coloured fill, baseline annotation, and rho-at-zero threshold.
- OPE namespace dedup — sp.policy_learning.OPEResult is now an alias
for the canonical sp.ope.estimators.OPEResult, so isinstance works
across both entry points.
⚠️ Correctness fixes:
- forest.CausalForest.best_linear_projection rewritten to use
Semenova-Chernozhukov 2021 AIPW pseudo-outcome Gamma_i + HC1 SE.
Previous implementation regressed plug-in CATE on X with naive OLS
SEs (anti-conservative). Users should re-fit and report new HC1
numbers.
- mediation.mediate no longer silently substitutes the point estimate
for failed bootstrap replicates (which artificially shrunk SEs).
Up to 5 retries per failure; remaining failures dropped with
RuntimeWarning if >10% fail. model_info now exposes
n_boot_successful / n_boot_failed / boot_failure_rate.
Tests: 39 new (10 dtr, 7 qte, 22 ml_causal_polish), all green.
The dtr/qte additions close two zero-coverage modules flagged in the
v1.13 audit. Full ML+causal suite (307 tests) passes in 4m49s.
Citations: 4 new entries added to paper.bib, each verified
independently via NBER / arXiv / journal site:
- chernozhukov2022long (NBER WP 30302; arXiv:2112.13398)
- semenova2021debiased (Econometrics J 24(2): 264-289)
- yadlowsky2025evaluating (JASA 120(549); arXiv:2111.07966)
- bach2024doubleml (JSS 108(3))
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments