Let op: dit experiment is nog niet Codex-gevalideerd. Gebruik de bevindingen als voorlopige aanwijzingen.

Hypotheses

FAMILY_DEMAND_CYCLES: Experiment Log

FAMILY_DEMAND_CYCLES

Testing consumer demand cycles and food service consumption patterns for Dutch potato price forecasting through seasonal preferences, holiday peaks, and processing demand variations.

Laatste update
2025-12-01
Repo-pad
hypotheses/FAMILY_DEMAND_CYCLES
Codex-bestand
Ontbreekt

Experimentnotities

FAMILY_DEMAND_CYCLES: Experiment Log

Overview

Testing consumer demand cycles and food service consumption patterns for Dutch potato price forecasting through seasonal preferences, holiday peaks, and processing demand variations.

Hypothesis Origins

  • Prior experiments: FAMILY_QUALITY_PREMIUM (48.2% improvement at 30-day) showed demand segmentation matters; FAMILY_STORAGE_DECAY (92-93% improvement) revealed demand-supply interaction effects
  • Industry catalyst: December 2024 holiday demand spike to €37.5/100kg despite adequate supply (Boerderij.nl)
  • Academic basis: Jansen et al. (2023) demand elasticity -0.35; Vermeulen (2023) food service drives 42% of consumption

Experiment Design

  • Method: Rolling-origin cross-validation
  • Initial window: 156 weeks (3 years)
  • Step size: 4 weeks
  • Test windows: 52 weeks (1 year)
  • Refit frequency: 8 weeks
  • Baselines: Naive seasonal, ARIMA, linear trend
  • REAL DATA ONLY: CBS API, Boerderij.nl API, Open-Meteo

Data Sources (REAL DATA ONLY)

  • Boerderij.nl API: Products NL.157.2086 (consumption), NL.157.2083 (fries) - git:31ab258
  • CBS API: Tables 81261NED (CPI food), 83864NED (food service), 85676NED (storage) - version 2024-Q4
  • Open-Meteo API: Temperature and precipitation (52.6°N, 5.7°E) - git:31ab258
  • Version control: All data sources pinned to specific versions for reproducibility

Experiment Runs

Variant A: Seasonal Demand Pattern Model

Status: Not started - Model: Linear regression with seasonal harmonics - Features: cpi_food_index, seasonal_demand_score, holiday_proximity, temperature_deviation, price_lag_4w - Horizons: 1-month, 2-month - Target: Test if consumer seasonal preferences predict prices 4-8 weeks ahead

Variant B: Food Service Demand Model

Status: Not started - Model: Random forest with demand indicators - Features: food_service_turnover, fries_consumption_ratio, processing_premium, weekday_pattern, price_lags - Horizons: 1-month, 2-month - Target: Test if food service sector provides leading price signals

Variant C: Combined Demand-Supply Balance Model

Status: Not started - Model: Gradient boosting ensemble - Features: demand_supply_ratio, seasonal_demand, food_service, storage_depletion, quality_spread, momentum - Horizons: 1-month, 2-month - Target: Test if integrated demand-supply signals provide superior forecasting

Statistical Tests

  • Diebold-Mariano test with Harvey-Leybourne-Newbold correction
  • TOST equivalence test with SESOI = 5% improvement (0.075 EUR/100kg)
  • Directional accuracy threshold = 60%
  • Regime detection: Seasonal decomposition (A), CUSUM (B), Bai-Perron (C)
  • Bonferroni correction for variant C (multiple comparisons)

Regime Analysis

  • Normal demand regime: Typical seasonal patterns
  • Holiday spike regime: December-January elevated demand
  • Summer peak regime: BBQ season June-August
  • Crisis regime: Supply shortage driven (e.g., 2024)

Verdicts

(No runs completed yet)

HE Notes

  • Created 2025-08-16 based on prior experiment insights and industry observations
  • Builds on FAMILY_QUALITY_PREMIUM demand segmentation findings
  • Complements supply-side families with explicit demand modeling
  • December 2024 price spike despite adequate supply validates demand-side importance
  • All variants use ONLY REAL DATA from repository APIs
  • Consider separate analysis for holiday periods if patterns differ significantly

Decision Log

(To be added after experiments)

Experiment Results (Simplified)

Note: These results use simplified feature sets due to data availability constraints. All experiments use ONLY REAL DATA from Boerderij.nl API.

Verdict — Variant A: Seasonal Demand Pattern — 30-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 30-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 2.024, Baseline RMSE: nan

Verdict — Variant A: Seasonal Demand Pattern — 60-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 60-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 2.054, Baseline RMSE: nan

Verdict — Variant B: Food Service Demand — 30-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 30-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 5.225, Baseline RMSE: nan

Verdict — Variant B: Food Service Demand — 60-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 60-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 6.484, Baseline RMSE: nan

Verdict — Variant C: Combined Demand-Supply — 30-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 30-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 3.267, Baseline RMSE: nan

Verdict — Variant C: Combined Demand-Supply — 60-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 60-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 3.978, Baseline RMSE: nan

Experiment Results (Simplified)

Note: These results use simplified feature sets due to data availability constraints. All experiments use ONLY REAL DATA from Boerderij.nl API.

Verdict — Variant A: Seasonal Demand Pattern — 30-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 30-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 2.024, Baseline RMSE: nan

Verdict — Variant A: Seasonal Demand Pattern — 60-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 60-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 2.054, Baseline RMSE: nan

Verdict — Variant B: Food Service Demand — 30-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 30-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 5.225, Baseline RMSE: nan

Verdict — Variant B: Food Service Demand — 60-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 60-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 6.484, Baseline RMSE: nan

Verdict — Variant C: Combined Demand-Supply — 30-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 30-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 3.267, Baseline RMSE: nan

Verdict — Variant C: Combined Demand-Supply — 60-day horizon — 2025-08-16

Label: INCONCLUSIVE Scope: Dutch potato spot prices, 60-day ahead forecast Effect: ΔRMSE = nan EUR/100kg (nan% improvement) Stats: DM p=1.0000; HLN p=1.0000; TOST within ±0.075? False Data/Code: git=58fcb18; data=Boerderij.nl API (REAL DATA) Notes: Using REAL price data only. Variant RMSE: 3.978, Baseline RMSE: nan

Geen Codex-samenvatting

Voeg codex_validated.md toe om de status te documenteren.