> For the complete documentation index, see [llms.txt](https://docs.rootcause.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rootcause.ai/more-details/applications/application-modules/scoreforecast.md).

# Score Forecast

> Score a forecast dataframe against actuals — horizons, MAPE, WMAPE, and more.

Scores a forecast handed to it against actuals, without owning either.

The general-purpose scorer: ForecastBacktest goes and finds a module's past runs, this one scores whatever is wired into it. Leave `actuals` unconnected and it resolves them from the twin named in settings instead.

## At a glance

|                          |                        |
| ------------------------ | ---------------------- |
| Module type              | `ScoreForecast`        |
| Category                 | Intelligence           |
| Default tier             | `reactive`             |
| Runs on                  | `reactive`, `durable`  |
| Starts a flow            | no                     |
| Holds a body             | no                     |
| Keeps state between runs | no                     |
| Available in             | every application type |

## Parameters

### `digitalTwinId`

`string` · optional · defaults to `""`

The twin actuals are resolved from when the `actuals` port is unconnected.

### `digitalTwinVersionIds`

`string[]` · optional · defaults to `[]`

Pin the scoring to specific twin versions; empty means the latest.

### `horizons`

`number[]` · optional

The 1-based lead times to score; omit for defaults derived from the forecast's own horizon.

### `primaryHorizon`

`number` · optional

The lead time a KPI tile reads; must be in `horizons`.

### `metrics`

`string[]` · optional · defaults to `["mape","wmape","mae","mse","rmse","bias","coverage"]`

Which accuracy metrics to compute: mape, wmape, mae, mse, rmse, bias, coverage.

### `primaryMetric`

`string` · optional · defaults to `"mape"`

The one a KPI tile and the trend read; must be in `metrics`.

### `forecastH`

`number` · optional

The forecast horizon, when it cannot be read off the forecast itself.

## Inputs

| Port       | Kind        | Required | Description                                                                                                                           |
| ---------- | ----------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `on`       | `event`     | no       | Implicit on every module that does not itself start a flow: wire an event here to make this module the start of what that event runs. |
| `forecast` | `dataframe` | yes      | The forecast to score, in the shape ForecastSim emits.                                                                                |
| `actuals`  | `dataframe` | no       | What really happened; unconnected, these are read from the twin.                                                                      |

## Outputs

| Port         | Kind        | Connects to           | Description                                             |
| ------------ | ----------- | --------------------- | ------------------------------------------------------- |
| `comparison` | `dataframe` | `dataframe`, `signal` | One row per forecast point beside its actual.           |
| `metrics`    | `dataframe` | `dataframe`, `signal` | Every metric in `metrics`, for the forecast as a whole. |
| `byHorizon`  | `dataframe` | `dataframe`, `signal` | The same metrics split by lead time.                    |
| `summary`    | `dataframe` | `dataframe`, `signal` | The latest scoring alone, for a KPI tile.               |

***

[← All application modules](/more-details/applications/application-modules.md)
