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.
| Model | Best For | Speed | Seasonality |
|---|---|---|---|
Naive | Testing, baselines | ⚡ Very Fast | ❌ No |
SeasonalNaive | Strongly seasonal data | ⚡ Very Fast | ✅ Yes |
SeasonalWindowAverage | Simple seasonal | ⚡ Very Fast | ✅ Yes |
RandomWalkDrift | Trending 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.
| Model | Best For | Speed | Seasonality |
|---|---|---|---|
ETS | Trending + seasonal | ⚡ Fast | ✅ Yes |
AutoETS | Automatic selection | 🟢 Medium | ✅ Yes |
Holt-Winters | Clear trend + seasonality | 🟢 Medium | ✅ Yes |
ARIMA | Complex patterns | 🟢 Medium | ✅ Yes |
AutoARIMA | Auto parameter tuning | 🟡 Slow | ✅ Yes |
Theta | Short-term forecasts | ⚡ Fast | ✅ Yes |
GARCH | Volatility modeling | 🟡 Slow | ❌ No |
SES | Simple data | ⚡ Fast | ❌ No |
When to use: Well-structured data with clear patterns
Category 3: Advanced Models
Specialized models for complex patterns.
| Model | Best For | Speed | Seasonality |
|---|---|---|---|
TBATS | Multiple seasonality | 🟡 Slow | ✅ Multiple |
MSTL | Very complex seasonality | 🟡 Slow | ✅ Multiple |
MFLES | Messy real-world data | 🟢 Medium | ✅ Yes |
DTW | Similarity-based | 🟡 Slow | ✅ Yes |
When to use: Complex patterns, multiple seasonal patterns
Category 4: Intermittent Demand
For sparse, irregular data (many zeros or gaps).
| Model | Best For | Speed | Seasonality |
|---|---|---|---|
Croston | Intermittent demand | ⚡ Fast | ✅ Yes |
CrostonOptimized | Optimized Croston | 🟢 Medium | ✅ Yes |
CrostonSBA | Syntetos-Boylan adjusted | 🟢 Medium | ✅ Yes |
ADIDA | Demand spikes | 🟢 Medium | ✅ Yes |
IMAPA | Intermittent + multiple | 🟡 Slow | ✅ Yes |
TSB | Aggregate 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
Trending 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