Reimplement the honesty option (held-out leaf re-estimation) on the kernel Tree.
Depends on Issue 1 (scaffold). Issue 3b's IDDP path depends on this landing.
Scope
- Split the training data into a build split and an estimation split (
estimation_sample_size, default 0.5).
- After the tree is grown on the build split, do a post-build pass re-estimating each leaf's per-group P(Y=1) on the estimation split — replacing the legacy
honestApproach / fillTree — using Tree.apply to route estimation rows to leaves and rewrite each node's value.
- Respect
honesty=False (default) as a no-op.
Verify
- Honesty parity vs
UpliftTreeClassifier(honesty=True, ...) on a fixed seed.
- IDDP path (which forces
honesty=True) works end-to-end.
Reusable templates
- Legacy:
uplift.pyx honestApproach / fillTree (~615–883).
- Leaf routing: kernel
Tree.apply.
Part of #945.
Reimplement the honesty option (held-out leaf re-estimation) on the kernel
Tree.Depends on Issue 1 (scaffold). Issue 3b's IDDP path depends on this landing.
Scope
estimation_sample_size, default 0.5).honestApproach/fillTree— usingTree.applyto route estimation rows to leaves and rewrite each node'svalue.honesty=False(default) as a no-op.Verify
UpliftTreeClassifier(honesty=True, ...)on a fixed seed.honesty=True) works end-to-end.Reusable templates
uplift.pyxhonestApproach/fillTree(~615–883).Tree.apply.Part of #945.