ForecastingFeatured Project

Travel retail forecasting system

2023-2024
Client:Airport Retailer

Multi-SKU demand forecasting pipeline for 30+ products across 100+ duty-free locations with automated monthly updates.

Key result
Forecast error: 38% → 24%

The challenge

An airport retailer operating 50 duty-free stores across Europe and Asia was struggling with poor demand forecasts. Their existing approach was primarily based on manual adjustments and gut feel, with no systematic seasonality modeling or ability to handle promotional events.

This led to two major problems: frequent stockouts of popular items during peak travel seasons, and excess inventory of slow-moving products that tied up working capital. The category managers spent most of their time firefighting rather than strategic planning.

The company needed an automated forecasting system that could handle 500+ SKUs, account for complex seasonality patterns (tourist seasons, holidays, flight schedules), and provide reliable forecasts with minimal manual intervention.

The solution

I built an ensemble forecasting pipeline that combined multiple approaches to handle different product behaviors. For products with clear seasonal patterns, I used Facebook Prophet with custom seasonality features. For intermittent demand products (common in duty-free), I implemented Croston's method. The system also included custom business rules for promotional periods and special events.

The pipeline was built in Python and deployed with Airflow for automated weekly retraining. As new sales data came in, the models automatically retrained and generated updated forecasts. I also built a Streamlit dashboard that gave category managers visibility into forecasts, confidence intervals, and model performance metrics.

The key innovation was the feature engineering: I incorporated external signals like flight schedules, tourist season calendars, and holiday patterns from multiple countries, which significantly improved accuracy for this specific retail context.

Technical approach

  • Ensemble model combining Prophet (seasonal patterns), Croston's method (intermittent demand), and custom business rules
  • Feature engineering: holidays, flight schedules, tourist seasons, promotional calendars
  • Automated weekly retraining pipeline using Airflow with data quality checks
  • Time-series cross-validation with expanding window (52-week training, 4-week test)
  • Streamlit dashboard for category managers with forecast visualization and performance metrics

Implementation

Implementation took 8 weeks. Week 1-2 was discovery and data audit, where I identified data quality issues and gathered domain knowledge from category managers. Week 3-6 focused on model development and validation, testing different approaches on historical data. Week 7-8 was deployment and training, where I rolled out the system and trained the team.

The biggest challenge was handling the intermittent demand products (about 30% of SKUs), which required a different modeling approach than standard time series methods. I also had to build robust data quality checks, as the point-of-sale data occasionally had errors that could corrupt the forecasts.

Results

Forecast Error (MAPE)
38% → 24%
Across all SKUs
Inventory Costs
↓18%
Reduced working capital needs
Stockouts
↓34%
Improved product availability
Time Saved
15 hrs/week
Category manager time freed up

Overall impact

The system has been in production for over 2 years and continues to generate value. The improved forecasts allowed the retailer to optimize inventory levels, reducing both stockouts and excess inventory. Category managers now spend their time on strategic decisions rather than manual forecast adjustments. The system has expanded to cover additional locations and product categories.

Key lessons

  • 1
    Domain knowledge is critical: Understanding the specific patterns of travel retail (tourist seasons, duty-free shopping behavior) was more valuable than complex models.
  • 2
    Start simple, add complexity only where needed: The ensemble approach worked because different products needed different methods.
  • 3
    Build trust gradually: Started with a small pilot category, showed results, then expanded. Trying to replace everything at once would have failed.
  • 4
    Automated retraining is essential: Market conditions change, and models need to adapt. The weekly retraining keeps the system relevant.

Tech stack

PythonProphetscikit-learnPostgreSQLAirflowStreamlitpandasNumPy

Similar project?

Need help with a similar challenge? Let's discuss how I can help.

Get in Touch