-
Notifications
You must be signed in to change notification settings - Fork 0
01 Project Overview
An end-to-end decision-support platform built on 15 years (2010–2024) of BMW sales records (50,000 transactions, 11 features). It pairs rigorous econometrics with modern machine learning / deep learning, enriches the data with real external APIs (macro-economics, CO₂ emissions, FX), and ships a premium Streamlit dashboard behind a fully containerised, CI/CD-tested codebase.
The brief was "analyse and predict BMW luxury sales." A junior would jump straight to modelling and report whatever metric came out. The senior move was to interrogate the data first — and that changed everything.
Exploratory analysis + a formal statistical audit established two facts about the source dataset:
-
It is signal-free. Every feature is statistically independent of the
targets (max |correlation| ≈ 0.009; all ANOVA p > 0.4; mutual information
≈ 0). The data-generating process is essentially uniform noise — mean
Price_USDis flat (~$75k) across every model, which is economically impossible for a real luxury line-up. -
The classification target is leaked.
Sales_Classificationis a deterministic threshold onSales_Volume(High ⟺ Volume ≥ 7000, zero overlap).
See 04-Data-Integrity-and-Signal-Audit for the full evidence.
A null result risks two failure modes. The project answers both:
| Risk | Answer |
|---|---|
| "Maybe you just can't model." | 05-Predictive-Capability — the same pipeline reaches CV R² ≈ 0.85 on a signal-bearing target, SHAP recovering the true drivers. |
| "A null result is worthless." | The audit turns it into reusable, falsifiable evidence; business value is delivered by the 09-Scenario-Simulator, grounded in literature elasticities + real macro data. |
This is what separates a senior deliverable from a demo: knowing how to predict, and knowing when not to.
| Analysis | Result | Meaning |
|---|---|---|
| Max |correlation| (numeric features) | 0.009 | mutually independent noise |
| Price elasticity (log-log, HC3) | −0.001 (p = 0.92) | no measurable price sensitivity |
| Regression R² (best booster) | ≈ 0.00 | cannot beat the mean |
| Classification ROC-AUC (leakage-free) | ≈ 0.51 | no discriminative signal |
| Classification ROC-AUC (leaked) | 1.00 | signature of target leakage |
| Permutation test (label-shuffle) | p ≈ 0.90 | indistinguishable from chance |
| Predictive capability (signal-bearing) | CV R² ≈ 0.85 ± 0.003 | the pipeline does predict |
Full table: 17-Results-Summary.
- Data — schema-validated loading, integrity report, statistical signal audit.
- External augmentation — 4 hybrid (real + mock) API clients with caching, retry and a circuit breaker; 3 of 4 validated live.
- Econometrics — hedonic price model, price elasticity (robust SE), VIF, formal leakage proof.
- ML/DL — tuned XGBoost / LightGBM / CatBoost + a PyTorch tabular MLP, benchmarked honestly; MLflow tracking.
- Decision support — elasticity-based Scenario Simulator with Monte-Carlo credible intervals and luxury-segment priors.
- SQL — DuckDB analytics over the raw CSV.
- Explainability — SHAP attributions.
- Product — premium Streamlit dashboard (7 tabs).
-
MLOps — pytest + mypy + coverage gate,
pre-commit, GitHub Actions, multi-stage Docker, GHCR publish, Trivy + pip-audit, Dependabot, MkDocs site, Hugging Face Spaces deployment.
Continue to 02-Architecture.
BMW Luxury Sales Analytics · by Maxime GOURGUECHON · MIT · Live demo · Docs · GHCR image
Foundations
Analytical core
Analysis layers
- 06-External-Data-Augmentation
- 07-Econometrics
- 08-Machine-Learning-and-Deep-Learning
- 10-SQL-Analytics
- 11-Explainability-SHAP
Decision support
Product & engineering
Reference