The inventory forecaster is a function for managing your stock levels. It takes a weighted average and sales trends and attempts to calculate future sales, and when (and if!) your inventory is going to run out.
The inventory forecaster is currently in BETA and should not be relied on as a definitive indication of future sales. There is currently no support for per-product algorithm variables, nor periodical sales pattern such as seasonal sales. Having said that, we’d love for you to test it and give us feedback at email@example.com.
Inventory forecasting is an invaluable tool for product management. By approximating future sales it can help you avoid stock out, and highlight stock items that are not selling enough, thus enabling you to take action to avoid a perpetual overstock. It does this by calculating and combining two data points from your sales history:
- Average sales – This is a moving average over time that is weighted to put more emphasis on recent sales.
- Sales trend – An indicator of sales velocity, again weighted to put more emphasis on recent sales.
We use the average sales and sales trend to calculate next weeks sales and project the sales trend into the future, with a gradual decline towards flat sales to indicate uncertainty.
Period and frequency
The forecasting algorithm is run nightly and forecasts weekly, where week “0” is the last calculation, “-1” is one week back, “1” is one week into the future, and so on.
Product variants and SKU’s
Since some sales platforms do not have unique SKU’s the forecaster uses the internal Prime Penguin product variant ID as the unique identifier instead of the SKU. If you have multiple variants with the same SKU, or if you added the same SKU several times – by for example switching sales platform – they will be displayed as distinct rows in the forecast.
The forecast algorithm requires at least 16 weeks of sales to produce an output. If sales data is lacking the product is marked as “no prediction” and is by default excluded from the forecaster table in the UI. There is a checkbox named “Exclude items with no prediction” you can uncheck to include those products in the table.
Projection and infinite stock
The forecast algorithm looks 10 weeks into the future. If at that point you still is predicted to have stock in your warehouses, the product is marked as “infinite stock”. This doesn’t mean you will never run out, it only means that you are not predicted to run out during the next 10 weeks. There is a checkbox named “Exclude Items with infinite stock” you can uncheck to include those products in the table.
In the forecaster table you will find the following data points per product variant:
- Current stock – This is the total stock level across all warehouses
- Current sales – This is last weeks sales in absolute terms
- Sales average – This is the moving, weighted average used to determine future sales
- Sales trend – This is the weighted trend used to determine future sales
- Weeks in stock – The forecasted number of weeks left in stock
The sales projection chart visualizes your historical sales together with the sales projection.
This is still a BETA feature, and there are a lot of things we want to improve:
- The variables that determine the forecast is fixed at the moment: in reality they should be tweaked per product.
- Your sales history needs to be in the Prime Penguin data set, and there’s currently no to upload it manually if you are a new customer.
- There is no input for qualitative data at the moment, it is all quantitative.
- There is no detection of seasonal or periodic sales at the moment.
The Geeky Corner
There’s no secret sauce involved here, so if you really want to know, here what we’re doing behind the scenes: This is an double exponential smoothing (DES) calculation with an interquartile range (IQR) based outlier detection and removal, and with a dampening factor “phi” applied to the forecast. The DEP variables are currently fixed, but we’re looking at auto-fitting them based on historical sales.
- Alpha: 0.5
- Beta: 0.3
- Phi: 0.9
The IQR removal ignores any sales at the tail end of the data. If your last X weeks of sales are all outliers we leave them in the data set as we assume they indicate a current, and potentially ongoing, sale.