Coal forecasting
A coal-price forecast with a 7.66% test error still lost to buy-and-hold. Its directional strategy returned −22.22% against +15.66% for buy-and-hold.
A smaller forecast error did not earn a trading claim
I’d judge the forecast by whether the saved strategy beats buy-and-hold after trading costs. The forecast had modest explanatory power, and the strategy did not turn its statistical accuracy into a better investment result.
Economic features enter a seasonal time-series model
The Python research pipeline aligns monthly inputs, constructs lag, rolling and momentum features, reduces collinearity with variance inflation factors and fits SARIMAX. The study was finalized in April 2025, with training during 2020–2022 and testing during 2023.
| Metric | Training | Test |
|---|---|---|
| R² | −0.9388 | 0.3302 |
| RMSE | 18.9249 | 11.0654 |
| MAPE | 9.50% | 7.66% |
Rounded from the committed metric CSV. MAPE is a percentage error; the other metrics keep their saved definitions.
The viewer reads the saved files
A small Python program builds a static results page from the committed CSVs. It plots the price and forecast series and shows the model and strategy tables, with source files and hashes beside the output. The viewer needs no packages or API keys.
The benchmark is the next decision
Method & limits: these are saved historical simulations. The original input vintages and fitted models are absent from a fresh clone, and the current configuration uses different dates from the report. The viewer displays results without reproducing training.
I’d test the next forecast against a simple benchmark after costs before adding model complexity. In this saved evaluation, the benchmark won.