Business analytics
Customer Churn Analysis
- Company
Peloton- Job positions
- Data AnalystProduct AnalystData Scientist
- Topics
- Churn analysisCohorts and tenureFeature explorationpandasData visualization
The scenario
Peloton: Find out why subscribers of a fitness app cancel, and give leadership an evidence-backed plan to keep them.
Peloton's app offers on-demand workouts and live classes on monthly and annual plans. You're a data analyst on the membership team. Cancellations have been climbing, and leadership wants to know why members are leaving and what to do about it before next year's budget is set.
Your task
Analyze the data to identify the main drivers of churn and give a short, evidence-backed recommendation.
Instructions
- 1Load and clean the subscriptions and usage datasets. Check for repeated records, inconsistent labels and missing values, and explain how you handled each.
- 2Define churn and tenure for this business. Keep in mind that customers who signed up recently haven't had as much time to cancel.
- 3Explore churn rates across plan type, plan tier, acquisition channel, device and age group, and across tenure.
- 4Combine the usage data with subscriptions to see how engagement and support contact relate to churn, including how customers behave in their first month.
- 5Identify the top 3 factors associated with churn, and check that each one still holds when you account for how long customers have been subscribed.
- 6Compare what the data shows with the cancel reasons customers gave.
- 7Write a short recommendation (max 1 page) with specific actions and how you would measure whether they work.
Datasets
The data is synthetic and does not come from Peloton, but it's modeled on how real companies record it, including the mess. All files come in one download.
subscriptions.csv
One row per customer who subscribed between July 2024 and October 2025. Data runs to December 31, 2025.
4,200 rows · 11 columns · 290 KB
| Column | Type | Description |
|---|---|---|
| customer_id | integer | Unique ID of the customer. |
| signup_date | date | Date the subscription started. |
| plan_type | text | Billing period: monthly or annual. |
| plan_tier | text | Plan level: basic, plus or premium. |
| monthly_price | decimal | Price per month, in USD. Annual plans show the monthly equivalent. |
| acquisition_channel | text | How the customer found the app. |
| primary_device | text | Device the customer uses most. |
| age_group | text | Customer's age range. |
| churned | text | Whether the customer canceled by December 31, 2025: yes or no. |
| churn_date | date | Date the subscription was canceled. Empty if still active. |
| cancel_reason | text | Reason picked in the cancel flow. Empty if active or skipped. |
Preview the first 5 rowsHide preview
| customer_id | signup_date | plan_type | plan_tier | monthly_price | acquisition_channel | primary_device | age_group | churned | churn_date | cancel_reason |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2024-09-11 | monthly | basic | 12.99 | promo_offer | android | 45-54 | yes | 2025-06-29 | technical_issues |
| 2 | 2025-08-14 | annual | basic | 9.74 | promo_offer | web | 45-54 | no | empty | empty |
| 3 | 2025-01-24 | monthly | basic | 12.99 | referral | ios | 55+ | no | empty | empty |
| 4 | 2024-08-15 | monthly | basic | 12.99 | paid_social | ios | 25-34 | yes | 2024-08-20 | not_using_enough |
| 5 | 2025-06-24 | annual | plus | 14.99 | paid_social | android | 55+ | no | empty | empty |
usage.csv
One row per customer per calendar month they were subscribed, including the month they signed up and the month they canceled.
30,685 rows · 6 columns · 665 KB
| Column | Type | Description |
|---|---|---|
| customer_id | integer | The customer. |
| month | month | Calendar month, as YYYY-MM. |
| workouts_completed | integer | Workouts finished in the app that month. |
| minutes_active | integer | Minutes spent working out that month. |
| classes_booked | integer | Live classes booked that month. Basic plans can't book classes. |
| support_tickets | integer | Support requests opened that month. |
Preview the first 5 rowsHide preview
| customer_id | month | workouts_completed | minutes_active | classes_booked | support_tickets |
|---|---|---|---|---|---|
| 1 | 2024-09 | 5 | 140 | 0 | 0 |
| 1 | 2024-10 | 4 | 116 | 0 | 0 |
| 1 | 2024-11 | 7 | 208 | 0 | 0 |
| 1 | 2024-12 | 5 | 109 | 0 | 0 |
| 1 | 2025-01 | 1 | 41 | 0 | 0 |
Hint
Members who joined recently haven't had much time to cancel, so their overall churn looks low. A monthly churn rate compares groups fairly: cancellations in a month divided by the members who were active that month.
Deliverable
A public GitHub repo with your analysis (a notebook or scripts) and a short write-up of your findings and recommendation.
When you're done, post your repo in the Solutions tab to share it with other learners.
What grading checks
Use this checklist to review your own work before you post and share it.
- Submitted GitHub repo is public and reachable.
- Repo contains at least one notebook or script file.
- Analysis identifies churn drivers as the instructions require.
- Churn comparisons account for tenure instead of comparing customers who have been subscribed for very different lengths of time.
- Usage data is combined with subscriptions and early engagement is examined.
- Includes a written recommendation.