Capstone project · Customer analytics and data quality · about 220 minutes
Full statistical investigation: from a messy export to a decision
Take a raw customer export full of duplicates, typos, placeholders, impossible values and a unit mix-up; audit it, clean it with documented rules, analyse the cleaned data, and show which conclusions survive — and which collapse — when the cleaning changes.
The brief
Rimal Living (a fictional homeware retailer) wants to launch a loyalty programme and a small-business offer. The marketing director has exported the customer table from the point-of-sale system and asks three questions:
- What does an average customer spend per year? The loyalty programme is being designed to rebate 2% of annual spend (the rate is a planning assumption for this scenario), and finance needs a budget.
- Do small-business customers spend more than individuals? If so, a dedicated B2B offer is worth building.
- Do customers who opted in to marketing emails spend more? The director wants to push opt-ins if they do.
Stakeholders. The marketing director wants quick answers; the finance manager will hold you to the budget; the IT team owns the point-of-sale system and needs to know what to fix at source. An earlier draft by a colleague, computed straight from the export, has already circulated with a mean spend of SAR 12,128.
Constraints. You must document every cleaning rule and how many records it changes, so the analysis can be reproduced and audited. Records cannot be re-collected; where a value cannot be trusted you must decide whether to correct it, set it to missing or drop the record — and say which decisions are judgement calls.
The data. customers_messy is the raw export (700 rows). customers_clean is the reference result of a documented cleaning pipeline, provided so you can check your own decisions and compare analyses before and after cleaning. Both are synthetic: generated with deliberately planted problems, describing no real business or person.
Dataset
Customer records (messy)
700 rows · one row = one customer record (some customers appear twice) · synthetic data
| Customer | Signup date | City | Segment | Age (years) | Annual spend (SAR) | Referral source | Email opt-in |
|---|---|---|---|---|---|---|---|
| C0001 | 2024-02-28 | Riyadh | Small business | 31 | 571670 | Advertisement | true |
| C0002 | 2021-07-15 | Jeddah | Individual | 20 | 4679.64 | Friend | true |
| C0003 | 2024-08-12 | Dammam | Small business | 30 | 3027.49 | Advertisement | false |
| C0004 | 2022-11-14 | Riyadh | Individual | 34 | 5440.72 | Search | false |
| C0005 | 2022-12-01 | Riyadh | Individual | 47 | 1382.89 | Social media | false |
| C0006 | 2023-11-01 | Khobar | Individual | 37 | 4162.73 | Store visit | false |
Included with a Formula Quest membership
This capstone has 5 stages and 19 graded tasks, ending with a written report.
View Formula Quest memberships