← Back to the full chapter
Lesson

3. Use a model ladder that matches the available evidence

Separate the risk of leaving from the effect of trying to retain a customer.

6 min readApplied extensionUpdated
Read source ↗

Model-selection decision tree

Use the prediction tree to choose a risk formulation, then the action tree if the workflow will recommend a retention intervention. These stages compose: an R1 classifier or R2 survival model can supply risk for triage alongside an A1 action-effect model. Risk alone does not show who an offer will save, and causal modelling does not need a separately trained risk classifier.

1. Choose the prediction formulation

“Usable” means you can reconstruct eligibility, feature availability and outcome observation at a real decision time. Incomplete follow-up is usable for survival only when event or censoring times and the observation limit are recorded. A missing date is not a censored duration.

flowchart TB accTitle: Choose a churn prediction formulation accDescr: Repair missing dates or outcomes; use mature fixed-horizon classification, or survival when recorded censoring or event timing matters. D{"Usable dates<br/>and outcomes?"} D -->|No| R0["R0<br/>Repair data"] D -->|Yes| Q{"Censoring or<br/>event timing?"} Q -->|No| R1["R1<br/>Classifier"] Q -->|Yes| R2["R2<br/>Survival"] classDef data fill:#EFF6FF,stroke:#3973AC,color:#17324D,stroke-width:1.5px; classDef model fill:#EFF2FD,stroke:#596FC2,color:#17324D,stroke-width:1.5px; classDef decision fill:#FFF5DF,stroke:#A8751A,color:#17324D,stroke-width:1.5px; class D,Q decision; class R0 data; class R1,R2 model;
Repair missing dates or outcomes; use mature fixed-horizon classification, or survival when recorded censoring or event timing matters.
Diagram source
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Arial, sans-serif","fontSize":"16px","textColor":"#17324D","primaryColor":"#F5F7FA","primaryTextColor":"#17324D","primaryBorderColor":"#8796A8","lineColor":"#718096","secondaryColor":"#EFF6FF","tertiaryColor":"#E9F6F2","clusterBkg":"#F8FAFC","clusterBorder":"#D6DEE8","edgeLabelBackground":"#FFFFFF"},"flowchart":{"htmlLabels":true,"nodeSpacing":18,"rankSpacing":28,"curve":"linear","padding":10,"subGraphTitleMargin":{"top":8,"bottom":12}}}}%%
flowchart TB
    accTitle: Choose a churn prediction formulation
    accDescr: Repair missing dates or outcomes; use mature fixed-horizon classification, or survival when recorded censoring or event timing matters.
    D{"Usable dates<br/>and outcomes?"}
    D -->|No| R0["R0<br/>Repair data"]
    D -->|Yes| Q{"Censoring or<br/>event timing?"}
    Q -->|No| R1["R1<br/>Classifier"]
    Q -->|Yes| R2["R2<br/>Survival"]

    classDef data fill:#EFF6FF,stroke:#3973AC,color:#17324D,stroke-width:1.5px;
    classDef model fill:#EFF2FD,stroke:#596FC2,color:#17324D,stroke-width:1.5px;
    classDef decision fill:#FFF5DF,stroke:#A8751A,color:#17324D,stroke-width:1.5px;
    class D,Q decision;
    class R0 data;
    class R1,R2 model;

2. Add the retention-action stage

Use this second tree to decide whether to contact a customer, or which offer to deliver. Action effects need a randomised comparison, or a defensible identified design with its assumptions and overlap checked. A contact-response history chosen by the old policy is not enough on its own.

flowchart TB accTitle: Add evidence for a retention action accDescr: Without identified action effects, use risk for triage and collect a randomised pilot; with valid evidence, evaluate uplift or doubly robust action models. E{"Action effects<br/>identified?"} E -->|No| A0["A0<br/>Triage + pilot"] E -->|Yes| A1["A1<br/>Uplift / DR"] classDef model fill:#EFF2FD,stroke:#596FC2,color:#17324D,stroke-width:1.5px; classDef decision fill:#FFF5DF,stroke:#A8751A,color:#17324D,stroke-width:1.5px; classDef execution fill:#E9F6F2,stroke:#23866E,color:#17324D,stroke-width:1.5px; class E decision; class A0 execution; class A1 model;
Without identified action effects, use risk for triage and collect a randomised pilot; with valid evidence, evaluate uplift or doubly robust action models.
Diagram source
%%{init: {"theme":"base","themeVariables":{"fontFamily":"Arial, sans-serif","fontSize":"16px","textColor":"#17324D","primaryColor":"#F5F7FA","primaryTextColor":"#17324D","primaryBorderColor":"#8796A8","lineColor":"#718096","secondaryColor":"#EFF6FF","tertiaryColor":"#E9F6F2","clusterBkg":"#F8FAFC","clusterBorder":"#D6DEE8","edgeLabelBackground":"#FFFFFF"},"flowchart":{"htmlLabels":true,"nodeSpacing":18,"rankSpacing":28,"curve":"linear","padding":10,"subGraphTitleMargin":{"top":8,"bottom":12}}}}%%
flowchart TB
    accTitle: Add evidence for a retention action
    accDescr: Without identified action effects, use risk for triage and collect a randomised pilot; with valid evidence, evaluate uplift or doubly robust action models.
    E{"Action effects<br/>identified?"}
    E -->|No| A0["A0<br/>Triage + pilot"]
    E -->|Yes| A1["A1<br/>Uplift / DR"]

    classDef model fill:#EFF2FD,stroke:#596FC2,color:#17324D,stroke-width:1.5px;
    classDef decision fill:#FFF5DF,stroke:#A8751A,color:#17324D,stroke-width:1.5px;
    classDef execution fill:#E9F6F2,stroke:#23866E,color:#17324D,stroke-width:1.5px;
    class E decision;
    class A0 execution;
    class A1 model;

