<forecast_context>
<dataset>
- Observations: 100
- Series: 1
- Frequency: D
- Date range: 2023-01-01 to 2023-04-10
- Target: sales
- Exogenous columns: none
- Target statistics: min 0, max 99, mean 49.5, std 29.01
- Missing values: none
- Index irregularities: none detected
</dataset>
<profile_decision>
A single-series ML forecaster (ForecasterRecursive) is recommended. Data: 100 observations, 'D' frequency. Alternative forecasters: ['ForecasterDirect', 'ForecasterFoundation', 'ForecasterStats']. Estimator: Ridge. A linear model is preferred because the dataset is small (100 observations < 250); gradient boosting is offered as an alternative once more data is available. Alternative estimators: ['RandomForestRegressor', 'LGBMRegressor'].
- Significant lags (partial autocorrelation, strongest first): 1
- Suggested window features: mean(window=3), std(window=3), mean(window=7), mean(window=21)
- Suggested calendar features: day_of_week, weekend, month
</profile_decision>
<comparison_overview>
- Candidates evaluated: 3
- Ranking metric: MAE
- Winner: candidate_01
- Baseline: Baseline (seasonal naive) (ForecasterEquivalentDate, repeats past values). A candidate beats this naive reference only when it ranks above it (strictly lower MAE; the baseline wins ties). This row is not the reference of MASE or RMSSE: those scale every row, this one included, against the one-step naive forecast on the training data, so the baseline row can also score below 1.
The ranking is a deterministic ascending sort of the MAE column (lower is better).
</comparison_overview>
<leaderboard>
Candidates listed: 3 (all shown below).
   rank                       name                forecaster estimator  MAE
0     1               candidate_01       ForecasterRecursive     Ridge  1.5
1     2               candidate_02       ForecasterRecursive     Ridge  2.5
2     3  Baseline (seasonal naive)  ForecasterEquivalentDate      None  3.5
</leaderboard>
<backtesting_strategy>
Applied identically to every candidate.
- steps: 5
- initial_train_size: 70
- refit: False
- fixed_train_size: True
- gap: 0
- n_folds: 6
</backtesting_strategy>
<deterministic_summary>
Compared 3 configurations, ranked ascending by MAE.
</deterministic_summary>
<winning_candidate>
Name: candidate_01
Only the winning configuration is detailed below. The other candidates are represented by their leaderboard rows.
<forecast_plan>
- Forecaster: ForecasterRecursive
- Steps: 5
- Estimator: Ridge
- Lags: [1, 2, 3, 4, 5, 7]
- Window features: [{'stats': ['mean', 'std'], 'window_size': 3}, {'stats': ['mean'], 'window_size': 7}, {'stats': ['mean'], 'window_size': 21}]
- Primary metric: mean_absolute_error
- Plan: ForecasterRecursive + Ridge. Lags: [1, 2, 3, 4, 5, 7]. Window features: ['mean(window=3)', 'std(window=3)', 'mean(window=7)', 'mean(window=21)']. Calendar features: ['day_of_week', 'weekend', 'month'] (cyclical encoding). MAE is interpretable, robust to outliers, and works at any scale.
</forecast_plan>
</winning_candidate>
</forecast_context>
