Back to models
Forecaster

MAPAForecaster

Categorical in XInsamplePred int insampleExogenous

MAPAForecaster implements the Multiple Aggregation Prediction Algorithm (MAPA).

The MAPA method combines forecasts from different temporal aggregations of the time series to improve accuracy and robustness. It allows for multiple base forecasting methods and also supports various aggregation and combination strategies.

Implementation Details:

The algorithm works in the following steps:

  1. Data Preparation:

    • Handles missing values using the specified imputation method

    • For multiplicative decomposition, ensures all values are positive by adding an offset if necessary

  2. For each aggregation level:

    • Aggregates the time series using the specified method (mean/sum)

    • Determines if seasonal decomposition should be enabled:

      • Calculates seasonal_period as sp // level

      • seasonal_enabled is True if all these conditions are met:

        • The original seasonal period (sp) is divisible by the level

        • The calculated seasonal_period is > 1

        • The time series length is >= 2 * seasonal_period

      • seasonal_enabled is False if level >= sp

    • Decomposes the series using STL decomposition:

      • Extracts trend using rolling averages if seasonal_enabled=False

      • Uses STLTransformer if seasonal_enabled=True

      • Stores seasonal patterns for later use

    • Fits the base forecaster on the trend component

  3. For prediction:

    • Generates forecasts using each level’s base forecaster

    • If seasonal_enabled for that level:

      • Retrieves stored seasonal pattern

      • Applies seasonal adjustments to forecasts

    • Combines forecasts from all levels using specified method:

      • Simple mean

      • Median

      • Weighted mean (if weights provided)

    • Reverses any transformations applied during data preparation

Based on R package: https://github.com/trnnick/mapa

Quickstart

python
from sktime.forecasting.mapa import MAPAForecaster

estimator = MAPAForecaster(aggregation_levels=None, base_forecaster=None, agg_method='mean', decompose_type='multiplicative', forecast_combine='mean', imputation_method='ffill', sp=6, weights=None)

Parameters(8)

aggregation_levelslist of int, default=None

The levels at which the time series will be aggregated. If None, the levels will default to [1, 2, 4].

For example, with daily data:

  • Level 1: Original daily data

  • Level 2: Aggregate every 2 days

  • Level 4: Aggregate every 4 days

Lower levels capture short-term patterns while higher levels capture trends.

base_forecastersktime-compatible forecaster, default=None

The forecasting model to be used for each aggregation level.

If None, defaults to:

  • ExponentialSmoothing(trend=”add”, seasonal=”add”, sp=sp) if statsmodel present

  • NaiveForecaster(strategy=”mean”) if statsmodel not present

agg_methodstr, default=”mean”

Method used to aggregate the time series at different temporal levels.

Options are:

  • “mean”: Takes average of the periods (e.g., average of each 2-day period)

  • “sum”: Sums the values (useful for additive measures like sales)

decompose_typestr, default=”multiplicative”

The type of decomposition used in time series decomposition.

Options are:

  • “additive”: Components are added (trend + seasonal + residual)

  • “multiplicative”: Components are multiplied (trend * seasonal * residual)

forecast_combinestr, default=”mean”

Method used to combine the forecasts from different aggregation levels.

Options are:

  • “mean”: Simple average of all forecasts

  • “median”: Takes the median forecast

  • “weighted_mean”: Uses supplied weights for weighted average

imputation_methodstr, default=”ffill”

Method used for imputing missing values in the time series.

Options include:

  • “ffill”: Forward fill (propagate last valid observation forward)

  • “bfill”: Backward fill (use next valid observation)

  • “interpolate”: Linear interpolation between valid observations

spint, default=6
Seasonal periodicity of the time series.
weightslist of float, default=None
Optional weights to apply when combining forecasts. Only used if forecast_combine=”weighted_mean”. Must have same length as aggregation_levels. Weights are normalized to sum to 1.