# Reading a cohort table

> Read rows, columns and diagonals, and average cohorts without the classic mistakes.

- Course: [Product Analytics: From Data to Decisions](https://productovi.com/courses/product-analytics.md)
- Module: Do people come back?
- Lesson 14/32, ~28 min
- Source: https://productovi.com/courses/product-analytics/cohort-table

## One table, three directions

**Alex Tutor:** Another board request lands on the Halves product team, and Maya forwards it to you.

**Maya:** The board asks for our month-1 retention. Theo averaged the month-1 column and got 43%. Can I send that?

**Alex Tutor:** Let's look at the table first. A **cohort table** has one row per sign-up cohort, here each month from January to June, and one column per month since sign-up.

**Alex Tutor:** Each cell is how many of that cohort opened the app at least once in month k after signing up: monthly bracket retention. The data runs to the end of June, so newer cohorts have fewer columns.

**Dataset (CSV):** [Halves monthly cohorts, January–June 2026](https://productovi.com/datasets/product-analytics/cohort-table/halves-cohorts-monthly-h1.csv)

Counts of users who opened the app in month k after their sign-up month. Empty: not observable yet.

- `cohort`: Sign-up month
- `users`: Users who signed up that month (staff excluded)
- `m1`: Active in the 1st month after the sign-up month
- `m2`: Active in the 2nd month
- `m3`: Active in the 3rd month
- `m4`: Active in the 4th month
- `m5`: Active in the 5th month

**Alex Tutor:** Read it three ways. A **row** is one cohort's life. A **column** compares cohorts at the same age: is onboarding getting better? A **diagonal** is one calendar month: a release or a holiday hits every cohort there at once.

![A row follows one cohort over time, a column compares cohorts at the same age, and a diagonal shows one calendar month across all cohorts.](https://productovi.com/courses/product-analytics/diagrams/m4-l2-cohort-table-directions.png)

![Shelves of jars in rows, emptier towards the right; one person reads along a shelf, another down a column.](https://productovi.com/courses/product-analytics/inline/cohort-table-illustration-2.webp)

*A row tells one cohort's story; a column compares cohorts at the same age.*

**Sofia:** So a cell is a count; to get retention I divide by the cohort's `users`.

> **Exercise:** What is the **month-2 retention** of the February cohort? In %, one decimal.

**Alex Tutor:** Now the diagonal. Say something broke in one calendar month: you need to know where that month sits in the table.

> **Exercise:** In May 2026 a bug logged some users out for two weeks. Which cells of the table cover **May 2026**?

## Averaging a column

**Theo:** Here's how I got 43%: month-1 rates for January to May are 44.1, 46.3, 25.8, 49.8 and 50.2. Their average is 43.2%.

**Maya:** Isn't an average of the cohorts exactly what the board asked for?

**Alex Tutor:** That treats March's 2,400 users and January's 800 as equals. To answer “what share of everyone who signed up came back in month 1?”, weight by cohort size: add up the active users, add up the cohort sizes, divide.

> **Exercise:** Compute month-1 retention for January–May **weighted by cohort size** (sum of `m1` ÷ sum of `users` for the cohorts that have `m1`). In %, one decimal.

**Alex Tutor:** 38.7% weighted against 43.2% simple. The gap is March: the biggest cohort by far, with the weakest month 1, 25.8%.

**Theo:** March is when a bank paid its student-card holders $5 to sign up to Halves. Sign-ups tripled.

**Alex Tutor:** That explains it. **Incentivized sign-ups** come for the reward; many never had a bill to split. Without March, the weighted month 1 is 47.9%. Both numbers are true; the board should see both, with March named.

![A crowd lines up at a booth handing out coins; most walk off once paid, while a few stay at a table splitting a receipt.](https://productovi.com/courses/product-analytics/inline/cohort-table-illustration-3.webp)

*People paid to join come for the reward; many never had a bill to split.*

> **Exercise:** The board wants Halves's month-1 retention for the January–May cohorts. March's 2,400 sign-ups came from a bank paying student-card holders \$5 to join, and only 25.8% of them came back in month 1. Weighted by cohort size, month 1 is 38.7% with March and 47.9% without it; the simple mean of the five cohort rates is 43.2%. What should Maya, the Halves product lead, send the board as month-1 retention?

**Alex Tutor:** If the board gets two numbers for month 1, it gets two for month 2 as well, computed by the same rule.

> **Exercise:** Leave out the March cohort (a paid sign-up promo) and compute weighted month-2 retention **without the March cohort** (January, February, April). In %, one decimal.

## A curve that rises for no reason

**Sofia:** For the average retention curve I weighted every column the same way: 38.7, 26.9, 21.1, then 31.1 and 28.6. Retention goes up in month 4?

**Alex Tutor:** Nobody came back. The cohorts changed. Month 3 includes March; month 4 has only January and February, which were stronger all along. Each column averages a different set of cohorts.

![Two group photos side by side; in the second the shortest members have stepped out, so the group looks taller.](https://productovi.com/courses/product-analytics/inline/cohort-table-illustration-4.webp)

*The curve rose because the cohorts in it changed, not because anyone came back.*

**Alex Tutor:** Fix: compare months over the **same** cohorts. For the drop from month 1 to month 2, use only January to April, the cohorts that have both columns.

> **Exercise:** Month-1 retention, weighted, for **January–April only** (the cohorts that also have `m2`). In %, one decimal.

**Alex Tutor:** 36.4% in month 1 to 26.9% in month 2 for the same four cohorts. That's a real step down; 38.7% to 26.9% mixed May into one side only.

**Sofia:** So a curve for the report should only use cohorts old enough to have every column in it.

**Alex Tutor:** Yes. Or draw each cohort's row as its own line and compare the shapes. Averages come after you've looked at the rows.

> **Exercise:** **True or false:** the weighted column averages go from 21.1% in month 3 to 31.1% in month 4, which shows that some users came back in their fourth month.

## Is onboarding getting better?

**Maya:** Last question. We reworked onboarding in April. Does the month-1 column say it helped?

**Alex Tutor:** First decide where in the table that answer lives.

> **Exercise:** Onboarding changed in April. Which part of the table shows **whether it helped**?

**Alex Tutor:** Read the column, not the average: 44.1, 46.3, then March, then 49.8 and 50.2. Keep in mind that a cohort of 800 has about ±3.5 points of noise on its own, and that nothing else was held constant.

**Sofia:** So a careful “probably a bit better”, not a victory lap.

> **Exercise:** Onboarding was reworked in April. In 3–4 sentences, tell Maya what the month-1 column says about it, with numbers and with the limits of this reading.

> **Key ideas**
>
> - A **cohort table**: rows are sign-up cohorts, columns are months since sign-up. Rows show a cohort's life, columns compare cohorts at the same age, diagonals show calendar events.
> - Averaging a column: weight by cohort size (sum active ÷ sum users) to describe all users; month 1 here is 38.7%, not the simple 43.2%.
> - Name outlier cohorts, like a wave of incentivized sign-ups (March: 2,400 users, 25.8%), and show the average with and without them (47.9%).
> - Column averages cover different cohorts, so a curve built from them can rise for no reason (21.1% → 31.1%). Compare months on the same cohorts (Jan–Apr: 36.4% → 26.9%).
> - Differences of a few points between cohorts of ~1,000 users are within noise.

**Alex Tutor:** So Maya's board gets 38.7%, 47.9% without the promo wave, and a sentence explaining the difference.

- Previous lesson: [Retention: day N, rolling or bracket](https://productovi.com/courses/product-analytics/retention-types.md)
- Next lesson: [The plateau: retention and product-market fit](https://productovi.com/courses/product-analytics/retention-plateau.md)

---
Productovi Learning. Free, no sign-up needed to read.
