Case Study: Forecasting Sales using Promotions, Sellouts, Prices, and Inventory
SupChains delivered a forecasting model to Animalcare Group, an international veterinary pharmaceutical manufacturer and distributor based in the United Kingdom.
Animalcare operates in seven European countries, employs more than 200 people, and reported a gross revenue of around € 80 million in 2024.
Using SupChains’ machine learning models and leveraging Animalcare’s rich data, we were able to reduce forecasting error by 19% compared to a statistical benchmark. Forecasting accuracy is more than a technical metric — it has a direct, measurable impact on supply chain performance. Better forecasts lead to lower inventory levels, fewer shortages, reduced obsolescence, and improved service levels. While the exact benefits vary by industry and organization, the relationship between forecasting accuracy and supply chain efficiency is well established. To highlight this, we’ve gathered a few insights from industry benchmarks and SupChains’ simulations:
This case study is structured into four parts. First, we outline how we collected and cleaned the data, and discuss how business drivers, such as prices, promotions, inventory, and sellouts, influenced the model. Second, we discuss the results and how success was measured. Third, we outline some of the features we utilized in our model and the impact of key business drivers. Finally, we detail how the proof of concept was conducted and how collaboration between SupChains and Animalcare was structured during and after model development.
Scope
Animalcare is active in seven European countries and has a stable base of around 700 active product-market combinations. As they face rather long supply lead times and need to plan production and purchasing decisions, they require an 18-month forecasting horizon.
Data Collection and Cleaning
Collecting, cleaning, and structuring data is fundamental to forecasting success. Beyond the basic principle of 'garbage in, garbage out,' high-quality data enables the model to better understand demand signals, thanks to demand drivers. At SupChains, we treat data as a source of insight, not just input — our goal is to feed our model with the correct information, in the proper format, to unlock its full potential.
Moreover, our experience with our clients shows that most erratic forecasts are often due to inconsistent inputs. That’s why we emphasize the data preparation phase (supply chain managers have many KPIs to track forecasting accuracy, but few — if any — to measure input data quality). We ensure our models run smoothly and reliably by rigorously validating input data and integrating key business drivers.
Master Data
Collecting consistent master and hierarchical data is key for two main reasons:
- The machine learning engines use products’ brands and families as inputs to generate forecasts
- Correct master data allows you to flag product transitions (old product -> new product) and launch dates. Without these, your forecasting engine might just get confused by every new product. Product transitions are low effort and high impact — they’re the lowest hanging fruit when working on data collection.
Inventory
Many professionals often assume that prices are the most significant driver for predicting demand. My experience with supply chains showed me that the predictive value of prices is usually only marginal (except if you have a pricing calendar). Instead, at SupChains, we first focus on collecting inventory historical levels, as it enables our forecasting engine to identify historical shortages and subsequently eliminate supply-constrained periods, thereby ensuring a supply-unconstrained demand forecast. (If you don’t account for shortages, it means you are forecasting supply-constrained sales, which will likely result in a shortage-vicious-circle as explained in Demand Forecasting Best Practices)
Collecting inventory levels typically involves several challenges that require close collaboration and business expertise. Together with Animalcare, we identified two key cases that needed to be addressed:
- Make-to-Order (MTO) products, which we flagged as always available to reflect their on-demand nature.
- Centralized inventory, where certain countries hold stock on behalf of others, requires us to reassign availability logically across markets.
Promotions
Promotions are often the most important business drivers when forecasting demand. If you want to automate demand planning, your forecasting model must understand how promotions shape demand and be fed with both historical and future promotions.
Unfortunately, collecting historical promotions is often complicated for most companies. For most of our projects, promotional calendar availability differs per client, market, and location. As shown in the anonymized graph below, data availability for this project varied significantly by country. Failing to include promotions in your forecasting horizon will result in lower forecasts, as the ML model will assume you don’t promote your products. This is why we included specific business logic in case long-term promotional plans are missing.
Prices
Unfortunately, as is often the case in B2B environments, prices have a limited impact on demand forecasts. This is mainly because future prices are rarely known in advance — most supply chains don’t maintain a price calendar — and we don’t have access to competitors’ pricing. Additionally, B2B prices often vary from client to client, based on contractual terms (including potential spot deals and quarterly discounts), making it challenging for models to detect consistent pricing patterns.
Nevertheless, attaching price information to each transaction helps identify suspicious or erroneous entries. This underscores the value of collecting prices: even if their predictive power is limited to this project, they help clean sales transaction data. Collecting transactional prices is a low-hanging data-cleaning fruit as they are easy to extract alongside the ERP sales records.
Price Changes Annoucements
Many B2B businesses announce price changes to their clients in advance. The impact is similar to an inverted promotion: clients might build up orders before the price increases, and then demand drops for a while. Usually, we can easily create a calendar with announcements about historical and future price changes. In this project, we treated these announcements as inverted promotions.
(Note: price elasticities aren’t computed or fed to the model. Instead, the model might consider prices when making a forecast by implicitly assessing their impact on demand.)
Sellouts
Sellout refers to the actual sales from a distributor or retailer to the end customer. Unlike internal sales (which reflect what a company sells to its distributors), sellout data shows real demand in the market, providing a more accurate picture of customer behavior.
Including sellouts in a forecasting engine is quite challenging, as data availability varies by market (and, at times, even by product). Some clients provide sellout data on time, while others take up to two months; this requires creating specific data extraction queries to address any missing data or delays. Moreover, due to distribution policies, some sales are recorded in one country, while sell-outs are recorded in another.
Once collected, cleaned, formatted, and aligned, sellouts can showcase interesting insights (see above). Sellouts are usually more stable than sales (as anyone who has played the beer game will attest). Unfortunately, in this project, monthly sellout data had limited predictive value — likely because we only had 2.5 years of history. This left the model with insufficient information to learn from, especially when considering the 11-month testing period.
What We Didn’t Do
Outliers
At SupChains, we don’t use ML or statistical-based techniques to identify outliers. Instead, we identify and exclude erroneous transactions based on business rules (such as inconsistent prices or stock clearances) and explain most deviations thanks to business drivers such as promotions or price changes.
Segmentation
Furthermore, we don't use segmentation or clustering techniques, as we don’t see how they could add value to demand forecasting models. Our recent forecasting competition, VN1, also showed that very few top competitors used segmentation or outlier detection techniques, confirming the limited value of these practices, if any.
External Drivers
For this project, we didn’t use any external drivers (such as economic indicators), as, to the best of our knowledge, we are unaware of projects that successfully used external drivers to enrich forecasts.
If you enjoy this case study, I forecast you’ll love the 6-month learning journey we've created for our mailing list. Join us here: supchains.com/
Results
To evaluate our models, we divided our data into a training set and an 11-month test set that wasn’t used during the training or model optimization. We evaluated the model by forecasting demand over the test set using various rolling forecasts with a horizon of up to 18 months. Our model delivered the following results,
We always evaluate model performance against a simple statistical benchmark. We selected a 12-month moving average for this project, as it delivered the highest accuracy on the training set among all benchmarks considered.
To measure forecasting quality, we advise against relying solely on accuracy measures (such as MAPE, MAE, or WMAPE). Instead, we want to track both accuracy (using the mean absolute error, or MAE) and bias. To do so, we use the Score (MAE + |Bias|), as recommended in my book, "Demand Forecasting Best Practices."
Reducing the Score from 80% to 65%, SupChains delivered an added value of 19%.
Moreover, the model delivers stable results (with errors ranging from 60 to 62%) over the forecasting horizon. This stability confirms that our approach successfully captures fundamental patterns in the data rather than just reacting to recent trends.
We use LightGBM (a decision-tree based algorithm) as the core algorithm for our model. Based on our experience and international forecasting competitions, it remains one of the most effective tools for supply chain forecasting. However, success doesn’t come from the algorithm alone. The key differentiator lies in how data is pre-processed, transformed, and selected. At SupChains, we strongly emphasize feature engineering (i.e., transforming raw data into meaningful inputs for a machine learning model), leveraging domain knowledge to craft meaningful inputs for our models. Note that using the same data cleaning approach and features would yield similar results with XGBoost rather than with LightGBM; however, XGBoost tends to be slightly slower.
Business Drivers and Model Features
When building our machine learning models, we aim to use the fewest possible features by selecting only those that truly drive accuracy — less is often more. Models like LightGBM allow us to quantify the importance of each input, helping prioritize what matters most.
In this project, features based on business drivers such as promotions, prices, and sellouts contributed little to forecast accuracy. This is mainly due to data limitations: with less than three years of history (for these drivers) and nearly a year set aside for testing, the model lacked sufficient context to learn meaningful patterns (i.e., how these business drivers impact demand). That said, we’ve built the pipeline to enable the model to improve over time as more data becomes available.
One key success factor for this project was accurately capturing seasonality, even for extreme products such as stress relievers for dogs, which suffer from stress during fireworks, following a particular seasonal pattern. Here, business knowledge and discussions with Animalcare were critical.
Delivering a Proof-of-Concept
The proof of concept began with two months dedicated to data cleaning, supported by weekly workshop sessions between SupChains and Animalcare. This initial phase ensured alignment on data quality, business context, and the scope of the forecasts — namely, which clients and products to include. Together, we refined the input data and incorporated key business rules, ensuring that our forecasts accurately reflected operational realities.
This first phase was followed by a three-month modelling phase, during which SupChains delivered monthly forecasts and held joint review sessions with Animalcare. These meetings were used to assess forecast accuracy, interpret model behavior, and refine model inputs.
Following the POC, Animalcare chose to adopt SupChains’ model and now uses SupChains’ forecasts as an ongoing service. Animalcare provides monthly data updates, while SupChains ensure data consistency before generating new forecasts. Monthly joint workshops are also organized to review any inconsistencies (both on inputs and outputs) to ensure stable, long-lasting results.
Client Perspective: Animalcare’s Journey
(This part is written from Animalcare’s perspective.)
Transition from Previous Methods
Before collaborating with SupChains, our forecasts were based on moving averages with trends using sell-in and sell-outs. While the team achieved solid results through business expertise and manual adjustments, there was a recognized opportunity to further improve forecast quality, especially by reducing the underlying positive bias we observed in our forecasts. We had experience using statistical forecasting models from previous companies. Still, we were also aware of the high level of data cleansing, outlier correction, and review necessary to maintain these models.
Impact on Workload
Implementing the machine learning model required an initial investment of effort, particularly in preparing and checking data. During the setup phase, the team dedicated approximately 60 hours to ensuring data quality and building confidence in the new process. In the medium term, the additional workload stabilized at around 10% more per month. Over time, we expect the workload to return to a level similar to their previous process, with less manual correction needed.
Planners’ Engagement and Process Evolution
Planners were very open to trying something different. They wanted to assess and understand the quality of the ML forecasts. They also wanted reassurance that they could still add value to the forecast. After the planners had completed their review, they understood the importance of data quality and the tool’s power to produce a robust forecast baseline for most of our portfolio. We worked to redesign our monthly forecasting process, including the machine learning baseline forecast in our forecasting tool. And in the first 2 months of using SupChains’ model, over 50% of our forecasts were 100% ML-based, with the remaining products having value added to the baseline by the planners, or being assessed to understand what data issues are driving significant differences vs planners’ assessment of the situation.
Reflections on the Machine Learning Approach
We hoped that utilizing machine learning would allow us to leapfrog the statistical forecasting step. Allowing us to integrate better sell-out data and promotional planning into our baselines without the heavy workload of correcting statistical forecasts. It’s still early in our journey, and we have certainly learnt the importance of ensuring the underlying data is robust. Still, machine learning is much less work than our previous experience implementing and maintaining statistical models. The initial results are strong across large parts of our portfolio. The ability to efficiently utilize pricing, promotions, sell-in, sell-out, and inventory data supports our business in its aim to reduce positive bias, giving us greater confidence in our baseline forecast. At the same time, it’s still very easy for the demand planning team to overlay business intelligence and add further value to our forecasts.
Acknowledgments
Alex Sugden, Supply Chain Director at Animalcare, for leading this project with me.
Thanks to John H. Worona, Thierry Azalbert, Girish Parakkal, Paulo Sergio, Abhishek Dolbaruah, Kasra Shojaei, Andy Paneof, Nguyen Le Minh Duy, Ramy Mohamad, David Rice, Arun Saini, Javier Jimenez, Mihaela Remme, and Konrad Grondek for their kind reviews.