Mobile Subscribers and Churn (synthetic)
About 3,500 invented mobile customers with monthly usage, billing, support tickets and churn over two years.
Business scenario
NovaMobile is an invented mobile operator with consumer, small-business and enterprise customers across eight regions. Management is worried about churn and wants to know which plans, channels and customer experiences predict customers leaving, and what that costs in monthly revenue.
The data contains no names, phone numbers or addresses. Usage, billing and tickets are generated from a seeded script, with churn made more likely for month-to-month plans, heavy support users and some channels, so there are real patterns to find.
Questions to answer with a dashboard
- What is monthly churn rate by plan, segment and acquisition channel?
- How much revenue (ARPU and total billed) do we lose each month to churn?
- Do customers who contact support more often leave sooner?
- Which plans generate the most overage charges, and could a plan change reduce churn?
- How does customer satisfaction relate to resolution time by ticket category?
Tables, columns and data dictionary
dim_date
One row per calendar day. Mark it as the date table in Power BI and relate every fact table to date_key.
date_key(integer): Day as a number, yyyymmdd (for example 20240229)date(date): Calendar dateyear(integer): Calendar yearquarter(integer): Calendar quarter, 1 to 4month(integer): Month number, 1 to 12month_name(text): Month name in Englishday(integer): Day of the monthday_name(text): Weekday name in Englishis_weekend(boolean): True for Saturday and Sunday
dim_region
Sales regions.
region_id(integer): Unique region keyregion_name(text): Region name
dim_plan
Tariff plans customers can be on.
plan_id(integer): Unique plan keyplan_name(text): Plan namemonthly_fee(decimal): Monthly fee in US dollarsdata_allowance_gb(integer): Included data in GB; empty means unlimitedvoice_allowance_min(integer): Included voice minutes; empty means unlimitedcontract_months(integer): Minimum contract length; 0 means no contracttarget_segment(text): Customer segment the plan is designed for
dim_customer
One row per customer. Contains no names or contact details.
customer_id(integer): Unique customer keyregion_id(integer): Home regionplan_id(integer): Plan the customer is on (or was on when they left)segment(text): Consumer, Small business or Enterpriseage_band(text): Age band (empty for business customers)acquisition_channel(text): Retail, Online, Partner or Telesalessignup_date(date): Date the customer joinedstatus(text): Active or Churnedchurn_date(date): Date the customer left; empty if still activechurn_reason(text): Main reason for leaving; empty if still active
fact_monthly_usage
One row per customer per month while the customer was active in 2023-2024.
usage_id(integer): Unique row keycustomer_id(integer): Customerdate_key(integer): First day of the billing monthvoice_minutes(integer): Minutes of callsdata_gb(decimal): Data used in GBsms_count(integer): Text messages sentplan_fee(decimal): Plan fee billedoverage_amount(decimal): Charges above the plan allowancebilled_amount(decimal): Plan fee plus overagesupport_calls(integer): Calls to customer support in the month
fact_support_ticket
One row per customer support ticket.
ticket_id(integer): Unique ticket keycustomer_id(integer): Customer who raised itdate_key(integer): Date openedcategory(text): Billing, Network, Device, Plan change or Otherpriority(text): Low, Medium or Highresolution_hours(decimal): Hours until resolvedsatisfaction(integer): Survey score 1 to 5; empty when the customer did not answer
License and usage terms
Free to use (synthetic data)
You may use this synthetic data for learning, practice, demos, training material and portfolio projects, including in published reports. You may not resell the files themselves or present them as real data. The data is invented: it does not describe any real person, customer or company.