All Data Labs

Business analytics

Customer Churn Analysis

medium3–4 hours2 datasets
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

  1. 1Load and clean the subscriptions and usage datasets. Check for repeated records, inconsistent labels and missing values, and explain how you handled each.
  2. 2Define churn and tenure for this business. Keep in mind that customers who signed up recently haven't had as much time to cancel.
  3. 3Explore churn rates across plan type, plan tier, acquisition channel, device and age group, and across tenure.
  4. 4Combine the usage data with subscriptions to see how engagement and support contact relate to churn, including how customers behave in their first month.
  5. 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.
  6. 6Compare what the data shows with the cancel reasons customers gave.
  7. 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

ColumnTypeDescription
customer_idintegerUnique ID of the customer.
signup_datedateDate the subscription started.
plan_typetextBilling period: monthly or annual.
plan_tiertextPlan level: basic, plus or premium.
monthly_pricedecimalPrice per month, in USD. Annual plans show the monthly equivalent.
acquisition_channeltextHow the customer found the app.
primary_devicetextDevice the customer uses most.
age_grouptextCustomer's age range.
churnedtextWhether the customer canceled by December 31, 2025: yes or no.
churn_datedateDate the subscription was canceled. Empty if still active.
cancel_reasontextReason picked in the cancel flow. Empty if active or skipped.
Preview the first 5 rows
customer_idsignup_dateplan_typeplan_tiermonthly_priceacquisition_channelprimary_deviceage_groupchurnedchurn_datecancel_reason
12024-09-11monthlybasic12.99promo_offerandroid45-54yes2025-06-29technical_issues
22025-08-14annualbasic9.74promo_offerweb45-54noemptyempty
32025-01-24monthlybasic12.99referralios55+noemptyempty
42024-08-15monthlybasic12.99paid_socialios25-34yes2024-08-20not_using_enough
52025-06-24annualplus14.99paid_socialandroid55+noemptyempty

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

ColumnTypeDescription
customer_idintegerThe customer.
monthmonthCalendar month, as YYYY-MM.
workouts_completedintegerWorkouts finished in the app that month.
minutes_activeintegerMinutes spent working out that month.
classes_bookedintegerLive classes booked that month. Basic plans can't book classes.
support_ticketsintegerSupport requests opened that month.
Preview the first 5 rows
customer_idmonthworkouts_completedminutes_activeclasses_bookedsupport_tickets
12024-09514000
12024-10411600
12024-11720800
12024-12510900
12025-0114100

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.