A warehouse, a model, and a mail list — built so the people scoring it and the people sending it are looking at the same thing.
| File | Source | Size | Status | By | When | |
|---|---|---|---|---|---|---|
| fetching… | ||||||
fetching…
Upload a CSV or pick one already in the warehouse, choose a model, and queue scoring. After preview, the smart-mapping panel lets you confirm or adjust how each source column maps to model features.
Pull every customer in the warehouse that hasn’t been mailed in the last N days, score against the champion model, and rank them. New scoring run shows up in “Last five” below. Then build a curated list from it as usual — DNM, draw-ledger, and election suppression all still apply.
| Run | Model | File | Records | Scored at | Status | |
|---|---|---|---|---|---|---|
| fetching… | ||||||
Batches you’ve built from scoring runs. Click Download to grab the CSV again — the file stays on disk until manually purged. Status reflects whether the batch was marked as mailed (suppresses those customers from future warehouse scores).
| List | Name | Source run | Records | Built | Status | |
|---|---|---|---|---|---|---|
| fetching… | ||||||
All trained models in the registry. Champion is the one currently serving new scoring requests. Click Report to open the per-model training report (AUC curves, decile lift, feature importance).
| Model | Version | Product | Trained | AUC-ROC | AUC-PR | KS | Records | Status |
|---|
Engineered features the scoring pipeline computes at run time when a vendor file doesn’t supply them directly.
Three flavors: expression (pandas formula), aggregate (groupby from a DB table),
lookup (key-based join against a reference table). Inputs go through the alias dictionary,
so an input named customer_id resolves from any vendor column that maps to it.
| Feature | Type | Formula | Inputs | Status | |
|---|---|---|---|---|---|
| loading… | |||||
| Decile | Records | Est. response | Revenue / piece | Profit / piece | Decision |
|---|---|---|---|---|---|
| no calculation yet | |||||
Draws from your scoring runs become curated mail lists. Build one, optionally route through approval, download the CSV for your mail vendor, then mark it exported.
| Name | Source | Records | Cost / Rev | Projected profit | Status | Created | |
|---|---|---|---|---|---|---|---|
| fetching… | |||||||
Per-state suppression status across your planning horizon. Red = inside an election suppression window. Sand = 6–10 weeks pre-election (peak power). Teal = 1–3 weeks post-election recovery. Grey = clean. Dots mark elections; vertical bars mark the federal general. Pick a target drop date to overlay it.
Uploaded addresses are normalized (USPS-style) and matched against marketing list pulls by
(address_norm, zip5). Duplicates are skipped automatically.
| Normalized address | ZIP | Original | Source file | Uploaded |
|---|
KMeans on standardized features. Claude names each cluster from its centroid and z-deviations. Works best on a labeled file (with a RESPONDERS column) so cohorts get a real response rate.
| Username | Role | Status | Last login | Created |
|---|
Tokens for scripts, pipelines, and external tools to push and pull from the platform.
Use as Authorization: Bearer sndp_… in your requests.
Permissions inherit from the creating user’s role. Plaintext is shown only once at creation — store it somewhere safe.
| Name | Key | Created | Last used | Status |
|---|
| ID | Type | Status | Created | Updated |
|---|---|---|---|---|
| fetching… | ||||
| When | Who | Action | Outcome | Resource | IP |
|---|---|---|---|---|---|
| fetching… (admin role required) | |||||
Pulls the top N customers by calibrated score, applies mail-history suppression (defense in depth),
writes a download-ready CSV, and — if checked — marks them as mailed in ml.mail_history
so future warehouse scores exclude them.