Stand: Oktober 2026
Das aktuelle operationelle ML-Modell („Modell Hannover”, train_2018_2024__predict_2025, Zielgröße future_drought_damage_severe_t1, refit_final, 141 394 Trainingszeilen über 2018–2024) verwendet 54 Features aus der Allowlist in config/config.yaml (feature_columns): die 35 Features des 2026_09-Modells plus der 19 Kandidaten aus dem 2026-10-Feature-Bundle. Der aktuelle operationelle Lauf wurde am 2026-10-08 per Force-Refit neu trainiert (siehe unten). Die maßgeblichen Importance-Werte stammen aus explanation_feature_importance_training.csv im Modellverzeichnis.
Top-15 Permutations-Importance (operationelles 2026-10-Modell, Anteil an Summe):
| # | Feature | Anteil |
|---|---|---|
| 1 | kr_durchm (Kronendurchmesser) |
66,1 % |
| 2 | h3_res8 (H3-Zelle res 8) |
19,0 % |
| 3 | m_air_temp_14h_value |
5,0 % |
| 4 | st_umfang (Stammumfang) |
3,3 % |
| 5 | m_cold_air_kpr_value |
2,5 % |
| 6 | m_svf_value |
1,2 % |
| 7 | age_value |
0,6 % |
| 8 | m_air_temp_04h_value |
0,5 % |
| 9 | citree_krankheiten_schaedlinge |
0,4 % |
| 10 | et0_may_oct_mm |
0,3 % |
| 11 | m_cold_air_kvs_value |
0,3 % |
| 12 | dwsi_summer_value |
0,2 % |
| 13 | dist_road_m |
0,2 % |
| 14 | m_uhi_intensity_value |
0,1 % |
| 15 | m_sunlit_hours_value |
0,1 % |
Die restlichen 39 Features liegen je < 0,1 % (Summe der Top 15 = 99,9 %). Zwei
Befunde: (a) Die räumliche Information fließt über h3_res8 (Kategorie, 19 %) ein,
nicht über die rohen Koordinaten Rechtswert/Hochwert (je ~1e-8, praktisch null) –
der Bundling-Kandidat wird also in der gewünschten Form genutzt. (b) kr_durchm dominiert
stark (66 %): Kronendurchmesser ist der beste einzelne Gesundheits-/Bestandsproxy und
korreliert mit vielen anderen Merkmalen – die starke Konzentration ist bei 54
teilkorrellierten Features erwartet, weil Permutations-Importance die Erklärung
auf redundante Prädiktoren aufteilt.
Hinweis zur Versionierung: Die weiter unten detaillierten Importance-Tabellen des 35-Features-
2026_09-Modells gelten nicht mehr für das aktuelle operationelle Modell – dort nur noch als Historie. Maßgeblich ist die obere Top-15-Tabelle (54 Features, 2026-10-08).
2026_10, gestart 2026-10-07 08:32)Validierungsstand (abgeschlossen 2026-10-07 10:39): Externer 2024-Holdout
ROC-AUC 0,9697 (OOF-Gap +0,016, Brier 0,041, Precision 0,944 / Recall
0,795 @ Schwelle 0,5) — erfüllt die Acceptance (Baseline 0,9647, Ablation A
0,9697). Das operationelle 2018–2024-Modell wird im Anschluss per Force-Refit
neu trainiert (2026-10-08; der automatische Refit hatte das alte
2026_09-Modell still wiederverwendet — Fix: Feature-Fingerprint im Manifest,
issue #258; Repair: scripts/ml/force_refit_operational.py).
Meta-Plan vom 2026-10-06: räumliche Information, SWBM-Bodenwasser (Hebel 2 aus #228) und A/B-Wiederkehrer in einem Re-Training (Präzedenz D17). Die Permutations-Importance des Trainingslaufs entscheidet, welche Kandidaten im finalen Modell bleiben (Muster aus #217). Implementiert in bluegreencity_ki/features/ (spatial.py, swbm.py), Konfiguration unter ml.training in config/config.yaml.
Die Validierung 2026-10 zeigte mittlere Kalibrierung des AutoGluon-Probabilities-Scores: Das Modell sagte bei ~24% vorhergesagter Wahrscheinlichkeit ~10% beobachtete Absterberate voraus (und bei ~45% vorhergesagt ~62% beobachtet). Die Rangfolge (AUC) war korrekt – nur die Stärkeaussage war verzerrt. Fix: eine Platt-Kalibrierung (Sigmoid-Mapping cal = 1 / (1 + exp(−(a·raw + b)))), die auf dem externen 2024-Holdout der jeden Monat laufenden Validierung gefittet wird und beim Scoring auf den Rohscore angewendet wird.
Warum Platt statt Isotonic: Platt ist parametrisch (2 Parameter), glatt und robust bei ~3,9k Positiven im Holdout; Isotonic würde das Holdout-Muster zu stark memorisieren und zwischen den Monatsläufen unstabil springen. AUC bleibt per Monotonität unangetastet; Brier-Score sinkt auf dem 2024-Holdout von 0,0413 auf 0,0290.
Aktuelle Parameter (2026-10, gefittet auf 2024-Holdout, n=25.334, pos=3.912): a = 2,2831, b = 0,6840. Beispiel-Mapping:
| Rohscore | Kalibriert | Bedeutung |
|---|---|---|
| 0,002 | 0,001 | tiefe Low-Klasse kaum verändert |
| 0,097 (Median) | 0,012 | Mittelband wird ehrlich „weniger kritisch“ |
| 0,33 | 0,06 | oberes Medium → knapp unter High-Schwelle |
| 0,66 (90. Perzentil) | 0,90 | hochbelegtes oberes Band → wird kritisch |
| 0,95 | 1,00 | Top-Band saturiert |
Konsequenzen (Entscheidung „Option A“, 2026-10-08): Alle risikorelevanten Ableitungen laufen auf dem kalibrierten Score – Klassen-Schwellen (ml.thresholds: low < 0,10 ≤ medium < 0,30 ≤ high < 0,85 ≤ critical), ml_damage_score_t1, Confidence/Margin, reclassify_risk und damit auch das Lagebild. Der Rohscore bleibt als drought_risk_ml (Modell-Artefakt, SHAP-Forensik) erhalten, der kalibrierte als neue Spalte drought_risk_ml_calibrated. Die Schwellen wurden einmalig von (0,15/0,30/0,85) auf (0,10/0,30/0,85) neu ausgerichtet – der Medium-Anteil bleibt damit referenzstabil (~20% der Bäume auf 2024-Bezugsklasse), High/Critical sind auf dem kalibrierten Maßstab seltener, aber präzisere Aussagen.
Erwarteter Effekt im Lagebild (2026-Operationelle Daten, Backfill 2026-10-08): low 64,1 → 73,0k, medium 13,0 → 5,5k, high 11,4 → 6,3k, critical 0,7 → 4,4k. Die Verschiebung ist die Absicht der Kalibrierung (honest probabilities), kein Modell-Wechsel – kommunizieren vor der nächsten LHH-Runde.
Wartung: Die Kalibrierung wird bei jedem Validierungs-Refresh neu gefittet und in den operationellen Modell-Ordner kopiert (calibration.json). Fehlt die Datei (z. B. älterer Lauf), degradiert der Predictor mit Warnung auf den Rohscore. Einmaliger Backfill bestehender Runs: scripts/ml/backfill_run_calibration.py.
| Feature | Typ | Herleitung | Mechanismus / Erwartung |
|---|---|---|---|
| H3-Zelle res 7 | h3_res7 (Kategorie, 54 belegte Zellen im 365.059-Panel) |
UTM → WGS84 → h3.latlng_to_cell(res 7) (~5,2 km²/Zelle) |
Lage-Kategorie: erfasst Standortseffekte, die nicht in den Punkt-Rastern stecken (Pflegepraxis, Beplanungslogik); zu grob für Punktnähe, zu fein wäre Memorization |
| H3-Zelle res 8 | h3_res8 (Kategorie, 276 Zellen) |
wie res 7, ~0,74 km²/Zelle | feinere Lage-Kategorie (Ablation gegen res 7) |
| UTM-Ostwert | Rechtswert (Float, m, EPSG:25832) |
Trainings-Panel: aus der Inventory-CSV; operationell: abgeleitet aus der Geometrie (spatial_features.coordinates) |
Rohkoordinate: extrapoliert besser bei neuen Standorten; Bäume können axis-parallele Splits darauf setzen |
| UTM-Nordwert | Hochwert (Float, m, EPSG:25832) |
wie Rechtswert | wie Rechtswert |
| Baumzahl im Ring | ring8_tree_count (Float) |
Zelle + 6 H3-Nachbarzellen (res 8), self inkludiert | Bepflanzungsdichte im ~2,4-km-Umfeld (Wettbewerbs-/Standortkontext) |
| SVF-Ringmittel | ring8_mean_m_svf_value (Float) |
Mittel über Zelle + Ring, self-exkludiert | räumlicher SVF-Kontext; dämpft Punkt-Ausreißer der Rasterabfrage |
| Lufttemp-14h-Ringmittel | ring8_mean_m_air_temp_14h_value (Float) |
wie SVF-Ringmittel | räumlicher Wärme-Kontext (FITNAH-Zellstruktur vs. Punkt) |
spatial_block (Float 0–5) teilt die Stadt in ein festes 2×3-Grid (UTM 32N,
Rechtswert 541,000–560,000 / Hochwert 5,795,000–5,812,000, Block = Reihe×2+Spalte;
Punkte außerhalb werden auf den Rand-Block geclamped). Es ist bewusst keine
modellierte Zone und kein Modell-Feature, sondern ein deterministischer
Gruppierungs-Schlüssel für räumlich ehrliches Training:
h3_res8 direkt? AutoGluon setzt bei groups= intern
num_bag_folds auf die Anzahl der eindeutigen Groups (~276 Zellen → ~276
Bagging-Folds, rechnerisch unbrauchbar). Mit 6 Blöcken bleiben 6 Folds.Verwendung (Stand 2026-10-07): ml.training.spatial_cv ist
deaktiviert (Entscheidung unten). Die dataset_builder.py legt
spatial_block in die Trainings-CSV nur bei spatial_cv.enabled: true ab;
die Spalte fehlt in feature_columns und damit in den Modell-Features. Für
die ehrliche Evaluation (nicht Modellselektion) läuft die grouped CV mit
h3_res8 (5 Folds, StratifiedGroupKFold) über
ml.grouped_cv.group_columns (objectid + h3_res8) – siehe
Spatiale-CV-Diagnostik.
Entscheidung: Spatial CV im Training aus (2026-10-07, Ablations-Evidenz). 2×2-Ablation (Spatial CV an/aus × H3-Features an/aus, externer 2024-Holdout):
| ohne H3 | mit H3 | |
|---|---|---|
| Spatial CV aus | 0.9647 (Baseline 2026_09, 35f) |
0.9697 (54f) |
| Spatial CV an | 0.8368 (52f) | 0.8866 (54f) |
Spatial-Groups im Training (LeaveOneGroupOut-Bagging,
groups="spatial_block") senkten den externen AUC um ~0.105: AutoGluon
wählte Modelle, die räumlich ehrlich, aber im tatsächlichen zeitlichen
Task schlechter generalisieren. Das Modell wird nur in Hannover eingesetzt
(kein räumlicher Transfer nötig), die Selektion optimiert daher auf
zeitliche Generalisierung. Spatial-Honesty bleibt als Evaluation (grouped CV
spatial_cv an nutzte das Modell zudem rohe
UTM-Koordinaten als Top-Features (räumliches Memorization über einen
Hintertür-Kanal). Snapshots: data/derived/ml/ablations/, Vergleich:
scripts/ml/compare_ablations.py.Alle strikt aus dem Snapshot-Jahr t (Label t+1 → kein Lookahead), Trockenfenster 01.05.–31.10. plus Jahresend-State. Quelle: bgcki.swbm_daily_state (Backfill v0.4, Szenario irrigation-lower); Mehr-Varianten-Bäume (unknown-age-Szenarien) via konservative Envelope (Stress/Bedarf = max, Fraktionen = min/trockenste Variante), identisch zur wfs_trees_current-Konvention.
| Feature | Herleitung | Mechanismus / Erwartung | |
|---|---|---|---|
| Maximaler Bodenwasserstress | swbm_stress_max_dry (0–1) |
Max von soil_water_stress_today im Trockenfenster von Jahr t |
Wie trocken es im kritischen Zeitraum wirklich war – das fehlende Boden-Signal (#228 Hebel 2) |
| Stresstage | swbm_stress_days_dry (0–184) |
Tage im Trockenfenster mit Stress ≥ 0,5 | „anhaltend trocken” vs. „kurztrocken” trennen |
| Kumulierter Gießbedarf | swbm_irrigation_demand_sum_dry (L) |
Summe von irrigation_demand_liters im Trockenfenster |
modellierter, nicht durch Regen gedeckter Wasserbedarf |
| Bodenwasser 15. Juli | swbm_awc_jul15 (0–1) |
soil_water_fraction_total am letzten verfügbaren Tag ≤ 15.07. von t |
verfügbares Wasser in der kritischen Sommerphase |
| Bodenwasser 15. August | swbm_awc_aug15 (0–1) |
wie swbm_awc_jul15, Referenz 15.08. |
Hochsommer-Verfügbarkeit |
| Jahresend-State | swbm_awc_year_end (0–1) |
letzter Tag ≤ 31.12. von t (historisch: 31.12., aktueller Lauf: Stand heute) | Winterversorgung/Ausgangslage für Folgejahr t+1 |
| Feature | Wiederaufnahme-Grund |
|---|---|
subway_tunnel_dist_m |
war Importance #1 im 48f-Modell (A/B #228, 2026-09-28); Exklusion kostete Recall (#253) |
citree_krankheiten_schaedlinge |
war Importance #2 im 48f-Modell (A/B #228); LHH-Fehlwertrisiko bleibt zu prüfen |
m_uhi_intensity_value |
Doku-Korrektur 2026-10: kein ΔT Tag−Nacht, sondern eigenständiges GEONET-Wärmeinsel-Raster (issue #171) – unabhängige Messquelle, alte Drop-Begründung (r=0,841 „herleitbar”) war falsch |
age_value |
r=0,705 mit st_umfang lässt ~50 % unkorrelierte Varianz: Umfang sinkt (Schnitt/Sturm), Alter nicht – zwei unabhängige Messungen |
m_sunlit_hours_summer |
Vegetationsmittel (0,995 mit Frühling/Herbst) drückt das Sommer-Signals; Sommer = kritische Stressperiode |
m_cold_air_kpr_value |
eigenes FITNAH-Raster (Rate vs. KVS-Volumen); Rest über {KVS, T04} erwartet dünn – niedrigste Erwartung im Set |
Vorgängermodell: Das April-2026-Modell (17 Features, ROC-AUC 0.9872) ist in archive/automl_features_snapshot_april_2026.md archiviert.
Legende Aktualität:
¹ Perm.-Importance steht für Permutations-Importance: Die Werte eines Features werden zufällig durchgemischt (permutiert), wodurch sein Zusammenhang mit der Zielgröße gezielt zerstört wird. Der darauffolgende Rückgang im ROC-AUC-Score misst, wie stark das Modell auf dieses Feature angewiesen ist. Großer Verlust → Feature wichtig; kein Verlust → Feature trägt nichts bei. stddev = Standardabweichung über mehrere Permutationsdurchläufe. p = Wahrscheinlichkeit, dass der beobachtete Wert rein zufällig entstanden ist (p < 0.05 = statistisch signifikant ✓; p ≥ 0.05 = nicht signifikant ✗). Alle Werte aus explanation_feature_importance_training.csv. Werte sind Ranghinweise, keine kausalen Effektgrößen.
² Richtung: ↑ = höherer Feature-Wert → höheres Trockenstress-Risiko; ↓ = höherer Feature-Wert → niedrigeres Risiko; ↑↓ = nicht-lineare oder artspezifisch variable Beziehung.
| Feature (ausführlich) | Code-Bezeichnung | Perm.-Importance¹ (Rang · Wert · ±stddev · p) | Richtung² | Mechanismus / Einfluss auf Trockenstress | Herkunft / Ableitung | Aktualität |
|---|---|---|---|---|---|---|
| Himmelsöffnungsgrad (Sky View Factor) | m_svf_value |
#1 · 0.002823 · ±0.0000882 · p<0.001 ✓ | ↑ | Hoher SVF = geringe Gebäudebeschattung = mehr direkte Sonneneinstrahlung und thermische Belastung; stärkster Einzelprädiktor im Modell | Raster-Punktabfrage; SVF aus DGM1 (1 m) + LOD2-Gebäuden berechnet | Statisch |
| Kronendurchmesser (m) | kr_durchm |
#2 · 0.001939 · ±0.0000597 · p<0.001 ✓ | ↑ | Größere Krone = höheres Transpirationsvolumen und größerer Wasserbedarf; OBSkH-LiDAR-Ableitung | OBSkH-LiDAR; Kronendurchmesser aus 3D-Punktwolke | Inventurstand |
| Lufttemperatur Tag (FITNAH 3D, 14 h) | m_air_temp_14h_value |
#3 · 0.001061 · ±0.0000315 · p<0.001 ✓ | ↑ | Höhere Nachmittagstemperatur = stärkere Evapotranspiration und Bodenwasserentzug; FITNAH 3D-Modellierung | Raster-Punktabfrage; FITNAH 3D 2022 | Statisch |
| Stammumfang (cm) | st_umfang |
#4 · 0.001045 · ±0.0000366 · p<0.001 ✓ | ↑↓ | Proxy für Baumalter und Wurzelsystem-Entwicklung; junge Bäume (<5 J.) und sehr alte Bäume gleichermaßen gefährdet (U-förmig) | Direktattribut aus Baumkataster | Inventurstand |
| Kaltluftvolumenstrom (KVS) | m_cold_air_kvs_value |
#5 · 0.000422 · ±0.0000102 · p<0.001 ✓ | ↑ | Hoher KVS = gute nächtliche Abkühlung = geringerer nächtlicher Wasserstress; FITNAH 3D | Raster-Punktabfrage; FITNAH 3D 2022 | Statisch |
| Lufttemperatur Nacht (FITNAH 3D, 04 h) | m_air_temp_04h_value |
#6 · 0.000392 · ±0.00000456 · p<0.001 ✓ | ↑ | Höhere Nachttemperatur = geringere nächtliche Regeneration und höherer Grundwasserbedarf | Raster-Punktabfrage; FITNAH 3D 2022 | Statisch |
| Pflanzstandort-Fläche (m²) | planting_site_area_m2 |
#7 · 0.000166 · ±0.00000469 · p<0.001 ✓ | ↓ | Größerer Wurzelraum = mehr pflanzenverfügbares Wasser; aus Baumumfeld-Polygonen | Räumlicher Join: Baum → Baumumfeld-Polygon | Statisch |
| Besonnungsdauer (h/Tag, Vegetationsperiode) | m_sunlit_hours_value |
#8 · 0.0000628 · ±0.00000247 · p<0.001 ✓ | ↑ | Mehr Besonnung = höhere Evapotranspiration; Mittel über Frühling/Sommer/Herbst | Raster-Punktabfrage; DGM + LOD2-Gebäude | Statisch |
| Grundwassertiefe – aktuellster Jahreswert (m) | groundwater_level_latest |
#9 · 0.0000470 · ±0.00000574 · p<0.001 ✓ | ↑ | Aktuellster Flurabstand; tiefer GW = kein kapillarer Aufstieg = höherer Trockenstress | IDW-Interpolation von Messstellen auf Baumpunkte | Jährlich |
| Straßenabstand (m) | dist_road_m |
#10 · 0.0000248 · ±0.000000763 · p<0.001 ✓ | ↓ | Größerer Abstand = geringere Kompaktion, weniger Tausalzeintrag und Versiegelung | Euklidische Distanz zum nächsten OSM-Straßensegment | Statisch |
| Niederschlag (Nov–Apr, mm) | precip_nov_apr_mm |
#11 · 0.0000184 · ±0.00000151 · p<0.001 ✓ | ↓ | Winter-/Frühjahrsniederschlag füllt den Bodenwasserspeicher vor der Vegetationsperiode | DWD-Klimadaten; jahresspezifisch | Jährlich |
| UrbanGreenEye Vitalitätsindex (Sommer) | dwsi_summer_value |
#12 · 0.0000181 · ±0.000000840 · p<0.001 ✓ | ↑ | Höherer DWI = stärkerer Blattwasserstress; UrbanGreenEye-Remote-Sensing-Proxy | Raster-Punktabfrage; UrbanGreenEye (2016–2018 Referenz) | Statisch |
| Referenz-Evapotranspiration (Mai–Okt, mm) | et0_may_oct_mm |
#13 · 0.0000176 · ±0.00000109 · p<0.001 ✓ | ↑ | Höhere ET₀ = größerer atmosphärischer Wasserbedarf in der Vegetationsperiode | DWD-Klimadaten; jahresspezifisch | Jährlich |
| Baumzahl im Pflanzstandort | planting_site_tree_count |
#14 · 0.0000163 · ±0.00000123 · p<0.001 ✓ | ↑ | Mehr Bäume pro Standort = stärkere Konkurrenz um Wasser und Nährstoffe | Zählung der Bäume innerhalb des Baumumfeld-Polygons | Inventurstand |
| Art (binominal) | species_binomial |
#15 · 0.0000119 · ±0.00000137 · p<0.001 ✓ | ↑↓ | Baumart kodiert artspezifische Trockenheits- und Hitzeverträglichkeit, Wurzelmorphologie und Hydraulik | Direktattribut aus Baumkataster; normalisiert | Inventurstand |
| Landnutzung (10 Klassen) | land_use_value |
#16 · 0.00000728 · ±0.00000102 · p<0.001 ✓ | ↑ | Versiegelte Standorte (Ebenerdig versiegelt, Baum über Versiegelung) = höheres Risiko | Räumlicher Join: Baum → ALKIS-Landnutzungspolygon | Statisch |
| CiTree: Bodeneigenschaft | citree_bodeneigenschaft |
#17 · 0.00000511 · ±0.000000974 · p<0.001 ✓ | ↑↓ | Präferenz für bestimmte Bodentypen; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| Temperaturmittel (Mai–Okt, °C) | temp_mean_may_oct_c |
#18 · 0.00000362 · ±0.000000512 · p<0.001 ✓ | ↑ | Höheres Sommermittel = stärkere Evapotranspiration über die gesamte Vegetationsperiode | DWD-Klimadaten; jahresspezifisch | Jährlich |
| P/ET₀-Anomalie (Mai–Okt) | p_et0_ratio_anomaly_may_oct |
#19 · 0.00000244 · ±0.000000387 · p<0.001 ✓ | ↓ | Abweichung des P/ET₀-Index vom Langzeitmittel 1991–2020 (pro Gitterzelle); negativ = trockener/hitzer als Normal | p_et0_ratio_may_oct − p_et0_climatology_1991_2020 (HYRAS pr / FAO-ET₀) |
Jährlich |
| Niederschlag (Mai–Okt, mm) | precip_may_oct_mm |
#20 · 0.00000239 · ±0.000000248 · p<0.001 ✓ | ↓ | Sommer-Niederschlag reduziert Trockenstress direkt | DWD-Klimadaten; jahresspezifisch | Jährlich |
| CiTree: Kronenform | citree_kronenform |
#21 · 0.00000239 · ±0.000000416 · p<0.001 ✓ | ↑↓ | Kronenform beeinflusst Transpirationsfläche und Lichtnutzung; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| Salzbelastung (Winterdienst-Klasse) | salt_value |
#22 · 0.00000145 · ±0.000000226 · p<0.001 ✓ | ↑ | Chlorid-Ionen erhöhen osmotisches Potenzial, hemmen Feinwurzelwachstum | Räumlicher Join: Baum → Winterdienst-Straßengeometrie | Statisch |
| Straßentyp (OSM-Klasse) | street_type_value |
#23 · 0.00000128 · ±0.000000260 · p<0.001 ✓ | ↑ | Hauptstraßen akkumulieren mehr Bodenversiegelung, Verdichtung und Tausalzeintrag | Attribut-Join: Baumstandort → OSM-Straßennetz | Statisch |
| Ariditätsindex P/ET₀ (Mai–Okt) | p_et0_ratio_may_oct |
#24 · 0.000000215 · ±0.000000063 · p<0.001 ✓ | ↓ | Verhältnis Niederschlag/ET₀ (UNCCD-Aridity-Index); niedrigerer Index = aridere Sommerbedingungen | Abgeleitet aus DWD-Klimadaten (HYRAS pr / FAO-ET₀); jahresspezifisch | Jährlich |
| Pflanzstandort-Oberflächentyp | planting_site_surface_type |
#25 · 0.0000000198 · ±0.00000000295 · p<0.001 ✓ | ↑ | Versiegelte Oberflächentypen (Pflaster, Asphalt) = höheres Risiko als Rasen oder Erde | Räumlicher Join: Baum → Baumumfeld-Polygon | Statisch |
| Gattung | species_genus |
#26 · 0.000000000431 · ±0.000000000393 · p=0.035 ✗ | ↑↓ | Gattungsebene als robusterer Prädiktor bei unvollständiger Artdaten; ersetzt ga_lang |
Direktattribut aus Baumkataster | Inventurstand |
| CiTree: Salzverträglichkeit | citree_salzvertraeglichkeit |
#27 · 0.0 · ±0.0 · p=0.187 ✗ | ↓ | Toleranz gegenüber Tausalz; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Bodenverdichtungstoleranz | citree_bodenverdichtungstoleranz |
#28 · 0.0 · ±0.0 · p=0.5 ✗ | ↓ | Toleranz gegenüber Bodenverdichtung in urbanen Standorten; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Lichtanspruch | citree_lichtanspruch |
#29 · 0.0 · ±0.0 · p=0.5 ✗ | ↑ | Lichtbedürftige Arten reagieren stärker auf Beschattung und Strahlungsbelastung | CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Trockenheitstoleranz | citree_trockenheitstoleranz |
#30 · 0.0 · ±0.0 · p=0.5 ✗ | ↓ | Direkte artspezifische Trockenheitstoleranz; ersetzt drought_tolerance_value |
CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Gründigkeit | citree_grundigkeit |
#31 · 0.0 · ±0.0 · p=0.5 ✗ | ↓ | Tiefgründige Arten erreichen tieferes Wasser; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Staunässetoleranz | citree_staunaessetoleranz |
#32 · 0.0 · ±0.0 · p=0.5 ✗ | ↓ | Höhere Staunässetoleranz = geringeres Risiko bei Staunässe, aber artspezifisch variabler Trockenstress | CiTree-Datenbank (Roloff et al.); Artenprofil | Statisch |
| CiTree: Oberflächennahe Wurzeln | citree_oberflaechennahe_wurzeln |
#33 · 0.0 · ±0.0 · p=0.5 ✗ | ↑ | Oberflächennahe Wurzeln = geringere Zugriffsiefe auf Wasser; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Bodenfeuchtetoleranz | citree_bodenfeuchtetoleranz |
#34 · 0.0 · ±0.0 · p=0.5 ✗ | ↓ | Toleranz gegenüber wechselnder Bodenfeuchte; artspezifisch | CiTree-Datenbank; Artenprofil | Statisch |
| CiTree: Hitzeverträglichkeit | citree_hitzevertraeglichkeit |
#35 · 0.0 · ±0.0 · p=0.5 ✗ | ↓ | Direkte artspezifische Hitzetoleranz; ersetzt heat_tolerance_value |
CiTree-Datenbank; Artenprofil | Statisch |
Folgende Kriterienscores und -features stehen in der Pipeline zur Verfügung, werden im AutoML-Modell jedoch nicht als Features verwendet.
| Feature | Code-Bezeichnung | Begründung |
|---|---|---|
| Bestandsalter (Jahre) | age_value |
r = 0.705 mit st_umfang; Stammumfang als robusterer Proxy für Alter und Wurzelsystem |
| UHI-Intensität (GEONET-Wärmeinsel) | m_uhi_intensity_value |
r = 0.841 mit m_air_temp_04h_value. Doku-Korrektur 2026-10: Kein ΔT Tag−Nacht, sondern eigenständiges GEONET-Raster (issue #171): Abweichung der modellierten Nacht-Temperatur vom Grünflächen-Mittel, complementary Raster Siedlungsraum + Verkehr. Unabhängige Messung, nicht herleitbar aus T14/T04 – die ursprüngliche Drop-Begründung war veraltet; Kandidat für Wiederaufnahme im Re-Training 2026_10 |
| Kaltluftproduktion KPR | m_cold_air_kpr_value |
r = −0.765 mit m_air_temp_04h_value; nur KVS im Modell, KPR redundant |
| Grundwasser – Median / Max / Std | groundwater_level_median, groundwater_level_max, groundwater_level_std |
r ≥ 0.96 mit groundwater_level_latest; nur aktuellster Wert im Modell |
| Besonnungsdauer – saisonal | m_sunlit_hours_spring, m_sunlit_hours_summer, m_sunlit_hours_autumn |
r = 0.995 (Frühling ↔ Herbst); ein Vegetationsperiode-Mittel (m_sunlit_hours_value) statt drei Saisons |
Stand 2026-10:
age_value,m_uhi_intensity_value,m_cold_air_kpr_valueundm_sunlit_hours_summerwurden im 2026-10-Feature-Bundle als A/B-Kandidaten wieder aufgenommen (jeweils mit eigenständiger Messinformation bzw. korrigierter UHI-Doku); die Permutations-Importance des2026_10-Laufs entscheidet. | GK25-Materialklasse |gk25_material_class| Ungenau (1:25 000); räumliche Auflösung zu grob für Einzelbaumdiskriminierung | | CiTree: Krankheiten/Schädlinge |citree_krankheiten_schaedlinge| Aus LHH-Kataster; hohe Fehlwertrate, keine robuste Signalbasis | | Stadtbahn-Tunnel-Distanz |subway_tunnel_dist_m| Nur regelbasiert; kein signifikanter Beitrag im ML-Modell |
Folgende Features wurden aus der Allowlist entfernt, weil das 2026_09-Re-Training keine messbare Importance lieferte (Modell splittet praktisch nie darauf).
| Feature | Code-Bezeichnung | Begründung |
|---|---|---|
| Sorte (Kultivar) | species_cultivar |
Permutations-Importance ≈ 0 (p = 0.155); geringe Varianz im Datensatz |
| CiTree: Wuchsgeschwindigkeit | citree_wuchsgeschwindigkeit |
Permutations-Importance ≈ 0 (p = 0.187); geringe Varianz |
| CiTree: Kronendurchlässigkeit | citree_kronendurchlaessigkeit |
Permutations-Importance ≈ 0 (p = 0.187); geringe Varianz |
| Platzhalter-Flag (Art unvollständig) | species_is_placeholder |
Permutations-Importance = 0 (p = 0.5); kein messbarer Beitrag |
| Feature | Code-Bezeichnung | Begründung |
|---|---|---|
| Pflanzstruktur (Nachbardichte 25-m-Radius) | planting_structure_score, neighbor_count |
Ablationsexperiment: keine ROC-AUC-Verbesserung; Überlappung mit dist_road_m und species_binomial |
| Oberflächenalbedo | albedo_value, albedo_score |
Sentinel-2-Snapshot 2024; nicht jahresauflösend; hohe Korrelation mit Landnutzung und SVF |
| Besonnungsdauer Winter (h/Tag) | m_sunlit_hours_winter |
Winterbesonnung irrelevant für Vegetationsperiode; nur Vegetationsperiode-Mittel im Modell |
| Feldkapazität / NFKWe | nfkwe_value, field_capacity_score |
BK50-Bodenpolygone (1:50 000); räumliche Auflösung zu grob für Einzelbaumdiskriminierung |
| Baumscheibengröße / Wurzelraum | pit_size_value, pit_size_score |
Unvollständige Datenerfassung im Kataster; Fehlwertrate zu hoch |
| Baumscheibenbedeckung (12 Kategorien) | tree_disc_value, tree_disc_score |
Unvollständige Datenerfassung; zu viele fehlende Werte im Trainingsdatensatz |
| Trockenheitstoleranz (5 Stufen, direkt) | drought_tolerance_value, drought_tolerance_score |
Ersetzt durch citree_trockenheitstoleranz (CiTree-Profil, informativer als direkte Art-ID) |
| Hitzeverträglichkeit (3 Klassen, direkt) | heat_tolerance_value, heat_tolerance_score |
Ersetzt durch citree_hitzevertraeglichkeit (CiTree-Profil) |
| Art (Langform) | ga_lang |
Ersetzt durch species_binomial + species_genus (normalisiert, robuster bei unvollständigen Artdaten) |
| Baumhöhe (m) | m_baumhoehe |
Korrelation mit st_umfang/Alter; kein eigenständiger Beitrag nach Kontrolle für Baumart |
| Kronenfläche (m²) | m_kronflaeche |
Proxy für Transpirationsvolumen; bereits durch kr_durchm abgedeckt |
| NDVI-Änderung 2020→2024 | ndvi_change_2020to2024 |
Nicht für zukünftige Snapshots verfügbar (kein Zeitreihenfeature); nur in Ablationsvarianten genutzt |
Beim Aufbau des Längsschnittdatensatzes (Snapshots 2018–2024) werden die zeitvarianten Features für jeden Snapshot jahresspezifisch berechnet:
groundwater_level_latest ein (_resolve_feature_reference_year in groundwater.py)Die Permutations-Importance liefert eine globale Rangfolge über alle Bäume, erklärt aber nicht, warum das Modell für diesen Baum ein hohes Risiko vorhersagt. SHAP-Werte stehen in aktuellen AutoGluon-Versionen nicht mehr nativ zur Verfügung. Als praktikable Alternative bietet AutoGluon predictor.feature_importance() auch auf gefilterten Teilmengen an – damit lassen sich gruppenspezifische Importance-Profile erzeugen, die dem Nutzer zumindest Hinweise auf Subgruppen-Unterschiede liefern (siehe Punkt 2).
Motivation: Die globale Importance ist über alle 250+ Baumarten gemittelt. Für einzelne Arten kann sich die Rangfolge stark unterscheiden – z. B. könnte groundwater_level_latest für Tilia cordata deutlich wichtiger sein als für Robinia pseudoacacia, die tiefgründige Wurzeln ausbildet und Trockenheit besser toleriert.
Umsetzung:
for art in ["Tilia cordata", "Acer platanoides", "Robinia pseudoacacia"]:
subset = test_data[test_data["species_binomial"] == art]
fi = predictor.feature_importance(data=subset, num_shuffle_sets=5)
print(art, fi.head(10))
Erkenntnisgewinn: Vergleichstabelle der Top-5-Features je Art → Grundlage für artspezifische Pflegehinweise und Stakeholder-Kommunikation.
Motivation: Globale Metriken können zwei Probleme verdecken: (a) der Modellunterschied zwischen Innenstadt und Außenstadt, und (b) räumlich geclusterte Vorhersagefehler (Moran’s I > 0), die auf fehlende räumliche Kontextfeatures hinweisen – z. B. Bodentyp, Pflegebezirk oder Quartierstruktur.
Umsetzung: scripts/analysis/spatial_cv_diagnostics.py arbeitet auf dem
oof_predictions.csv der h3_res8-Grouped-CV (Zeile = Baum×Jahr, Spalten
y_true, y_proba, h3_res8) und benötigt keine Geometrie-Joins:
ml.grouped_cv.diagnostics.zone_center) zugeordnet; innerhalb von
zone_radius_m (Standard 5000 m, ≈ A37-Deckel) = inner, sonst outer.
Pro Zone: n, Positive-Rate, ROC-AUC, PR-AUC, Brier.conda run -n bgcki_wesemann python scripts/analysis/spatial_cv_diagnostics.py `
--oof-csv data/models/autogluon/annual_validation/<lauf>/grouped_cv/h3_res8/oof_predictions.csv `
--config config/config.yaml
Erkenntnisgewinn: Zonen-AUC-Gap → Hinweis auf Transferprobleme zwischen Stadtteilen (z. B. Pflegepraxis-Unterschiede). Moran’s I ≈ 0 → Modell räumlich robust. Signifikant positives I → räumlich geclusterte Fehler → fehlende räumliche Features.
Grouped-CV-Folds (5 je Gruppierung, best_quality, 1 h/Fold):
| Gruppierung | AUC (Folds 1–5) | Precision | Recall |
|---|---|---|---|
objectid (neue Bäume) |
0,8928 / 0,8869 / 0,8788 / 0,8926 / 0,8903 | 0,704 | 0,435 |
h3_res8 (neue Viertel) |
0,8199 / 0,8152 / 0,7878 / 0,8117 / 0,7911 | 0,655 | 0,177 |
Der AUC-Abstand (~0,08) zwischen „neue Bäume” und „neue Viertel” ist das gemessene Maß für den räumlichen Transfer-Effekt: Bäume aus gänzlich unerkannten H3-Zellen sind schwerer zu treffen. Der niedrige Recall (0,177) bei stabilem Precision (0,655) heißt: auf unbekannten Vierteln alarmiert das Modell seltener, aber sicherer – ein vertretbares Profil für ein Bewässerungs-Ranking. Zum Vergleich: externer 2024-Holdout (gleiche Stadt, neues Jahr) = 0,9697.
Zonen-AUC + Moran’s I auf den h3_res8-OOF-Residuen:
| Zone | n | Positiv-Rate | ROC-AUC | PR-AUC | Brier |
|---|---|---|---|---|---|
| inner (≤5 km Rathaus) | 80.956 | 0,132 | 0,8081 | 0,4327 | 0,0942 |
| outer | 60.438 | 0,215 | 0,7788 | 0,5091 | 0,1401 |
| gesamt | 141.394 | 0,168 | 0,8032 | 0,4764 | 0,1138 |