Exponential Smoothing
AnoFox provides 8 exponential smoothing models ranging from Simple Exponential Smoothing (SES) with a single parameter to AutoETS with automatic component selection across all error, trend, and seasonal combinations. AutoETS is the recommended default for most forecasting tasks -- it selects the optimal ETS configuration using information criteria and produces prediction intervals without manual tuning.
Exponential smoothing is a family of forecasting methods that assign exponentially decreasing weights to older observations, so recent data points have more influence on the forecast than distant ones. The state space formulation classifies models by their Error (A/M), Trend (N/A/M), and Seasonal (N/A/M) components.
| Model | Description |
|---|---|
ETS | Error-Trend-Seasonality state space model |
AutoETS | Automatic ETS with component selection |
SES | Simple Exponential Smoothing |
SESOptimized | SES with optimized smoothing parameter |
Holt | Linear trend method |
HoltWinters | Trend + seasonality |
SeasonalES | Seasonal exponential smoothing |
SeasonalESOptimized | SeasonalES with optimized parameters |
ETS (Error-Trend-Seasonality)
State space model with explicit error, trend, and seasonal components.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
error | VARCHAR | 'A' | Error type: A (Additive), M (Multiplicative) |
trend | VARCHAR | 'A' | Trend type: A, M, N (None) |
seasonal | VARCHAR | 'A' | Seasonal type: A, M, N |
seasonal_period | INTEGER | - | Seasonal period (required if seasonal != 'N') |
Example
SELECT * FROM ts_forecast_by(
'sales_data', NULL, date, sales,
'ETS', 28, '1d',
MAP{'trend': 'A', 'seasonal': 'A', 'seasonal_period': '7'}
);
Best for: Trending + seasonal data, smooth patterns.
AutoETS
Automatic ETS with component selection using information criteria.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
seasonal_period | INTEGER | - | Seasonal period (detect with ts_detect_periods_by first) |
confidence_level | DOUBLE | 0.90 | Prediction interval width |
Example
SELECT * FROM ts_forecast_by(
'sales_data', NULL, date, sales,
'AutoETS', 28, '1d',
MAP{'seasonal_period': '7', 'confidence_level': '0.95'}
);
Best for: Most common use case, default choice for trend + seasonality.
SES (Simple Exponential Smoothing)
Weighted average of past observations with exponentially decreasing weights.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
alpha | DOUBLE | auto | Smoothing parameter (0-1) |
Example
SELECT * FROM ts_forecast_by(
'stable_data', NULL, date, value,
'SES', 14, '1d',
MAP{}
);
Best for: No trend, no seasonality, stationary data.
SESOptimized
SES with automatically optimized smoothing parameter.
Example
SELECT * FROM ts_forecast_by(
'stable_data', NULL, date, value,
'SESOptimized', 14, '1d',
MAP{}
);
Best for: Stationary data with automatic parameter tuning.
Holt (Linear Trend)
Extends SES to capture linear trends.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
alpha | DOUBLE | auto | Level smoothing |
beta | DOUBLE | auto | Trend smoothing |
Example
SELECT * FROM ts_forecast_by(
'trending_data', NULL, date, value,
'Holt', 28, '1d',
MAP{}
);
Best for: Linear trending data without seasonality.
HoltWinters
Extends Holt to include seasonality (additive or multiplicative).
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
seasonal | VARCHAR | 'additive' | 'additive' or 'multiplicative' |
seasonal_period | INTEGER | - | Seasonal period (required) |
Example
SELECT * FROM ts_forecast_by(
'retail_sales', NULL, date, sales,
'HoltWinters', 52, '1d',
MAP{'seasonal': 'multiplicative', 'seasonal_period': '7'}
);
Best for: Clear trend + seasonality patterns.
SeasonalES
Seasonal exponential smoothing without trend component.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
seasonal_period | INTEGER | - | Seasonal period (required) |
Example
SELECT * FROM ts_forecast_by(
'seasonal_data', NULL, date, value,
'SeasonalES', 28, '1d',
MAP{'seasonal_period': '7'}
);
Best for: Seasonal patterns without trend.
SeasonalESOptimized
SeasonalES with optimized parameters.
Example
SELECT * FROM ts_forecast_by(
'seasonal_data', NULL, date, value,
'SeasonalESOptimized', 28, '1d',
MAP{'seasonal_period': '7'}
);
Best for: Seasonal patterns with automatic parameter tuning.
Comparison
| Model | Trend | Seasonality | Parameters |
|---|---|---|---|
| SES | No | No | alpha |
| SESOptimized | No | No | auto |
| Holt | Yes | No | alpha, beta |
| HoltWinters | Yes | Yes | alpha, beta, gamma |
| SeasonalES | No | Yes | alpha, gamma |
| SeasonalESOptimized | No | Yes | auto |
| ETS | Configurable | Configurable | Full state space |
| AutoETS | Auto | Auto | Automatic selection |
When to Use AutoETS
AutoETS is recommended as the default choice for most forecasting tasks:
- Automatically selects error, trend, and seasonal components
- Handles both additive and multiplicative patterns
- Produces prediction intervals
- Fast and reliable
The 8 exponential smoothing models form a hierarchy of increasing complexity: SES handles stationary data with 1 parameter, Holt adds trend with 2 parameters, HoltWinters adds seasonality with 3 parameters, and ETS provides the full configurable state space. AutoETS automates the selection process, testing all valid component combinations and choosing the best fit via information criteria. For production pipelines processing thousands of series, AutoETS eliminates manual model selection entirely.
Frequently Asked Questions
What is the difference between additive and multiplicative seasonality?
Additive seasonality means the seasonal effect is a constant amount added to the trend (e.g., sales always increase by 500 units in December). Multiplicative seasonality means the seasonal effect scales proportionally with the level (e.g., sales increase by 20% in December). Use multiplicative when the seasonal amplitude grows as the series level increases. AutoETS selects the appropriate type automatically.
Why would I use ETS with manual components instead of AutoETS?
Use manual ETS when you have domain knowledge about your data's structure. For example, if you know your demand has multiplicative seasonality but no trend, specifying ETS(A,N,M) directly avoids searching over unnecessary configurations. This can also be faster for large-scale batch forecasting where the model structure is already known.
How does AutoETS select the best model?
AutoETS fits all valid combinations of Error (A/M), Trend (N/A/M), and Seasonal (N/A/M) components and selects the model with the lowest AIC (Akaike Information Criterion). This balances goodness-of-fit against model complexity, automatically guarding against overfitting. The search typically evaluates 15-30 candidate models depending on the data characteristics.
Can SES or Holt handle seasonal data?
No. SES and Holt do not model seasonality. SES handles only stationary (level-only) data, and Holt handles level + trend. For seasonal data, use HoltWinters (trend + seasonality), SeasonalES (seasonality without trend), or AutoETS (automatic selection). The comparison table above shows which component each model supports.