MAPAForecaster
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:
Data Preparation:
Handles missing values using the specified imputation method
For multiplicative decomposition, ensures all values are positive by adding an offset if necessary
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
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
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.