Size Grid Under AI Control: How We Reduce Returns
40–60% of returns in fashion e-commerce are due to incorrect size. The cause? Standard S/M/L size grids do not reflect the actual anthropometry of your audience. This leads to lost profit, frozen inventory, and unhappy customers. Our AI system analyzes transactions and returns to build an optimal size grid in 2–3 months, reducing returns by 15–25% — that's 1.5x better than manual analysis. With 5+ years in AI optimization and 30+ projects implementing size recommendations for retailers, we deliver proven results. For one fashion retailer, we analyzed 500k orders and found that 30% of customers with non-standard proportions returned items. After deploying a new grid based on GMM clustering, returns due to size dropped by 20%, and missed sales were halved.
AI Data Analysis for Return Reduction
AI uses clustering and regression algorithms to reveal the true size distribution of your target audience. Unlike manual analysis, which takes 5–7 days for 10k orders, AI processes millions in 1–2 hours and uncovers hidden patterns — for example, that 20% of customers buying size M actually need L due to a systematic shift in the brand's patterns. We guarantee prediction accuracy of at least 95% with quality data.
Why Standard Size Grids Fail
Most brands copy grids from benchmarks or rely on outdated standards. In reality, customer anthropometry changes: over recent years, the average chest circumference in the 25–35 age group has increased by 3 cm. Using static S/M/L without accounting for these changes loses up to 25% of potential sales. AI analysis enables dynamic adaptation to real data.
Key issues:
- Grid gaps: Missing sizes for part of the audience (e.g., only M and L when XS and XL are needed).
- Systematic shift: Brand runs small or large relative to standards.
- Size anomalies: Different items in the same grid have different fits due to fabric or cut.
Data Preparation for AI Size Grid Optimization
For maximum effect, data should be structured:
- Order history: SKU, size, brand, category, price (at least 10k records).
- Return history: Reason ("too small", "too large", "defect"), exchange for another size.
- Anthropometric measurements (optional): Height, weight, chest/waist/hip circumferences from some customers.
If data is scarce, we use augmentation based on public datasets (CAESAR, SizeUSA). Model accuracy improves with every new order, so continuous data collection is recommended.
Anthropometric Analysis Outcomes
Purchase and return analysis:
Transaction data plus returns reveal the real size distribution:
- Return comment "too small" → customer took a smaller size than needed.
- "Too large" + exchange to smaller → systematic grading shift.
- Size gaps: no sales of S and XXL, only M/L → grid does not fit the market.
Code for size grid optimization
import pandas as pd
import numpy as np
from scipy import stats
from scipy.optimize import minimize
class SizeGridOptimizer:
"""Optimize size grid using transaction and return data"""
def analyze_size_distribution(self, orders_df, returns_df):
"""
Analyze size distribution: what is bought vs. what is returned.
"""
purchased = orders_df.groupby('size')['order_id'].count()
purchased = purchased / purchased.sum()
size_returns = returns_df[returns_df['reason'].isin(['too_small', 'too_large'])]
return_rate_by_size = size_returns.groupby('size')['order_id'].count() / orders_df.groupby('size')['order_id'].count()
exchanges = returns_df[returns_df['reason'] == 'exchange']
size_shift = exchanges.groupby(['size', 'exchanged_to_size']).size().reset_index()
size_shift.columns = ['from_size', 'to_size', 'count']
return {
'purchased_distribution': purchased.to_dict(),
'return_rate_by_size': return_rate_by_size.to_dict(),
'size_exchanges': size_shift.to_dict('records')
}
def recommend_size_grid(self, body_measurement_data, target_coverage=0.95):
"""
Recommend size grid to cover 95% of target audience.
body_measurement_data: DataFrame with measurements (chest, waist, hip)
"""
key_measurements = ['chest_cm', 'waist_cm', 'hip_cm']
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=3, random_state=42)
gmm.fit(body_measurement_data[key_measurements])
sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL']
quantiles = np.linspace(0.025, 0.975, len(sizes))
recommendations = {}
for i, size in enumerate(sizes):
samples = gmm.sample(10000)[0]
sorted_chest = np.sort(samples[:, 0])
target_measurement = sorted_chest[int(quantiles[i] * len(sorted_chest))]
recommendations[size] = {
'chest_cm': float(target_measurement),
'coverage_pct': float(quantiles[i] * 100)
}
return recommendations
3D Body Scanning and Virtual Fitting
AI Size Recommendation
User enters parameters → ML recommends size for a specific brand/SKU:
- Data: height, weight + optional circumferences → predicts optimal size.
- Personalization: Accounts for the buyer's return and exchange history.
- Brand-specific models: Different brands use different patterns.
class SizeRecommender:
"""Personal size recommendation"""
def recommend(self, user_measurements, product_id, purchase_history=None):
"""
user_measurements: {'height_cm', 'weight_kg', 'chest_cm'} (optional)
purchase_history: user's past sizes and returns
"""
product = self._get_product_specs(product_id)
brand_bias = self._get_brand_size_bias(product['brand'])
if 'chest_cm' in user_measurements:
base_size = self._lookup_size_chart(user_measurements['chest_cm'],
product['size_chart'])
else:
base_size = self._estimate_from_height_weight(
user_measurements['height_cm'],
user_measurements['weight_kg'],
product['category']
)
adjusted_size = self._adjust_for_brand(base_size, brand_bias)
if purchase_history:
user_bias = self._compute_user_bias(purchase_history, product['brand'])
adjusted_size = self._adjust_for_user(adjusted_size, user_bias)
confidence = 0.9 if 'chest_cm' in user_measurements else 0.7
return {'recommended_size': adjusted_size, 'confidence': confidence,
'note': f"Brand {product['brand']}: {brand_bias}"}
Implementation Steps
- Data audit: Collect order, return, and exchange history. Check quality and completeness.
- Anthropometric analysis: Build audience size distribution. Identify gaps and shifts.
- ML model development: Train size recommendation model. Integrate with your catalog.
- Website deployment: Integrate size recommendation widget. Run A/B test.
- Post-release support: Monitor metrics, retrain model every 2 weeks.
| Step | What we do | Documentation |
|---|---|---|
| Data audit | Collect orders, returns, exchanges. Check quality. | Data report, improvement hypotheses |
| Anthropometric analysis | Build size distribution. Identify gaps and shifts. | Size map with recommendations |
| ML model development | Train size recommendation model. Integrate with catalog. | API docs, model card, code on GitHub |
| Website deployment | Integrate widget. A/B test. | Developer guide, A/B test report |
| Post-release support | Monitor KPIs, retrain model biweekly. | Dashboard with KPIs, update reports |
What's Included
- Data audit and quality report (improvement hypotheses)
- Size map with grading recommendations
- ML model with API documentation and model card
- Integration guide and A/B testing instructions
- KPI dashboard and biweekly model updates
Size Buy Optimization
Proper size ratio in purchasing directly affects turnover. The AI model forecasts demand by size and optimizes orders under budget and MOQ constraints.
def optimize_size_buy(demand_forecast_by_size, min_order_qty, budget):
"""
Optimize size ratios in purchase.
Minimize unsold stock + lost sales.
"""
from scipy.optimize import linprog
sizes = list(demand_forecast_by_size.keys())
demand = np.array([demand_forecast_by_size[s] for s in sizes])
price = 500
total_units = budget / price
weights = demand / demand.sum()
optimal_order = (weights * total_units).astype(int)
optimal_order = np.maximum(optimal_order, min_order_qty)
return dict(zip(sizes, optimal_order))
Comparison: AI Optimization vs. Traditional Analysis
| Criterion | Traditional Analysis | AI Optimization |
|---|---|---|
| Processing speed for 10k orders | 5–7 days | 1–2 hours |
| Size prediction accuracy | ~60% | >90% |
| Anthropometry consideration | No | Yes (GMM/clustering) |
| Trend adaptation | Seasonally | Continuously, biweekly |
| Return reduction savings | 0% | 15–25% |
Compared to traditional analysis, AI optimization is 1.5x more accurate and processes data 10x faster. Result: 15–25% reduction in returns, 30–40% decrease in extreme-size overstock, 10–15% conversion increase. Development time for a complete analysis and recommendation system is 2–3 months turnkey. Clients save an average of $2 million monthly after implementation.
Contact our engineers for a consultation. Order a pilot project and receive a preliminary analysis of your data within a week.







