<forecast_context>
<dataset>
- Observations: 90
- Observations pooled across series: 264
- Series: 3
- Frequency: D
- Date range: 2023-01-01 to 2023-03-31
- Target: sales
- Exogenous columns: promo, weekday
- Categorical exogenous columns: weekday
- Target statistics (store_a): min 92.61, max 106.4, mean 99.88, std 3.7
- Target statistics (store_b): min 103.1, max 116.3, mean 109.9, std 3.718
- Target statistics (store_c): min 113, max 126.2, mean 119.9, std 3.85
- Missing values: none
- Index irregularities: none detected
- Data warning: Series ending early: 1 series ends before the last date with a value (2023-03-31): 'store_c' (2023-03-25). ForecasterRecursiveMultiSeries does not predict them, and ForecasterFoundation predicts each one after its own last row, rows without a value included.
</dataset>
<profile_decision>
The dataset contains 3 series, so a multi-series forecaster (ForecasterRecursiveMultiSeries) is recommended. Data: 264 observations pooled across 3 series, 'D' frequency. Alternative forecasters: ['ForecasterFoundation']. Estimator: LGBMRegressor. A gradient boosting model is preferred for a dataset of this size (264 observations). Alternative estimators: ['XGBRegressor', 'Ridge']. 2 exogenous variables (1 categorical) available as predictors.
- Significant lags for store_a (partial autocorrelation, strongest first): 2, 1, 3, 4
- Significant lags for store_b (partial autocorrelation, strongest first): 2, 3, 1
- Significant lags for store_c (partial autocorrelation, strongest first): 2, 1, 3
- 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>
<forecast_plan>
- Forecaster: ForecasterRecursiveMultiSeries
- Steps: 7
- Estimator: LGBMRegressor
- Lags: [1, 2, 3, 7]
- Window features: [{'stats': ['mean', 'std'], 'window_size': 3}, {'stats': ['mean'], 'window_size': 7}, {'stats': ['mean'], 'window_size': 21}]
- Primary metric: mean_absolute_scaled_error
- Preprocessing steps:
  - [informational] Categorical exogenous variables detected: ['weekday']. These are handled automatically by skforecast (categorical_features='auto').
- Plan: ForecasterRecursiveMultiSeries + LGBMRegressor. Lags: [1, 2, 3, 7]. Window features: ['mean(window=3)', 'std(window=3)', 'mean(window=7)', 'mean(window=21)']. Calendar features: ['day_of_week', 'weekend', 'month'] (raw ordinal encoding). Exogenous variables included. MASE is scale-independent, enabling fair comparison across differently-scaled series.

Note: A validated Python script implementing this plan is generated separately. Do not generate code yourself.
</forecast_plan>
<backtesting_strategy>
- steps: 7
- initial_train_size: 76
- refit: False
- fixed_train_size: False
- gap: 0
- fold_stride: 7
- skip_folds: None
- allow_incomplete_fold: True
- differentiation: None
- n_folds: 2
- n_fits: 1
</backtesting_strategy>
<deterministic_summary>
Using 84% of data (76 observations) for initial training, trained once (no refit), 7-step horizon, 2 folds. Results (average across series): mean_absolute_error: 1.3467, mean_squared_error: 2.7633, mean_absolute_scaled_error: 0.6800.
</deterministic_summary>
<evaluation_metrics>
          levels  mean_absolute_error  mean_squared_error  mean_absolute_scaled_error
         store_a               1.2100              2.3100                       0.620
         store_b               1.3500              2.8600                       0.680
         store_c               1.4800              3.1200                       0.740
         average               1.3467              2.7633                       0.680
weighted_average               1.3244              2.7039                       0.670
         pooling               1.3244              2.7039                       0.665
</evaluation_metrics>
<predictions>
Total rows: 36. Only the first 5 and last 5 rows are shown; the 26 interior rows were not provided. Do not describe trends, growth, or progression across the horizon from these rows, and do not compare an early row against a late row as if they were adjacent. Use the per-column summary below for any statement about the full set of rows.

              level  fold   pred
2023-03-18  store_a     0  100.0
2023-03-18  store_b     0  100.5
2023-03-18  store_c     0  101.0
2023-03-19  store_a     0  101.5
2023-03-19  store_b     0  102.0
... (26 rows omitted) ...
2023-03-29  store_b  1  115.5
2023-03-30  store_a  1  116.0
2023-03-30  store_b  1  116.5
2023-03-31  store_a  1  117.0
2023-03-31  store_b  1  117.5

Per-column summary (all rows):
  pred: min=100.0, max=117.5, mean=108.75
Per-level summary of pred (all rows):
  store_a: min=100.0, max=117.0, mean=109.21428571428571
  store_b: min=100.5, max=117.5, mean=109.71428571428571
  store_c: min=101.0, max=111.5, mean=106.25
</predictions>
</forecast_context>
