Time series patterns in business data: trends, seasons and anomalies
Revenue, orders and signups all mix a long-term trend, repeating seasonal cycles and the occasional anomaly. Here is how to tell them apart with simple methods, worked examples in round numbers, and what each pattern means for your decisions.
Every business metric that changes over time mixes several patterns. Revenue rises over the years, dips every January and occasionally jumps for a reason nobody planned. Reading those patterns separately is one of the most useful skills in business analysis, because each one calls for a different response:
- Trend tells you whether the business is growing.
- Seasonality tells you when to stock up, staff up or plan a promotion.
- Anomalies tell you something unusual happened and needs a look.
The three components
A time series can be split into:
- Trend: the long-run direction over months or years.
- Seasonality: a pattern that repeats at a fixed interval: every day, week, month or year.
- Residual: what is left over. Mostly random noise, with the occasional genuine anomaly.
The two are combined in one of two ways. In an additive series the seasonal swing is roughly the same size every year (December is always about $10,000 above average). In a multiplicative series the swing grows with the business (December is always about 20% above average). Most growing businesses are closer to multiplicative, which is why comparing percentages often works better than comparing amounts.
Seeing the trend
Moving averages
A moving average smooths short-term noise. A 7-day average removes day-of-week effects, a 28- or 30-day average removes most within-month swings, and a 12-month average reveals the long-run direction in data with a yearly season.
In SQL:
SELECT
order_date,
daily_revenue,
AVG(daily_revenue) OVER (
ORDER BY order_date
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS moving_avg_7d
FROM daily_revenue_summary
ORDER BY order_date;
This assumes one row per day. If some days have no orders, fill them with zero first, or the window will stretch over more than seven calendar days.
Year-over-year comparison
Comparing a period with the same period a year earlier removes yearly seasonality in one step. If December 2025 revenue was $50,000 and December 2024 was $42,000:
($50,000 − $42,000) ÷ $42,000 = 19% year-over-year growth
That is the growth figure to report, not the jump from November to December.
Common trend mistakes
- Mistaking a season for a trend. Retail revenue rises in Q4 every year. Compare Q4 with last Q4, not with Q3.
- Calling a trend from a few weeks. Two good weeks are not a new trend. Look at months.
- Ignoring the base. 50% growth from a very low month is not the same as 50% from a normal one.
- Averages that hide mix changes. If you lose many small customers, revenue per customer rises while the business shrinks.
Understanding seasonality
Most businesses have more than one seasonal cycle at once:
- Daily: website traffic peaks in working hours; restaurant orders cluster around meals.
- Weekly: B2B activity drops at weekends; many consumer shops peak on Saturday.
- Monthly: subscription renewals cluster on billing dates; spending rises after paydays.
- Yearly: holidays, back-to-school, summer slowdowns, budget spending at year end.
If you ignore seasonality you will keep misreading your data. A January drop after a strong December is expected. A Monday spike in support tickets is people catching up. Always compare like with like: this Monday with last Monday, this January with last January.
Seasonal adjustment
Seasonal adjustment removes the expected seasonal pattern so the underlying movement is visible. Official statistics such as unemployment figures are published seasonally adjusted for this reason.
For business data, year-over-year comparison is often enough. For more precision, STL decomposition (Seasonal and Trend decomposition using Loess) splits a series into trend, seasonal and residual parts, and is available in most statistics libraries.
Finding anomalies
After trend and seasonality are accounted for, the residuals should look like noise. Values that do not are candidates for investigation.
Types of anomaly
- Point anomaly: one value far from normal, such as a day with ten times the usual traffic after a press mention.
- Contextual anomaly: normal in one context, unusual in another, such as strong ice cream sales in January.
- Collective anomaly: a run of values that is unusual together, such as five days of slightly lower revenue that add up to a real break.
Z-scores
z = (value − mean) ÷ standard deviation
If a shop averages 200 orders a day with a standard deviation of 20, a day with 270 orders has z = (270 − 200) ÷ 20 = 3.5. A common rule flags anything beyond 3 (or 2.5 for a more sensitive alert). This works best on roughly bell-shaped data, and it is more reliable on residuals than on raw values, where every seasonal peak would be flagged.
IQR fences
The interquartile range method is less affected by extreme values:
- Find the 25th percentile (Q1) and the 75th percentile (Q3).
- IQR = Q3 − Q1.
- Flag anything below Q1 − 1.5 × IQR or above Q3 + 1.5 × IQR.
With Q1 = 180 and Q3 = 220 orders, IQR = 40, so the fences are 120 and 280. A day with 290 orders is flagged; a day with 270 is not. The two methods disagree at the edges, which is normal.
Changepoints
Sometimes nothing is anomalous on any single day, but the slope changes: growth was 3% a month and is now 1%. Changepoint detection looks for the point where a different trend line fits better than the old one. It catches slow breaks that single-value rules miss.
Investigating what you find
Detecting an anomaly is quick. Explaining it takes judgement:
- Check the data first. A failed sync, a duplicate import or a changed definition creates false anomalies. Our guide to spotting data quality issues lists the usual culprits.
- Check the calendar. Campaigns, price changes, outages, holidays, a competitor's news.
- Check related metrics. If revenue spiked, did traffic, conversion or one large order explain it?
- Decide whether to act. A one-off press mention needs nothing. A broken checkout needs fixing today.
Our explainer on anomaly detection for business metrics goes deeper on alerting.
Putting the patterns to use
- Forecasting. Project the trend, add the seasonal pattern and show a range rather than a single number. That is what most forecasting methods do, with more rigor. Our guide to revenue forecasting for subscription businesses applies this to recurring revenue.
- Goals. Spread an annual target across months by last year's seasonal shape, not in twelve equal slices.
- Judging performance. 5% growth on the same month last year is a fairer measure than 5% on last month.
- Planning. Staff, stock and cash to the seasons you already know about.
How clariBI handles this
In Ask clariBI, questions such as "Compare August revenue with August last year" or "Show weekly orders for the past 12 months" run as calculations on your data and come back as a waterfall or line chart. The help center's 30 example questions include more period comparisons.
From the Starter plan, clariBI Forecasting does the decomposition work for you, without a language model in the calculation. For each series it detects seasonality, picks a forecasting method (from seasonal naive and Holt-Winters to gradient boosting and ensembles) by walk-forward backtesting on your own history, and shows 50%, 80% and 95% prediction bands. It also flags anomalies with z-score and IQR rules and marks changepoints where the trend's slope shifts. The forecasting launch post explains the method in more detail.
A good first exercise: take your weekly revenue for the last two years, plot it with a 4-week moving average, and mark every week that sits outside the IQR fences. Then write one line next to each one explaining what happened.