TL;DR in 60 seconds
If your churn prediction model posts an AUC of 0.92 and the CFO sees no savings, the model is not wired to action. It is the most common pathology of retention projects in LATAM, and the reason 10 of the 14 pilots I audited in 2024–2025 did not return a single dollar.
- LATAM telecom: monthly churn of 2.5–4.5% (27–43% annual). Retail banking: 8–14% annual. B2C SaaS: 5–8% monthly.
- A churn prediction model pays for itself ONLY when it is connected to a retention playbook. Model without segmented actions = academic exercise.
- Base stack 2026: LightGBM or XGBoost for classification, plus survival analysis (Cox PH, DeepSurv, XGBSE) for time-to-event. Logistic regression is still a living baseline.
- LATAM class imbalance (churn rate of 3–8%) is not fixed with SMOTE. Tune
scale_pos_weightand threshold against the business metric. - The mistakes that cost the most: data leakage from post-churn features, no A/B test on interventions, identity confusion across CPF, RUC and CURP, survivorship bias in the extracts.
- Production stack: feature store (Feast, Tecton), orchestration (Airflow, Dagster), serving (FastAPI, Seldon), drift monitoring (Evidently, WhyLabs).
Why LATAM churn is its own case
In 2024 I pulled the behavioral logs of a fintech in Bogotá (NDA, name reserved until 2028). A classic binary churn model returned AUC 0.89. Marketing trusted it, ran a campaign and added 0.4 percentage points of retention next quarter. Statistically, noise.
The model was not the problem. The problem was that 60% of the “churn” in the extract belonged to users with the same CPF but different e-mail and device_id. They were not leaving. They were reopening accounts to claim the welcome bonus. The model learned to predict a phenomenon that did not exist.
That is the portrait of churn in LATAM. The region hands you three challenges North America teams do not face:
- Identity fragmentation. One real human equals 1.3–2.1 digital identities, by my audits. CPF, RUC and CURP are not always loaded correctly, e-mails change, phone numbers get reassigned.
- Cash on delivery and an incomplete financial footprint. Up to 35% of e-commerce transactions in Mexico and Colombia settle in cash on delivery. No debit date, no recurring billing, no contractual moment to anchor the model.
- WhatsApp-first behavior. Customer service, marketing and sales live on WhatsApp. If your engagement features rest on e-mail open rate and web sessions, you are looking at 20% of real engagement.
The structural detail: Colombian operational reality, Mexican and Argentine realities differ enough that each deserves its own feature set. A single LATAM-wide model rarely beats per-country models with a shared backbone.
What changed between 2023 and 2026
Three shifts changed the practice.
Survival analysis left the academy. Up to 2022, 90% of LATAM teams used binary classification (“will churn within 30 days, yes or no”). With DeepSurv, XGBoost Survival Embeddings (XGBSE) and the maturation of lifelines, the industry moved to time-to-event models. The difference is not cosmetic: predicting when someone churns converts directly into expected CLV and intervention prioritization.
Feature stores stopped being a roadmap item. Feast (open source) and Tecton (managed) are running in production at large LATAM operators and banks. The reason is blunt: feature drift between training and serving caused 30–40% of all business failures of churn models. A feature store fixes this architecturally — training and serving read from the same source with point-in-time correctness.
LLM-driven feature engineering. Large models (Claude 4.X, GPT-5) act as feature generators on unstructured data: support call transcripts, WhatsApp message text, App Store reviews. In my audits, adding 5 to 8 LLM-derived features (sentiment, intent, frustration score) lifts AUC by 0.02 to 0.05 over a gradient boosting baseline on LATAM data. Inference cost dropped roughly 10× since 2024.
The regulatory shifts that already hit churn prediction in 2026:
- ANPD Brazil tightens the interpretation of “legitimate interest” for behavioral profiling. What used to run without opt-in now increasingly needs explicit consent.
- IFT Mexico expands telecom data portability rules: the operator must hand a user, on request, the data relevant for churn.
- SIC Colombia sharpens the rules around automated decision-making, which lands squarely on retention campaign segmentation.
If you push compliance to deployment in 2026, you are late. Privacy by design belongs in event sourcing and identity resolution, not in the marketing playbook.
How to build the churn prediction model
The base pipeline splits into six layers. Each one has its tooling choices and its pitfalls. The layer that breaks the most projects is still the first one.
#1. Identity resolution
Before talking about features, you have to build the entity “real person”. In LATAM that is non-trivial.
- Probabilistic matching on the combination CPF/RUC/CURP + phone + e-mail + device_id.
- Typical threshold: 0.85 cosine similarity on embeddings of the attributes.
- Tooling: Zingg (open source, Apache 2.0), Senzing (commercial) or a custom pipeline on dedupe.io.
- Pitfall: aggressive matching merges distinct people into a single entity. Better to keep the duplicate with
low_confidence_match=Truethan lose precision in the retention campaign.
#2. Event sourcing and feature engineering
Behavioral data must be time-indexed and immutable. The standard is event log in ClickHouse, BigQuery or Snowflake. On top sits the feature store.
Minimum feature set for retail, telecom and banking:
| Category | Examples | What it captures |
|---|---|---|
| RFM | recency_days, frequency_30d, monetary_90d | Baseline behavioral signature |
| Velocity | usage_delta_7d_vs_28d, sessions_trend_slope | Cooling-off detection |
| Support | tickets_30d, sentiment_avg_90d, escalations_90d | Frustration signal |
| Payment | failed_payments_60d, days_to_payment_avg | Financial friction |
| Engagement | nps_last_30d, app_open_streak, whatsapp_msgs_received | Vitality |
| Network | referrals_made_180d, referrals_active_180d | Embeddedness |
For LATAM there is one critical feature that most Western tutorials skip: whatsapp_msgs_received. In my audits it lands in the top 3 by SHAP importance more often than not. You get it through WhatsApp Business API webhooks, with explicit user consent (LGPD and Habeas Data again).
#3. Target definition
Half of all projects break here. What is “churn”?
- Hard churn: the user terminated the contract. Clean signal, rare in B2C SaaS.
- Soft churn: no activity for N days. N depends on the vertical: streaming N = 14, SaaS N = 60, retail N = 90.
- Revenue churn: ARR dropped more than X% (B2B).
- Time-to-event: survival until a future date.
LATAM telecom predominantly predicts hard churn 30 days before contract end. Banking goes with soft churn (90 days without transactions). B2B SaaS uses revenue churn. Picking the target is a business decision, not data science. If the data scientist picks it alone, the project fails — the target does not match the metric leadership later reports against.
#4. Model selection
There is no “best model”. There is a match between data volume, interpretability requirement and production constraints.
| Model | When to pick | Pros | Cons |
|---|---|---|---|
| Logistic regression | < 50 k observations, compliance-ready explainability | Transparent, fast | Misses non-linearities |
| Random Forest | 50 k–500 k, latency not critical | Robust to outliers | Memory-heavy |
| XGBoost / LightGBM | 100 k+, accuracy priority | SOTA on tabular | Hyperparameter-heavy |
| Survival (Cox PH, DeepSurv, XGBSE) | You need expected time-to-event | Direct answer for CLV | Harder to evaluate |
| Neural nets (TabNet, FT-Transformer) | 1 M+ observations | SOTA on massive data | Black box, GPU |
My default for LATAM mid-market (100 k to 2 M users) is LightGBM with a survival objective and post-hoc SHAP. That covers 80% of cases. XGBSE comes in when you have to slice CLV by segment with granularity.
#5. Imbalance handling
Churn lands between 3% and 8% — imbalanced classification. What does NOT work: SMOTE on tabular data returns worse AUC than a properly tuned scale_pos_weight in most cases, especially with the categorical-heavy LATAM datasets. Random undersampling throws information away.
What works: scale_pos_weight = neg/pos in XGBoost, class_weight='balanced' in sklearn, threshold tuning against the business metric (precision@k, lift@decile), focal loss for the hard cases.
#6. Evaluation and monitoring
AUC is not a business metric. Pair it with:
- Lift in the top decile (lift@10%): how many times more often you catch a churner in the top 10% versus random.
- Precision@K: what fraction of your top K predictions actually churn.
- Expected savings: how much the retention campaign saves if it targets by model.
Production monitoring: Population Stability Index (PSI) on feature distributions, performance decay alerting (AUC drops more than 0.03 in 30 days = alert), and tools like Evidently AI, WhyLabs or Arize. Without this, the model drifts silently and nobody notices until revenue screams.
When it works and when it does not
The most important section. Of the 14 audits I ran in 2024–2025, four survived. This is what separates them.
#1. Contractual business with a clear concluding event
Telecom, SaaS, insurance, fitness. You know the moment of truth (renewal date) and intervention has meaning inside a tight window. AUC between 0.82 and 0.88 translates to net churn reduction of 15% to 25% with the right campaign. The unconditional requirement: the model is wired to CRM triggers and the contact center.
#2. Transactional with predictable frequency
Food delivery, ride-hailing, subscription e-commerce. No “contract end”. Survival analysis with continuous prediction works: every day there is a hazard rate. The intervention fires when the hazard crosses a threshold. The critical piece is retraining cadence — behavior shifts from promo to promo.
#3. Discrete-purchase retail is not classical churn territory
Fashion, electronics, home goods. Purchase every six months: predicting churn at 30 days makes no physical sense. Reframe the question: not “will they leave” but “when will they come back”. The literature calls this the pseudo-churn problem. What works is CLV-decay modeling and LTV-based segmentation, not binary churn.
#4. Cash-heavy LATAM: identity first, model later
I saw a project in Lima where 78% of transactions were cash on delivery with no buyer identification. Any churn model there is fantasy. First an identity acquisition program (loyalty card, app installs), then churn prediction. Chronology matters.
#5. Under 10 k active users: overfitting wins
A logistic regression with five features will give you the same business outcome as an XGBoost with 200. I saw a case in Asunción: the ML team trained XGBoost on 3,200 users, AUC 0.94 on train, 0.61 on holdout. Classic overfit.
5 mistakes that kill the ROI
#1. Data leakage from post-churn features
The training set picks up signals that physically exist only AFTER the churn event: last_login at the scoring moment. The model “learns” to predict the past. Fix with point-in-time correct feature snapshots: Feast with time-travel, or manual snapshotting inside an Airflow DAG.
#2. Survivorship bias in historical extracts
The CRM holds active and churned customers, but not those “deleted” as duplicates or by a sloppy cleanup. If 5% of the base was removed last year, the model never sees those users and underestimates risk in their segment. Fix with an audit trail on the event log, not a current CRM snapshot.
#3. Model without a retention playbook
The most expensive LATAM mistake. The model is built, scoring works, the dashboard ticks — and no one knows what to do with the top 10% high-risk. Marketing fires a 20% discount to everyone, the contact center calls without a script, product does not push the upgrade. Without a retention playbook (segmentation × channel × offer matrix) the model is an academic exercise. 70% of the ROI comes from the quality of the intervention, not from model accuracy.
#4. A single threshold for all segments
The 0.5 cutoff on probability is the default that costs the most money. For VIPs the threshold should be 0.3 (intervene preventively, missing one is expensive); for low-value users push it to 0.7 (cheaper to let them go). Fix with cost-sensitive learning or per-segment threshold optimization.
#5. No A/B test on the interventions
Teams love to believe the campaign worked “because churn fell”. Without A/B that is correlation, not causation. The campaign might have been counterproductive (anchor effect on the discount) and churn might have dropped for seasonal reasons. Every campaign runs with a holdout group of 10% to 15%, no intervention. That is incremental measurement, and without it you do not know whether the model works.
If after twelve months your model has no controlled experiment against a holdout, the AUC you report is decoration. That is not retention, that is theater.
Anonymous case: LATAM telecom, 8 M subscribers
No name. Large mobile operator in an Andean country. 8 M active subscribers, monthly churn at 3.6% before the project.
Situation. The internal ML team built an XGBoost in 2022. AUC 0.86 in production. Marketing worked the top 10% of risk: SMS with discount. After 18 months of operation, net churn had fallen 0.3 p.p. (from 3.6% to 3.3%). The business labeled it “failed” and was about to shut it down.
What the audit found.
- Identity resolution did not work: 14% of “churn events” were CPF duplicates. The user did not leave; he switched numbers between his own contracts. The model trained on noise.
- The top 10% targeting contained 30% of hopeless cases (payment defaults, no discount holds them) and 20% of actually loyal users with a temporary dip. Effective targeting: 50%.
- Discount-only intervention. No differentiated playbook by segment.
What we did.
- Rebuilt the identity layer: device_id matching plus Zingg-based dedupe. We consolidated 89% of the duplicates.
- Migrated from binary classification to a survival LightGBM. That returned
expected_days_until_churn, a new feature for prioritization. - Built a 4-segment intervention matrix: high-value × low-tenure → personal call plus upgrade offer; high-value × high-tenure → loyalty rewards; low-value × payment-friction → installment plan; low-value × dormant → minimal touch.
- Launched a 10% holdout group and A/B tested every segment.
Result at 12 months. Net churn fell from 3.3% to 2.4% (−27%). Incremental revenue saved, CFO-signed: USD 4.2 M annually. Intervention cost: USD 0.9 M. ROI 4.7×. The key lesson: the model alone did not move the metric. The combination of identity resolution, segmentation playbook and A/B measurement did. The model is necessary, not sufficient.
The operational parallel shows up in another pillar of ours: the Estée Lauder pricing and retention case uses the same targeting matrix logic.
Checklist and next step
If you are building or auditing a churn prediction model, there are 12 items worth checking before defending the project to the board: Audit Your Churn Model. Inside is a Jupyter notebook with checks for data leakage, identity drift, survivor bias and threshold optimization. Free, by e-mail.
If you want, I will walk you through it: 30-minute audit. I review five points: identity layer, target definition, feature pipeline, evaluation framework, intervention playbook. I do not sell anything on that call.
FAQ
What is the minimum data volume to build a churn prediction model?
The practical floor is 10,000 active users and at least 6 months of event logs with no fewer than 200 churn events. Below that, overfitting dominates and a rules-based segmentation with two or three hard cuts is the better path.
How much does it cost to launch churn prediction in LATAM telecom?
Full project (identity + feature store + model + playbook + monitoring): between USD 80,000 and USD 250,000 over 6 to 9 months of team work. Model only, no identity layer: USD 25,000 to 60,000, but ROI will be marginal — same outcome as the Andean operator case above.
What AUC counts as production-ready?
AUC above 0.75 on out-of-time validation is the minimum to consider deployment. 0.85+ is a strong model. 0.95+ is a sign to check for data leakage: real LATAM segmentation rarely shows that much separability.
XGBoost, LightGBM or CatBoost?
LightGBM is my default for LATAM projects with tabular data. It trains faster and natively supports categorical features, which abound in LATAM (device_brand, payment_method, plan_code). CatBoost when data is heavily categorical. XGBoost when the codebase is already in place or you need compatibility with XGBSE for survival.
How do LGPD and Habeas Data affect the churn model?
Explicit consent is mandatory for behavioral profiling. The privacy notice must spell out the use of data for retention models and the user must have opt-out. ANPD Brazil fines cap at 2% of annual revenue up to R$ 50 M. Colombia’s SIC: fines up to 2,000 SMMLV.
Survival analysis or binary classification?
Survival if you run a continuous-time business (telecom, SaaS subscription, fitness). Binary for contractual businesses with a fixed renewal date. Never use binary for food delivery or ride-hailing: you lose momentum information and intervention timing blurs.
How often should the model be retrained?
In LATAM telecom: monthly — market velocity is high because of competitor promos and regulation. In banking: quarterly. In B2B SaaS: every six months. Automatic retrain trigger: PSI above 0.2 on the top 5 features, or AUC drop greater than 0.03 on the out-of-time holdout.
Is a feature store worth it for an SMB?
Below 50,000 users with a single model in production: probably not. Features can be materialized in BigQuery or Snowflake with point-in-time queries. Above three models sharing features, or with compliance that demands reproducibility, Feast earns its learning curve in less than 6 months.
What monitoring tooling should I use in production?
Evidently AI is a solid free entry point for PSI and data quality. WhyLabs and Arize are richer managed options with built-in alerting. The critical piece is not the tool — it is defining what counts as “model failure” and who answers the alert, before it fires.
