Work · Analysis · 07
E-Commerce Return Rate Analysis
541,000 UK retail transactions read against Germany's 92 billion euro returns problem.
- Type
- Analysis
- When
- UCI Online Retail · 2026
- Role
- Sole analyst. Transaction-level analysis and segmentation.
- Scale
- 541,000 transactions · UCI Online Retail
In plain language
Returns are treated as an annoyance in most retail analysis. In Germany they are closer to a structural cost: return rates are among the highest in Europe and free returns are near enough a legal expectation. This looks at 541,000 UK retail transactions to ask which categories, price bands and customer segments generate the most returns, and reads the answer against a market where that cost sits inside the margin rather than beside it.
The question
Which categories, price ranges and customer segments drive the highest return rates, and what does that imply for a market where returns are a margin structure rather than an edge case?
Which categories, price ranges and customer segments drive the highest return rates, and what that implies for a market where returns are a structural cost rather than an edge case.
Framing
The dataset is UK retail. The question is German: German e-commerce runs one of the highest return rates in Europe, and free returns are close to a legal expectation. A return rate that is an annoyance in one market is a margin structure in the other.
Approach
Transaction-level analysis across 541,000 rows, segmenting by product category, price band and customer purchase history, with returns identified from negative-quantity records against their originating orders.
Status
This one is deliberately listed as an analysis rather than a full case study. The figures live in the repository; the write-up here is a summary rather than a reconstruction, and I would rather say so than pad it out.
How it is put together
Left to right, the path a request or a record takes through the system.
01
Source
- UCI Online Retail
- 541,000 transactions
- UK retail
02
Identify returns
- Negative-quantity records
- Matched to originating orders
The step that decides whether anything downstream is right.
03
Segment
- Product category
- Price band
- Customer purchase history
04
Frame
- Return rate by segment
- Read against a 92 billion euro market
UK data, German question.
What happens, step by step
In plain language, in the order it happens.
Take transaction-level retail data
541,000 rows of UK online retail, at individual transaction granularity rather than pre-aggregated.
Find the returns
Returns appear as negative-quantity records. They only become meaningful once matched back against the order that produced them. An unmatched negative row is not a return, it is an adjustment.
Segment three ways
By product category, by price band, and by customer purchase history, so the question can be asked of each independently.
Read it against the German market
The dataset is UK. The question is German: a return rate that is an annoyance in one market is a margin structure in the other, against a returns problem measured in the tens of billions of euros.
Decisions, and what they cost
Every choice worth recording has a road not taken. Both are here.
Match returns to originating orders
instead ofCounting negative-quantity rows
Unmatched negatives include adjustments, corrections and cancellations that are not returns at all. Counting them inflates every rate downstream, and the error is invisible in the output.
Frame a UK dataset against a German question
instead ofPretending the data is German
The behaviour is transferable, the market economics are not. Saying which is which keeps the analysis useful without overstating what the data can support.
List this as an analysis, not a full case study
instead ofPadding the write-up to match the others
The figures live in the repository and the write-up here is a summary rather than a reconstruction. Saying so is better than inflating it into something it is not.
What came out of it
- 541,000 transactions analysed at line level, with returns identified against their originating orders.
- Segmented by category, price band and customer history.
- Framed against German market economics, where returns are structural cost rather than an edge case.
Still open
- This is the thinnest write-up on the site and it is deliberately labelled as such. The repository carries the figures.
- A German transaction dataset would let the framing become a finding instead of a reading.
Built with
- Python
- pandas
- Cohort analysis
- Business intelligence