Read each leaf as a starting recommendation with an evidence gate, not an automatic release.

Key and recommended approachWhy this pathMinimum data and evidencePromotion check
R0 — Repair data; benchmark only if labels are documented. Data checks · Dataset limitsMissing dates or observation limits prevent a defensible future-cohort claim.Recover decision/availability timestamps and matured labels or event/censoring records. A static labelled table supports a predictive exercise only.Reconstruct historical eligibility and feature state before R1/R2. Never invent scoring dates or survival durations.
R1 — Logistic regression, then calibrated CatBoost or LightGBM. Classifier protocolA cheap baseline tests whether nonlinear tabular modelling earns its complexity.Dated snapshots, uniformly matured horizon labels, natural validation prevalence, separate later calibration/policy cohorts and a future holdout.Improve capture/precision at capacity and useful probability calibration within serving cost; freeze the release before the final test.
R2 — Kaplan–Meier and penalised Cox, then survival forest or boosting; Aalen–Johansen for competing causes. Survival protocolPreserve partial follow-up and estimate time-dependent risk for the defined event.Defined origin, event/cause codes, durations, complete-observation watermark, supported horizons and defensible censoring assumptions.Check model assumptions and censor-aware horizon calibration; use metrics appropriate to the event definition on future cohorts.
A0 — Risk triage and a randomised pilot. Trial designHigh risk does not identify a saveable customer.Valid risk evidence for triage; a pilot plan with eligible accounts, no-contact control, assignment/delivery logs, outcomes and action costs.Collect mature trial outcomes and independent policy-value evidence before recommending learned retention targeting.
A1 — Arm-level effects, then a T-learner; compare cross-fitted DR when justified. Action-model protocolChoose by incremental churn reduction and net contribution, including no contact.Randomised or explicitly identified treatment/control data, assignment probabilities or justified propensities, overlap, pretreatment covariates, mature outcomes and costs.Evaluate the frozen policy independently; require credible incremental value, uncertainty and guardrails, then a controlled rollout.

Model ladder

Need and dataBaselineSuggested next modelReason and qualification
Operational triage with a complete fixed-horizon labelRecent-usage or renewal rule; constant prevalence predictorRegularised logistic regressionCheap, inspectable baseline; add sensible nonlinear terms if needed
Mixed tabular customer data with nonlinear interactionsLogistic regressionCatBoost classifierUseful categorical handling; compare it on future cohorts and keep it only if the gain matters
Larger tabular workloads or an existing LightGBM stackLogistic regressionLightGBM classifier; XGBoost is a valid challengerMeasure training memory, scoring cost and operational gain; the library name does not establish superiority
Variable follow-up, censoring, or several time horizonsKaplan-Meier curve; penalised Cox modelRandom survival forest or suitable survival boostingModel time to event and censoring rather than treating incomplete follow-up as no churn
Which retention action creates value? Randomised campaign dataNo incremental contact and current policySimple uplift learner, then a doubly robust learner when justifiedEstimate action effects; risk-only models cannot identify them

Fit and calibrate the classifier

For the first classifier, start with unweighted log loss and a small tuning budget. Keep class weighting only if it improves the operational tradeoff. Tune tree depth or leaves, minimum leaf size, learning rate, regularisation and the number of trees on earlier validation cohorts. Run early stopping there too, not on the final test. Apply the same feature availability rules to every challenger. Sequence models are an extra experiment, for when event histories hold information your aggregates miss and you have enough data to validate the added complexity.

For smaller tables, you can compare a released tabular foundation model using the Chapter 3 protocol. Report calibration and contact-capacity performance on the same future cohort, including sparse-history customers. Use a bounded tuning and inference budget. A leaderboard average does not decide this queue's value.

Handle imbalance inside the training process. Avoid SMOTE or undersampling before splitting. If you test resampling, apply it only inside each training fold. Keep the natural class balance in validation, calibration and test data. This avoids both leakage and evaluation on an invented prevalence. imbalanced-learn's resampling pitfalls.

Class weighting and sampling can change probability estimates even when ranking improves. LightGBM warns that is_unbalance and scale_pos_weight can give poor individual class-probability estimates. Use one or the other, not both together. LightGBM objective parameters.

After choosing and freezing the classifier, fit a sigmoid calibrator on a later matured cohort that the classifier did not train on. Isotonic calibration is a challenger when you have enough examples for a flexible fit. Assess reliability plots, log loss and Brier score on the untouched final cohort. A Brier score mixes calibration and discrimination, so inspect the reliability plot separately. A decimal from the API is not a probability until you check its calibration. Calibrators need out-of-sample predictions, and refitting the classifier afterwards can break the fitted mapping. scikit-learn calibration guide.

Something unclear or out of date? Suggest a correction ↗

Find your next idea

Loading local search…

Search is built from this edition. No account needed.