Detecting seasonality

· Analysis · 4 min read

Detecting seasonality

Compare data by month over at least two or three years rather than one, and a repeating wave emerges.

A shop owner looks at the July sales and is pleased: "Good growth!" In fact sales rise like that every July. It is not growth but season. Seasonality is a wave of demand tied to the calendar that repeats every year. Without it neither the forecast nor the order comes out right: stock runs short before the peak and piles up before the slump.

Why one year is not enough

In a single year of data you cannot tell a season from a one-off event. A large tender, a promotion, a month without stock or the opening of a new channel can all look like a "wave". So put at least two, preferably three, years of data side by side by month or quarter. If peaks and troughs repeat in the same periods, there is seasonality.

Calculating the seasonal coefficient

Three steps. First, find the average sales per period for each year. Second, divide each period's sales by that year's average. Third, average the coefficients of the same period across years.

Example: wholesale of soft drinks by quarter (thousand units; to keep the example short we take quarters instead of months):

  • Year 1: 210, 320, 480, 190. Average 300.
  • Year 2: 230, 350, 530, 220. Average 332.5.
  • Year 3: 250, 380, 570, 240. Average 360.

The coefficients for year 1, for instance: 210 ÷ 300 = 0.70; 320 ÷ 300 ≈ 1.07; 480 ÷ 300 = 1.60; 190 ÷ 300 ≈ 0.63. Averaged over three years: Q1 0.70, Q2 1.06, Q3 1.59, Q4 0.65. They add up to 4.00, meaning the four-quarter average is 1.

In Excel a table works well: years in rows, quarters or months in columns. The coefficient formula is B2 / AVERAGE($B2:$E2), copied down and across, and then AVERAGE is taken for each column. The separator (comma or semicolon) depends on your Excel settings. A monthly calculation works the same way, just with 12 columns.

The result is easy to read: in Q3 sales are 59 percent above the annual average, in Q4 35 percent below. Annual growth (300 → 332.5 → 360) is separate from the season, because each year was divided by its own average.

To tell a real season from chance, look at the spread between years. The Q3 coefficient came out as 1.60, 1.59 and 1.58: almost identical, so the season is real. If it had been 1.9, 1.1 and 1.4, there would be no repeating wave.

Using it in the forecast

If next year is expected to total 1 540 thousand units, the quarterly average is 385. Forecast: 385 × 0.70 ≈ 270, 385 × 1.06 ≈ 408, 385 × 1.59 ≈ 612, 385 × 0.65 ≈ 250. They add up to 1 540.

The reverse is useful too: dividing by the coefficient strips the season out. Year 3, Q4: 240 ÷ 0.65 ≈ 369, and Q3: 570 ÷ 1.59 ≈ 358. So in the "weak" fourth quarter demand did not actually fall. A moving average works on the de-seasonalised series, and the result is then multiplied by the coefficient again.

What hurts accuracy

  • The dates of Ramadan and the Eid holidays shift each year by roughly 10-11 days, so in a monthly view the wave drifts from year to year. Navruz, 8 March, New Year and 1 September are fixed dates.
  • A month when the item was out of stock looks like "low season", although it is a shortage.
  • A promotion creates an artificial peak: mark it.
  • If price, range or sales channel changed, comparison with older years breaks down.

What it means for the warehouse

Seasonality affects not only stock but also space and the timing of stock counts. Counting in the middle of a peak is awkward: there is a lot of movement and a lot of errors. It is better to verify balances before the peak, so that orders rest on accurate figures. After the peak, a count gives a full picture of what went missing and how fast items turned over.

Conclusion

Seasonality is found by simple division over two or three years of data and then shapes the forecast, the order and the counting schedule. In its ABC/XYZ analysis CountLab picks out seasonal items and helps build a cycle count plan that fits the peaks.