Command Palette
Search for a command to run...
Backtesting
32 forecasting models — 8 pure mathematical baselines, a sentiment-only and a sentiment + crop-calendar variant of each (the same three families the live Forecasts page picks between), and 8 real library-grade models (AutoARIMA, Prophet, Chronos-Bolt, LightGBM…) — replayed walk-forward against real FRED history (24 months, no look-ahead) at 1, 2, and 3 months ahead. Toggle the horizon to compare.
At 1 month ahead, Momentum-drift has the lowest mean error (6.3% MAPE across 14 benchmarks) and won 2/14 outright. Accuracy typically degrades at longer horizons — toggle to compare.
| Rank | Model | Avg MAPE | Avg MASE | Avg Dir | Band | Wins | n |
|---|---|---|---|---|---|---|---|
Momentum-driftTS-nativecurrent 60% EWMA momentum (3-month weighted) + 40% structural drift, clamped ±15%. | 6.3% | — | 20.4% | 88.6% | 2/14 | 280* | |
| 2 | Chronos-BoltChronos Amazon's zero-shot pretrained time-series foundation model (amazon/chronos-bolt-small). No per-benchmark training — the same pretrained weights forecast every series. Band: native 10%/90% predicted quantiles (an 80% interval — Chronos-Bolt's trained quantile range tops out at 0.9, so bandCoverage for this model targets 80%, not the 95% other models use). | 6.3% | — | 24.1% | 84.6% | 2/14 | 266* |
| 3 | Momentum-drift + SentimentTS-native 60% EWMA momentum (3-month weighted) + 40% structural drift, clamped ±15%. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 6.4% | — | 28.8% | 84.3% | 3/15 | 300 |
| 4 | Momentum-drift + Sentiment + CalendarTS-native 60% EWMA momentum (3-month weighted) + 40% structural drift, clamped ±15%. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 6.4% | — | 33.1% | 84% | 3/15 | 300 |
| 5 | Moving avgTS-native Adaptive moving average — tries windows of 2/3/4/6 months and picks the best by in-sample error. | 6.6% | — | 29.6% | 86.4% | 2/14 | 280* |
| 6 | Auto-ARIMATS-native Automatic ARIMA — tries AR orders 0-2 on differenced series, picks the best by AIC. | 6.6% | — | 28.3% | 87.9% | 0/14 | 280* |
| 7 | Naive (drift) + SentimentTS-native Random walk with drift — predicts last price plus the average monthly change over the window. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 6.6% | — | 37.1% | 83.7% | 1/15 | 300 |
| 8 | Auto-ARIMA + SentimentTS-native Automatic ARIMA — tries AR orders 0-2 on differenced series, picks the best by AIC. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 6.6% | — | 35% | 83% | 4/15 | 300 |
| 9 | AutoETS (StatsForecast)StatsForecast Automatic exponential smoothing (error/trend/seasonal). | 6.6% | — | 0% | 87.7% | 3/14 | 154* |
| 10 | Naive (drift)TS-native Random walk with drift — predicts last price plus the average monthly change over the window. | 6.7% | — | 30% | 86.4% | 0/14 | 280* |
| 11 | Auto-ARIMA + Sentiment + CalendarTS-native Automatic ARIMA — tries AR orders 0-2 on differenced series, picks the best by AIC. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 6.7% | — | 39.1% | 82% | 3/15 | 300 |
| 12 | Moving avg + SentimentTS-native Adaptive moving average — tries windows of 2/3/4/6 months and picks the best by in-sample error. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 6.8% | — | 30.3% | 81% | 2/15 | 300 |
| 13 | Naive (drift) + Sentiment + CalendarTS-native Random walk with drift — predicts last price plus the average monthly change over the window. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 6.8% | — | 39.8% | 83% | 2/15 | 300 |
| 14 | Moving avg + Sentiment + CalendarTS-native Adaptive moving average — tries windows of 2/3/4/6 months and picks the best by in-sample error. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 6.9% | — | 32.9% | 81% | 1/15 | 300 |
| 15 | Theta (StatsForecast)StatsForecast Theta decomposition method. | 6.9% | — | 0% | 81.8% | 0/14 | 154* |
| 16 | LinReg (Darts)Darts Darts autoregressive linear model (lags=1). Band: 95% interval from in-sample lag-1 residual stddev (Darts has no native prediction interval for this model). | 7.4% | — | 30% | 85% | 1/14 | 266* |
| 17 | AutoARIMA (StatsForecast)StatsForecast Automatic ARIMA order selection (AIC). | 7.5% | — | 0% | 87% | 1/14 | 154* |
| 18 | WLS regressionTS-native Weighted least squares linear fit (exponential decay λ=0.95) — recent prices weighted more heavily. | 8.1% | — | 37.1% | 78.9% | 0/14 | 280* |
| 19 | WLS regression + SentimentTS-native Weighted least squares linear fit (exponential decay λ=0.95) — recent prices weighted more heavily. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 8.2% | — | 41.9% | 74.7% | 0/15 | 300 |
| 20 | WLS regression + Sentiment + CalendarTS-native Weighted least squares linear fit (exponential decay λ=0.95) — recent prices weighted more heavily. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 8.3% | — | 44.8% | 75.7% | 0/15 | 300 |
| 21 | Holt-Winters + SentimentTS-native Triple exponential smoothing — captures level, trend, and 12-month seasonality with grid-searched parameters. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 8.7% | — | 39.2% | 80.3% | 1/15 | 300 |
| 22 | Holt linear + SentimentTS-native Holt's linear trend method (level + slope), one-step ahead. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 8.7% | — | 39.2% | 80.3% | 1/15 | 300 |
| 23 | Holt-WintersTS-native Triple exponential smoothing — captures level, trend, and 12-month seasonality with grid-searched parameters. | 8.8% | — | 33.1% | 85.4% | 0/14 | 280* |
| 24 | Holt linearTS-native Holt's linear trend method (level + slope), one-step ahead. | 8.8% | — | 33.1% | 85.4% | 0/14 | 280* |
| 25 | Holt-Winters + Sentiment + CalendarTS-native Triple exponential smoothing — captures level, trend, and 12-month seasonality with grid-searched parameters. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 8.8% | — | 40.4% | 80% | 0/15 | 300 |
| 26 | Holt linear + Sentiment + CalendarTS-native Holt's linear trend method (level + slope), one-step ahead. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 8.8% | — | 40.4% | 80% | 0/15 | 300 |
| 27 | Seasonal naiveTS-native Predicts the price from one cycle ago — tries both 6-month and 12-month cycles, picks the best. | 9% | — | 18.8% | 75.4% | 0/14 | 280* |
| 28 | Seasonal naive + SentimentTS-native Predicts the price from one cycle ago — tries both 6-month and 12-month cycles, picks the best. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon only). | 9.7% | — | 20% | 72.7% | 0/15 | 300 |
| 29 | Seasonal naive + Sentiment + CalendarTS-native Predicts the price from one cycle ago — tries both 6-month and 12-month cycles, picks the best. + real GDELT news-sentiment nudge (grid-searched weight, 1-month horizon) + crop-calendar seasonality across Hassad's sourcing regions (fixed weight, all horizons). | 9.8% | — | 26.5% | 72.7% | 0/15 | 300 |
| 30 | ProphetProphet Facebook Prophet — additive trend + seasonality with uncertainty. Walk-forward every 3rd month (offline run-time constraint). | 10.1% | — | 36.3% | 70% | 0/14 | 70* |
| 31 | SeasonalNaive (StatsForecast)StatsForecast Forecast = last observed value from the same season. | 16.3% | — | 0% | 75.9% | 0/14 | 154* |
| 32 | LightGBM (MLForecast)MLForecast Gradient-boosted trees (LightGBM) on lag/rolling features via Nixtla's MLForecast. Band: 95% interval from in-sample one-step residual stddev. | 31% | — | 40.3% | 79.6% | 1/14 | 98* |
| Benchmark | Naive (drift)TS-native | Seasonal naiveTS-native | Moving avgTS-native | Holt-WintersTS-native | Holt linearTS-native | WLS regressionTS-native | Auto-ARIMATS-native | Momentum-driftcurrent · TS-native | Naive (drift) + SentimentTS-native | Seasonal naive + SentimentTS-native | Moving avg + SentimentTS-native | Holt-Winters + SentimentTS-native | Holt linear + SentimentTS-native | WLS regression + SentimentTS-native | Auto-ARIMA + SentimentTS-native | Momentum-drift + SentimentTS-native | Naive (drift) + Sentiment + CalendarTS-native | Seasonal naive + Sentiment + CalendarTS-native | Moving avg + Sentiment + CalendarTS-native | Holt-Winters + Sentiment + CalendarTS-native | Holt linear + Sentiment + CalendarTS-native | WLS regression + Sentiment + CalendarTS-native | Auto-ARIMA + Sentiment + CalendarTS-native | Momentum-drift + Sentiment + CalendarTS-native | AutoARIMA (StatsForecast)StatsForecast | AutoETS (StatsForecast)StatsForecast | Theta (StatsForecast)StatsForecast | SeasonalNaive (StatsForecast)StatsForecast | ProphetProphet | LinReg (Darts)Darts | Chronos-BoltChronos | LightGBM (MLForecast)MLForecast |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Alfalfa Hay (US PPI Index) Feed Additives & Forage | 12% | 10.1% | 6.3% | 16.2% | 16.2% | 10.3% | 11.4% | 10.2% | 11.7% | 10% | 6.3% | 16% | 16% | 10.1% | 11.3% | 10% | 12.1% | 10.1% | 6.5% | 16.6% | 16.6% | 10.5% | 11.5% | 10.3% | 7.8% | 7.8% | 8.1% | 10.6% | 10.2% | 7.5% | 7.1% | 14.1% |
| Australia Chilled Meat Export Protein | 2.7% | 6.7% | 4% | 3.6% | 3.6% | 5% | 2.8% | 2.7% | 2.7% | 6.3% | 3.8% | 3.5% | 3.5% | 5% | 2.8% | 2.6% | 3% | 6.4% | 4% | 3.7% | 3.7% | 5.1% | 3.1% | 2.8% | 2.4% | 1.7% | 1.9% | 27.5% | 4.9% | 4.2% | 3.5% | 2.2% |
| Barley (IMF Global Price) Grains, Oilseeds & Fats | 3.6% | 3.4% | 3.2% | 3.8% | 3.8% | 5.9% | 3.9% | 2.9% | 3.3% | 3.3% | 3.2% | 3.7% | 3.7% | 5.2% | 3.6% | 2.9% | 3.6% | 3.2% | 3.3% | 3.8% | 3.8% | 5.5% | 3.9% | 3.1% | 1.7% | 1.8% | 2.7% | 8.8% | 4.3% | 3.6% | 2.9% | 3.6% |
| Brazil Chilled/Frozen Export Protein | — | — | — | — | — | — | — | — | 7.2% | 21.3% | 11% | 8.5% | 8.5% | 11.9% | 7.9% | 7.5% | 6.8% | 21.2% | 10.9% | 8.2% | 8.2% | 11.5% | 7.7% | 7% | — | — | — | — | — | — | — | — |
| Broiler Chicken (IMF Poultry Proxy) Protein | 1.6% | 2.5% | 1.7% | 1.9% | 1.9% | 1.9% | 1.5% | 1.4% | 1.5% | 2.5% | 1.7% | 1.9% | 1.9% | 1.9% | 1.4% | 1.4% | 1.5% | 2.5% | 1.7% | 1.9% | 1.9% | 1.9% | 1.4% | 1.4% | 1.9% | 1.7% | 1.8% | 3.9% | 2.5% | 1.7% | 1.5% | 3.8% |
| Butter (US PPI Proxy) Protein | 8% | 14.9% | 9.2% | 8.3% | 8.3% | 11.9% | 7.6% | 7.4% | 7.7% | 14.9% | 9.2% | 8.3% | 8.3% | 11.6% | 7.4% | 7.4% | 7.8% | 14.9% | 9.4% | 8.5% | 8.5% | 12.2% | 7.5% | 7.4% | 10.7% | 10.4% | 11.7% | 30.6% | 18.6% | 10.9% | 8.5% | 10.4% |
| Corn (IMF Global Price) Grains, Oilseeds & Fats | 3.6% | 4.6% | 4.3% | 4.4% | 4.4% | 5.1% | 3.4% | 3.2% | 3.5% | 4.5% | 4.1% | 4.4% | 4.4% | 5% | 3.3% | 3.2% | 3.8% | 4.8% | 4.4% | 4.6% | 4.6% | 5% | 3.6% | 3.4% | 3.3% | 2.7% | 2.8% | 4.7% | 4.6% | 4.3% | 3.3% | 3% |
| Dairy Products Price Index (GDT Proxy) Protein | 1.2% | 2% | 1.6% | 1.2% | 1.2% | 1.6% | 1.1% | 1.1% | 1.2% | 2% | 1.6% | 1.2% | 1.2% | 1.6% | 1.1% | 1.1% | 1.7% | 2.3% | 1.8% | 1.6% | 1.6% | 2.1% | 1.5% | 1.6% | 1.5% | 1.3% | 1.3% | 4.3% | 2% | 1.5% | 1% | 1.3% |
| Egg Price Index (US PPI Proxy) Protein | 28% | 32.9% | 24.6% | 46.5% | 46.5% | 32.7% | 26.5% | 27.7% | 28% | 32.9% | 24.6% | 46.3% | 46.3% | 32.7% | 26.5% | 27.7% | 28% | 32.9% | 24.6% | 46.3% | 46.3% | 32.7% | 26.5% | 27.7% | 35.5% | 25.8% | 26.9% | 51% | 41.2% | 32.1% | 26.8% | 345.4% |
| Lean Hogs (IMF Swine Proxy) Protein | 4.9% | 5.9% | 6% | 6.7% | 6.7% | 7.5% | 4.4% | 4.6% | 4.9% | 5.8% | 5.8% | 6.6% | 6.6% | 7.5% | 4.3% | 4.6% | 4.9% | 5.8% | 5.8% | 6.6% | 6.6% | 7.5% | 4.3% | 4.6% | 6.8% | 5.7% | 6.5% | 9.2% | 11.2% | 5.2% | 4.5% | 4.8% |
| Live Cattle (IMF Beef Proxy) Protein | 1.4% | 6.1% | 2.1% | 1.6% | 1.6% | 1.8% | 1.4% | 1.4% | 1.3% | 5.7% | 1.7% | 1.5% | 1.5% | 1.4% | 1.3% | 1.3% | 1.3% | 5.7% | 1.7% | 1.5% | 1.5% | 1.4% | 1.3% | 1.3% | 1.9% | 1.8% | 1.8% | 16.8% | 1.4% | 1.7% | 2% | 2.1% |
| Skim Milk Powder (US PPI Proxy) Protein | 2.2% | 2.5% | 2.7% | 2.3% | 2.3% | 2.5% | 2.4% | 2.3% | 2.2% | 2.4% | 2.7% | 2.3% | 2.3% | 2.5% | 2.4% | 2.3% | 2.1% | 2.3% | 2.6% | 2.2% | 2.2% | 2.2% | 2.2% | 2.2% | 2.1% | 2% | 2.6% | 3.7% | 2.1% | 3.8% | 2.3% | 3.3% |
| Soybean Meal (IMF Global Price) Grains, Oilseeds & Fats | 7.1% | 6.2% | 6.3% | 9% | 9% | 7.3% | 7.8% | 5.9% | 6.9% | 6.2% | 6.3% | 8.9% | 8.9% | 7% | 7.6% | 5.8% | 7.3% | 6.1% | 6.3% | 9% | 9% | 7.5% | 7.9% | 5.9% | 8.8% | 8.4% | 7.5% | 12.7% | 13.4% | 5.5% | 5.5% | 13% |
| Urea / NPN (US PPI Proxy) Feed Additives & Forage | 2.9% | 9.6% | 4.1% | 3.2% | 3.2% | 3.8% | 3.1% | 2.8% | 2.7% | 9.1% | 3.7% | 3.1% | 3.1% | 3.6% | 2.8% | 2.6% | 2.7% | 9.1% | 3.7% | 3.1% | 3.1% | 3.6% | 2.8% | 2.6% | 2.8% | 3.6% | 3.4% | 24.1% | 3.8% | 3.4% | 3.9% | 2.4% |
| Vegetable Price Index (US PPI Proxy) Fruits, Vegetables & Juices | 14.9% | 19.2% | 16.4% | 14.6% | 14.6% | 15.7% | 15.8% | 15.2% | 14.8% | 19.2% | 16.2% | 14.5% | 14.5% | 15.4% | 15.7% | 15.2% | 15% | 19.7% | 16.2% | 14.7% | 14.7% | 15.4% | 16% | 15.4% | 18.1% | 17% | 18.1% | 20.2% | 21.5% | 18.7% | 15.1% | 24.1% |
Actual vs predicted · 1 month ahead
Methodology
Each model predicts the price 1 month ahead using only the history observed up to that point — a walk-forward replay over the last 24 live FRED observations per benchmark, with no look-ahead leakage. Use the horizon toggle to compare 1, 2, and 3 months ahead; accuracy typically degrades at longer horizons as uncertainty compounds. Metrics: MAPE = mean absolute % error. Directional accuracy = share of months the predicted sign matched actual (±1% deadband). Band coverage = share of actuals inside the 95% band. Quarterly series and non-live benchmarks are excluded. n(shown on each model chip below, and as “Wins” sample size in the leaderboard) = the number of walk-forward months a model was actually evaluated over — this differs across the Python library models due to differing minimum-training requirements and, for Prophet, a reduced every-3rd-month cadence (an offline runtime constraint). A model with a lower MAPE over fewer months is not necessarily more accurate than one tested over more months — check n before comparing across libraries.