30-day window · vs. prior 30 days
Who's in the program, how engaged they are, and how they're moving between states. Active = earned or redeemed points in the last 90 days.
| Active | Earned or redeemed in last 90d | 512,890 |
| Dormant i | Was active, now lapsed → win-back | 240,000 |
| ↳ 91d–1yr | Recent — high recovery potential | 140,000 |
| ↳ 1–2yr | Mid — moderate recovery | 70,000 |
| ↳ 2yr+ | Deep — recovery rare, marketing noise | 30,000 |
| Never activated i | Opted in, never earned → onboarding | 94,502 |
| Tier | Members | Share | Moved up i | Moved down i |
|---|---|---|---|---|
| Bronze | 412,000 | 80.3% | +2,100 | −4,800 |
| Silver | 78,500 | 15.3% | +1,200 | −900 |
| Gold | 19,200 | 3.7% | +340 | −180 |
| Platinum | 3,190 | 0.6% | +45 | −28 |
| Cohort | M0 | M3 | M6 | M9 | M12 |
|---|---|---|---|---|---|
| Jan 2025 | 100% | 68% | 54% | 48% | 45% |
| Feb 2025 | 100% | 71% | 56% | 50% | 46% |
| Mar 2025 | 100% | 73% | 58% | 52% | — |
| Apr 2025 | 100% | 75% | 61% | — | — |
| May 2025 | 100% | 76% | 63% | — | — |
| Jun 2025 | 100% | 77% | 64% | — | — |
Reading this: Jun cohort holds 64% active at M6 vs. Jan's 54% — retention is improving for newer cohorts by ~10pp at the six-month mark.
30-day window · TTM where noted
What the program is costing and what it's carrying on the balance sheet. Cost basis: 1 point = ¥1 (customer-perceived redemption value, ASC 606 liability basis). Points expire 24 months from issuance.
Reading this: ¥45M of liability is set to expire in the next 6 months. A use-it-or-lose-it campaign turns part of it into redemption cost (real cash out); the rest releases as breakage (a savings line).
Reading this: breakage is falling steadily — members are redeeming more of what they earn. Good for engagement, bad for cost. Each 1pp drop adds ~¥4.87M to projected redemption cost on the current outstanding balance.
| Redemption cost i | Triggered when points are exchanged for rewards | ¥380 |
| Welcome bonus i | Awarded at program opt-in (one-time) | ¥100 |
| Promo bonuses i | Campaign-driven bonus point awards | ¥40 |
Cost/active has risen from ¥480 to ¥520 over the last 4 quarters — almost entirely driven by lower breakage (members redeeming more of what they earn), not by richer promos.
| Issuance cohort | M0 | M6 | M12 | M18 | M24 |
|---|---|---|---|---|---|
| Jan 2024 | 0% | 41% | 57% | 66% | 71% |
| Apr 2024 | 0% | 43% | 59% | 68% | 73% |
| Jul 2024 | 0% | 45% | 60% | 70% | — |
| Oct 2024 | 0% | 46% | 62% | — | — |
| Jan 2025 | 0% | 48% | 64% | — | — |
| Apr 2025 | 0% | 49% | — | — | — |
Reading this: Apr 2024 cohort hit 73% redemption by M24 (= 27% breakage). Jan 2024 hit only 71% (= 29% breakage). Newer cohorts are redeeming faster at every age — same pattern as the headline breakage trend, but visible at the issuance level.
30-day window · 90d / TTM where noted
What members actually do. Earn cadence, redemption velocity, time-to-first-redemption, reward catalog mix, and tier-specific behavioural differences.
| Segment | Members | Earn events/mo i | ¥ earned/mo i | 90d redeem rate | ¥ redeemed/yr |
|---|---|---|---|---|---|
| Power users i | 51,289 | 22 | ¥280 | 92% | ¥1,400 |
| Engaged regulars | 307,734 | 3 | ¥38 | 38% | ¥380 |
| Light engagers i | 153,867 | 0.8 | ¥14 | 11% | ¥80 |
Reading this: top 10% generate ~51% of all earn value (51,289 × ¥280 ≈ ¥14.4M of ¥28.4M monthly issuance). Light engagers are 30% of the base but only ~8% of value (¥2.2M), and 89% of them didn't redeem in the last 90 days. The strategic question: deepen power users (already loyal) or convert regulars upward (bigger pool, lower hit rate)?
Reading this: 58% redeem within 90 days; the curve flattens dramatically after that. The Day 0–90 window is where retention is largely won or lost. The 27% who never redeem accumulate liability without ever closing the loop — onboarding intervention here moves the needle on both engagement and economics.
Reading this: cash discounts (top 2) drive 56% of redemption value — same shape as most JP point programs. "Free coffee" is the hero non-cash item. Healthy catalogs have a long tail; over-concentration (top 3 above ~80%) signals the program would survive on those 3 items alone, which is fragile if any one is discontinued.
| Tier | Members | Earn events/mo i | ¥ earned/mo i | 90d redeem rate | ¥ redeemed/yr |
|---|---|---|---|---|---|
| Bronze | 412,000 | 2.5 | ¥35 | 24% | ¥200 |
| Silver | 78,500 | 8 | ¥100 | 51% | ¥720 |
| Gold | 19,200 | 18 | ¥235 | 78% | ¥2,050 |
| Platinum | 3,190 | 30 | ¥500 | 93% | ¥4,600 |
Reading this: Platinum (0.6% of active) redeems 23× more value per member than Bronze. Gold + Platinum together = 4.3% of active members but ~28% of all redemption value. Tiers aren't just status labels — they map to fundamentally different engagement intensities, which is why tier-specific economics in the Value tab will matter more than aggregate per-member numbers.
TTM · matched-cohort attribution
Does the program drive value, or pay loyal customers to do what they would have done anyway? Combines member transaction data (revenue side) with attribution analysis (incrementality side). Default method: matched-cohort comparison. Gross margin assumption: 25%.
| Metric | Members | Non-members | Difference |
|---|---|---|---|
| Spend / customer / yr | ¥66,000 | ¥24,000 | +175% |
| Avg basket size | ¥1,300 | ¥920 | +41% |
| Visits / month | 4.2 | 2.2 | +91% |
| Gross margin / customer / yr (@25%) | ¥16,500 | ¥6,000 | +¥10,500 |
Reading this: members spend 2.75× more than non-members. But the question isn't whether members spend more — they do — it's how much of that gap is caused by the program vs. self-selection (high-spending customers prefer programs). The next card unpacks that.
Reading this: methods disagree by a factor of 6×. Naive (175%) treats selection bias as program effect. Matched-cohort (28%) is our default — defensible but assumes we've matched on the right covariates. The only way to know for sure is a randomized holdout, which the program doesn't currently run. Worth considering — even a small holdout (1–2% of new opt-ins held out for 12 months) would validate or refute the matched-cohort number.
| Total incremental margin i | +¥1,874M |
| Total program cost i | −¥267M |
| Net P&L impact | +¥1,607M |
| ROI | 7.0× |
Reading this: assuming the +28% incrementality estimate is right, the program contributes ¥1.6B annually to gross margin after costs. Sensitivity: a ±5pp shift in incremental lift moves net P&L by ±¥335M. A more conservative GM assumption (20%) drops net P&L to ¥1.23B; a more aggressive one (30%) lifts it to ¥1.98B.
| Tier | Spend/yr | Lift i | Incr. margin/yr | Cost/yr | Net/yr | ROI |
|---|---|---|---|---|---|---|
| Bronze | ¥42,000 | +32% | ¥2,545 | ¥340 | ¥2,205 | 7.5× |
| Silver | ¥120,000 | +28% | ¥6,560 | ¥860 | ¥5,700 | 7.6× |
| Gold | ¥282,000 | +22% | ¥12,710 | ¥2,190 | ¥10,520 | 5.8× |
| Platinum | ¥600,000 | +18% | ¥22,880 | ¥4,740 | ¥18,140 | 4.8× |
Reading this: Bronze and Silver have the highest ROI (~7.5×); Platinum the lowest (4.8×). Counter-intuitive but real — high-tier members are already loyal, so the program has less behaviour to change. Platinum still contributes more absolute value per member (¥18,140 net vs Bronze's ¥2,205), so don't read this as "neglect Platinum." Read it as: the program's marginal leverage is strongest in mid-tier, which has implications for where to spend incremental promo budget.
Methodology & caveats. Gross margin: 25% (category-blended; adjustable in the model). Attribution: matched cohort on pre-enrollment behavior + demographics, refreshed quarterly. Confidence: 95% CI ±5pp on the incremental lift estimate. Cost basis: liability-released (¥520/active/yr). True cash impact may be lower if redemption rewards carry meaningful margin — see the fulfillment-cost note in Economics. The ROI shown is conservatively understated to that extent. Not running: randomized holdout. Single biggest data gap; would validate the matched-cohort estimate.
Members spend ¥66,000/yr. Non-members spend ¥24,000/yr. The naive read is "the program adds ¥42,000 per member." That's almost certainly wrong because of selection bias — people who join loyalty programs are systematically different from those who don't. They might be higher-income, more brand-loyal, or more frequent shoppers regardless of any program. If those factors alone explain the gap, the program adds nothing; it just attracts customers who were going to spend a lot anyway.
Matched cohort exists to strip out selection bias.
For every member, find a non-member who looks just like them on everything observable — except program membership. Compare what the member did to what their matched counterpart did. If members systematically out-perform their matches, that difference is more plausibly attributable to the program.
The technique comes from epidemiology, where you can't randomize patients into "gets the drug" vs "doesn't" if the drug is already available. So you match treated patients to similar untreated ones on age, sex, severity, etc., and compare outcomes. Same logic here.
Pick a set of matching variables — things observable about a customer before they joined. Typical for retail loyalty:
Then run a matching algorithm. Two common approaches:
Both produce member–non-member pairs that look statistically indistinguishable on the matched variables. Example pair:
| Variable | Maki (member) | Yuki (matched non-member) |
|---|---|---|
| Pre-enrollment annual spend | ¥38,000 | ¥39,500 |
| Visits / mo pre-enrollment | 1.4 | 1.5 |
| Avg basket pre-enrollment | ¥2,300 | ¥2,200 |
| Age band | 30–40 | 30–40 |
| Postcode region | Tokyo-23ku | Tokyo-23ku |
These two look identical before the join date. The only meaningful difference: Maki joined the program in early 2024, Yuki did not. Repeat for every member.
Compare post-enrollment outcomes:
| Members (matched) | Non-members (matched) | |
|---|---|---|
| Post-period annual spend | ¥66,000 | ¥51,500 |
Notice the counterfactual jumped from ¥24,000 (whole non-member average) to ¥51,500 (matched non-member average). That ¥27,500 difference is the selection bias — the part of the original gap that wasn't program-caused. Matched cohort surgically removes it. The remaining ¥14,500 is what we attribute to the program.
Controls for: anything matched on. Differences on those dimensions are netted out by construction.
Doesn't control for: anything unobservable or not matched. The residual bias sources to worry about:
This residual bias is why matched cohort tends to over-estimate true causal lift. The matchable variables are a partial proxy for the unmatchable ones. A program that genuinely drives +20% might show +28% in matched cohort and +175% naive.
Three sources of statistical noise:
The ±5pp confidence interval bundles these. Honest interpretation: "the true matched-cohort lift is between 23–33% — but the true causal lift could be different still, because methodological bias isn't captured in this CI."
To do better, you need experiments — and most programs don't run them, because the operational cost of denying customers loyalty is real. The next reference unpacks that.
When the dashboard says "+28% lift, 95% CI 23–33%":
Randomly select a subset of customers who would qualify for the program (would see the sign-up prompt, fit the eligibility criteria, etc.) and exclude them from it entirely. Compare what these excluded customers do over time to comparable customers who did get the program. The difference is unambiguously program-attributable, because the only thing that differed between the two groups was random assignment.
Randomization eliminates all selection bias — observable AND unobservable. With matched cohort, you control for what you can measure. With a holdout, you control for everything by construction, because the two groups are statistically identical except for one variable: program access.
Same reason randomized controlled trials are gold standard in medicine. Observational studies can suggest causality; only randomization can prove it.
The difference between treatment and control on that metric is the causal lift.
Three real costs:
These costs are real. The dashboard flags "not running" rather than pretending the gap doesn't exist.
You don't have to do a giant experiment to get value. Small holdouts work:
Example: matched cohort says +28%. Holdout says +21%. Calibration factor = 21/28 = 0.75. Future matched-cohort estimates can be multiplied by 0.75 to approximate the true causal estimate, without running a fresh experiment every time.
This pattern is becoming standard practice at retailers with mature data science teams. The small holdout doesn't have to be permanent — a single 12-month window gives you a defensible calibration factor.
Matched cohort is the best estimate from observational data. Holdout is the best estimate from experimental data. The deepest version of "what's the program worth?" is the holdout number — which is why "not running" is the single most consequential line on the methodology note above.
The operational layer · TTM where noted
Where insights become action. Lifecycle programs running today, recent A/B test learnings, channel performance, and member contact frequency. The three hooks from earlier tabs (onboarding, near-tier, use-it-or-lose-it) appear here as named lifecycle programs.
| Campaign | Type | Audience (TTM) | Response i | Net contribution (TTM) |
|---|---|---|---|---|
| Stage 1 · Acquisition i | ||||
| Sign-up promo i | Continuous | 412k | 8.2% opt-in i | +¥98M |
| Stage 2 · First earn i | ||||
| Welcome / first-earn series i | Always-on | 221k | 71% first earn i | +¥84M |
| Stage 3 · First redemption i | ||||
| First-redemption push i | Triggered | 87k | 28% first redeem i | +¥124M |
| Stage 4 · Habitual engagement i | ||||
| Near-tier nudge i | Always-on | 113k | 31% upgrade i | +¥138M |
| Use-it-or-lose-it i | Quarterly | 49.6k | 52% redeem i | Liability mgmt |
| Stage 4b · Lapsed recovery i | ||||
| Win-back i | Quarterly | 568k | 9.4% reactivate i | +¥312M |
Reading this: organized top-to-bottom as a funnel from acquisition through to lapsed recovery. The shape of contribution by stage tells you where the program's leverage sits — Stage 4b (Win-back) generates the most absolute revenue because the dormant base is huge, but Stage 3 (First-redemption push) is the highest-leverage operationally — every member moved from "earned but never redeemed" into the active loop reduces future churn risk and converts dormant liability into engagement. Stage 1 (Sign-up promo) now appears explicitly — previously hidden as "pre-program" marketing. Use-it-or-lose-it isn't measured in revenue terms; it deliberately converts breakage savings into engagement spend, with the upside captured later in member retention rather than here.
| Test | Winner | Lift | Significance |
|---|---|---|---|
| Onboarding push timing: Day 3 vs Day 7 | Day 3 | +4.1pp activation | 95% CI |
| Email subject: bonus pts vs ¥ off framing | Bonus pts | +6.2pp open rate | 99% CI |
| Win-back incentive: 200pt bonus vs ¥500 coupon | ¥500 coupon | +2.3pp reactivate | 90% CI |
| Near-tier message tone: status vs value framing | Value framing | +5.0pp upgrade | 95% CI |
Reading this: the "¥500 coupon vs 200pt bonus" win is mathematically odd — both reward ¥500, but framing as a coupon outperforms framing as points. That's a real, measurable preference for concrete cash-value framing over abstract points. The ¥500 coupon is also cheaper to fulfill (single-use, doesn't sit in liability), so it's a double win. Worth replicating across other point-incentive campaigns.
| Channel | Reach (active/mo) | Open / view rate | Response rate | Cost / response |
|---|---|---|---|---|
| 462k | 28% | 5.2% | ¥8 | |
| Push (app) | 188k | 41% | 9.1% | ¥3 |
| In-app banner | 145k | 62% | 12.4% | ¥2 |
| SMS | 51k | 88% | 14.2% | ¥35 |
| In-store (receipt / POS) | 198k | n/a | 18.5% | ¥1 |
Reading this: in-store and in-app are highest-conversion, lowest-cost — but reach is constrained (only members who visit / open the app see them). Email is the workhorse — biggest reach, modest response. SMS converts well but costs 10× push; reserve for high-value moments. The strategic principle: match channel cost to campaign value. Don't SMS for a near-tier nudge; do SMS for an at-risk Platinum member.
| Segment | Avg msgs/mo | 5+ msgs (% of segment) i |
|---|---|---|
| Power users | 3.8 | 42% |
| Engaged regulars | 2.1 | 8% |
| Light engagers | 2.6 | 14% |
Reading this: 18% of active members received 5+ messages last month, approaching the common fatigue threshold of 5–7/mo. The pattern is more interesting than the headline — Light engagers see more touches than Engaged regulars (2.6 vs 2.1) despite contributing far less value, because they trigger more "intervention" campaigns (win-back, first-redemption push, onboarding re-engagement). This is a known anti-pattern: members who don't respond keep getting messaged because they don't respond, accelerating their drift toward dormancy rather than reversing it.
Systems health · last 30 days
The hygiene layer. Transaction processing, customer service tickets, fraud signals, and partner integrations. Everything analytical in the other tabs breaks silently if the operational layer underneath fails — point awards that don't post become CS tickets become unsubscribes.
| Integration | Volume (30d) | Success rate | Avg latency | Top failure cause |
|---|---|---|---|---|
| POS in-store | 12.4M | 99.91% | 142ms | Network timeout (62%) |
| Mobile app | 8.2M | 99.95% | 89ms | Auth expired (44%) |
| Web checkout i | 3.1M | 99.83% | 218ms | Backend timeout (51%) |
| Partner sync i | 184k | 99.42% | 1.2s | Partner API errors (78%) |
Reading this: 99.x% looks fine until you multiply by volume. 0.09% failure on 12.4M POS transactions = ~11,000 failed point-earns per month, which is roughly the volume showing up as "didn't get my points" tickets in the next card. The headline ratio is healthy; the absolute count drives operational load.
Recent incidents: 14 May POS sync delay (43m, ~8k members affected). 22 May partner API timeout cascade (12m, ~800 members). Both within recovery SLA.
| Category | Tickets | % of total | Avg resolution | Preventable? |
|---|---|---|---|---|
| "Didn't receive points" | 1,842 | 38% | 2.4d | Largely — POS reliability |
| "Can't redeem" | 712 | 15% | 1.1d | Some — partner sync issues |
| "Account access" | 685 | 14% | 0.8d | Mostly — auth UX |
| "Points expired" i | 528 | 11% | 1.2d | Yes — communications |
| "Tier change question" | 418 | 9% | 0.5d | Sometimes — tier transparency |
| Other | 635 | 13% | 1.6d | Various |
Reading this: 38% of all loyalty tickets are "didn't receive points" — and the math from the previous card explains why: ~11k failed earns × a fraction that complain ≈ ~1,800 tickets. The single biggest customer service investment isn't more agents — it's POS reliability. Every 0.01pp improvement in earn success rate eliminates ~120 tickets/month at the source.
| Pattern | Flagged (30d) | Investigating | Confirmed (TTM) | Loss (TTM) |
|---|---|---|---|---|
| Welcome bonus abuse i | 1,840 | 89 | 412 | ¥412k |
| Receipt manipulation i | 290 | 31 | 67 | ¥3.1M |
| Account takeover i | 142 | 28 | 71 | ¥2.8M |
| Coupon abuse / coordination | 78 | 8 | 22 | ¥1.9M |
Reading this: welcome bonus abuse is the most common (high volume, low value per incident); receipt manipulation is the most expensive (low volume, high value per incident). The ¥8.2M TTM loss is small relative to the ¥267M annual program cost (3%) — but it's also a sign the controls are working. Programs with zero fraud signals usually aren't catching anything, they're just blind.
| Partner | Transactions | Success rate | Avg fulfillment | SLA status |
|---|---|---|---|---|
| Amazon gift cards | 84k | 99.71% | 4 min | Within SLA |
| ANA mileage transfer i | 26k | 99.32% | 2.1d | At threshold |
| Suica top-up | 51k | 99.94% | 7s | Within SLA |
| Charity donations | 8k | 99.98% | Instant | Within SLA |
Reading this: ANA mileage transfer's 2.1-day fulfillment is by design (daily batch) but at the edge of what members tolerate. The other partners all settle in seconds to minutes, which sets the implicit member expectation — ANA looks slow by comparison even though it meets its own SLA. The fix isn't technical, it's communications: tell members upfront "delivered within 48 hours" rather than letting them wonder.
Data freshness & reconciliation. Loyalty platform data current as of dashboard sync (top right). POS data lag: <15 min. Partner sync lag: 1–24 hr depending on partner. Liability reconciliation last completed: 25 May 2026 (variance: −0.2% vs reported). Next scheduled: 28 Jun 2026. Identity dedup: 2,103 duplicate-member candidates in review (0.25% of base). Resolution pipeline operating normally.