Phase 2 · does the weather predict nocturnal migration?

A boosted-tree model (LightGBM) estimating the nightly bird density (VID, birds/km²) of each radar from the weather of the night (wind and temperature on the 925, 850 and 700 hectopascal pressure levels, that is at roughly 750, 1,500 and 3,000 m above sea level, which is where the birds fly, plus the 10 and 100 m wind, temperature, humidity, pressure, precipitation and cloud cover at the surface; archive of operational analyses and forecasts from Open-Meteo, available from 2021), the day of the year, the radar's local climatology and its position. The wind is split into a tailwind and a crosswind component relative to the season's migratory heading, and the 24 h changes of pressure and temperature, which mark frontal passages, are added. The target is cube-root transformed. Only nights with coverage ≥ 60 % inside the migration windows (15 Feb-31 May, 15 Aug-30 Nov).

Two honest validations: (1) leave a whole year out and predict it with the rest (does it work in a new year?); (2) leave a whole radar out (does it work in a place it was not trained on? — that is the case of a city with no radar nearby, and also that of the new Spanish radars, which only have one season).

Every fold only sees what would have been available. The radar's local climatology is computed from its own observations, so handing it to the model as is would leak the answer. Leaving a year out, it is recomputed with the remaining years (moving window of ±7 days); leaving a radar out it disappears from the features, because in a city without a radar it does not exist. That is why the per-radar figures are lower than the annual ones: the model is left with the weather, the calendar and the geographic position alone.

How an alert is decided. A heavy-passage night is one above the local historical 90th percentile of its season, that is one night in ten. A mean model shrinks the predictions towards the centre and almost never crosses that absolute value, so the alert is decided by a second model, trained to classify that event directly, and the threshold is calibrated on the distribution of its predictions: the alert fires in the top decile of the forecast nights of that radar and season. In operation that distribution comes from running the model over ten years of reanalysis at the point of interest, with no need for a radar in the city. Since as many alerts are issued as there are heavy-passage nights, the captured percentage is directly comparable with the 10 % that chance would give. The area under the curve summarises the ability to separate those nights without depending on any threshold (0.5 = chance).

radar-nights31,217
radars55
years2021-2026
features37
Median Spearman (year out)nan
Median R² (year out) / climatology onlynan / nan
Median Spearman (radar out)0.51
Median Spearman Spanish radars (out)0.40
Median area under the curve (radar out)0.77
Heavy-passage nights captured (radar out)34%
Wrong alerts (radar out)66%

What the model uses

Relative gain of each feature training on everything, that is in the scenario with the local climatology available.

Radar-by-radar validation

Observed against predicted

Examples: the new Spanish radars and Porto

How much does the wind at flight altitude add?

The same nights and the same folds, changing only the feature set: with the wind at 925, 850 and 700 hectopascals (roughly 750, 1,500 and 3,000 m above sea level) against only the 10 and 100 m wind. The row that matters for the service is «radar out»: a city where there is no radar to train with.

with wind at flight altitude surface weather only
Median Spearman (radar out) 0.51 0.47
Median area under the curve (radar out) 0.77 0.74
Heavy passage captured (radar out) 34% 31%

What this means for the pilot

Tables

Validation

