Inventory Optimization Solution in the Azure AI Gallery
This post is co-authored by Dmitry Pechyoni, Senior Data Scientist, Hong Lu and Chenhui Hu, Data Scientists, Praneet Solanki, Software Engineer, and Ilan Reiter, Principal Data Scientist Manager at Microsoft.
For retailers, inventory optimization is a critical task to facilitate production planning, cost reduction, and operation management. Tremendous business value can be derived by optimizing the inventories. For example, optimizing product ordering strategy can help minimize inventory cost and reduce stockout events. This also improves customer satisfaction levels. However, existing on-premises and cloud-based inventory optimization solutions only provide limited flexibility of inventory optimization strategies and, in many cases, cannot be customized to meet the specific business rules of each retailer.
We recently published a cloud-based inventory optimization solution for retail in the Azure AI Gallery. We designed this solution to be flexible, scalable and fully automated. Operations researchers and developers could use this solution as a baseline and further extend and customize it to the business goals and constraints of retailers.
Our inventory optimization solution generates product orders with optimized quantities and schedule, based on a given forecasted demand, storage and transportation costs, and a set of constraints. The optimized orders are stored in Azure and can be further integrated into ordering systems used by retailers and suppliers.
Our solution can be used to optimize inventory in two settings:
- A chain of retail stores that receives products from multiple suppliers and sells them to consumers.
- A distribution center or large warehouse that receives products from multiple suppliers and distributes them to stores.
The solution can be deployed in an Azure subscription either automatically, by clicking the'Deploy' button in the main deployment page, or manually, by following the instructions here. Once deployed, the solution will start running a simulator of demand and supply of products in a chain of 6 stores with 20 products and 5 suppliers. The optimization engine will create optimized orders according to two inventory management policies. These orders can be downloaded from a deployed sample website. In the technical guide we show how to disconnect the simulator and run our solution with the real data.
In addition to generating optimized orders, our inventory optimization solution evaluates the performance of inventory management policies. We used 4 KPIs that are commonly used for inventory management performance evaluation, namely:
- Normalized revenue.
- Total revenue.
- Number of stockout events.
- Turnover ratio.
These KPIs are visualized in the deployed PowerBI dashboard. Below is a section of the dashboard that visualizes the normalized revenue using simulated data:
In the central bar chart, we compare the total normalized revenue of two optimized inventory management policies, s_Q and s_Q_perishable with the baseline policy, called Sim. In the left we show the relative increase in the normalized revenue when switching from the baseline policy to the optimized s_Q policy. The right graph compares the same policies at a chosen range of dates. 3 other KPIs are visualized in a similar way.
The diagram below summarizes the various components of our solution and the dependencies between them:
To scale up to millions of store/product combinations, we use Azure Data Lake Analytics for distributed data processing and Azure Batch for solving optimization problems in parallel. We provide scripts for eight commonly used inventory optimization policies. These scripts can be customized for a specific retailer and new policies can be added by providing new scripts. Our solution includes Bonmin, an open source solver for general mixed integer non-linear programming problems. Additional open source solvers (e.g. MIPCL) and commercial solvers (e.g. Gurobi) can also be plugged into our solution by using the Pyomo interface.
We hope you make the most of this solution – please do share your feedback with us!
Dmitry, Hong, Chenhui, Praneet & Ilan