Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Learn Retention Analysis | Core Metrics and Measurement
Product Analytics for Beginners

Retention Analysis

Swipe to show menu

Retention analysis is one of the most important tools for understanding how well your product keeps users engaged over time. Imagine you run a fitness app and want to know if new signups actually stick around. N-Day retention and unbounded retention are two key ways to measure this.

N-Day retention tells you the percentage of users who come back on a specific day after their signup. For instance, Day 7 retention answers: out of all users who signed up on a given day, how many returned exactly 7 days later? You can think of it like a reunion - how many people show up to the party a week after joining?

Unbounded retention is broader. Instead of asking if users came back on a specific day, it asks if they returned on or after a certain day. So, Day 7 unbounded retention is the percentage of users who came back at any point on or after the 7th day. This is like asking: who ever came back to the party after a week, no matter when?

Both metrics help you spot trends in user loyalty and product health.

1234567891011121314151617181920212223242526
import pandas as pd # Sample user activity data data = { "user_id": [1, 1, 2, 2, 3, 4, 5, 5, 5], "activity_day": [0, 7, 0, 1, 0, 1, 0, 7, 30] } df = pd.DataFrame(data) def n_day_retention(df, day): signups = df[df["activity_day"] == 0]["user_id"].unique() returning = df[df["activity_day"] == day]["user_id"].unique() retained = set(signups) & set(returning) return len(retained) / len(signups) * 100 def unbounded_retention(df, day): signups = df[df["activity_day"] == 0]["user_id"].unique() returning = df[df["activity_day"] >= day]["user_id"].unique() retained = set(signups) & set(returning) return len(retained) / len(signups) * 100 print(f"Day 1 N-Day Retention: {n_day_retention(df, 1):.1f}%") print(f"Day 7 N-Day Retention: {n_day_retention(df, 7):.1f}%") print(f"Day 7 Unbounded Retention: {unbounded_retention(df, 7):.1f}%") print(f"Day 30 N-Day Retention: {n_day_retention(df, 30):.1f}%")
Note
Definition

N-Day retention measures the percentage of users who return on a specific day after signup.

When you calculate retention, you start by identifying your user cohort - usually, everyone who signed up on the same day. Then, you check how many of those users came back on a specific day (N-Day retention) or at any point after (unbounded retention). For example, if you see that Day 7 N-Day retention drops sharply but unbounded retention is higher, it means users are returning, but not always on a predictable schedule.

Interpreting these numbers helps you make product decisions:

  • High Day 1 retention means your onboarding is strong;
  • High Day 30 retention means users find long-term value;
  • If retention is low, you might need to improve your onboarding, notifications, or core features;
  • Tracking these metrics over time shows whether changes you make are helping users stick around.

Both N-Day and unbounded retention reveal how well your product keeps users engaged and where you can improve.

1. What does retention measure in product analytics?

2. Fill in the blank:

question mark

What does retention measure in product analytics?

Select the correct answer

question-icon

Fill in the blank:

Unbounded retention tracks users who return at  point after signup.
Everything was clear?

How can we improve it?

Thanks for your feedback!

Section 2. Chapter 2

Ask AI

expand

Ask AI

ChatGPT

Ask anything or try one of the suggested questions to begin our chat

Section 2. Chapter 2
some-alt