Live · runs entirely in your browser

Put a churn score behind every account.

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
492 of 1,409 flagged at 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.

Customer profile

19 account inputs · updates live

Inputs stay in this tab. Nothing is uploaded or stored.

22 model features · 0.583 policy threshold

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

The selected policy maximizes F1 on out-of-fold training predictions, then is evaluated once on the holdout set.

Holdout trade-off

Precision and recall across outreach thresholds Holding out 1,409 customers, precision rises and recall falls as the threshold increases.

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.

Contacts 492 34.9% alert rate
Precision 54.9% 270 of 492 contacted
Recall 72.2% 270 of 374 churners
F1 0.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.

Expected schema
customerID (optional), gender, SeniorCitizen, Partner, Dependents, tenure, PhoneService, MultipleLines, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, StreamingMovies, Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges
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

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 regression Threshold: 0.583 Holdout ROC-AUC: 0.846 Data: public IBM Telco sample Runtime: client-side JavaScript