Skip to content

[Tree unification 2/9] Uplift split regularization via a custom builder #947

Description

@jeongyoonlee

Add the uplift-specific split regularization that the legacy tree applies during growth, via a custom builder that subclasses the shared kernel TreeBuilder (mirroring causal/_builder.pyx).

Depends on Issue 1 (kernel-backed KL/ED/Chi tree scaffold).

Scope

  • _uplift/_builder.pyx + .pxd: DepthFirst/BestFirstUpliftTreeBuilder(TreeBuilder) mirroring causal/_builder.pyx — downcast the criterion to read per-group counts and:
    • enforce min_samples_treatment (minimum units per treatment group in each child),
    • apply the n_reg parent-shrinkage the legacy gain applies via parentNodeSummary,
    • early_stopping_eval_diff_scale (validation-set early stopping may fold in here, or split to its own issue if it doesn't fit the builder cleanly).
  • Wire the estimator to select the uplift builder instead of the stock kernel builder.

Verify

  • min_samples_treatment respected (no child with fewer than the threshold per group).
  • Parity vs legacy defaults (n_reg=100, min_samples_treatment=10) for KL/ED/Chi on a fixed seed.

Reusable templates

  • Builder subclass: causalml/inference/tree/causal/_builder.pyx + .pxd (DepthFirst/BestFirstCausalTreeBuilder add min_group_samples by downcasting the criterion).
  • Legacy regularization: uplift.pyx growDecisionTreeFrom (~1968–2394) and the n_reg shrinkage in the gain.

Part of #945.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions