This is the fitted logistic-regression model from Churn Signal, exported to
JavaScript with its exact preprocessing parameters. Change an account, test a contact
policy, or score a CSV — no login and no server round trip.
Exported from models/churn_model.joblib · threshold 0.583 ·
holdout ROC-AUC 0.846
Holdout snapshot
Model live
492of 1,409 flaggedat the 0.583 outreach threshold
Alert rate34.9%
Churn recall72.2%
Precision54.9%
Churners caught270 / 374
Threshold metrics are replayed from the saved 1,409-row holdout evaluation.
The scorer itself runs locally from exported coefficients.
01 · Single-account workbench
Change the facts. Watch the risk move.
Every input updates the score immediately. The model uses 22 engineered features,
including contract, service mix, spend, and tenure. The result is a prioritisation signal,
not a causal verdict.
02 · Decision policy
Move the threshold. See who pays for it.
A churn score becomes a campaign only after choosing a contact policy. The slider replays
the saved holdout predictions; it does not refit the model.
Outreach threshold
Customers at or above this score are flagged for retention outreach.
0.583
selected policy
0.100.300.500.700.90
The selected policy maximizes F1 on out-of-fold training predictions, then
is evaluated once on the holdout set.
Holdout trade-off
PrecisionRecall
Precision is the share of contacted customers who churned.
Recall is the share of churners who were contacted. Higher thresholds
protect outreach capacity but miss more churners.
Contacts492
34.9% alert rate
Precision54.9%
270 of 492 contacted
Recall72.2%
270 of 374 churners
F10.624
104 churners missed
Annual revenue at risk$354.3k
expected among flagged accounts
Holdout confusion matrix
True negative813
False positive222
False negative104
True positive270
At 0.583, 270 of 374 churners are contacted while 222 retained customers
are also contacted. That is a deliberate retention trade-off, not an accuracy claim.
03 · Batch scoring
Work a list, not a demo.
Upload the raw Telco schema, validate every row in the browser, and download a ranked
campaign file. Files are processed in memory on this device.
Score a customer CSV
Required columns are the 19 raw feature columns; customerID is optional and
Churn is ignored if present. Missing IDs are generated, duplicate IDs are rejected,
and blank TotalCharges is filled from tenure × monthly charges.
No file loaded. Download the template or load the sample list to try it.
The downloaded file is ranked by churn probability and includes risk tier, outreach flag, revenue at risk, and derived features.
Rows scored—
Flagged—
Critical tier—
Annual revenue at risk—
Customer
Churn prob.
Decision
Risk tier
Tenure
Contract
Internet
Monthly
Annual at risk
Ranked by churn probability. Preview shows the first 25 accounts.Download includes all 28 scoring and account columns.
04 · What this is
The same model, not a lookalike.
The browser scorer is a deployment surface for the trained pipeline, not a new model and
not a mock-up. The native Streamlit workbench remains the full reference implementation.
01
Exported coefficients
The logistic-regression intercept, one-hot coefficients, imputer medians, and scaler
parameters come directly from models/churn_model.joblib.
A Python export script regenerates the browser data so the static page cannot drift silently.
02
Identical preprocessing
The browser derives the same AvgMonthlySpend, ServiceCount, and
IsNewCustomer fields, then applies median imputation, standard scaling, and
unknown-category handling.
Example profiles are checked against the Python pipeline's probabilities.
03
Honest evaluation
The threshold lab replays saved holdout predictions from the original evaluation split.
It does not tune on the holdout set or claim production readiness.
Use the model card and deployment notes before applying scores to real customers.
Model:Logistic regressionThreshold:0.583Holdout ROC-AUC:0.846Data: public IBM Telco sampleRuntime: client-side JavaScript