How we won the 2026 OpenAI Hackathon

OpenAIFraAllianceAI Hub Frankfurt

Frankfurt Airport Operating Direction Forecast

At Frankfurt Airport the wind mainly determines in which direction aircraft take off and land. Shifting winds force an airport-wide change of operating direction; strong northerly wind (e.g. from the Taunus) closes Runway 18. The mission: an ML model that forecasts (1) whether departures on RWY 18 are possible and (2) which operating direction is in use.

LOADING MAP…

Everything at Frankfurt follows the wind — so the real task is a weather problem. From a plain weather forecast, the model has to predict the two things that decide how the airport runs, hour by hour: which way it takes off, and when Runway 18 has to close.

LOADING MAP…
Which way does it take off?

Aircraft take off into the wind, so the wind sets the whole airport's direction. A wind from the east — and it operates east, direction 07.

It all switches at once

When the wind turns, every runway flips together — now to the west, direction 25. Mixed directions aren't possible.

A tailwind alone doesn't close it

Runway 18 departs only to the south. A northerly becomes a tailwind — but a light one is fine, and 18 keeps running.

Only a strong tailwind does

Once that tailwind passes about 15 kt, Runway 18 has to close — and departures move over to the centre runway.

What we achieved

A working forecast, built in a day

In one afternoon we shipped a live tool that forecasts Frankfurt's operating direction and Runway 18 usability, hour by hour. Here it is, running:

Our forecast product — operating direction, Runway 18 and the next likely change, live.

0%

smaller wind-speed error than the raw ICON-EU model behind consumer weather apps — built in an afternoon.

Beating the baseline

The real test: beat the challenge's rule book — the same rules on a plain weather forecast — at calling the operating direction. Out-of-time, on unseen days, 1 h to 48 h ahead, against the direction Frankfurt actually flew.

Operating direction: accuracy over the horizon
Hit rate by forecast horizon (higher is better).
Our model
Challenge wind rules

The biggest lead is in the short term (1 h: +6.6 points) — exactly where planners act. Level with the rules at 24 h, just behind at 6 h.

Tested out-of-time on unseen days, using only data available at forecast time.

Lower wind error than every raw global model
Average wind-speed error (MAE), 12–48 h — shorter (and greener) is better.
Our corrected forecast
1.6 kt
GFS (NOAA)
2.6 kt
ECMWF IFS
2.7 kt
ICON-EU (DWD) — we correct this
3.8 kt

Our corrected forecast lands at 1.6 kt — about 38% below the best raw global model (GFS) and 58% below the raw ICON-EU it builds on. An afternoon's work beats even the raw ECMWF and GFS feeds.

Raw models: reference verification against METAR EDDF, ~4,100 hours in 2025 (Open-Meteo). Our 1.6 kt is from our own out-of-time test.

Probability quality
−0%

lower Brier score on the 07/25 probabilities — 0.188 vs 0.253 (lower is better)

The probabilities aren't just right more often — they're better calibrated, closer to what actually happens.

Gust forecast
−0%

smaller gust error than the raw weather model

Gusts drive the crosswind and tailwind limits that close a runway, so getting them right matters.

Direction was already good enough

Average direction error — lower is better
Measured wind
Raw model
Our forecast

Frankfurt's switches hinge on wind speed crossing thresholds — that's where we corrected. Direction the raw model already gets accurate enough to tell 07 from 25 (≈20°); our forecast stays essentially level (22°). We deliberately left direction alone rather than risk the speed gains.

The whole difference: 2° For the choice between 07 and 25 — directions 180° apart — 2° is utterly irrelevant. On direction we're all but indistinguishable from the best models; our gains come from speed.

Data, features, and the model

In plain terms: we turn weather into the few physical numbers that decide Frankfurt's direction, let a model learn the rest, and output an hourly forecast anyone can act on.

Six months of Frankfurt weather

Everything the model sees comes from one open source — Germany's national weather service, the DWD. We pulled several of its data streams onto a single, shared hourly timeline.

