Skip to main content

Choosing the Right Forecasting Model

Understand the strengths and weaknesses of different models to choose the best one for your data.

Model Categories

AnoFox Forecast provides 31 models across 4 categories:

Category 1: Naïve & Baseline Models

Simple, fast models that establish minimum accuracy baseline.

ModelBest ForSpeedSeasonality
NaiveTesting, baselines⚡ Very Fast❌ No
SeasonalNaiveStrongly seasonal data⚡ Very Fast✅ Yes
SeasonalWindowAverageSimple seasonal⚡ Very Fast✅ Yes
RandomWalkDriftTrending data⚡ Very Fast❌ No
SMA (Simple Moving Average)Smooth trends⚡ Very Fast❌ No

When to use: Starting point, comparison baseline

Category 2: Statistical Models

Traditional time-series models backed by mathematical theory.

ModelBest ForSpeedSeasonality
ETSTrending + seasonal⚡ Fast✅ Yes
AutoETSAutomatic selection🟢 Medium✅ Yes
Holt-WintersClear trend + seasonality🟢 Medium✅ Yes
ARIMAComplex patterns🟢 Medium✅ Yes
AutoARIMAAuto parameter tuning🟡 Slow✅ Yes
ThetaShort-term forecasts⚡ Fast✅ Yes
GARCHVolatility modeling🟡 Slow❌ No
SESSimple data⚡ Fast❌ No

When to use: Well-structured data with clear patterns

Category 3: Advanced Models

Specialized models for complex patterns.

ModelBest ForSpeedSeasonality
TBATSMultiple seasonality🟡 Slow✅ Multiple
MSTLVery complex seasonality🟡 Slow✅ Multiple
MFLESMessy real-world data🟢 Medium✅ Yes
DTWSimilarity-based🟡 Slow✅ Yes

When to use: Complex patterns, multiple seasonal patterns

Category 4: Intermittent Demand

For sparse, irregular data (many zeros or gaps).

ModelBest ForSpeedSeasonality
CrostonIntermittent demand⚡ Fast✅ Yes
CrostonOptimizedOptimized Croston🟢 Medium✅ Yes
CrostonSBASyntetos-Boylan adjusted🟢 Medium✅ Yes
ADIDADemand spikes🟢 Medium✅ Yes
IMAPAIntermittent + multiple🟡 Slow✅ Yes
TSBAggregate demand🟢 Medium✅ Yes

When to use: Sparse demand, e-commerce, inventory forecasting


Decision Tree: Which Model Should I Use?

START: Need a forecast

├─ Do I have lots of missing data or sparse demand?
│ ├─ YES → Use Croston or ADIDA
│ └─ NO ↓

├─ How much data do I have?
│ ├─ < 2 months → Use Naive, Theta, or SeasonalNaive
│ ├─ 2-12 months → Use ETS, ARIMA, or Theta
│ └─ > 12 months ↓

├─ How many seasonal patterns?
│ ├─ None → Use AutoARIMA or ETS
│ ├─ One (weekly/yearly) → Use AutoETS or ARIMA
│ └─ Multiple (hourly+daily+yearly) → Use TBATS or MSTL

├─ How clean is your data?
│ ├─ Lots of outliers → Use MFLES
│ ├─ Clean data → Use AutoETS or AutoARIMA
│ └─ Very complex patterns ↓

└─ Want to keep it simple?
├─ YES → Use Theta or AutoETS
└─ NO → Use TBATS or MFLES

Model Comparison Matrix

Quick reference for comparing models:

                     | Seasonality | Trend | Outliers | Speed   | Complexity
---------------------|-------------|-------|----------|---------|----------
Naive | ❌ | ❌ | ❌ | ⚡⚡⚡ | ⭐
SeasonalNaive | ✅ | ❌ | ❌ | ⚡⚡⚡ | ⭐
SimpleMA | ❌ | ✅ | ⭐⭐ | ⚡⚡⚡ | ⭐⭐
ETS | ✅ | ✅ | ⭐ | ⚡⚡ | ⭐⭐⭐
AutoETS | ✅ | ✅ | ⭐ | ⚡⚡ | ⭐⭐⭐
Theta | ✅ | ✅ | ⭐ | ⚡⚡ | ⭐⭐
ARIMA | ✅ | ✅ | ⭐ | 🟢 | ⭐⭐⭐⭐
AutoARIMA | ✅ | ✅ | ⭐ | 🟡 | ⭐⭐⭐⭐
Holt-Winters | ✅ | ✅ | ⭐ | 🟢 | ⭐⭐⭐
TBATS | ✅✅ | ✅ | ⭐ | 🟡 | ⭐⭐⭐⭐⭐
MSTL | ✅✅ | ✅ | ⭐ | 🟡 | ⭐⭐⭐⭐⭐
MFLES | ✅ | ✅ | ✅✅ | 🟢 | ⭐⭐⭐⭐
Croston | ✅ | ❌ | ⭐ | ⚡⚡ | ⭐⭐
ADIDA | ✅ | ⭐ | ✅ | 🟢 | ⭐⭐⭐

