> For the complete documentation index, see [llms.txt](https://help.modelreef.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.modelreef.io/how-tos/scenarios-and-planning/build-a-seasonality-adjusted-forecast.md).

# Build a Seasonality Adjusted Forecast

This guide shows you how to build a seasonality adjusted forecast in Model Reef by using scheduling, drivers and timing rules to represent recurring seasonal patterns in revenue and costs.

## Before you start

You should have:

* A baseline model with non seasonal drivers.
* Historical data that shows a clear seasonal pattern, if available.
* An understanding of how drivers and schedules work.

If needed, review:

* **Drivers and Variables Overview**
* **Build a Unit Economics Model**

## What you will build

* Seasonality drivers that represent monthly or quarterly patterns.
* Revenue and cost variables that apply these patterns to baseline assumptions.
* A forecast that shows peaks and troughs aligned with the real business cycle.
* A structure that can be re used across years and scenarios.

{% stepper %}
{% step %}

### Identify seasonal patterns

Examine historical or market data to identify:

* Which metrics are seasonal:
  * Revenue.
  * COGS.
  * Marketing spend.
  * Staff or overtime costs.
* The pattern shape, for example:
  * Strong Q4 sales.
  * Slower summer months.
  * Seasonal spikes in certain product lines.

Quantify this as a set of multipliers if possible, such as percentage of annual volume by month.
{% endstep %}

{% step %}

### Create seasonality drivers

In the Data Library, create **Modifier drivers** for seasonality, for example:

* `Seasonality - Revenue`.
* `Seasonality - COGS`.
* `Seasonality - Marketing`.

For each driver:

* Set values per period such that the average is one point zero (or that the sum for a year matches a chosen total).
* For example, if December is twice as busy as June, the December multiplier may be around two while June is below one.

These drivers represent relative intensity by period rather than absolute levels.
{% endstep %}

{% step %}

### Apply seasonality to baseline drivers

Identify baseline drivers for:

* Units.
* Revenue per unit.
* Spend per period.

For each affected variable:

* Modify the formula to multiply the baseline driver by the relevant seasonality driver, for example:

{% code title="Seasonal revenue formula (conceptual)" %}

```
Seasonal Revenue = Baseline revenue driver × Seasonality - Revenue driver
```

{% endcode %}

* Ensure that the seasonality driver uses the same periodicity as the model.

Now the model applies higher or lower values in specific periods while preserving the overall level over a full cycle.
{% endstep %}

{% step %}

### Use scheduling for irregular events

For large, irregular seasonal events that are not simply pattern based, such as:

* Annual conferences.
* Major product launches.
* One off campaigns.

You can use scheduled variables:

* Create **Revenue or Opex variables** with schedules that fire in specific periods.
* Combine these with the seasonality adjusted baseline variables if needed.

This lets you blend regular seasonality with occasional spikes.
{% endstep %}

{% step %}

### Review seasonality effects in outputs

Open:

* **P\&L** to see seasonal revenue and cost patterns.
* **Cash Waterfall** to see cashflow impact of seasonality and working capital.
* Charts that display metrics across months or quarters.

You should see:

* Peaks in high season periods.
* Troughs in low season periods.
* Working capital swings where seasonal volume interacts with payment terms.

Adjust seasonality drivers if the size or shape of the pattern looks unrealistic.
{% endstep %}

{% step %}

### Re use seasonality drivers across scenarios

Because seasonality is often structural rather than scenario specific, you can:

* Keep similar patterns in multiple models.
* Only adjust seasonality drivers when business structure changes materially.

When you duplicate models for scenarios, the seasonality patterns come along with them, simplifying scenario creation.
{% endstep %}
{% endstepper %}

## Check your work

* Seasonality drivers average out to a sensible pattern over a year.
* Revenue and cost variables show seasonal patterns consistent with history or strategy.
* Working capital and cashflows show plausible seasonal strain or release.
* Seasonal adjustments are clearly documented and easy to find in the model.

## Troubleshooting

<details>

<summary>Seasonality seems too extreme</summary>

Re scale multipliers to bring peaks and troughs closer to the baseline level, or base them on a more robust historical sample.

</details>

<details>

<summary>Seasonality does not appear at all</summary>

Confirm that the variables use the seasonality drivers in their formulas and that the drivers are non constant over the year.

</details>

<details>

<summary>Difficult to explain to stakeholders</summary>

Build a simple chart that compares the baseline pattern to the seasonal pattern to make the intuition clear.

</details>

## Related guides

* [Seasonality & Commodity Pricing](/use-cases/agriculture-and-primary-production/seasonality-and-commodity-pricing.md)
* [How Forecast Logic Is Generated](/help/stock-ticker-fundamentals/how-forecast-logic-is-generated.md)
* [Archive Rules](/help/permissions-and-collaboration/archive-rules.md)
* [Entering Seasonality](/syntax/how-input-fields-work/entering-seasonality.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.modelreef.io/how-tos/scenarios-and-planning/build-a-seasonality-adjusted-forecast.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
