For a fashion retailer, the catalogue changes every season. When the autumn collection lands, most products on the shelf have never been sold before, and the same happens again in spring. The quantities for each collection are bought months ahead, but how that stock is split between the stores and the online fulfilment centre is decided week by week as sales come in.
Take two new products: wool gloves launched in late November and leather sandals launched in late May. A week after launch, their sales look alike. What can the planner say about the weeks ahead? Figure 1 sums up the problem. To answer, the forecast has to know what each product is: a new pair of wool gloves or a new model of sandals.
Forecasters call such product characteristics static covariates. They belong to a series and do not change over time, like a product’s category, brand, price tier or collection.
How to spot a static covariate? Its value never changes for a given product.
At The Forecasting Company we build t0, a foundation model for time series, and the catalogues our retail customers send us carry more columns of this kind than of sales. To see what forecasting models do with them, we built a simulated catalogue of gloves and sandals and asked each model to forecast the new products.
What the public models can do
Cross-learning
We tested three public foundation models, Chronos-2, TimesFM 3 and Timestral, and the public release of our own model, t0-gamma. None of them has to read a product’s sales alone. They accept extra rows of inputs known in advance, and they can forecast several series together, each able to attend to the others, which is called cross-learning. In every forecast here we gave them the day of the week and the time of year as extra rows. What none of them has is an input for a fixed fact about a product, such as its category.
The simulated catalogue
In our experiment, each simulated product has its own usual sales, the amount it sells on a normal day outside its season, with a small weekly rhythm and some day-to-day noise: a third are slow sellers at about 3 pairs a day, a third sell about 10 and a third about 30. A product’s seasonality depends on its category: gloves climb to about three times their usual sales around New Year, sandals around early July, and both are back to normal about a month either side of the peak. The seasons are the same every year.
Established product: over a year of sales, so at least one past peak.
We simulated 400 established products, half gloves and half sandals, and 200 new ones: 50 new glove products and 50 new sandal products launched in late November, and as many launched in late May, with slow, medium and fast sellers in equal shares in every group.
Two jobs
A new product’s first week shows its usual level, but nothing about its season. So the forecaster has two jobs: read the level from that first week, then multiply it by the seasonal curve its category follows over the coming weeks. The first job only needs the sales. The second needs the category.
From a week of sales and the calendar, all four models get the first job right and miss the second. They forecast a flat line at each product’s first-week level for the next eight weeks, for new glove and sandal products alike (Figure 5). Around the peak, customers buy three to four times that.
The same holds across all 200 new products. Over the peak weeks, the four models forecast about a third of what products heading into their season actually sell, for slow and fast sellers alike.
That is a reasonable answer to the question these models were asked. In our catalogue the only difference between a glove and a sandal is when its season peaks, and a week of sales cannot show that. The date alone does not say which season this product follows either, so a sensible forecast stays near the level it has seen. Any better answer has to come from somewhere else.
Adding category rows
Cross-learning suggests a workaround. Put established products from the catalogue in the same forecast, and add each product’s category as one more row.
Simply adding static rows does not work: these models rescale every row by its own average before reading it, so a category repeated on every day becomes a row of zeros. To give the idea a fair chance, we also encoded each category as a row that alternates between two values, which survives the rescaling. We then forecast each of the 200 new products together with 8 established gloves and 8 established sandals, every one of them carrying its category row.
How we score
To score a forecast, we take how far its median falls from actual sales over the product’s peak weeks, as a share of what the product sold, and average that over products so that slow and fast sellers count the same.
The category rows barely changed anything: t0-gamma, Chronos-2 and Timestral moved by 0.3% or less, and TimesFM 3 improved by 1.1%.
The reason lies in how cross-learning works. Every row in a joint forecast can attend to every other row, and nothing marks which rows belong together. The model sees 17 sales histories and 17 category rows, but no part of its input says that this category row describes that history.
Grouping by hand
The obvious workaround is to do the matching for the model, and forecast each new product only with 16 products of its own category. That barely helps either: error fell 0.4% for t0-gamma, 0.3% for Chronos-2, 0.8% for TimesFM 3 and 2.7% for Timestral. With or without the right products beside them, the forecasts stay flat near the usual level (Figure 5). Timestral widens its range toward the peak, but its median stays at the usual level, about a third of the true peak. With 16 products picked this way, the season still does not show up in the forecast.
The workaround also assumes that the other products’ histories line up with the new product’s calendar. In this simulation they do by construction: the established products sold over the same dates, so their last peak sits exactly one year before the coming one. With products from earlier seasons, someone would first have to shift their histories by the right amount, which means knowing the length and timing of the season in advance.
More products of the right category
Adding more products of the right category keeps helping only Timestral (Figure 3). With all 200 established products of its category in the forecast, its error is 22% below forecasting the new product alone, and its forecast for the peak weeks rises to about half of actual sales. t0-gamma and Chronos-2 gain less than 1%. TimesFM 3 gains about 6% as soon as any two products join, and little more after that.
Timestral’s gain comes at a price. It needs dozens to hundreds of products that someone has already grouped by the right attribute, and even then it reaches about a third of what one label per product achieves. Real catalogues also rarely split along a single attribute. Price sensitivity may depend on brand and price tier together, and the weekly pattern on the store, so no single grouping of the catalogue serves every effect. Each attribute added also splits the catalogue into smaller groups, until few products share every attribute with the new one. In practice, gathering hundreds of established products that share the right pattern, just so the model can learn that this product is a glove, is rarely an option.
Each product carries its own label
Internal t0-gamma, the version of t0 we are working on now, gives every series its own input for static attributes. Each product’s category is attached to the sales history it describes before any series attends to another, so a label cannot drift to the wrong product. To measure what that is worth, we compare internal t0-gamma, reading the sales and the category, with public t0-gamma reading the same sales, on the same products and dates.
Same week of sales. With the category, every new product’s forecast climbs to its peak from its own level.
Internal t0-gamma does both jobs. For products heading off season, its forecast stays flat at each product’s own level, within 2% of actual sales for slow, medium and fast sellers. For products heading into their season, it rises and falls in the right weeks and reaches about 95% of the true peak, where public t0-gamma stays at the usual level. Across the 200 new products, error falls 74% against public t0-gamma: 84% for products heading into their season, 8% for those heading out of it, and 73 to 75% for slow, medium and fast sellers alike.
Because each label rides with its own series, it keeps working when other products share the forecast. In the mixed catalogue of Figure 2, with every product carrying its own category, internal t0-gamma’s error is 72% below public t0-gamma’s in the same catalogue, about the same gap as for products forecast alone.
What this means for a merchandiser
The public models we tested can take a catalogue as context, but they cannot tell which description belongs to which product. They help only when someone has already grouped the products by the attribute that matters, which is the knowledge the forecast was meant to supply. Internal t0-gamma keeps each product’s attributes with that product. The aim is that a buyer sends the catalogue as it is, with category, brand and price tier as columns, and the forecast reads them for each new product from its first day.