Context

Background

What makes station weather forecasting a graph problem, what spatio-temporal graph neural networks do about it, and the three-study South African lineage this project continues.

The forecasting problem

Forecasting underpins planning in agriculture, water management, energy and disaster preparedness, and it is the extremes that carry the cost. The April 2022 KwaZulu-Natal floods killed 459 people and were the most catastrophic natural disaster yet recorded in that province; heatwaves recur over the northern interior at a frequency projected to rise. Short-range forecasts matter regionally precisely because warning decisions rest on them.

Operational forecasting is dominated by numerical weather prediction, which integrates the physics forward from an analysed initial state. Classical statistical approaches instead treat the problem as multivariate time-series prediction. Deep learning has challenged both over the past decade, but its most common architectures model temporal structure while neglecting the spatial dependencies between observation sites — and the system being forecast is dynamic and chaotic, with spatial and temporal dependencies that are seldom directly observable.

Station-network forecasting is its own regime, distinct from the global reanalysis grids on which most data-driven weather models are benchmarked. Observations are sparse, irregularly spaced, and locally noisy. Two stations twenty kilometres apart can sit at different elevations, one coastal and one inland, and experience substantially different conditions.

Why a graph

A spatio-temporal graph neural network represents the station network as a weighted graph G = (V, E, A). Each of the N nodes is a weather station; edges connect stations that influence one another; and the weight matrix A encodes the strength of those dependencies. A node captures the local dynamics at one location, and the graph structure captures the global dynamics of the system.

At each hour t the network produces an observation matrix Xt over the measured variables at every station. Given a window of the last w hours, the model maps that window and the graph to a joint forecast over all stations for the next H hours. In this project w = 12 and H = 48.

The interesting question is where A comes from, and the architectures tested here divide sharply on it:

  • Learned adaptive graphs. The adjacency is computed from trainable node embeddings and optimised end to end with the forecasting objective. The model discovers which stations inform which, with no geographic prior at all.
  • Geometric graphs. The adjacency is constructed from station coordinates — a distance kernel, or a nearest-neighbour neighbourhood on the sphere. The prior is that nearby stations are related.

Neither is obviously right for this network. Geographic proximity is real physics, but it does not capture elevation, coastal exposure or local topography, all of which can make close stations behave differently. This tension recurs in every workstream's results.

Anatomy of an STGNN

Every STGNN combines a spatial module and a temporal module; architectures differ mainly in what those modules are and how they are interleaved.

Spatial module

Most commonly a graph convolution, which aggregates information from a node's neighbours according to the adjacency matrix, propagating information through the graph. Variants include graph attention, which learns distinct weights per neighbour; diffusion graph convolution, which models propagation through directed graphs; and specialised convolutions designed for particular spatial structures, such as CLCRN's convolution over the Earth's surface.

Temporal module

Usually a recurrent network, a temporal convolutional network, or attention. Gated recurrent units are popular because their gating controls what is retained over time at a lower parameter cost than other recurrent variants. Temporal convolutions, particularly dilated ones, widen the temporal receptive field without processing each step sequentially.

A further axis separates how the multi-step forecast is produced. Direct models emit all 48 steps in one shot. Autoregressive models decode one step at a time, feeding each prediction back as input, so errors compound as the horizon grows. CLCRN decodes autoregressively while the other models tested here are direct, an uncontrolled difference inherited from the original architectures that plausibly disadvantages CLCRN as the horizon grows.

The two shared baselines

Both baselines come directly from the previous study on this data, where they were the two strongest models. Every workstream measures against them.

Baseline Learned graph Discrete time

AGCRN

Adaptive Graph Convolutional Recurrent Network — Bai et al., 2020

A GRU whose linear mappings are replaced by graph convolutions, contributing two modules. Node Adaptive Parameter Learning factorises the convolution weights into a small per-node embedding times a shared weight pool, giving every station node-specific parameters without the parameter count scaling with network size. Data Adaptive Graph Generation removes the need for a predefined graph entirely: the adjacency is the normalised similarity of learnable node embeddings, trained end to end with the forecasting objective.

Developed and evaluated on traffic benchmarks; transferred to South African weather data by Gaibie et al., where it was the best overall performer.

Baseline Geometric graph Discrete time

CLCRN

Conditional Local Convolution Recurrent Network — Lin et al., 2022

Built for meteorology rather than adapted to it. Its conditional local convolution builds a k-nearest-neighbour neighbourhood around each station on the sphere and generates the kernel weights as a smooth learned function of each neighbour's local displacement — geodesic distance and orientation — so the convolution is anisotropic and location-aware, approximating a continuous kernel over the Earth's surface. The convolution sits inside a recurrent encoder–decoder that decodes the forecast autoregressively.

Evaluated on WeatherBench reanalysis fields and transferred to SAWS stations by Gaibie et al. Its authors name training instability as an open problem of the method — a caution this project saw borne out once in 190 runs.

The three families we tested

Each family answers a different question about what an STGNN could be doing differently.

