Write-up

Which care-analytics capability should a telco build first?

And how would you know it worked? The narrative stays here. The board, OKRs, and backlog are the parts you click.

OKR targets and scores are illustrative planning values, not achieved results.

Open the interactive board

Four unordered care demos, the score-and-sequence method, and the Now / Next / Later result

A Now / Next / Later product roadmap sequences the four earlier projects, with OKRs as goals and a value-versus-effort backlog of 17 issues (3 epics and 14 stories, #3 to #19), two sprint plans, and a pilot charter. It is part of an independent portfolio series on telecom customer analytics. The board is the click-through view of the same sheet.

Open the Now / Next / Later board

Projects in this series

Now, Next, Later

Now, Next, Later: triage and routing, NBA and churn, self-healing journeys

Three horizons across 3 columns on the sheet. Now is triage and routing. Next is NBA and churn. Later is self-healing journeys.

Now — Triage and routing

  • Strictly below 0.6 is held for review
  • emergency sets queue to senior_agent
  • Export not run. No gold accuracy

MULTI-HEAD- at 809bccd61077898849c428f37521fa198f7c7bf6 is a three-head demo (issue, sentiment, urgency). Issue confidence strictly below 0.6 is held for review. The repo publishes no gold accuracy, F1, emergency recall, or false-emergency rate. Smoke floors minEmergencyRecall 0.01 and maxFalseEmergencyRate 0.99 are harness-health thresholds, not model quality. That reading is the one written in responsible-ai-pack MODEL_CARD_MULTIHEAD.md.

care-automation-roi ships workflows/n8n_emergency_escalation.json. An emergency label sets queue to senior_agent. The workflow README says the file has not been imported or executed. active is false. Precision 0.40, recall 0.75, and prevalence 0.08 in assumptions.yaml are illustrative placeholders.

Still needs. A labelled sample, and a workflow run against a real queue. Do not quote the smoke floors as accuracy.

Show Now on the board

Next — NBA and churn

  • POST /score on 7,043 IBM rows
  • Holdout ROC-AUC 0.846001, PR-AUC 0.656070
  • Lift 2.806733. Floors 0.82, 0.63, and 2.60

telco-churn-nba-engine trains on the IBM Telco Customer Churn file, 7,043 rows, US sample. POST /score returns a churn probability, path contributions, a CLV proxy, add-on propensities, and a rule-based next action. On the published holdout the gradient-boosting churn model has ROC-AUC 0.846001, PR-AUC 0.656070, and top-decile lift 2.806733, against a dummy prior at ROC-AUC 0.500000. Those numbers are that holdout, not an operator result. Uptake scores are current add-on holding, not campaign response. The action table is a policy, not an uplift model.

responsible-ai-pack pins that repo at 21f6115931f4358ebc7cc87d9ba1f4d87fd015aa. It recomputes the same three metrics, draws TreeSHAP plots, runs Fairlearn on gender and SeniorCitizen, and fails CI under floors 0.82, 0.63, and 2.60.

Still needs. An operator extract, a refit, and a new pin. The IBM metrics stay IBM metrics.

Show Next on the board

Later — Self-healing journeys

  • 4,000 synthetic journeys, seed 20260929
  • Placeholder payback 8.47 months, year-1 ROI 0.4175
  • The closed loop is not built

omnichannel-care-analytics computes journey KPIs on a seeded synthetic log (seed 20260929, 4,000 journeys). Charts are Plotly HTML labelled SYNTHETIC. Bitext supplies the intent taxonomy. The full Kaggle Twitter corpus was not downloaded: unauthenticated requests did not return the file, and no Kaggle credentials were used. pm4py is not used. The process view is a DuckDB directly-follows table.

care-automation-roi prices containment from assumptions.yaml. Every input is an illustrative placeholder. On those placeholders the base bot scenario shows payback 8.47 months and year-1 ROI 0.4175. There is no Streamlit app. The sensitivity chart is a committed PNG, reports/charts/roi_sensitivity_tornado.png, plus an HTML twin.

What is not built: a loop that changes a live route when a digital attempt fails. Later is that loop. The four repos do not contain it.

Still needs. Replace config/synthetic.yaml and assumptions.yaml with operator measurements. The loop that changes a live route is not built.

Show Later on the board

OKRs

Illustrative targets. None of these is a result this portfolio has achieved on operator data.

Three OKRs: illustrative target beside what the demos already show

The gold note is the illustrative target. The green note is what the public demos already show.

Open the OKR view

Objective 1

A routing note a reviewer can defend without a fake accuracy number.

The illustrative target is the planning label. The second column is what the public demos already show.
Key resultIllustrative targetWhat the demos already show
KR1The routing note cites "not documented" for gold accuracy, and does not cite the smoke floors as quality.The multi-head model card already says this.
KR2An import test of the n8n file, on a non-production n8n, shows emergency to senior_agent.The file exists. It has not been run.
KR3Precision and recall leave assumptions.yaml only after a labelled sample is written down.They are still placeholders.

Objective 2

A next-best action with a gate in front of the score.

The illustrative target is the planning label. The second column is what the public demos already show.
Key resultIllustrative targetWhat the demos already show
KR1A pilot score returns churn probability, a CLV proxy, and one action from the published rule table.POST /score does this for one IBM-sample customer.
KR2CI fails if holdout ROC-AUC, PR-AUC, or top-decile lift fall below 0.82, 0.63, and 2.60.Those floors are in gates.yaml for the IBM artifact.
KR3A model card and the gender / SeniorCitizen table ship with the score before an agent sees it.The pack has both, for the IBM sample only.

Objective 3

Journey changes follow an operator log, not a synthetic clock.

The illustrative target is the planning label. The second column is what the public demos already show.
Key resultIllustrative targetWhat the demos already show
KR1Time-to-first-response, repeat contact, and digital-to-call are computed on an operator log.They are computed on the synthetic log only.
KR2Cost and containment inputs are replaced from operator sources, and the placeholder label comes off only after that swap.The label is still on every input.
KR3A failed digital attempt changes the next route in a named pilot path.No repo implements that change.

Backlog and prioritisation

Scores are illustrative planning scores for this artefact, on a 1 to 5 scale. They are not measured benefit and not hours. The quadrant is a reading aid for the backlog. The table is the score.

OKR targets and scores are illustrative planning values, not achieved results.

14 stories plotted on the value and effort scores in backlog.csv

Position is the value and effort in the table. Colour is the quadrant column. Stories that share a score share one dot.

Open the filterable backlog

Every row in backlog.csv. Scores are the integers on the sheet.
ItemIssueHorizonValueEffortQuadrantStatus
Triage and routing#3Now53Major betDemo partial
Triage quality gap#4Now51Do firstDemo exists
Abstain at 0.6#5Now41Do firstDemo exists
n8n emergency branch#6Now42Do firstExport, not run
Labelled triage sample#7Now55Major betNot started
NBA, churn, and governance#8Next53Major betDemo exists
POST /score#9Next52Do firstDemo exists
CI gates#10Next52Do firstDemo exists
Fairness table#11Next42Do firstDemo exists
Operator churn refit#12Next55Major betNot started
Self-healing journeys#13Later45Major betNot built
Synthetic journey KPIs#14Later32Do firstDemo exists
Assumption ROI#15Later32Do firstDemo exists
Operator journey swap#16Later55Major betNot started
Self-healing loop#17Later45Major betNot started
pm4py#18Later13ReconsiderDeclined
Streamlit#19No horizon23ReconsiderDeclined

Epics: #3 triage, #8 NBA and churn, #13 self-healing journeys. The full sheet is backlog.csv.

Pilot plan

Two sprint plans, with user stories and Given / When / Then criteria, live in docs/sprint-plans.md.

Sprint 1 triage stories and Sprint 2 NBA stories

Sprint 1 and Sprint 2 as written in the sprint plan. These sprints were not run.

Sprint 1 — Triage routing contract

A reader can see what the triage demo does, and what it must not be quoted as.

Out of this sprint: measuring precision and recall (#7), until a labelled sample exists.

Sprint 2 — NBA demo behind the published gates

The IBM-sample score, the rule, and the governance pack stay tied together.

Out of this sprint: the operator refit (#12).

Pilot / PoC charter template: docs/pilot-charter.md.

Lessons learned

Data and scope

Built on public and synthetic data as an independent portfolio project.

Limitations