Enterprise ETL Data Quality Pipeline
Complementary data quality project
SKU-level daily demand forecasting aligned with SAP EWM wave planning logic. Forecast outputs exposed via OData services for SAP integration.
Supply chain planners and EWM wave planners need reliable short-horizon demand signals to decide when to schedule inbound receipts and when to trigger outbound picking waves. Traditional approaches rely on static reorder points or manual estimates, leading to inefficient wave planning and capacity issues.
Built a practical demand forecasting service that predicts SKU-level daily demand using Prophet time series forecasting. The system generates 4-week forecasts with confidence intervals and provides wave planning suggestions based on forecasted volume. Forecast outputs can be exposed via OData services for SAP EWM integration.
Demand forecasting directly feeds wave management and inbound planning—core EWM functions. Supply/demand reconciliation logic demonstrates understanding of business operations, not just data science. This project shows how analytics translates into operational decisions.
Traditional SAP EWM wave creation relies on current order volume and static rules. This project adds predictive capability, allowing planners to anticipate future demand and optimize wave scheduling proactively.
Key challenges addressed:
The system follows a per-SKU forecasting approach:
┌─────────────────────┐
│ Historical Demand │
│ (Daily, per SKU) │
│ 6+ months history │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Prophet Model │
│ Per SKU │
│ - Trend │
│ - Weekly Seasonality│
│ - Holiday Effects │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ 4-Week Forecast │
│ + Confidence │
│ Intervals │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Wave Planning │
│ Suggestions │
│ - Expected lines │
│ - Peak day flags │
│ - Wave windows │
└─────────────────────┘
Single warehouse, top 20 SKUs with:
Prophet was chosen for its strengths:
from prophet import Prophet
import pandas as pd
def forecast_sku_demand(sku_data):
"""Forecast demand for a single SKU."""
# Prepare data
df = sku_data[['date', 'demand_qty']].rename(
columns={'date': 'ds', 'demand_qty': 'y'}
)
# Initialize model with seasonality
model = Prophet(
yearly_seasonality=False,
weekly_seasonality=True,
daily_seasonality=False
)
# Add holidays if available
if 'holidays' in sku_data.columns:
model.add_country_holidays(country_name='US')
# Fit and forecast
model.fit(df)
future = model.make_future_dataframe(periods=28) # 4 weeks
forecast = model.predict(future)
return forecast
Simple heuristic-based wave suggestions:
The system delivers operational value:
MAPE < 25% on holdout period at aggregate level
Enables proactive wave planning vs reactive processing
Forecast outputs exposed via OData for EWM consumption
Helps optimize warehouse capacity and labor allocation
The system processes data through:
| Technology | Purpose | SAP-EWM Relevance |
|---|---|---|
| Python | Core programming language | Complements ABAP for analytics |
| Prophet | Time series forecasting | Production-proven forecasting |
| SQL | Data extraction | Skills transfer to SAP Open SQL |
| OData | API exposure | Standard SAP integration protocol |
| CDS Views | Semantic data modeling | S/4HANA cloud-ready architecture |