Lina's Channel ROMI — Chapter 3 Worked Example
====================================================
The five-channel marketing-attribution dataset behind Lina's clustered-column failure vs the single-encoding Big Idea rebuild in Chapter 3 of The Defensible Decision. Five channels, four metrics each, one audience question — and one chart shape that answers it in three seconds.
Wholly synthetic. Any resemblance to a specific real B2B marketing-attribution dashboard is coincidental; the numbers are constructed so ROMI produces a clean sort with a clear top and bottom.
Files
-----
- lina-channel-romi.csv — flat rows: five channels × four metrics
- lina-channel-romi.json — canonical scenario contract with source hash
What it represents
------------------
The B2B marketing-attribution snapshot Lina is looking at on Monday afternoon. Five channels (Paid Social, Email, Search, Content, Display) each carry four metrics: leads, cost per lead, conversion rate, and return on marketing investment (ROMI). The VP wants to know where to spend the Q4 budget. Chapter 3 uses the dataset to contrast Lina's first-draft clustered column (five channels × three series × three axes to read) with the single-encoding sorted bar of ROMI (Paid Social top, Display bottom, both accented, ROMI dollars annotated) that answers the VP's question in three seconds.
Invariants (locked)
-------------------
The scenario carries executable invariants that Chapter 3's release contract enforces:
- Exactly five channels: Paid Social, Email, Search, Content, Display.
- Every channel carries all four metrics (leads, cost_per_lead_usd, conversion_rate_pct, romi_ratio).
- ROMI produces a clean sort with a clear top and bottom: Paid Social $3.40 top, Display $0.80 bottom.
- The Big Idea text names both channels and both ROMI values verbatim: "Paid Social returns $3.40 per marketing dollar; reallocate Q4 spend from Display, which returns $0.80."
- The clustered-column state carries three series across five channels (series_count: 3), and the argument is not visible in three seconds.
- The focused-bar state carries one series (series_count: 1, ROMI ratio), sorted descending, with the argument visible in three seconds and the Big Idea in the title.
Why the invariants matter
-------------------------
Chapter 3's pedagogical point is that the Big Idea — written before the chart — determines the chart's encoding, its sort order, its accents, and its title. If ROMI produced a muddy sort (e.g., two channels tied at the top), the sorted-bar rebuild would need a tiebreaker, and the Big Idea would need a compound sentence. If Display were not the clean bottom, the reallocation half of the Big Idea would need to name a different source channel. The numbers are locked to keep the three-second read intact.
What it does NOT represent
--------------------------
- Actual marketing-attribution data from any real company.
- The full clustered-column chart's third-axis units (leads, cost per lead, conversion rate are on incompatible axes; that is the point of the failure, not a modelling target).
- Q4 spend levels (the chapter's arc closes at the Big Idea; the reallocation math is left to the reader's discipline).
Reproducibility
---------------
The dataset ships from the book source at AlexBooks/applied-ai/ai-directed-viz/data/lina-channel-romi.json and is re-emitted here by AlexBooks/applied-ai/ai-directed-viz/scripts/generate-lina-channel.mjs --site-root . The generator writes the source SHA-256 into lina-channel-romi.json so drift between the book and this site is detectable.
License
-------
Released for teaching use alongside The Defensible Decision. Use freely.