You have 200 couriers — each making 15–25 deliveries per day. A third of clients call the call center: "Where is my order?" The standard ETA of "by 18:00" gives a spread of ±2–3 hours. When a driver is an hour late, the client gets nervous. Especially if the order is dinner groceries? The result — cancellations, lower NPS, losses. We build ML systems that predict arrival time with 15–30 minute accuracy, using LightGBM, LSTM, and real-time data. Our cumulative experience — 20+ projects for logistics operators. We guarantee stable model performance in production and post-deployment support.
We have already implemented such projects for 20+ logistics operators in Russia and the CIS, accumulating over 5 years of ML experience in logistics. According to Uber Movement, LightGBM outperforms linear regression by 2–3 times in accuracy on historical data. Reducing call center load by 30–40% saves up to $27k–39k per year. Contact us — we will audit your data in 2 days.
Why traditional ETA methods don't work
Linear regression based on average speed and distance does not account for:
- Traffic jams: during peak hours, speed drops by 2–3 times.
- Weather: rain or snow adds 15–40% time.
- Operational delays: queue at loading, time at stops.
- Historical patterns: routes with regular delays on specific days.
Traditional methods yield MAPE of 25–40%. An ML model reduces MAPE to 10–15%, saving up to 20% in logistics costs. For an operator with a fleet of 200 vehicles, savings from reduced failed deliveries can reach $50k–70k per year.
How AI improves ETA accuracy
Feature engineering is key. We collect features from several sources: Route data:
- Route distance (Google Maps / HERE / OpenStreetMap OSRM)
- Historical speeds on roads at different times of day
- Geofencing of pickup and delivery points
Operational data:
- Warehouse processing time (pick-pack-ship)
- Current queue at loading/unloading
- Number of stops en route to the target point
External factors:
- Weather: rain/snow/fog increase time by 15–40%
- Traffic events: accidents, roadworks, closures (TomTom TrafficStats, HERE Traffic API)
- Time patterns: morning peak 08–10, evening peak 17–19
Model architecture
Task: regression — predict time from dispatch to delivery in minutes. Feature matrix:
features = { # Route 'distance_km': route_distance, 'n_stops': stops_remaining, 'route_complexity': turns_per_km, # Time 'hour_of_day': departure_hour, 'day_of_week': departure_dow, 'is_holiday': holiday_flag, 'month': departure_month, # Traffic 'historical_avg_speed': avg_speed_for_route_time, 'current_traffic_index': live_traffic_score, # 1.0 = normal, 2.0 = jam 'weather_delay_factor': weather_impact_estimate, # Operational 'shipment_weight_kg': weight, 'vehicle_type': truck_van_bike, 'driver_experience_days': driver_tenure, # Historical for this route 'route_historical_eta': past_mean_eta_for_route, 'route_eta_std': past_std_eta_for_route } Models:
- LightGBM Regressor: primary model for tabular data.
- Quantile Regression (p10/p50/p90): for ETA with confidence intervals.
- LSTM: if a sequence of intermediate GPS points is available.
Model comparison for ETA
| Model | Accuracy (MAPE) | Training time | Real-time support | Data requirements |
|---|---|---|---|---|
| LightGBM | 10–15% | Fast (minutes) | Yes (inference <5ms) | Tabular features |
| LSTM | 8–12% (with sequences) | Slow (hours) | Yes (inference <10ms) | GPS tracks, sequential |
| Linear regression | 25–40% | Instant | Yes | Minimum |
Real-time ETA update
A static forecast at dispatch is not enough. The ETA must update dynamically: Update triggers:
- Courier GPS tracking every 30 seconds.
- Traffic jam detected on route (traffic API polling every 5 min).
- Delay at previous delivery point.
- Weather event.
Online learning vs. static model: In production: the static model is retrained daily on new data. Real-time corrections via a kinematic motion model (speed + distance → updated ETA) without restarting the ML model.
def update_eta_realtime(current_position, destination, remaining_stops, base_eta, traffic_api): remaining_distance = calculate_distance(current_position, destination, via=remaining_stops) current_speed = traffic_api.get_current_speed(current_position, destination) historical_speed = get_historical_speed(current_position, destination, datetime.now()) traffic_factor = historical_speed / current_speed remaining_time = (remaining_distance / historical_speed) * traffic_factor * 60 return remaining_time Comparison of approaches: Last Mile vs. Long Haul
| Parameter | Last Mile | Long Haul |
|---|---|---|
| Number of stops | 10–30+ | 1–3 |
| Uncertainty | Client not opening, parking | Weather, weight restrictions |
| Forecast horizon | 1–4 hours | 1–5 days |
| Update frequency | 15–30 min | 1 hour |
| Integration with TSP | Yes (route optimization) | No |
| Key metric | % on time within ±15 min | MAPE |
Customer notifications
ETA is useless without integration with a communication layer: Notification workflow:
- After dispatch: "Your order is on its way, expected time: 14:30–15:00".
- 60 minutes before: "Courier will arrive in ~55 minutes".
- 15 minutes before: "Courier is nearby, will arrive in ~12 minutes".
- If delay > 20% from ETA: automatic notification with new time and reason.
Channels: SMS (Twilio/SMS.ru), Push notifications, Email, WhatsApp Business API. System metrics:
- ETA Accuracy: % of deliveries within ±15 min of ETA.
- ETA MAPE: average forecast error in percent.
- Proactive notification rate: % of delays that the customer was informed about before occurrence.
- CSAT correlation: correlation of ETA accuracy with delivery rating.
What's included in ETA system development
- Data audit: assess quality and completeness of historical data, configure pipelines.
- Feature engineering: develop a feature set tailored to your specifics (cargo type, region, seasonality).
- Modeling: LightGBM / LSTM / Quantile Regression, validation via cross-validation.
- Real-time update: integration with GPS tracker and traffic API.
- Notifications: configure triggers and channels (SMS, Push, Email).
- Metrics dashboard: panel for monitoring accuracy and proactivity.
- Support: documentation, training your team, 3-month warranty.
Timelines: basic ETA model with static forecast — 3–4 weeks. Real-time update + customer notifications + metrics — 10–12 weeks.
Order ETA system development — we will assess your project in 2 days. Get a consultation from our AI engineer. Contact us to discuss details.