DWDGermany's national weather service · open data
ICON-EU forecast4.9–14.8 kt
wind speed & direction, hourly to 48 h
Measured wind4–15.4 kt
what actually blew at the airport (METAR)
Gusts7.8–31.6 kt
peak gusts, for the tricky edge cases
48-hour window · ICON-EU & METAR at EDDF, hourly, in knots
One training timeline · 6 months
6months
continuous out-of-time history
~4,300
hourly records
85,000+
data points analysed
The answer wasn't in any feed

The inputs were the easy part. The hard one was the target: which way Frankfurt actually operated each hour exists in no clean feed. So we reverse-engineered it from the airport's aircraft-noise monitoring network — which stations fire on departures and arrivals reveals the active operating direction — and rebuilt an hourly history of the real direction. That let us check whether a given weather situation truly triggered a runway switch.

Noise monitoring station
Representative photo · aqmsgroup.com.au
Noise monitoring station

A windshielded microphone on a mast, wired to a weatherproof cabinet. Dozens ring the airport, logging every overflight second by second.

2507
62 dB
59 dB
quiet
quiet
West stations loud → running 25
Which stations fire reveals the direction.

Illustrative — how the direction is reconstructed.

Trained on the past, tested on the future
The model studies here
The real test
Learn
Tune
Test
time →

We split the six months by time, never at random. The model learns and is tuned on the earlier weather, then has to prove itself on the most recent stretch it has never seen — like revising from past exam papers and then sitting a brand-new one. That way its accuracy is only ever earned on real future weather, exactly what it faces live.

Illustrative · chronological split.

How the model corrects the wind

On the training split the model learns not the wind itself but the error the forecast makes — and subtracts it. The same for each wind component and the gusts.

corrected = forecast + learned error
3.1→1.6kt−47%
Average wind error, 1–48 h

We work with the wind as east/north components (u/v) — as a vector. The learned error then adds on cleanly, and angles are never averaged across the 0°/360° seam.

Calibrating uncertainty honestly

For each hour we keep the u-, v- and gust-error together and compare against past hours that looked the same (conformal calibration). Only hours with enough comparable history get a probability — the rest are flagged, not faked.

u errorv errorgust error
kept together, hour by hour
Calibrated probability
ForecastMeasured provisionalkt

Real-time measurement (green) vs. our forecast (blue). Every measurement flows back into the reinforcement-learning model.

A model that learns from every forecast

The model doesn't stop at training. As live weather and the airport's actual operating direction come in, it compares every forecast against what really happened, scores its own error and updates itself — so it gets sharper the longer it runs. That's what the chart shows: green is the real-time measurement, blue is our forecast — and every gap between them feeds the next update.

  1. 01

    Live data in — new weather and the direction actually flown.

  2. 02

    Compare & score — every forecast is checked against reality and the error measured.

  3. 03

    The model improves — it learns from each miss and sharpens the next forecast.

A forecast you can read

The result isn't a black-box score but a clear forecast: per hour the operating direction, the probability for Runway 18, a certainty score and the next probable change time — ready to use for planning.

The live dashboard — operating direction on the map, Runway 18's status and the tailwind forecast in one view.

The live dashboard — operating direction on the map, Runway 18's status and the tailwind forecast in one view.

Which way the airport is operating — on the real map.

Which way the airport is operating — on the real map.

Runway 18: within limits, tailwind & gust crosswind, next change.

Runway 18: within limits, tailwind & gust crosswind, next change.

Tailwind forecast against the 15 kt departure limit, 6–48 h.

Tailwind forecast against the 15 kt departure limit, 6–48 h.

  • A map view that shows exactly which runway is affected — with the wind forecast overlaid for 12, 24 and 48 hours.
  • An operations dashboard with current, max and average wind, a live wind field and the 15-kt departure limit drawn right on the timeline.
  • A plain-language assistant that answers the one question that matters on the day: do we have to close Runway 18?

The pitch to the jury

At the end of the day we presented the case, the model and the results to the jury — and won the FraAlliance case.

The pitch on stage — the live tool in front of the jury and the room.

The pitch on stage — the live tool in front of the jury and the room.

Won: the FraAlliance case.
Won: the FraAlliance case.
At the podium, AI Week 2026.
AI Week 2026 — the whole cohort.

AI Week 2026 — the whole cohort.

This is exactly how we build — for you, too.

One day for the airport, weeks for your product: custom software and deep automation that takes real work off your plate.

Meet pencilrec →