Skip to content
Project 02 / 04Business IntelligenceE-Commerce · Retention AnalyticsOn my resume

E-Commerce Delivery & Retention Analysis

Cross-validated 100K+ orders in Python and SQL to trace a 3.12% repeat-purchase rate back to a cause someone can actually fix.

02 · Business Intelligence

Review score by delivery outcome

Scale 0–5

  • Delivered on time4.29
  • Delivered 4+ days late1.85
05
3.12%
Repeat-purchase rateThe retention problem being traced
67.6%
Revenue from the top 10% of sellers310 of 3,095 sellers
3.5x
Late-delivery rate, worst statesAgainst the national rate
Role
Solo project / independent build
Stack
Excel, Python (pandas), PostgreSQL, SQL, Power BI, DAX
Scope
100K+ orders · 9 relational tables · 3,095 sellers
  • 100K+

    Orders modelled across 9 tables

  • 3.12%

    Repeat-purchase rate

  • 67.6%

    Revenue from the top 10% of sellers

  • 15+

    DAX measures, each cross-validated

The build

How it came together.

  1. 01

    The model

    This one started as a modelling problem before it was ever an analysis problem. I modelled 100K+ orders across 9 relational tables in PostgreSQL, because the questions worth asking here all live across table boundaries rather than inside any single one of them: does delivery affect whether someone comes back, and where is the revenue actually concentrated.

  2. 02

    Checking my own work

    Then I did the part I now do by reflex: I cross-validated six analyses in Python and SQL, running each one twice by two different routes and comparing the answers. That caught two methodology errors, a revenue-denominator bug and a naive freight-ratio calculation, and it caught them before either reached a dashboard. Both would have looked completely plausible on a chart, which is exactly the problem with them.

  3. 03

    The finding

    The headline number was a 3.12% repeat-purchase rate, which is low, and low numbers are only useful once you can say what to do about them. So I traced it to a specific, addressable cause: orders delivered 4+ days late scored 1.85/5, against 4.29/5 for on-time orders. Those delays weren't spread evenly either. They concentrated in specific states, at up to 3.5x the national rate, which turns a vague retention problem into a shortlist of places to fix.

  4. 04

    The concentration risk

    The second finding was one the raw category data hides completely: the top 10% of sellers (310 of 3,095) drive 67.6% of revenue. That is a concentration risk you cannot see by looking at categories, only by looking at the distribution. I surfaced all of it through a 3-page Power BI dashboard carrying 15+ DAX measures, and validated every one of those measures against Python and SQL before it went on a page.

What's next

Have a similar problem to solve?Let's talk it through.

I'm looking for a data analyst role in Sydney, and I have full working rights here. If something here looks like the work you need doing, get in touch.

Open to opportunitiesSydney, Australia