Track 2 telco template: customer-impact swap (revenue × churn) + reviewer-feedback alignment#79
Open
cafzal wants to merge 2 commits into
Open
Track 2 telco template: customer-impact swap (revenue × churn) + reviewer-feedback alignment#79cafzal wants to merge 2 commits into
cafzal wants to merge 2 commits into
Conversation
Replaces PageRank-as-headline with revenue × churn customer-impact weighting on weighted_impact, keeping PageRank exposed alongside as a secondary network-effect signal (weighted_pagerank). Stage 4 objective unchanged — reads weighted_impact by name; only the measure underneath shifted. Subscriber concept gains churn_risk_score, segment, status, and a precomputed customer_value property (LTV × (1 + churn_risk_score)). weighted_impact and weighted_pagerank aggregations filter to STATUS == "ACTIVE" subscribers. Per-tower selection rationale: each selected tower now carries a rationale tag noting which upstream signal(s) drove inclusion (operational / advisory/predicted / high-value) — answers the "...and why?" tail of the operator framing. Reviewer-feedback alignment in README + runbook: "Demo scope and caveats" callout (synthetic data, customer-impact scope, enterprise concentration ~87% of customer-value, deferred constraints); sharpened GNN-vs-SQL claim (SQL can do the joins; the GNN learns multi-hop feature interactions); notional source-system mapping (OSS/NMS/CRM/vendor portals); Stage 3 rewrite; Customize section updated for formula tuning. Out of scope for this PR (separate Track 2 PRs): SLA tier / emergency-service criticality, strategic-corridor weighting, backhaul / F1 (gated on Q4 spike), full G explainability (RestorePlanLine + verbalizer). Design doc: rai-summit-demo-2026/designs/summit-demo-evolution-plan.md (workstream C-substance, G-partial, B, D, H-lite).
|
The docs preview for this pull request has been deployed to Vercel!
|
4d715c3 to
2c5b584
Compare
…book polish + script cleanup
README rewritten to match sample-template structure (Sample data + Model overview sections inserted between Template structure and How it works; Customize grouped under Use your own data / Tune parameters / Extend the model / Scale up; "What you'll build" reframed as outcomes; tiny Quickstart output; GNN spelled out on first use). Reasoner overview / Demo scope and caveats / Source-system mapping folded into canonical sections (Model overview / Sample data / Troubleshooting).
Runbook: sequential-cascade preface added explaining prompts run in order in a single agent session; /rai-* skill names now land under each STAGE label in the chain ASCII; Section 6 (graph) prompt reworked into question shape and anchors PageRank by structural test ("importance flows along incoming directed call edges") rather than naming the algorithm; Section 8 (interpretation) prompt reworded from imperative ("Summarize the plan") to question form.
Script: drop the hardcoded MIP_SOLVER constant — engine-configured solver picks up by default with the gurobi-failure fallback to HiGHS retained. Remove the SQL-vs-GNN comparison stdout block and two stale SQL-vs-GNN comments from Stage 1 (not the template's job to defend a reasoning approach). GNN recall metrics retained.
v1/README.md regenerated from the telco frontmatter description. No behavioral changes to model logic or numerics.
2c5b584 to
18201c3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces PageRank-as-headline on
CellTower.weighted_impactwith a customer-impact weighting —Subscriber.customer_value = LTV × (1 + churn_risk_score)summed acrossSTATUS == "ACTIVE"callers routed through each tower — keeping PageRank exposed alongside asweighted_pagerankfor the secondary network-effect view. Stage 4's MIP objective is unchanged (still readsweighted_impactby name); only the measure underneath shifted.Per-tower selection rationale added: every selected upgrade carries an
operational/advisory/predicted/high-valuetag answering the "…and why?" tail of an operator's framing question.Aligns the template README + runbook with reviewer feedback on the Summit demo.
Why
The previous
weighted_impact(sum of caller PageRank influence) answers a network-effects question, not the prioritization question a telco operator actually asks: "how much revenue / what SLA exposure sits behind this tower?" Reviewer feedback specifically flagged PageRank as missing the mark for a telco operator audience. Revenue × churn answers the operator question directly while keeping the graph reasoner's role intact.Changes
Make the prioritization measure operator-credible
CellTower.weighted_impactnow sumsSubscriber.customer_value = LTV × (1 + churn_risk_score)over the ACTIVE callers routed through each tower — "how much revenue, weighted by churn risk, sits behind this tower?" The previous PageRank influence sum is retained asCellTower.weighted_pagerankfor the secondary network-effect view. Stage 4's objective consumesweighted_impactby name; only the underlying measure shifted.Subscribergainschurn_risk_score,segment,status, and a precomputedcustomer_valueSTATUS == "ACTIVE"(excludes 24.5% suspended subs)weighted_pagerankis a sibling property; PageRank stays computed by the graph reasonerExplain why each tower was picked
Every selected upgrade carries a rationale tag (
operational/advisory/predicted/high-value) noting which upstream signal(s) drove inclusion, plus a rationale tally alongside the plan. Answers the "…and why?" an operator implicitly asks of the selected set.Frame the demo honestly
README gains a Demo scope and caveats callout — synthetic-data shape, customer-impact scope (revenue + churn; SLA / strategic-corridor weighting deferred), enterprise concentration (~87% of customer-value from 50 ENT subs — realistic, with tuning knobs called out), and demo-vs-product framing. A notional source-system mapping table follows — OSS/NEM, EMS, NMS, CRM, mediation, vendor portals — typical operator integration sources. Runbook carries a parallel heads-up.
Latent bug surfaced by the swap
Binding-detection threshold lowered from 0.999 → 0.995. PageRank-era runs spent 99.96% of budget (cleared 0.999); customer-impact-weighted runs sit closer to 99.85% — still clearly budget-binding but was misreported as
binding=none. New threshold handles both regimes.Verified
Ran end-to-end against a real Snowflake-backed engine. GNN trained, MIP solved, 4 stages executed cleanly:
vs. earlier PageRank-weighted runs (~36 towers, 207 Gbps, 17/15/4 tier mix, 194 install-weeks near-binding): the customer-value-weighted optimizer concentrates spend on fewer strategic towers with more GOLD share; install-weeks slack instead of near-binding. Top-10 subs by
customer_valuecame out allENTERPRISE_PREMIUM($597K–$881K each) — confirms the enterprise-concentration caveat at runtime.ruff checkclean.py_compileclean.dev-templates-reviewpost-change pass run; findings addressed in this PR (apologetic GNN-vs-SQL prose removed from README, runbook Section 6 response-density trimmed, chain-ASCII numbers refreshed, stage-number references in Section 7 prompt swapped for property names).Out of scope (separate PRs)
SLA_TIER/is_emergency_serviceCSV fieldsRestorePlanLineconcept + Cortex agentdev-templates-reviewreclassified it as skill content, not customer-facing template README. Should land in therai-predictive-modelingskill / agent dialogue instead.