Production planning for a yogurt maker: 28-day forecast and line schedule

Case study on a public dataset from Greece · Updated

We forecast daily units sold for each of 6 products 28 days ahead from a public dataset. In testing on past data, the selected method (the AI forecasting model with extra inputs) was off by 19.3% of actual volume on average, 28% less error than repeating the same weekday last week. On data the plan never saw, the recommended plan cost $21,369 (9.5%) less than producing the forecast plus 10%, using example costs.

Read this first

  • The costs and limits in the plan (unit cost, shortage cost, holding cost, waste cost, shelf life, pack size, setup cost, setup time, resource per unit, capacity, initial inventory) are example values chosen to show the method. With your business, we use your numbers.

The request

"Forecast daily unit sales for each of our 7 yogurt products for the next 28 days so we can schedule production runs and cut product that gets returned."

The request, written the way a business owner would ask it.

The forecast

We expect about 299,208 units sold over the next 28 days across all 6 series, about 10,686 per day on average.

Line chart of daily units sold: the actual history, the forecast for the next 28 days with its 80% range, and what actually happened in those days.
The forecast for the next 28 days, with the range it expects 8 times out of 10. The dotted line is what really happened.
Small line charts of the largest series in the data with their forecasts and 80% ranges.
The largest series, each with its own forecast.

How accurate was it?

We hid the most recent stretch of history, forecast it using only what came before, and compared with what really happened. We did that 5 times, each time 28 days ahead, for every method below. The typical error is the share of actual volume the forecast missed by, added up across all 6 products.

The selected method, the AI forecasting model, also given the number of stores carrying each product as an extra input, was off by 19.3% on average, against 26.8% for simply repeating the same weekday last week.

Typical error in testing, lower is better
MethodKindTypical errorActual inside 80% range
AI model with extra inputs SelectedAI19.3%80%
AI forecasting modelAI19.7%82%
Exponential smoothingClassic21.5%81%
Theta methodClassic21.9%88%
Repeat last seasonSimple rule26.8%90%
Repeat the last valueSimple rule45.6%97%
Line chart comparing past forecasts with actual units sold over 5 test runs of 28 days each, made using only the data available at the time.
Back-testing: 5 times we hid the next 28 days, forecast them, and compared with what happened.
Bar chart of the typical error of each forecasting method in testing. The selected method had 19.3% error; repeating the same weekday last week had 26.8%.
Typical error of each method in testing, as a share of actual volume. Lower is better.

Reality check on data no model saw

Before running anything, we set aside the final 167 days of the data (from 2022-12-03). Nothing in the testing above or the method choice could see them. Here is how every method did on that stretch.

Another version of the AI model did slightly better on this stretch (22.7% against 23%).

Typical error on the held-back 167 days
MethodTypical error
AI forecasting model22.7%
AI model with extra inputs Selected23%
Exponential smoothing23.2%
Theta method24.8%
Repeat last season27.1%
Repeat the last value38.7%

The plan

Recommended: produce 58,100 units of product 1, 21,100 units of product 2, 17,700 units of product 3, 23,700 units of product 4, 140,400 units of product 6, 44,400 units of product 7 in 38 production runs over the next 28 days. Expected total cost $233,875, 12% less than producing the forecast plus 10%.

Why this plan: it balances the cost of running short ($2 per unit) against holding stock ($0.01 per unit per day), waste after the shelf life, and fixed costs per run, within the shared capacity.

Expected outcome: 91.5% of demand served, 31,438 units wasted, versus 86.9% served and 3,561 wasted with the rule of thumb.

Reality check: this plan was made as of Dec 03, 2022 without seeing later data. Replayed on what actually happened, it cost $204,542 against $225,911 for the rule of thumb: a measured saving of $21,369 (9.5%).

Stock left over at the end of the period (still within shelf life, at cost) is worth $8,925 under the plan and $400 under the rule of thumb. These comparisons count it as spent; in practice most of it carries into the next period.

Chart of the recommended plan compared with producing the forecast plus 10%, drawn against forecast demand and its range and actual demand.
Four-week production plan for the yogurt line: the recommended plan next to producing the forecast plus 10%. The chart shows one of them as an example. Costs and limits are example values.

Plan against the rule of thumb

The rule of thumb here is producing the forecast plus 10%. We compare both ways: the expected cost over many possible futures from the forecast, and a replay of both plans on what actually happened.

Cost saved by the plan, compared with producing the forecast plus 10% (example costs)
ComparisonSaved by the planPercent
Expected, over forecast scenarios$32,21212.1%
Replayed on what actually happened$21,3699.5%
Bar chart of total cost for the recommended plan and the rule of thumb, both expected over the forecast scenarios and replayed on the actual data. On the actual data the plan was $21,369 cheaper.
Total cost of the plan against the rule of thumb. Lower is better. Example costs.
What the plan assumed
InputValueWhere it came from
Unit cost0.45 ($/unit)Example value
Shortage cost2 ($/unit)Example value
Holding cost0.01 ($/unit/day)Example value
Waste cost0.05 ($/unit)Example value
Shelf life10 (days)Example value
Pack size100 (units)Example value
Setup cost600 ($)Example value
Setup time1.5 (hours/run)Example value
Resource per unit0.0004 (hours/unit)Example value
Capacity10 (hours/day)Example value
Initial inventoryproduct 1 4,800, product 2 1,000, product 3 1,300, product 4 1,700, product 6 10,200, product 7 3,700 (units)Example value

What the engine noticed in the data

  • Forecast made as of Dec 03, 2022: 167 later rows were hidden from the models and used afterwards to check the forecast.
  • 18 rows have a negative value (for example returns or refunds). They were netted against the other rows in the same period.
  • Skipped 1 series with no recent data: product 5.
  • 15 days had a negative total after returns; set to zero.

Technical details

Data
Dairy Supply Chain Sales Dataset (MEVGAL, Greece - Zenodo / IEEE DataPort). 6 products, daily, from 2020-01-01 to 2022-12-03.
How we prepared the data
All 21 Excel files are read straight from the zip; the product comes from each file's folder name ('product 1' to 'product 7'). Points of distribution is used as a past-only input for Chronos-2 with covariates. The last 28 days of the data (Dec 4 to Dec 31, 2022) are hidden with as_of and used to replay the production plan. Line capacity, changeover cost, shelf life, costs and starting stock are example values.
Testing
5 rolling tests, each 28 days ahead. Selection metric: WAPE (weighted absolute percentage error, the "typical error" above). Also reported: MASE 0.82 for the selected method.
Methods
Chronos-2 with covariates, Chronos-2 (AI foundation model), Exponential smoothing (ETS), Theta, Seasonal naive, Naive (last value).
Plan
Four-week production plan for the yogurt line. Optimization status: ok, solver: feasible.
Reproduce
The case folder, spec and outputs are in the 4castPlannr repository under cases/dairy-supply-chain-sales/.

Data source and license

Iatropoulos, K., Georgakidis, K., Siniosoglou, I., et al. (2023). Dairy Supply Chain Sales Dataset [Dataset]. Zenodo / IEEE DataPort. https://doi.org/10.21227/smv6-z405. CC BY 4.0.

License: CC BY 4.0. Source: original data. The forecasts and charts on this page are derived from that data and carry the same attribution.

Have a decision like this?

This case is an example of production planning for food and beverage producers. Send us your own export and question, and we will run the same tests on your data.