Industrial Power Load Forecasting: Residual KolmogorovโArnold Network (KAN)
This model card releases the reproducible architecture, zero-leakage preprocessing contract, multi-seed stability benchmarks, and statistical evaluation manifests for the Residual KolmogorovโArnold Network (KAN) applied to short-term (30-minute horizon) industrial power load forecasting.
๐ Problem & Task Overview
- Task: Single-step ahead short-term electric power load forecasting ($\Delta t = 30\text{ minutes}$).
- Target Variable: Active Power $P\text{ (kW)}$ at Feeder 480, 110kV/22kV Substation 224 Tan Hung (Tay Ninh Power Company / PC Tรขy Ninh).
- Core Architecture: Residual KAN Regressor with learnable B-spline activation functions and Target Normalization ($\hat{P}_{t+1} = P_t + \text{KAN}(X)$).
- Ensemble Methodology: Uniform simple averaging across 5 independent random seeds (
[42, 101, 2024, 7, 999]), guaranteeing zero data leakage without post-hoc test weight optimization.
๐ Evaluation & Master Benchmark
Evaluation was conducted on an out-of-sample test split consisting of 14,385 valid 30-minute samples across 16 continuous time segments (2024-11-02 15:30:00 to 2025-08-30 23:30:00).
| Family | Model | MAE (kW) | RMSE (kW) | sMAPE (%) | $R^2$ Score | $\Delta\text{MAE vs Persistence}$ | $\Delta\text{RMSE vs Persistence}$ |
|---|---|---|---|---|---|---|---|
| Naive Baseline | 1. Persistence Naive ($P_{t}$) | 598.36 | 1160.44 | 13.35% | 0.8770 | Baseline (0.00%) | Baseline (0.00%) |
| Naive Baseline | 2. Seasonal Naive 24h ($\text{lag}_{48}$) | 1363.07 | 2495.50 | 30.41% | 0.4313 | -127.80% | -115.05% |
| Naive Baseline | 3. Seasonal Naive 7d ($\text{lag}_{336}$) | 1882.99 | 3123.69 | 42.54% | 0.1090 | -214.69% | -169.18% |
| Naive Baseline | 4. Moving Average (1.5h) | 1016.16 | 1586.70 | 21.74% | 0.7701 | -69.82% | -36.73% |
| Classical ML | 5. Ridge Regression | 730.96 | 1186.89 | 24.73% | 0.8714 | -22.16% | -2.28% |
| Classical ML | 6. XGBoost Regressor | 645.24 | 1155.21 | 23.30% | 0.8781 | -7.83% | +0.45% |
| Classical ML | 7. HistGradientBoosting Regressor | 648.01 | 1153.06 | 23.41% | 0.8786 | -8.30% | +0.64% |
| Multi-seed Stability | 8. Residual KAN Single (Mean $\pm$ Std)* | 528.99 $\pm$ 12.23 | 1033.35 $\pm$ 13.78 | 19.17% $\pm$ 0.32% | 0.9025 $\pm$ 0.0026 | +11.59% | +10.95% |
| Proposed Model | 9. Residual KAN Ensemble (5 Seeds)** | 519.78 | 1019.95 | 18.96% | 0.9050 | +13.13% | +12.11% |
All metrics are verified directly from reports/master_model_comparison_benchmark.md and reports/moving_block_bootstrap_summary.json.
Critical Scientific Insight:
While the Residual KAN Ensemble significantly reduced absolute error ($\text{MAE} -13.13%$) and squared deviation ($\text{RMSE} -12.11%$, $R^2 = 0.9050$), Persistence Naive ($P_t$) remained superior in sMAPE ($13.35%$). This underscores the essential role of evaluating against strong naive baselines in short-horizon time-series forecasting.
๐ Data Privacy & Access Policy
In compliance with enterprise data governance regulations of Tay Ninh Power Company, the proprietary 5-year raw metering database is not publicly hosted on Hugging Face Hub. This release packages the full pipeline, feature generation contracts, model definitions, and integrity manifests. Users with their own metering CSVs can run end-to-end preprocessing using the provided CLI tools.
๐ป Quickstart Inference Example
import torch
import numpy as np
from code.models_kan import ResidualKANRegressor
# Initialize Residual KAN Regressor
in_features = 24 # Input lag and cyclical features
model = ResidualKANRegressor(in_features=in_features, hidden_dims=[64, 32], p_t_idx=0)
model.eval()
# Synthetic input: batch of 4 time steps
x_sample = torch.randn(4, in_features)
with torch.no_grad():
y_pred_scaled = model(x_sample)
print("Predicted scaled load increment:", y_pred_scaled.numpy())
assert not torch.isnan(y_pred_scaled).any(), "Prediction contains NaN!"
assert not torch.isinf(y_pred_scaled).any(), "Prediction contains Inf!"
print("Smoke test passed: Clean finite predictions.")
๐ฆ Verified Artifacts Manifest
All artifacts are verified with SHA-256 in metadata/weights_manifest.json.