AI demand forecasting for spare parts and inventory optimization

After-sales vehicle service faces a paradox: hundreds of thousands of SKUs, of which 80% sell less than once a month, yet shortage of a single critical part stops a car for a week. Demand for new parts (cold start) is virtually impossible to predict with classical methods. We solve this by combining

AI Development Areas

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1285
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1240
  • image_logo-advance_0.webp
    B2B Advance company logo design
    696
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    982
  • image_logo-aider_0.webp
    AIDER company logo development
    918
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1032

After-sales vehicle service faces a paradox: hundreds of thousands of SKUs, of which 80% sell less than once a month, yet shortage of a single critical part stops a car for a week. Demand for new parts (cold start) is virtually impossible to predict with classical methods. We solve this by combining ABC classification with ML models adapted to different demand types. Our approach reduces inventory levels by 15–25% while maintaining or improving service levels — proven across 50+ projects in parts distribution.

Why Croston and TSB are necessary for intermittent demand

Most parts sell infrequently and irregularly. ARIMA or Prophet on such demand yield MAPE >100%. Croston separately forecasts the interval between sales and transaction size, while TSB (Teunter-Syntetos-Babai) adds adaptation for obsolescent parts — reducing bias by 30–50%. On real distributor data, Croston achieved MAPE 78% vs 142% for ARIMA — 1.8 times more accurate.

from statsforecast.models import CrostonOptimized, IMAPA, TSB models = [ CrostonOptimized(), IMAPA(), TSB(alpha_d=0.1, alpha_p=0.1) ] 

Comparison of forecast methods for intermittent demand:

Model MAPE on C-class Applicability
CrostonOptimized 78% Rare demand without trend
TSB 72% Rare demand with obsolescence
ARIMA 142% Frequent demand
Prophet 115% Frequent demand with seasonality

How park-based forecast improves accuracy

Parts demand is driven not only by sales history but by the vehicle fleet. We build a model: demand = number of cars × failure probability by age. Data source — registration databases (fleet by model and year).

def park_based_forecast(part_number, region): applicable_models = parts_catalog.get_applicable_models(part_number) park = vehicle_registration_db.count( models=applicable_models, region=region, age_range=(2, 20) ) failure_curve = get_failure_rate_curve(part_number) expected_demand = sum( park[age] * failure_curve[age] for age in range(2, 21) ) / 12 return expected_demand 

This method is especially effective for new parts or product launches (cold start) when no sales history exists.

Safety stock optimization considering cost asymmetry

Classic newsvendor model: we optimize safety stock not by symmetric normal distribution but by real costs of stockout (customer downtime, lost loyalty) and holding. The cost of a critical part shortage can be 50 times the holding cost — safety stock for such SKUs is raised to z=3.0 vs standard z=1.65. Typical savings from this approach reach 2 million RUB per year for an average warehouse.

Part class Service level Coefficient z Cost ratio (stockout/holding)
Critical (immobilizing) 98–99% 2.0–2.3 30:1 – 50:1
Standard consumables 93–95% 1.5–1.65 10:1 – 20:1
C-class (slow) 85–90% 1.0–1.28 2:1 – 5:1
from scipy.stats import norm def optimal_safety_stock(mean_demand, std_demand, lead_time_days, service_level=0.95, holding_cost_rate=0.25, stockout_cost=50.0): cu = stockout_cost co = holding_cost_rate * unit_cost / 365 critical_ratio = cu / (cu + co) z = norm.ppf(critical_ratio) demand_during_lt = mean_demand * lead_time_days std_during_lt = std_demand * np.sqrt(lead_time_days) safety_stock = z * std_during_lt reorder_point = demand_during_lt + safety_stock return safety_stock, reorder_point 
Details of critical ratio calculation The formula critical_ratio = Cu / (Cu + Co) — where Cu (cost of understock) is loss from shortage, Co (cost of overstock) is holding cost of excess. At Cu/Co = 50, critical_ratio ≈ 0.98, corresponding to a service level of 98%.

How ML Ops keeps models in production

Models degrade over time: vehicle fleet, seasonality, assortment change. We set up an ML Ops pipeline: automatic retraining when accuracy drops (alert at MAPE > 90%), metric logging in MLflow, A/B testing of new versions. This ensures stable forecast performance without monthly manual intervention.

Managing obsolescent parts (phase-out)

A discontinued model — demand declines but not instantly. TSB model detects the downward trend, and our script identifies EOL signs:

def detect_obsolescence_risk(part_number, sales_history): trend = np.polyfit(range(len(sales_history)), sales_history, 1)[0] park_decline = get_park_trend(part_number) if trend < -0.1 and park_decline < -0.05: return 'phase_out', suggest_final_buy_quantity(part_number) return 'active', None 

Final buy — optimal order quantity for 5–7 years of warranty service. We account for the fact that after EOL parts become more expensive or unavailable.

Multi-echelon: reducing the bullwhip effect

In the OEM → distributor → dealer chain, demand variation amplifies. We synchronize safety stock across all levels: the higher the dealer buffer, the lower the distributor safety stock. Vendor Managed Inventory (VMI) replenishes the dealer's warehouse in real time — reducing overall chain inventory by 15–20%.

What is included in the work

  1. Data audit: sales history, vehicle fleet, parts catalog.
  2. Building ML models: Croston, TSB, park-based, seasonal factors.
  3. Safety stock and reorder point optimization (differentiated service levels).
  4. Phase-out management and final buy recommendations.
  5. Dashboard with forecasts, stockout/overstock alerting.
  6. Integration with WMS/ERP, VMI setup.
  7. Team training and operational documentation.

Payback period is less than 12 months. Contact us — we will assess your inventory portfolio and show the potential for inventory reduction. Our team: 10+ years in ML solutions for logistics, 50+ implemented projects, certified specialists in Croston method.