Legend:
✅ Handles well | ⭐ Moderate | ✅✅ Excellent | ❌ Poor
⚡⚡⚡ Very fast | ⚡⚡ Fast | 🟢 Medium | 🟡 Slow

Model Descriptions & Use Cases

1. Naive (Baseline)

Forecast = last observation

Today: Jan 15, sales = 100
Forecast for Jan 16: 100

Use when:

  • You need a quick baseline
  • Data is highly random
  • Want to compare other models against

Pros: ⚡ Instant, simple Cons: ❌ Ignores trends, seasonality

2. Seasonal Naive

Forecast = same period last year

Sales last Jan 15: 100
Forecast for Jan 15 this year: 100

Use when:

  • Data has strong seasonality
  • You want a simple seasonal benchmark
  • Data is stable year-over-year

Pros: ⚡ Fast, captures seasonality Cons: ❌ Ignores trends

3. ETS (Error, Trend, Seasonality)

Exponential smoothing state-space model

Forecast = Smoothed trend + Smoothed seasonal + Error

Use when:

  • Data has trend and/or seasonality
  • Data is relatively clean
  • You want good default performance

Pros: 🟢 Good accuracy, handles seasonality, fast Cons: ❌ Can overfit to noise

4. AutoETS

ETS with automatic parameter selection

Automatically chooses:
- Which components (trend/seasonal)
- How much smoothing
- Initial values

Use when:

  • You're unsure about data structure
  • Want automation without tuning
  • Data has clear trends/seasonality

Pros: ✅ Automatic, reliable, accurate Cons: 🟡 Slightly slower

5. ARIMA (AutoRegressive Integrated Moving Average)

Uses past values to predict future

Forecast = f(past values) + f(past errors)

Parameters: (p, d, q)

  • p = AutoRegressive (past values)
  • d = Integrated (differencing)
  • q = Moving Average (past errors)

Use when:

  • Data has trends needing differencing
  • Complex relationships between past values
  • Data has seasonality (use SARIMA)

Pros: ✅ Flexible, mathematically sound Cons: 🟡 Slow, requires tuning

6. AutoARIMA

ARIMA with automatic parameter selection

Automatically finds best (p,d,q) and (P,D,Q,s)

Use when:

  • You want ARIMA without parameter tuning
  • Data has complex patterns
  • You have time for slower training

Pros: ✅ Comprehensive, automatic Cons: 🟡🟡 Slow, can be overkill

7. Theta

Simple trend + seasonal decomposition

Forecast = Theta-line 1 + Theta-line 2

Use when:

  • You want simplicity
  • Short-term forecasting (< 8 periods)
  • Data has trend and seasonality

Pros: ⚡ Fast, good for short-term, interpretable Cons: ❌ Poor for long horizons

8. TBATS (Trigonometric, Box-Cox, ARMA, Trend, Seasonality)

Handles multiple seasonal patterns

Forecast = Trend component
+ Seasonal component 1 (hourly)
+ Seasonal component 2 (daily)
+ Seasonal component 3 (yearly)
+ Error correction

Use when:

  • Multiple overlapping seasonal patterns
  • Daily data with hourly + daily + yearly patterns
  • Complex business data (e-commerce, utilities)

Pros: ✅ Handles complexity, multiple seasonality Cons: 🟡 Slow, complex

9. MSTL (Multiple Seasonal and Trend decomposition using Loess)

Advanced decomposition for multiple seasonality

Similar to TBATS but uses different method

Use when:

  • Very complex seasonal patterns
  • Multiple seasonal periods
  • Data with changing seasonality

Pros: ✅ Handles complexity, adaptive Cons: 🟡 Slow, requires enough data

10. MFLES (Median-based Feature-Logic-Expert System)

Robust model combining statistical and feature-based approaches

Combines:
- Feature engineering
- Statistical methods
- Median-based robustness

Use when:

  • Real-world messy data with outliers
  • Inconsistent data quality
  • Multiple seasonal patterns
  • You need robustness

Pros: ✅ Robust, handles outliers, flexible Cons: 🟡 Medium speed, needs tuning

11. Croston (Intermittent Demand)

Forecast non-zero occurrences separately from sizes

Forecast = P(non-zero) × Average size

Use when:

  • Sparse demand (many zeros)
  • Intermittent ordering patterns
  • Inventory forecasting

