Baseline Models
Simple benchmark methods for comparison and quick forecasts.
| Model | Description |
|---|---|
Naive | Repeats the last observed value |
SeasonalNaive | Repeats values from previous seasonal cycle |
SMA | Simple Moving Average |
RandomWalkDrift | Random walk with drift (trend) |
Showing 4 of 4
Naive
Repeats the last observed value for all forecast horizons.
Example
SELECT * FROM ts_forecast_by(
'sales_data', NULL, date, sales,
'Naive', 14, '1d',
MAP{}
);
Best for: Establishing baseline, random walk data.
SeasonalNaive
Repeats values from the same period in the previous seasonal cycle.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
seasonal_period | INTEGER | Yes | Seasonal period |
Example
-- Weekly seasonality: forecast = same day last week
SELECT * FROM ts_forecast_by(
'weekly_sales', NULL, date, sales,
'SeasonalNaive', 28, '1d',
MAP{'seasonal_period': '7'}
);
Best for: Strong seasonal patterns, limited data.
SMA (Simple Moving Average)
Average of the last N observations.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
window | INTEGER | 5 | Number of observations to average |
Example
SELECT * FROM ts_forecast_by(
'noisy_data', NULL, date, value,
'SMA', 14, '1d',
MAP{'window': '7'}
);
Best for: Smoothing noise, simple baseline.
RandomWalkDrift
Random walk with drift (trend). Adds average historical change to the last value.
Example
SELECT * FROM ts_forecast_by(
'trending_data', NULL, date, value,
'RandomWalkDrift', 28, '1d',
MAP{}
);
Best for: Trending data baseline, financial data.
Comparison
| Model | Handles Trend | Handles Seasonality | Speed |
|---|---|---|---|
| Naive | No | No | Fastest |
| SeasonalNaive | No | Yes | Fast |
| SMA | Smoothed | No | Fast |
| RandomWalkDrift | Yes | No | Fast |
When to Use Baseline Models
| Scenario | Recommended |
|---|---|
| Establish performance baseline | Naive |
| Strong weekly/yearly patterns | SeasonalNaive |
| Noisy stationary data | SMA |
| Trending random walk | RandomWalkDrift |
| Very limited data | SeasonalNaive |
| Real-time quick forecast | Naive |
Using Baselines for Comparison
Always compare your sophisticated model against baselines:
-- Compare AutoETS against SeasonalNaive
CREATE TABLE baseline AS
SELECT * FROM ts_forecast_by(
'sales', NULL, date, value,
'SeasonalNaive', 28, '1d',
MAP{'seasonal_period': '7'}
);
CREATE TABLE model_forecast AS
SELECT * FROM ts_forecast_by(
'sales', NULL, date, value,
'AutoETS', 28, '1d',
MAP{}
);
-- Calculate MASE (< 1 means model beats baseline)
SELECT ts_mase(
LIST(actual ORDER BY date),
LIST(model_pred ORDER BY date),
LIST(baseline_pred ORDER BY date)
) AS mase
FROM comparison_data;
If MASE < 1, your model beats the baseline.