A synthetic online food-delivery marketplace, followed from single orders to a management decision on growth versus margin. Not affiliated with any real company; methodology is in the Sources section.
Latest month versus the previous month for 34 KPIs in seven groups. Each tile shows the value, the change, and a 12-month sparkline; green/red marks whether the move is good or bad for the business. Tiles tagged “3M” use a trailing 3-month window (sign-up-driven KPIs; see the Sources section). Hover a tile for its definition.
Revenue, cost structure and what drives contribution margin. The headline contribution margin is shown before promotions; the after-promotion view charges the platform-funded discounts against it.
The gap between the lines is the promotion cost, as a share of platform revenue.
What one delivered order earns and costs the platform — total, by cuisine, by restaurant tier and by payment method.
Acquisition quality, retention, segments, subscription impact and how concentrated revenue is across the customer base.
Segments whose profit share exceeds their customer share are over-earning.
Which restaurants create profit, how concentrated volume is, and how supply keeps up with demand.
Speed, reliability, cancellations, demand peaks, city-level performance and rider productivity.
Average delivered orders per day, last 3 months.
Green = better, red = worse within each column.
Observed acquisition spend by channel, CAC versus assumptions, LTV:CAC and the real cost of promotions.
Dashed line = break-even (1.0). A healthy channel is typically 3 or higher.
Contribution after promotions is the true per-order profit of a promoted order.
Twelve-month outlook with 80% intervals and the plan required to reach +25% orders and +2 pp contribution margin.
Downside / base / upside profit scenarios and the optimal allocation of a fixed promotion budget across city × segment cells.
Everything on this page is computed from the synthetic dataset in this repository. No real company data is used.
| Component | Approach |
|---|---|
| Data generation | Reproducible NumPy/pandas simulation (fixed seed) of ~12,000 customers, 320 restaurants, 520 riders and ~167k orders over 17 months, with seasonality, a growth trend, churn/retention curves and realistic financial relationships. v2 adds two tables: observed marketing spend by month × channel, and rider online/busy hours. |
| KPI layer | 34 scorecard KPIs computed from the order table in src/analytics/kpis.py. Delivered orders = Delivered + Refunded. Contribution profit is before promotions (the model’s headline definition); “after promotions” subtracts promotion cost. The scorecard compares the latest month with the previous month. |
| Forecasting | Seasonal-naive, moving-average and Holt-Winters models compared via rolling-origin (temporal) validation; the best model is selected per metric by WAPE. |
| Optimization | SciPy trust-constr solves a concave-response promotion-budget allocation across city × segment cells, maximizing incremental contribution profit under a fixed budget. |
| Segmentation | Rule-based on realized recency / frequency / monetary value and subscription status — not random labels. |
| KPI windows | Customer sign-ups are generated over a fixed window that ends on 2026-08-23, so the final month holds only part of its sign-ups. Sign-up-driven KPIs (new customers, new-customer share, marketing spend, CAC, marketing % of revenue) therefore use a trailing 3-month window, tagged “3M”. |
| Limitations | All data is synthetic: patterns such as retention, channel economics and city margins are model outputs, not market evidence. Per-order unit economics use the last 3 months; LTV is the observed lifetime profit to date, not a projection. Marketing spend and rider hours are generated tables too, with built-in CAC inflation for paid channels, so the gap between “observed” and planning CAC is a modelled outcome, not market evidence. |