Premium card portfolio · tier migration & margin

Which card tier maximizes margin for every customer?

A reproducible migration model built on a synthetic Amex-style premium-card portfolio. It scores churn risk and expected annual margin for every tier — No-Fee through Centurion — and recommends upsell, maintain, downsell, or retention.

Live client-side scorer · logistic regression · threshold tuned out-of-fold · one-time holdout evaluation

Portfolio snapshot

Model live
25k customers synthetic premium-card portfolio
Tiers5
Features26
Holdout ROC-AUC0.689
Margin tiers scored5 per customer

The browser scorer runs exported logistic-regression coefficients client-side: no login, no server, no customer data leaves the device.

01 · What the data says

Margin hides inside the tier ladder.

A No-Fee customer with high spend may be worth more on Platinum. A Platinum customer with rising delinquency may be worth retaining on Gold. The model makes that trade-off explicit per customer.

Portfolio
25,000
synthetic premium-card customers
Tiers
5
No-Fee → Silver → Gold → Platinum → Centurion
Features
26
spend, fees, risk, engagement, demographics
Model
Logistic regression
churn propensity + tier margin

02 · The workbench

A score is not a strategy.
This is the workbench around it.

The Streamlit app turns the model into six linked surfaces: overview, single-customer tier scorer, batch migration, margin optimization, model performance, and method notes. The public browser scorer below is the same fitted model exported to JavaScript.

Live · runs in your browser

Score a customer before you read the rest.

The public scorer runs the exported logistic-regression coefficients and the same preprocessing client-side: single accounts, the holdout threshold lab, and CSV batch scoring. No login and no server. The Streamlit workbench is the full native app.

Open the live scorer
01

Score a single account

Churn probability, risk tier, recommended tier, margin lift, and migration priority update live.

02

Work a portfolio

Upload a CSV, validate rows, score every customer, and download a ranked migration list.

03

Optimize margin

Simulate fee and interest assumptions to see portfolio-level margin opportunity.

04

Method & limits

Model card, data dictionary, reproduction steps, and responsible-use notes beside the scores.

03 · Evaluation

Every number is regenerated, not hand-typed.

Logistic regression is compared against a 5-fold stratified CV. The threshold is tuned on out-of-fold training predictions, then evaluated once on a holdout set.

Holdout ROC-AUC
0.689
5,000-customer holdout · PR-AUC 0.605
Threshold
tuned
maximizes F1 on out-of-fold predictions
Policy
Margin-aware
recommends optimal tier per customer
Replayable
Holdout lab
threshold slider in the browser scorer

At the deployed 0.39 threshold: 48.7% precision · 86.7% recall · F1 0.624 · Brier 0.222. The threshold is tuned on out-of-fold predictions, not on the holdout.

Holdout ROC curve with AUC 0.689, precision-recall curve with average precision 0.605, and calibration curve with Brier score 0.222 for the Amex tier migration model.
01 / Holdout evaluation

ROC, precision-recall, and calibration for the 5,000-customer holdout. Regenerate from reports/evaluation/test_predictions.csv with python -m card.train.

04 · Method

The same model, exported.

The browser scorer is a client-side implementation of the trained pipeline, generated by python -m card.browser_export. The Streamlit workbench remains the full native reference.

Exported coefficients

The logistic-regression intercept, one-hot coefficients, imputer medians, and scaler parameters come directly from models/card_tier_model.joblib.

Margin economics

Annual margin per tier = (fee + interchange + interest) − (rewards + service + expected loss). The optimal tier maximizes risk-adjusted margin.

Honest evaluation

The threshold lab replays saved holdout predictions. It does not tune on the holdout set or claim production readiness.

05 · Limits

Where this should not be used.

Synthetic data, directional margins, no causal claims. Read the model card before any customer-facing use.

  • Synthetic data. This project uses a generated portfolio. Replace data/raw/card_portfolio.csv with real customer data before production use.
  • Directional margins. Annual margin estimates are illustrative, not exact P&L.
  • No causal claims. Recommending a tier migration does not guarantee margin improvement.
  • Fairness review required. Tier, income, credit score, and demographics should be audited before customer-facing use.
  • Not for underwriting. Do not use this model for credit decisions, pricing, or eligibility.