validation n spearman R² R² climatology area under the curve area under the curve (intensity) heavy-passage nights alerts issued heavy passage captured wrong alerts
año 2021 6894 0.50 -0.11 -0.14 0.61 0.52 771 727 26% 72%
año 2022 3774 0.75 0.51 0.41 0.74 0.72 518 399 29% 62%
año 2023 5583 0.68 0.46 0.32 0.76 0.66 582 585 32% 68%
año 2024 5687 0.72 0.54 0.35 0.70 0.62 462 586 29% 78%
año 2025 5481 0.76 0.59 0.40 0.74 0.71 491 560 34% 70%
año 2026 3798 0.60 0.36 0.19 0.74 0.67 341 349 28% 73%
radar esahr 122 0.28 -0.30 -0.01 0.55 0.56 13 13 8% 92%
radar esalm 359 0.12 -1.51 -2.78 0.69 0.58 37 37 27% 73%
radar esbad 357 0.63 0.30 -1.18 0.78 0.77 36 36 25% 75%
radar esbar 357 0.54 -0.07 -1.70 0.68 0.73 36 36 36% 64%
radar escor 220 0.40 -8.88 -17.19 0.75 0.72 23 23 17% 83%
radar esgld 125 0.22 -2.38 0.05 0.67 0.59 14 14 21% 79%
radar eslid 360 0.63 0.04 -0.54 0.77 0.78 37 37 38% 62%
radar esmad 359 0.64 -0.10 -1.32 0.77 0.74 37 37 35% 65%
radar esmal 359 0.37 -0.38 -2.19 0.81 0.71 36 36 33% 67%
radar esmur 209 0.50 -1.43 -4.21 0.72 0.73 21 21 29% 71%
radar espma 331 0.05 -1.95 -1.64 0.76 0.67 34 34 32% 68%
radar essan 353 0.39 -0.23 -6.19 0.76 0.75 36 36 19% 81%
radar essev 328 0.48 0.24 -1.65 0.75 0.73 33 33 30% 70%
radar essft 130 0.13 0.05 0.32 0.62 0.64 14 14 21% 79%
radar essse 356 0.52 0.14 -1.04 0.71 0.74 36 36 28% 72%
radar estjv 128 0.34 -0.50 0.17 0.56 0.55 14 14 21% 79%
radar esval 333 0.35 -1.63 -9.42 0.74 0.72 34 34 29% 71%
radar eszar 357 0.76 0.36 -0.75 0.78 0.82 36 36 33% 67%
radar frabb 1009 0.42 -0.18 -0.53 0.79 0.81 102 102 43% 57%
radar fraja 1012 0.14 -3.64 0.03 0.58 0.53 102 102 24% 76%
radar frale 885 0.27 -1.88 0.23 0.79 0.73 89 89 29% 71%
radar frave 613 0.20 -0.90 -0.54 0.73 0.56 62 62 40% 60%
radar frbla 986 0.69 0.48 -0.17 0.88 0.81 100 100 45% 55%
radar frbol 887 0.73 -0.23 0.17 0.80 0.84 90 90 36% 64%
radar frbor 1011 0.60 0.41 -0.58 0.76 0.80 102 102 38% 62%
radar frbou 964 0.49 -0.58 -0.04 0.87 0.78 97 97 45% 55%
radar frcae 975 0.52 0.06 -0.15 0.80 0.75 98 98 41% 59%
radar frche 886 0.57 0.38 -0.85 0.82 0.85 90 90 48% 52%
radar frcol 967 0.46 0.23 0.26 0.74 0.73 98 98 31% 69%
radar frgre 990 0.61 0.38 -0.70 0.79 0.82 100 100 37% 63%
radar frlep 933 0.50 -0.32 0.13 0.81 0.72 94 94 29% 71%
radar frmcl 958 0.55 -2.33 -0.38 0.75 0.64 96 96 31% 69%
radar frmom 825 0.38 0.09 -1.86 0.68 0.64 83 83 19% 81%
radar frmtc 993 0.50 -0.29 -0.19 0.71 0.72 100 100 24% 76%
radar frnan 989 0.56 -0.10 -0.11 0.81 0.77 100 100 36% 64%
radar frnim 996 0.63 -0.35 0.22 0.80 0.78 101 101 36% 64%
radar frniz 1006 0.34 -2.83 -0.31 0.71 0.63 102 102 24% 76%
radar fropo 989 0.61 0.20 0.17 0.78 0.80 100 100 31% 69%
radar frpla 1015 0.51 0.09 -0.09 0.84 0.86 102 102 53% 47%
radar frtou 1001 0.32 -0.68 -0.72 0.62 0.65 101 101 20% 80%
radar frtra 703 0.58 0.07 -0.57 0.78 0.79 71 71 34% 66%
radar frtre 792 0.61 0.35 -0.23 0.88 0.89 80 80 56% 44%
radar frtro 1005 0.61 0.42 -0.42 0.82 0.81 101 101 43% 57%
radar ptfar 681 0.33 -0.38 -0.29 0.75 0.78 69 69 25% 75%
radar ptflr 131 0.84 0.10 -0.09 0.97 0.93 14 14 79% 21%
radar ptlis 447 0.53 0.20 0.16 0.74 0.74 45 45 33% 67%
radar ptprt 721 0.63 0.35 0.16 0.80 0.81 73 73 40% 60%
radar ptsmg 132 0.74 0.17 -0.03 0.85 0.94 14 14 57% 43%
radar pttrc 507 0.82 -0.15 0.09 0.89 0.93 51 51 59% 41%

Feature importance

feature intensity % alert %
day of the year (cos) 2.6 6.9
day of the year (sin) 2.8 4.8
local climatology P50 33.2 4.8
longitude 8.2 4.5
temperature at 1,500 m 3.4 4.5
local climatology P90 8.5 3.9
temperature change at 1,500 m in 24 h 1.0 3.8
relative humidity 1.4 3.7
wind speed at 3,000 m 1.2 3.4
latitude 10.4 3.1
pressure at sea level 1.4 3.0
pressure change 24 h 1.1 2.9
tailwind at 1,500 m 2.0 2.9
share of hours with rain 1.4 2.8
temperature 2 m 1.9 2.8
tailwind at dusk, 3,000 m 1.2 2.5
accumulated precipitation 2.5 2.5
wind speed at 1,500 m 1.2 2.4
cloud cover 1.1 2.4
crosswind at 3,000 m 0.7 2.3
height of the 1,500 m level (high or low pressure) 0.8 2.3
wind speed at 750 m 1.1 2.3
temperature change 24 h 0.6 2.3
tailwind at 3,000 m 1.2 2.1
tailwind at dusk, 1,500 m 2.2 2.0
wind speed 10 m 1.2 1.9
crosswind at 750 m 0.6 1.9
wind speed 100 m 1.0 1.9
crosswind at 1,500 m 0.6 1.8
tailwind at 750 m 0.6 1.6
tailwind at dusk, 750 m 0.4 1.6
crosswind 100 m 0.5 1.5
crosswind 10 m 0.6 1.5
tailwind at dusk 10 m 0.4 1.4
tailwind at dusk 100 m 0.5 1.3
tailwind 100 m 0.4 1.3
tailwind 10 m 0.5 1.3

Limitations