Sales Visit Optimization Engine — 30 AI-ranked recommendations, every Monday morning.
A fully automated MLOps pipeline that analyses sales transactions, detects under-indexed SKUs across all points of sale, and delivers a prioritised visit list to every sales representative before the week begins.
Pernod Ricard's sales force manages hundreds of points of sale. Each representative had access to raw sales figures — but no structured way to prioritise accounts or identify which SKUs to push.
High-value opportunities were missed, visits were driven by habit, and under-performing SKUs went undetected until quarterly reviews — too late to act.
DStar runs autonomously every Monday morning. It ingests CRM, ERP and POS transaction data, computes indexation scores for every SKU at every outlet, and delivers a ranked list of 30 priority visits per rep before the working week begins.
All services run in Docker containers on Azure. The Durable Orchestrator manages parallelism, retries and state — reliable execution every week without supervision.
Drag nodes · Animated edges show data flow direction
A product's sales at an outlet only make sense relative to its potential. DStar computes an indexation score, then layers in clustering and temporal signals to build a composite visit priority.
The product sells below its regional benchmark at this outlet. There is untapped potential — a sales rep visit is likely to unlock incremental volume.
The product already outperforms its benchmark. This outlet is saturated — the rep's time is more valuable at an under-indexed account.
Points of sale are clustered by GPS coordinates using K-Means. This ensures the Top 30 recommendations form geographically efficient routes — minimising travel time between visits.
SKUs are grouped by category, price tier and sales seasonality profile. Indexation benchmarks are computed within clusters, avoiding unfair comparisons between products with fundamentally different demand patterns.
Outlets are segmented by channel (on-trade vs off-trade), volume tier and historical purchase behaviour. Each segment uses its own benchmark distribution, improving the accuracy of the indexation score.
Raw indexation scores are weighted by time elapsed since last visit. An account that was visited 2 weeks ago contributes less urgency than one not visited in 3 months, even if the indexation gap is identical.
This prevents over-clustering of visits at already-serviced accounts and ensures the full territory gets systematic coverage over time.
Every layer runs on Microsoft Azure. All components are Dockerised for portability and consistency across dev, staging and production environments.