Findings Memo with Descriptive Stats
Builds on Topic 8.
What you'll produce
A findings memo that summarizes your cleaned FreshBox data with the right statistics and states — in plain language — what the numbers actually say about churn. It's the moment your investigation stops being a pile of queries and becomes a claim someone can act on. The skill it proves is the hardest one in the whole track: summarizing honestly. You'll choose median over mean where extremes would lie to you, report spread so a single average can't mislead, break churn down by segment to find the story under the overall number (including a Simpson's-paradox check), and — most important for your credibility — explicitly separate a correlation worth investigating from a cause you've proven. A memo that overstates one confounder as "the reason customers leave" is worse than no memo; this deliverable is where analysts earn or lose the room's trust.
Instructions
- Restate the question and the cleaned inputs (2–3 sentences). Name the decision this serves (from Deliverable 1), the time window, and the row counts you're analyzing after cleaning — and quote them from your own Cleaning Log (Deliverable 3), not new numbers invented here. If D3 says the raw extract of 40,213 rows reconciled to a cleaned active base and a stricter "active =
status='active'and no cancellation" count, the memo states those exact figures — e.g. "39,418 active subscribers (cleaned base 39,983, per the Cleaning Log; 565 stale-status rows excluded from the active cut)." Never introduce a cleaning step the log never recorded (no "test accounts removed," no "signups merged" if the log kept re-subscribers as flagged rows). A reader must be able to lay this paragraph beside D3 and see every number line up; a single orphaned figure here breaks the brief → pull → cleaning → memo trace the rubric checks. - Lead with the headline finding in one sentence. The reader should know the answer before the evidence. Not "we analyzed churn by segment" (that's a topic) but "Quarterly churn is 6.1% overall, but the Monthly-cadence, first-90-day segment churns at 14% and accounts for most of the MRR loss" (that's a finding). Use the brief's vocabulary precisely: Monthly/Annual is a billing cadence,
Basic/Family/Premiumis a plan tier — never call a cadence a "plan." - Summarize each key metric with a middle and a spread. For order value, tenure, support-ticket counts — report the median alongside the mean, and say which you trust and why. Where mean and median diverge, that gap is a finding. Add a range or "most customers fall between X and Y" so no single number stands alone.
- Pick median vs. mean deliberately and justify it once, in writing. For anything with a long tail — order value, lifetime, days-to-cancel — state plainly: "I report the median because a handful of bulk corporate orders pull the mean up to a figure no typical customer experiences."
- Break churn down by your segments and build the segment table. Compute churn rate per segment (billing cadence, plan tier, tenure bucket, country, acquisition channel — whatever your brief named). Keep billing cadence and plan tier as separate breakdowns, never a merged "plan" column. Show the count behind each rate; a 50% churn rate on 4 customers is noise, not a finding.
- Run an explicit Simpson's-paradox check. Take the overall churn number and split it by a second dimension. State in one line whether the overall trend holds within every subgroup or reverses/hides something — and show the table that proves it. This is the single highest-signal move in the memo.
- Separate correlation from causation, on purpose and out loud. For your strongest relationship (e.g. "high support-ticket count correlates with churn"), write one sentence naming the correlation and the strength, then a second sentence naming at least one plausible confounder and what experiment or follow-up would be needed to claim cause. Never let a correlation graduate to a "because" without earning it.
- List 2–3 caveats and open questions. What the data can't tell you yet, what you'd validate next, and the riskiest assumption from your brief — did the cleaned data confirm or threaten it?
- Close with "what this means" — one decision-relevant takeaway, phrased for the Head of Operations, not for another analyst. Keep it to the finding and its implication; save the full recommendation for the executive readout (Deliverable 6).
Worked example
(Investigation: FreshBox churn — cleaned warehouse + support-ticket CSV, 2025-10-01 to 2026-03-31 / Q1–Q2 FY26 window)
Question & inputs. This memo answers where FreshBox is losing subscribers and which segments are worst, to inform the retention bet leadership will set at Q3 FY26 planning. Window: the two most recent full quarters, 2025-10-01 through 2026-03-31 (Q1–Q2 FY26, monthly grain). Inputs are the cleaned dataset from the Cleaning Log (Deliverable 3) — I quote D3's numbers rather than re-deriving them, so this memo and the log reconcile line for line. The raw warehouse extract of 40,213 rows cleaned to 39,983 active-base rows (184 double-loaded duplicate orders excluded; 7 negative-tenure and 19 future-signup rows quarantined; the 233 re-subscribers kept as flagged rows, not merged — counting a churn-then-return as one row would have erased the exact retention event we're studying). Of that cleaned base, 39,418 meet the strict active definition my Brief locked (status='active' and no cancellation row); the 565-row difference is stale-status subscriptions excluded from the active cut. The segment table below totals 39,580 rather than 39,418 because it is built on the billing-cadence × tenure partition from the SQL pull (Deliverable 2), which retains 162 subscriptions with a null started_at that fall outside the strict active count — a 0.4% reconciliation gap I carry forward openly rather than papering over. Churn side: 4,016 cancellations in the window; D3 found 412 of them had a missing cancellation_date and kept and flagged those rows (imputed to last-order-date + 30 days, marked cancel_date_imputed), so they stay in every count but are excluded from date-precise timing cuts. Support side: support tickets de-duplicated, country values standardized ("US"/"U.S.A."/"United States" → one canonical value, 14 raw country strings collapsed to 6), and blank ticket categories filled to Uncategorized rather than dropped.
Headline finding. Overall quarterly churn looks healthy at 6.1% — but that average hides the real story: Monthly-cadence subscribers in their first 90 days churn at 14.2%, more than 3× the Annual-cadence rate, and this one segment drives roughly 58% of lost MRR. The business doesn't have a churn problem; it has a new-Monthly-subscriber churn problem. (Monthly/Annual is the billing cadence the brief locked; this finding is about cadence, not plan tier.)
Key metrics — middle and spread.
| Metric | Mean | Median | What I report & why |
|---|---|---|---|
| Monthly order value | $61.40 | $48.00 | Median. A few bulk/office orders ($300–$540) drag the mean up; $48 is what a typical box actually costs. |
| Subscriber tenure at cancellation | 7.9 months | 3.0 months | Median. The mean is inflated by a long tail of loyal multi-year customers; the typical churner leaves at 3 months, which points straight at onboarding. |
| Support tickets per churned customer | 2.4 | 1.0 | Median, but the gap itself is the finding: most churners filed 1 ticket, yet a heavy-complaint tail (8–15 tickets) pulls the mean to 2.4. |
Spread matters here: tenure-at-cancellation ranges from under 1 month to 34 months, but half of all cancellations happen by month 3 (interquartile range roughly 2–9 months). "Average churner stays 7.9 months" would have sent us chasing the wrong fix.
Churn by segment.
| Billing cadence × tenure | Subscribers | Cancellations (Q1–Q2 FY26) | Churn rate |
|---|---|---|---|
| Monthly · first 90 days | 9,210 | 1,308 | 14.2% |
| Monthly · 90+ days | 14,830 | 1,602 | 10.8% |
| Annual · first 90 days | 6,140 | 268 | 4.4% |
| Annual · 90+ days | 9,400 | 838 | 8.9%* |
| Overall | 39,580 | 4,016 | 6.1% |
*Annual "churn" here is renewal-window non-renewal, not mid-term cancellation — exactly the cadence caveat the brief flagged, repeated below. (I cut churn by billing cadence × tenure here; plan tier — Basic/Family/Premium — is a separate cut I checked and found roughly flat, so it isn't the story.)
The 39,580 overall denominator is the cadence × tenure partition from the SQL pull (Deliverable 2), which is 162 rows above the 39,418 strict active base (Deliverable 3) — those 162 subscriptions have a null started_at and can't be cohorted, so they sit in the segment math but outside the strict active count. I report the segment-table total here so the rates and their denominators are internally consistent; the 0.4% gap is the same one D2 and D3 already logged, not a new discrepancy.
Simpson's-paradox check. Overall, US subscribers churn slightly more than UK (6.4% vs. 5.6%), which on its face suggests a US problem. Split by billing cadence, that reverses: within both Monthly and Annual cadences, UK churns higher than US (Monthly 13.1% UK vs 12.0% US; Annual 5.1% UK vs 4.0% US). The overall US figure only looks worse because the US base skews heavily Monthly (the high-churn cadence), while the UK base skews Annual. The driver is cadence mix, not country — exactly the cadence-mix trap the brief warned about. Acting on "fix the US" would have been the wrong call — this check changed the recommendation.
Correlation vs. causation. Churned customers filed more support tickets than retained ones (median 1 vs 0; the heavy tail is almost entirely churners), and customers with a delivery-related ticket churned at 19% vs 5% for ticket-free customers — a strong, real correlation worth investigating. But I am not claiming tickets cause churn. A plausible confounder runs the other way: customers already deciding to leave may stop tolerating problems and file a final complaint, so the ticket is a symptom of an exit in progress, not its cause. There's also a likely common cause — bad first-month delivery experience could drive both the ticket and the cancellation. To claim causation we'd need to test it: e.g., a controlled follow-up where first-90-day Monthly-cadence subscribers with a delivery issue receive proactive resolution, measured against a holdout. Until then this is a hypothesis, not a conclusion.
Caveats & open questions.
- Annual "churn" is renewal non-renewal, measured only at the renewal window — not directly comparable to Monthly mid-term cancellation (the brief's cadence caveat). I kept the two cadences in separate rows rather than blending them into one rate.
- Riskiest assumption from the brief held, with a wrinkle: the brief's riskiest assumption was that cancellation dates reliably mark the churn event — and D3's riskiest cleaning assumption was the fix it forced. Of the 4,016 cancellations, 412 (10.2%) had a missing
cancellation_date; per the Cleaning Log I kept and flagged them, imputing each to last-order-date + 30 days (cancel_date_imputed=TRUE) rather than dropping them. So all 4,016 stay in every count and segment rate above, but those 412 are excluded from any date-precise timing cut — meaning the within-month churn curve, especially near the end of Q2, rests on an imputation that would shift the timing (not the totals) if those churns actually happened earlier. D3's stated mitigation — re-run the timing cut with the 412 excluded and confirm the rollover month holds both ways — is the check I'd run before presenting the timing chart as firm. - Cause of the first-90-day Monthly spike is still open. Delivery issues correlate, but pricing, recipe variety, and onboarding friction are unexamined and could matter as much.
What this means. The softening MRR isn't broad decay across the base — it's concentrated in new Monthly subscribers leaving within their first three months, and a single first-impression problem (delivery in the early weeks) is the strongest lead. The next move is to validate why that segment leaves before spending on a fix — which is what the dashboard (Deliverable 5) and readout (Deliverable 6) will frame for leadership.
Rubric
The app's AI scores the learner's submission against these criteria and gives feedback. Levels: Needs work (1) / Solid (2) / Excellent (3). Passing = every criterion at Solid or above.
- Answer-first headline finding — 1: states a topic ("churn by segment") or buries the result, no number · 2: a clear one-sentence finding with the key number · 3: a sharp finding that names the worst segment and its business impact, so the reader knows the answer before the evidence.
- Median vs. mean chosen deliberately — 1: reports only the mean, or picks median/mean without reason · 2: reports both and picks correctly for skewed metrics · 3: justifies the choice in writing and treats a mean-median gap as itself a finding.
- Spread reported, not just the middle — 1: single numbers stand alone · 2: includes a range or "most fall between X and Y" for key metrics · 3: uses spread to actively correct a misleading average and shows why the middle alone would mislead.
- Segment table with counts — 1: only an overall number, or rates with no denominators, or a single "plan" column that mixes billing cadence (
Monthly/Annual) with plan tier (Basic/Family/Premium) · 2: churn broken down by the brief's segments with counts behind each rate, keeping cadence and tier as distinct breakdowns · 3: clean table, sensible buckets, cadence and tier never conflated, and small-sample rates flagged as noise rather than reported as findings. - Simpson's-paradox check — 1: absent · 2: splits the overall number by a second dimension and states whether the trend holds · 3: surfaces a real reversal/hidden driver with the table proving it, and notes how it changes the conclusion.
- Correlation vs. causation discipline — 1: claims a cause from a correlation ("X causes churn") · 2: names the correlation and avoids claiming cause · 3: names the correlation, a specific plausible confounder, and the experiment/follow-up needed to establish cause.
- Honest caveats & coherence — 1: no limitations, or disconnected from prior deliverables · 2: lists real caveats and links to the brief/cleaning log · 3: caveats are decision-relevant, revisit the brief's riskiest assumption, and trace cleanly from brief → data pull → cleaning → this memo.