Pros: ⚡ Fast, handles sparse data Cons: ❌ Limited to specific domain


Matching Models to Your Data Characteristics

High-Quality, Clean Data

✅ Recommendation: AutoETS or Theta

  • Reason: Simple, fast, accurate on clean data

✅ Recommendation: AutoETS or ARIMA

  • Reason: Both capture trends well

Seasonal Data (Single Period)

✅ Recommendation: AutoETS or Holt-Winters

  • Reason: Designed for this, fast, accurate

Multiple Seasonal Patterns

✅ Recommendation: TBATS or MSTL

  • Reason: Specifically designed for this

Sparse/Intermittent Data

✅ Recommendation: Croston or ADIDA

  • Reason: Designed for intermittent demand

Noisy/Outlier-Ridden Data

✅ Recommendation: MFLES

  • Reason: Robust to outliers

Limited Data (< 30 observations)

✅ Recommendation: SeasonalNaive or Theta

  • Reason: Simple models need less data

Very Long Data (1000+ observations)

✅ Recommendation: ARIMA, TBATS, MSTL, MFLES

  • Reason: Complex models benefit from more data

Model Selection Strategy

1. Start Simple

-- Begin with SeasonalNaive as baseline
SELECT * FROM TS_FORECAST(..., 'SeasonalNaive', ...);

2. Try Automatic Models

-- Then try AutoETS (good default)
SELECT * FROM TS_FORECAST(..., 'AutoETS', ...);

-- And AutoARIMA for comparison
SELECT * FROM TS_FORECAST(..., 'AutoARIMA', ...);

3. Add Domain Knowledge

-- If data has multiple seasonality, try TBATS
SELECT * FROM TS_FORECAST(..., 'TBATS', ...);

-- If data is noisy, try MFLES
SELECT * FROM TS_FORECAST(..., 'MFLES', ...);

4. Compare and Evaluate

-- Calculate accuracy for each model
-- Use TS_MAE, TS_RMSE, TS_MAPE
-- Choose the best performer

5. Deploy Winner

-- Use the model with lowest error metrics
-- Monitor performance over time
-- Retrain regularly as data changes

Ensemble Approach

Combine multiple models for better accuracy:

-- Forecast with 3 models
SELECT
forecast_step,
date_col,
(f1.point_forecast + f2.point_forecast + f3.point_forecast) / 3
AS ensemble_forecast
FROM (
SELECT * FROM TS_FORECAST(..., 'AutoETS', ...)
) f1
JOIN (
SELECT * FROM TS_FORECAST(..., 'AutoARIMA', ...)
) f2
ON f1.forecast_step = f2.forecast_step
JOIN (
SELECT * FROM TS_FORECAST(..., 'Theta', ...)
) f3
ON f1.forecast_step = f3.forecast_step;

Common Mistakes in Model Selection

❌ Using the Most Complex Model

Problem: TBATS on simple weekly data = overfitting

Solution: Start simple, increase complexity as needed

❌ Not Considering Data Quality

Problem: Using ARIMA on noisy data → Poor performance

Solution: Use MFLES or clean data first

❌ Ignoring Seasonality in Model Choice

Problem: Using Naive on strongly seasonal data

Solution: Use SeasonalNaive or AutoETS

❌ Only Trying One Model

Problem: Assuming first model tried is best

Solution: Always compare 3-5 models

❌ Not Evaluating on Real Test Data

Problem: Choosing model based on training error

Solution: Always backtest on held-out test data


Quick Reference: When to Use Each Model

| Data Characteristic | Recommended Model | Alternative |
|-------------------|------------------|-------------|
| Clean, trending | AutoETS | Theta |
| Seasonal (weekly) | AutoETS | Holt-Winters |
| Multiple seasonality | TBATS | MSTL |
| Noisy, outliers | MFLES | ETS |
| Sparse demand | Croston | ADIDA |
| Very simple | SeasonalNaive | Naive |
| Very complex | MSTL | TBATS |
| Limited data | Theta | SeasonalNaive |
| Production 24/7 | AutoETS | Theta |

Next Steps

  1. Evaluate Forecast Accuracy — Measure model performance
  2. Model Comparison Guide — Practical comparison tutorial
  3. Forecasting Models Reference — All 31 models detailed

Key Takeaways

  • ✅ 31 models in 4 categories for different situations
  • ✅ Start simple (SeasonalNaive, Theta, AutoETS)
  • ✅ Match model to data characteristics
  • ✅ Multiple seasonality → Use TBATS/MSTL
  • ✅ Sparse data → Use Croston/ADIDA
  • ✅ Noisy data → Use MFLES
  • ✅ Always compare multiple models
  • ✅ Evaluate on test data, not training data
🍪 Cookie Settings