Inventory mismanagement costs retailers $1.77 trillion per year globally, according to IHL Group. Overstock accounts for $562 billion in markdowns and waste. Stockouts account for $1.21 trillion in lost sales. The root cause in both cases is the same: inaccurate demand forecasts.
Most forecasting systems treat demand as a time series problem. Take the historical sales of SKU #4721, fit a curve, project it forward. ARIMA. Exponential smoothing. Prophet. These models look at one column of numbers and try to predict the next value.
This framing is wrong. Demand is not a function of past sales alone. It is a function of the entire relational context around a product: who bought it, what else they bought, what competitors are doing, what marketing campaigns are running, what the weather looks like, and whether the supplier can deliver on time. These signals live in related tables, not in a single column of historical sales.
weekly_sku_sales
| sku_id | week | units_sold | promo_active | competitor_price |
|---|---|---|---|---|
| SKU-4721 | 2025-W01 | 142 | No | $24.99 |
| SKU-4721 | 2025-W02 | 158 | No | $24.99 |
| SKU-4721 | 2025-W03 | 137 | No | $22.49 |
| SKU-4721 | 2025-W04 | 161 | Yes | $22.49 |
| SKU-4721 | 2025-W05 | ? | No | $19.99 |
Highlighted: competitor dropped price in W03, your promo ran in W04. Time series models see only the units_sold column.
product_catalog
| sku_id | category | brand | launch_date | substitutes |
|---|---|---|---|---|
| SKU-4721 | Winter Outerwear | NorthPeak | 2023-09-01 | SKU-4718, SKU-5102 |
| SKU-4718 | Winter Outerwear | ArcticEdge | 2024-08-15 | SKU-4721, SKU-5102 |
| SKU-5102 | Winter Outerwear | NorthPeak | 2024-10-01 | SKU-4721, SKU-4718 |
Substitution relationships are encoded here. When SKU-4718 goes out of stock, demand shifts to SKU-4721 and SKU-5102.
What time series models see
A standard time series model takes a sequence of past values and predicts future values. For demand forecasting, the input is weekly or daily sales for a single SKU:
Week 1: 142 units. Week 2: 158 units. Week 3: 137 units. Week 4: 161 units. Predict Week 5.
The model learns patterns in this sequence: trend (is demand growing or declining?), seasonality (does it spike in December?), and noise (what is the typical variance?). More sophisticated models like DeepAR and N-BEATS can learn complex temporal patterns and generate probabilistic forecasts.
What they handle well
- Steady-state demand with consistent seasonal patterns
- High-volume SKUs with rich history (2+ years of data)
- Short-term forecasts (1-4 weeks) where momentum dominates
What they miss
Time series models are blind to everything that is not in the sales history column. They cannot see:
- A marketing campaign launching next Tuesday that will spike demand 40%
- A competitor's new product release that will cannibalize 15% of sales
- The fact that customers who bought this product also bought product B, and product B just went on sale
- A supplier delay that will cause a stockout in 3 weeks, redirecting demand to substitute products
- Weather patterns affecting seasonal demand in specific regions
These are not edge cases. For most consumer products, external factors drive 30-50% of demand variation. A pure time series model treats all of that as unexplained noise.
What relational context adds
An enterprise retail database typically includes 8 to 20 connected tables: products, categories, brands, stores, customers, orders, order_items, promotions, campaigns, suppliers, inventory_snapshots, returns, reviews, pricing_history, and competitor_data.
The demand signal for any single product is distributed across many of these tables. Here are the specific relational signals that matter:
1. Customer purchase graphs
Demand for winter coats in October depends on what those same customers bought in July. Here is the actual data trail.
customer_orders (summer purchases)
| order_id | customer_id | product | category | date | amount |
|---|---|---|---|---|---|
| ORD-8001 | CUST-220 | Ray-Ban Aviator Pro | Premium Sunglasses | 2025-07-05 | $189 |
| ORD-8002 | CUST-221 | Oakley Holbrook Elite | Premium Sunglasses | 2025-07-12 | $214 |
| ORD-8003 | CUST-222 | Maui Jim Peahi | Premium Sunglasses | 2025-07-18 | $279 |
| ORD-8004 | CUST-223 | Budget Sunglass Pack | Value Sunglasses | 2025-07-20 | $24 |
Customers 220-222 bought premium sunglasses in July. Customer 223 bought budget sunglasses. This distinction matters for winter coat demand prediction.
customer_orders (winter coat purchases, prior years)
| order_id | customer_id | product | category | date | amount |
|---|---|---|---|---|---|
| ORD-6010 | CUST-220 | NorthPeak Expedition Parka | Winter Outerwear | 2024-10-08 | $349 |
| ORD-6011 | CUST-221 | NorthPeak Expedition Parka | Winter Outerwear | 2024-10-15 | $349 |
| ORD-6012 | CUST-222 | ArcticEdge Storm Jacket | Winter Outerwear | 2024-10-22 | $289 |
Highlighted: the same 3 customers who bought premium sunglasses this summer also bought winter outerwear last October. Premium sunglasses up 20% this July? That predicts stronger winter coat demand in October. The path: coats to customers to their summer purchases to summer trends.
This is a multi-hop relational signal: coats → customers who buy coats → their summer purchases → summer purchase trends. No time series model can see this because the signal lives across three tables (products, orders, customers) and spans two different product categories.
2. Substitution and complementary effects
When a competitor launches a product or one of your SKUs goes out of stock, demand shifts to substitutes. These substitution relationships are encoded in the relational structure: products in the same category, products from competing brands, products that co-occur in customer carts.
A graph model learns these substitution edges and uses them for forecasting. When the model knows that SKU A and SKU B are frequently co-purchased, and SKU B just had a price increase, it can predict that SKU A demand will increase.
3. Campaign and promotion propagation
Marketing campaigns do not affect products uniformly. An email campaign targeting high-value customers might lift demand for premium SKUs but not budget products. A social media campaign might drive traffic to a landing page that features specific categories.
The impact propagates through the relational structure: campaign → targeted customer segments → products those segments typically buy → expected demand lift. A relational model captures this propagation path. A time series model sees an unexplained spike and calls it noise.
4. Supplier and inventory constraints
Demand forecasting is not just about predicting what customers want. It is about predicting what you can sell, which depends on what you can stock. Supplier lead times, warehouse capacity, and logistics constraints shape the effective demand.
If a supplier delays shipment for SKU A, the stockout redirects demand to substitutes. A relational model that sees the supplier table, the inventory table, and the product relationships can anticipate this redirection before it happens.
Time series forecasting
- One column of historical sales per SKU
- Blind to marketing, competition, and cross-table signals
- Fails on long-tail SKUs with sparse history
- Cannot forecast new products (cold-start)
- Treats demand shifts as unexplained noise
Relational forecasting (KumoRFM)
- Full relational context from all connected tables
- Captures campaign, substitution, and customer signals
- Long-tail SKUs benefit from category-level patterns
- New products forecast from relational position
- Demand shifts explained by relational context changes
The accuracy difference
The gap between time series and relational forecasting depends on the product category and the volatility of demand. In production deployments, adding relational context typically improves forecast accuracy by 15-30% measured by Mean Absolute Error (MAE) reduction.
The improvement is not uniform. It is concentrated in the areas where time series models are weakest:
| Scenario | Time series MAE | Relational MAE | Improvement |
|---|---|---|---|
| Stable high-volume SKUs | Baseline | 5-10% better | Modest |
| Long-tail SKUs | Baseline | 20-35% better | Substantial |
| New product launches | No forecast possible | Reasonable forecast from relational context | Infinite |
| Promotional periods | Baseline | 25-40% better | Large |
| Market disruptions | Baseline | 30-50% better | Very large |
The largest improvements come in exactly the situations where accurate forecasts matter most: new product launches (where inventory decisions are high-risk), promotions (where over- or under-ordering has immediate margin impact), and disruptions (where the historical pattern breaks).
The feature engineering burden
In principle, you can add relational signals to a traditional forecasting model by engineering features from related tables. Many teams try this: compute category_avg_sales_30d, brand_trend_90d, promotion_uplift_coefficient, competitor_price_delta, and feed them alongside the time series into a gradient boosted model.
This works, partially. The challenge is the same combinatorial explosion that plagues all feature engineering on relational data. With 15 tables and dozens of columns per table, the possible features number in the thousands. A team might build 50-100, spend weeks doing it, and still miss the multi-hop and temporal interaction patterns that carry the most signal.
For demand forecasting specifically, the problem is compounded by scale. A retailer with 100,000 SKUs across 500 stores has 50 million SKU-store combinations. Features must be computed for each combination at each forecast horizon. The data engineering pipeline becomes as complex as the modeling itself.
forecast_accuracy_comparison
| SKU segment | Time series MAE | Relational MAE | Improvement |
|---|---|---|---|
| High-volume (top 20%) | 8.2% | 6.9% | 15.9% |
| Mid-volume (20-80%) | 14.7% | 10.8% | 26.5% |
| Long-tail (bottom 20%) | 31.4% | 19.6% | 37.6% |
| New launches (<90 days) | No forecast | 22.1% MAE | Infinite |
| Promo periods | 18.9% | 11.3% | 40.2% |
Highlighted: long-tail and new launches show the largest improvement. These are exactly the cases where relational context fills the gap left by sparse history.
PQL Query
PREDICT SUM(order_items.quantity, 0, 7) FOR EACH products.sku_id
Predict next 7 days of unit sales for every SKU. The model automatically incorporates campaign schedules, competitor pricing, substitution relationships, and customer segment trends from related tables.
Output
| sku_id | predicted_units_7d | confidence_interval | top_driver |
|---|---|---|---|
| SKU-4721 | 148 | 131-165 | Competitor price drop (-$5) |
| SKU-4718 | 0 | 0-12 | Out of stock at supplier |
| SKU-5102 | 89 | 72-106 | Substitution from SKU-4718 |
| SKU-9033 | 214 | 195-233 | Email campaign (Wed launch) |
How foundation models change forecasting
A relational foundation model eliminates both the time series limitation and the feature engineering burden.
No feature engineering
KumoRFM reads the raw tables (products, orders, customers, promotions, inventory) and constructs a temporal graph internally. No manual joins, aggregations, or feature computation.
Full relational context
The graph representation connects products to customers to orders to campaigns to suppliers. The model sees the full context for each forecast: customer purchase patterns, substitution effects, campaign impacts, and supply constraints.
Cold-start capability
A new product with zero sales history is immediately connected in the graph to its category, brand, price range, and target customer segments. The model generates a forecast based on how similar products (by relational position, not just attributes) have performed. This is impossible with pure time series models.
Rapid adaptation
When market conditions change (a competitor enters the market, a supply chain disruption hits, a pandemic shifts demand patterns), the relational context changes immediately. The graph reflects the new reality (new competitor products, changed supplier relationships, shifted customer behavior) and the model adapts without manual feature re-engineering.
Practical implications
The $1.77 trillion inventory mismanagement problem is not going to be solved by better time series algorithms. The bottleneck is not the model. It is the data representation.
A time series model that looks at one column of past sales is making a forecast with 30-50% of the available signal missing. That missing signal lives in the related tables that the model never sees.
A relational forecasting model that sees all connected tables makes a forecast with the full signal. The accuracy improvement is not because the model is smarter. It is because the model sees more data.
For a retailer with $10 billion in revenue, a 20% improvement in forecast accuracy translates to roughly $200 million in reduced overstock waste and recovered stockout sales. The math is simple. The only question is whether your forecasting system can see all the data that drives demand, or just the sales column.