APPAREL RETURN DIAGNOSTIC
Find the return pattern a raw count can hide.
Load one supported sales-events CSV and one supported return-events CSV. This workbench compares ordinary returned-unit counts with exact 90-day SKU cohort rates, while keeping refunds, handling costs and recoveries separate.
Set the cohort window
The interval is inclusive at start and exclusive at end: [start, end). Version 1 requires exactly 90 days and USD.
Choose the two canonical CSVs
Canonical columns and limits
sales.csv
event_id,order_id,line_id,sku,occurred_at,currency,quantity,gross_amount,unit_cost,reversal_ofreturns.csv
event_id,return_id,order_id,line_id,sku,occurred_at,currency,quantity,refund_amount,reason,handling_cost,recovery_amount,reversal_ofUTF-8 CSV; 2 MiB per file; 2,000 combined events; 100 cohort SKUs; 40,000 combined cells; 4,096 bytes per cell. This is a documented format—not a claim that arbitrary Shopify exports work.
SOURCE-LINKED RESULT
What the cohort changes
Refunds are cash returned, not “lost profit.” Handling cost is only an explicitly supplied processing cost. Recovery is only explicitly supplied realized value such as resale proceeds or carrier reimbursement. Product unit cost is never counted as destroyed value; missing cost fields remain unknown and excluded.
SKU patterns: ordinary count vs cohort rate
| SKU | Sold | Returned | Rate | Count rank → rate rank | Sample | Sources |
|---|
Reason patterns
| Reason | Returned | SKUs | Sample | Sources |
|---|
Validation and interpretation
What this does not claim
It does not read a store account, infer missing sales, identify profit loss, promise savings, or assert what a merchant’s native report contains. Out-of-cohort and orphan returns are visibly excluded instead of being assigned an invented denominator. Low samples are marked. The comparison here is strictly between ordinary aggregate counts and the computed SKU/reason/cohort views.