ET-NeuralCast is an enterprise-grade Sub-seasonal to Seasonal (S2S) forecasting framework designed for Ethiopia that combines global atmospheric data with high-resolution regional precipitation history.
# ET-NeuralCast: Advanced S2S Forecasting for Ethiopia
-brightgreen?style=for-the-badge&logo=github-actions)
**ET-NeuralCast** is an enterprise-grade Sub-seasonal to Seasonal (S2S) forecasting framework. By fusing global atmospheric planetary drivers with high-resolution regional precipitation history, the system provides high-fidelity rainfall intelligence across Ethiopia with 0.05° spatial precision.
---
## 🎯 Objectives
* **Bridge the Gap**: Transition coarse global climate data (1.0°) into localized regional reality (0.05°).
* **Predict Extremes**: Use anomaly-based learning to identify deviations from the norm, critical for flood and drought early warning.
* **Automate Insight**: Move scientific models out of notebooks and into an autonomous daily production pipeline.
---
## 📊 1. Data Pipeline
### a) Preprocessing & Normalization
The system ingests **ERA5** reanalysis and **CHIRPS** precipitation datasets. The preprocessing logic (`src/data/preprocessor.py`) performs:
* **Spatial Focus**: Clipping to Ethiopia's bounding box.
* **Temporal Aggregation**: Computing weekly means to align with S2S timescales.
* **Lagged Predictors**: Creating temporal lags to capture atmospheric memory.
* **Anomaly Extraction**: Subtracting weekly climatology (learned exclusively from the training set) to isolate significant atmospheric shifts.
* **Standardization**: Applying zero-mean/unit-variance normalization using training-only statistics (`src/data/normalization.py`).
### b) Dataloader Implementation
The core is a custom `S2SDataset` (`src/data/dataloader.py`) which:
* Loads tabular and gridded data from NetCDF.
* Applies normalization on-the-fly.
* Supports specific year selection and configurable forecast lead times.
* Maps samples to the typical PyTorch `[Batch, Channel, H, W]` format.
### c) Data Format
* **Input Tensors**: `[batch, time, variable, lat, lon]` (e.g., past 4 weeks, 5 variables, 48x60 grid).
* **Target Tensors**: `[batch, …