Continuous-time

Neural ODE graph models

MTGODE · STGODE

Neural ordinary differential equations replace a stack of residual layers with a vector field: the hidden state is the solution of an initial-value problem computed by a numerical solver, so depth becomes integration time and the latent trajectory is continuous rather than a sequence of discrete jumps. On graphs this permits deep spatial propagation without the over-smoothing that degrades stacked graph convolutions.

STGODE prescribes two static graphs — a distance kernel and a semantic graph that links stations with similar history shapes regardless of location — and propagates through a tensor-valued ODE, but its temporal aggregation stays discrete. MTGODE learns its graph from node embeddings and makes temporal aggregation an ODE too, with spatial propagation nested as a second ODE inside each temporal solver step.

Results →

Diffusion-based

Denoising diffusion models

DiffSTG · USTD

Conventional STGNNs emit a single point prediction and so cannot express uncertainty. Diffusion models define a forward process that progressively adds noise to the observed future until it approaches pure noise, then learn the reverse process. At forecast time they start from random noise and iteratively denoise, conditioned on the observed history — repeating this yields multiple plausible future trajectories.

DiffSTG pairs the diffusion process with a UGnet denoiser over a predefined graph. USTD puts a deterministic spatio-temporal encoder in front, so the diffusion transformer denoises a representation that has already captured conditional structure, and conditions additionally on time of day, day of year and station height.

Results →

Lightweight

Parameter-efficient models

STLGRU · LiteSTGNN

Accuracy reported in the literature is usually bought with parameters, and the parameter budget is rarely treated as a variable of interest. This workstream asks the inverse question: how much accuracy survives a hard cut to model size, and at what point does additional capacity stop paying for itself?

The answer matters operationally. A model cheap enough to retrain often, or to run where compute is scarce, may be worth more than a marginally more accurate model that is not.

Results →

The South African lineage

This is the third study in a line of work on STGNNs for South African station weather, and its design is shaped throughout by the two that came before. Each inherited data conventions, filtering criteria and hyperparameter settings from its predecessor, so the three are directly comparable in a way that independent studies usually are not.

Three studies, one data regime. Each study extends the previous one in stations, models, or horizon.
StudyStationsModels evaluatedHorizonRepeats
Davidson & Moodley, 2022 21 Graph WaveNet, low-rank WGN, LSTM, TCN 24 h 10+ runs, walk-forward
Gaibie et al., 2024 45 AGCRN, CLCRN, Graph WaveNet, TCN 24 h 3 runs, single hold-out
WeatherFLOW, 2026 32 AGCRN, CLCRN + MTGODE, STGODE, DiffSTG, USTD, STLGRU, LiteSTGNN 48 h 3–10 runs by workstream

Davidson & Moodley (2022)

Established STGNN viability on South African station data, evaluating Graph WaveNet and a low-rank weighted graph network against LSTM and TCN baselines for maximum-temperature prediction at 21 stations. Graph WaveNet proved the most accurate, stable and robust model under walk-forward validation. The study also introduced the practice of analysing the dependency structures the trained models learn, and argued that a configuration should be judged partly on the deviation of its test loss across runs — a standard this project adopts.

Gaibie et al. (2024)

Extended the benchmark to AGCRN and CLCRN at 45 stations, predicting temperature, pressure, humidity and wind speed to 24 hours. Both newer models outperformed Graph WaveNet, with AGCRN achieving the best overall performance. This study contributed the hyperparameter optimisation protocol and the baseline optima that WeatherFLOW inherits directly. It was itself a UCT honours project, and its website is in the same departmental archive as this one.

WeatherFLOW (2026)

Doubles the horizon to 48 hours, adds three families of architecture that the lineage had not evaluated, raises the repeat count, and makes extreme weather an explicit prediction target rather than an unexamined part of the average.

External link. That project's own website is archived at projects.cs.uct.ac.za/honsproj/ under 2023, "WEAHTER-FLOW". This is a non-permanent external link to the departmental archive and is not part of this website.

What the lineage left open

Three limits are shared by both prior studies, and each one became a design decision here.

  1. Every model evaluated was discrete-time. No continuous-time or generative formulation had been tested on this data, and no continuous-time graph model had been evaluated on an irregular meteorological station network anywhere.
  2. Evaluation stopped at 24 hours. Whether a ranking established at 24 hours survives to 48 was simply unknown — and it largely does not, because the architectures converge.
  3. Extreme weather was not a prediction target. Reported errors are averages over all hours, which say nothing about the hours that matter most for warning decisions. Symmetric training losses systematically underestimate the tails, so good average accuracy can coexist with poor extreme-event skill.

A fourth limit is methodological rather than scientific: the more extensive of the two benchmarks rested on the weaker protocol, averaging three runs on a single hold-out where the earlier study reported over ten runs under walk-forward resampling. Rankings drawn from few runs can be artefacts of initialisation, and this project found exactly that — one run in 190 failed outright, and had it landed in a three-run budget it would have been a third of that cell.