Skip to main content

Multi-Seasonal Models

Models designed for complex seasonality patterns (e.g., hourly data with daily + weekly cycles).

ModelDescription
TBATSTrigonometric seasonality, Box-Cox, ARMA errors
AutoTBATSAutomatic TBATS with parameter selection
MSTLMultiple Seasonal-Trend decomposition using Loess
AutoMSTLAutomatic MSTL with period detection
MFLESMedian-based Feature-Logic Expert System
AutoMFLESAutomatic MFLES configuration
MFLESXMFLES with exogenous variables
Showing 7 of 7

TBATS

Trigonometric seasonality, Box-Cox transformation, ARMA errors, Trend, and Seasonal components.

Parameters

ParameterTypeRequiredDescription
seasonal_periodsINTEGER[]YesMultiple seasonal periods (e.g., [24, 168] for hourly data)

Example

-- Hourly data with daily (24) and weekly (168) seasonality
SELECT * FROM anofox_fcst_ts_forecast(
'hourly_energy',
'timestamp',
'consumption',
'TBATS',
336,
MAP{'seasonal_periods': '[24, 168]'}
);

Best for: Multiple seasonal patterns, high-frequency data.


AutoTBATS

Automatic TBATS with parameter selection.

Parameters

ParameterTypeDefaultDescription
seasonal_periodsINTEGER[]autoMultiple seasonal periods

Example

SELECT * FROM anofox_fcst_ts_forecast(
'complex_data',
'timestamp',
'value',
'AutoTBATS',
336,
MAP{}
);

Best for: Multiple seasonality with automatic configuration.


MSTL

Multiple Seasonal-Trend decomposition using Loess. Decomposes series into trend + multiple seasonal components + remainder.

Parameters

ParameterTypeRequiredDescription
seasonal_periodsINTEGER[]YesMultiple seasonal periods

Example

-- Daily data with weekly (7) and yearly (365) seasonality
SELECT * FROM anofox_fcst_ts_forecast(
'daily_sales',
'date',
'sales',
'MSTL',
90,
MAP{'seasonal_periods': '[7, 365]'}
);

Best for: Very complex seasonality, decomposition-based forecasting.


AutoMSTL

Automatic MSTL with period detection.

Parameters

ParameterTypeDefaultDescription
seasonal_periodsINTEGER[]autoMultiple seasonal periods

Example

SELECT * FROM anofox_fcst_ts_forecast(
'hourly_data',
'timestamp',
'value',
'AutoMSTL',
168,
MAP{}
);

Best for: Complex seasonality with automatic period detection.


MFLES

Median-based Feature-Logic Expert System. Robust to outliers and noise.

Parameters

ParameterTypeDefaultDescription
seasonal_periodINTEGERautoPrimary seasonal period

Example

SELECT * FROM anofox_fcst_ts_forecast(
'noisy_retail',
'date',
'sales',
'MFLES',
28,
MAP{'seasonal_period': '7'}
);

Best for: Noisy data, outliers, real-world messy time series.


AutoMFLES

Automatic MFLES configuration.

Parameters

ParameterTypeDefaultDescription
seasonal_periodINTEGERautoSeasonal period

Example

SELECT * FROM anofox_fcst_ts_forecast(
'noisy_data',
'date',
'value',
'AutoMFLES',
28,
MAP{}
);

Best for: Noisy data with automatic robust forecasting.


Comparison

ModelOutlier RobustSpeedSeasonality Handling
TBATSNoSlowTrigonometric
AutoTBATSNoSlowAuto trigonometric
MSTLModerateSlowLoess decomposition
AutoMSTLModerateSlowAuto decomposition
MFLESYesMediumMedian-based
AutoMFLESYesMediumAuto median-based

When to Use Multi-Seasonal Models

Data PatternRecommended Model
Hourly + daily + weeklyAutoTBATS or AutoMSTL
Daily + weekly + yearlyAutoMSTL
Noisy with multiple patternsAutoMFLES
High-frequency (sub-hourly)AutoTBATS
Need decomposition outputMSTL

Common Seasonal Periods

FrequencyCommon Periods
Hourly24 (daily), 168 (weekly), 8760 (yearly)
Daily7 (weekly), 30/31 (monthly), 365 (yearly)
Weekly52 (yearly)
Monthly12 (yearly)

MFLESX

MFLES with exogenous (external) variables. Combines MFLES's robustness to outliers with external predictor support.

Parameters

ParameterTypeDefaultDescription
seasonal_periodINTEGERautoPrimary seasonal period

Example

-- Create future exogenous values
CREATE TABLE future_exog AS
SELECT * FROM (VALUES
('2024-01-08'::DATE, 22.0, 1),
('2024-01-09'::DATE, 20.0, 0),
('2024-01-10'::DATE, 21.0, 1)
) AS t(date, temperature, promotion);

-- Forecast noisy retail data with exogenous variables
SELECT * FROM ts_forecast_exog(
'noisy_retail', date, sales,
'temperature,promotion',
'future_exog',
'MFLESX', 3, MAP{}
);

Best for: Noisy data with external drivers, real-world messy time series with predictors.

See Exogenous Variables for detailed usage

🍪 Cookie Settings