Strojno učenje: 637.712 vrstic, sedem dni in 1,52 °C napake
Ali lahko Machine Learning napove temperaturo za naslednjih sedem dni?
Kaj smo se naučili, ko smo model učili napovedovati vreme?
Začeli smo s precej preprostim vprašanjem.
Ali lahko Machine Learning napove temperaturo za naslednjih sedem dni?
Imeli smo več let meritev.
Temperaturo.
Vlago.
Tlak.
Veter.
Padavine.
Sončno sevanje.
In podatke iz več vremenskih postaj.
Na prvi pogled se zdi, da model potrebuje samo dovolj podatkov in nekaj časa za trening.
Potem pa bo že nekako ugotovil, kaj pride čez sedem dni. 😄
Ni bilo čisto tako.
Največ se namreč nismo naučili o tem, katera knjižnica da najboljšo številko.
Naučili smo se, da je še bolj pomembno:
Kako sploh postavimo problem, ki ga želimo rešiti?
Kaj smo trenirali?
Model je napovedoval temperaturo za Rogaško Slatino.
To je regresijski problem.
Rezultat ni razred, kot na primer:
dež / brez dežja
ampak številka:
jutri ob 15:00 bo 24,6 °C.
Kot glavno metodo smo uporabili regresijsko gradientno ojačevanje odločitvenih dreves.
Ta metoda zaporedno gradi veliko manjših odločitvenih dreves.
Vsako novo drevo poskuša popraviti napako dotedanje skupne napovedi.
Eno drevo lahko na primer vpraša:
Je ura popoldanska?
Drugo:
Je zračna masa bolj vlažna?
Tretje:
Ali fizikalni model pri takem vremenu navadno napove prenizko temperaturo?
Na koncu se vsi majhni popravki seštejejo.
Ampak do uporabnega modela nismo prišli v enem koraku.
Preizkusili smo več različnih načinov treniranja.
Prvi poskus: samo koledar
Najprej smo modelu dali samo datum in uro.
Tako se je lahko naučil:
- da je julija navadno topleje kot januarja,
- da je popoldne navadno topleje kot zjutraj,
- in kakšen je običajen letni ter dnevni temperaturni ritem.
To je uporaben prvi test.
Model je na letu 2026 dosegel povprečno napako približno:
3,25 °C.
Ni katastrofa.
Ampak tak model ne ve, kakšno je vreme danes.
Ne ve, ali prihaja hladna fronta.
Ne ve, ali je jutro oblačno ali sončno.
V resnici napoveduje nekaj podobnega kot:
“Za ta datum in to uro je običajno približno toliko stopinj.”
To je bil naš prvi baseline.
Preprosta začetna rešitev, ki jo mora boljši model premagati.
Drugi poskus: naslednja ura
Nato smo modelu pokazali tudi zadnje meritve.
Temperaturo pred eno, dvema, tremi, šestimi, dvanajstimi in več urami.
Pa drseča povprečja in trende.
Model je napovedal naslednjo uro.
Potem smo njegovo napoved uporabili kot vhod za naslednji korak.
In tako naprej.
Temu rečemo rekurzivna napoved.
Za eno uro vnaprej je bila ideja zelo dobra.
V eni od prvih različic je bila povprečna napaka manj kot pol stopinje.
Težava se pokaže pozneje.
Če prva napoved malo zgreši, druga že uporablja ta zgrešeni podatek.
Tretja uporablja napako prvih dveh.
Po več korakih se napake začnejo kopičiti.
To je podobno igri telefončkov.
Prvi stavek je še skoraj pravilen.
Na koncu vrste pa lahko dobiš nekaj čisto drugega.
Tretji poskus: neposredno do vsake ure
Zato smo spremenili vprašanje.
Namesto enega modela, ki vedno znova napoveduje samo naslednjo uro, smo trenirali ločene modele.
Enega za eno uro vnaprej.
Enega za šest ur.
Enega za 24 ur.
In tako vse do:
168 ur oziroma sedem dni.
Skupaj je nastalo 168 neposrednih modelov.
S tem se napaka prejšnjega koraka ni več prenašala v naslednjega.
Rezultati na podatkih iz leta 2026 so bili:
1 ura vnaprej → MAE 0,316 °C
6 ur vnaprej → MAE 1,205 °C
24 ur vnaprej → MAE 2,045 °C
72 ur vnaprej → MAE 3,018 °C
168 ur vnaprej → MAE 3,242 °C
To zelo lepo pokaže nekaj pričakovanega.
Bolj ko gledamo v prihodnost, manj je današnja meritev dovolj.
Čez eno uro je trenutna temperatura zelo močan signal.
Čez sedem dni pa model iz današnje temperature ne more vedeti, katera zračna masa bo takrat nad Slovenijo.
Zato se je pri daljših napovedih začel vračati proti običajni sezonski temperaturi.
To je bilo varno ugibanje.
Ni pa bila prava vremenska napoved.
Trenirali smo tudi dnevni maksimum in minimum
Včasih uporabnika ne zanima vseh 24 urnih vrednosti.
Zanima ga samo:
Kako toplo bo danes?
in:
Kako hladna bo naslednja noč?
Zato smo trenirali še dnevne modele.
En model je dobil podatke ob 7:00.
Drugi ob 10:00.
Model ob 10:00 je imel več informacij o tem, kako se je dan dejansko začel.
Za dnevni maksimum je dosegel:
MAE 1,076 °C.
Model ob 7:00 pa:
MAE 1,500 °C.
Poznejša meritev je torej pomagala.
Ampak ima tudi ceno.
Napoved ob 10:00 je natančnejša, vendar jo dobimo tri ure pozneje.
To je lep primer, da “boljši rezultat” ni vedno edino vprašanje.
Pomembno je tudi:
Kdaj napoved potrebujemo?
Prelomna ideja: modelu ni treba samemu izumiti meteorologije
Pri neposrednem modelu smo pričakovali preveč.
Iz nekaj lokalnih meritev smo želeli dobiti celoten razvoj ozračja za sedem dni.
Ampak za to že obstajajo fizikalni vremenski modeli.
Uporabili smo napovedi:
- GFS,
- ICON,
- ECMWF.
Ti modeli računajo gibanje zračnih mas, tlak, veter, vlago, oblake in sevanje nad velikim območjem.
Machine Learningu smo zato dali manjšo in bolj smiselno nalogo.
Naj ne napoveduje vremena od začetka.
Naj se nauči samo:
Kako je treba fizikalno napoved popraviti za Rogaško Slatino?
Formula je bila približno taka:
izmerjena temperatura − povprečje GFS, ICON in ECMWF = lokalna napaka
Model se je učil napovedovati to lokalno napako.
Na koncu smo njegov popravek prišteli fizikalni napovedi.
Temu rečemo hibridno residualno učenje.
Fizika pove, kaj prihaja.
ML pa se uči, kako se to navadno izrazi na konkretni lokaciji.
Katere podatke je dobil hibridni model?
Uporabili smo meritve Rogaške Slatine in štirih okoliških postaj:
- Ljubljana Bežigrad,
- Celje Medlog,
- Maribor letališče,
- Lisca.
Dodali smo časovne zamike, trende in povprečja zadnjih ur ter dni.
Iz fizikalnih modelov smo vzeli temperaturo, vlago, rosišče, tlak, oblačnost, padavine, veter in sončno sevanje.
Nismo gledali samo ene točke.
Uporabili smo tudi okoliške točke, da je model videl:
Ali toplejši ali hladnejši zrak prihaja z zahoda, vzhoda, severa ali juga?
Skupaj je imel za prve dni 283 značilk.
Sedmi dan 227, ker ICON tako daleč nima napovedi.
Učni nabor je vseboval:
637.712 vrstic.
Za končno preverjanje leta 2026 pa:
164.360 napovedi, ki jih model med učenjem ni videl.
Kako smo poskrbeli, da model ni “goljufal”?
Pri časovnih podatkih je zelo lahko po nesreči pogledati v prihodnost.
In potem dobiti čudovite rezultate.
Ki v resničnem svetu ne pomenijo nič.
Podatkov zato nismo razdelili naključno.
Uporabili smo časovni vrstni red:
starejši podatki → training
druga polovica leta 2025 → validation
leto 2026 → test
Na validation delu smo izbirali, koliko dreves naj model uporabi.
Če se rezultat 75 korakov ni izboljšal, smo trening ustavili.
Temu rečemo early stopping.
Test leta 2026 smo odprli šele, ko so bili modeli že izbrani in zaklenjeni.
Med pregledom smo našli tudi nekaj nevarnih podrobnosti.
Na primer cilje, ki so pri zadnjih učnih vrsticah segali čez mejo v testno leto.
Drseča okna, ki bi lahko vsebovala informacijo iz napačnega časa.
Urne padavine, ki so bile povprečene, čeprav jih je treba sešteti.
In smer vetra, kjer navadno povprečje med 359° in 1° da 180°.
Kar bi pomenilo jug namesto severa. 😄
Vse to smo popravili.
Rezultat je bil včasih za odtenek slabši.
Ampak postal je pošten.
In poštena napaka je veliko bolj uporabna kot odlična številka, nastala zaradi podatkov iz prihodnosti.
Kako blizu smo prišli?
Surovo povprečje fizikalnih napovedi je imelo na testu 2026:
MAE 1,812 °C.
Hibridni model pa:
MAE 1,519 °C.
To je približno:
16,2 % manjša povprečna napaka.
Po dnevih je izgledalo tako:
1. dan → 1,004 °C
2. dan → 1,137 °C
3. dan → 1,232 °C
4. dan → 1,414 °C
5. dan → 1,617 °C
6. dan → 1,953 °C
7. dan → 2,297 °C
Sedmi dan neposrednega modela je imel napako približno 3,24 °C.
Hibridni model jo je zmanjšal na približno 2,30 °C.
To je okoli 29 % izboljšanja.
Še vedno ni popolno.
Je pa precej bližje.
Katero metodo smo uporabili?
Pri urnih, dnevnih in hibridnih napovedih smo uporabljali:
gradientno ojačevanje regresijskih dreves.
Preizkusili smo tri različne izvedbe te metode.
Vse tri so dobile iste podatke, isti časovni razrez in enak končni test.
Njihov skupni MAE je bil med:
1,5186 °C in 1,5208 °C.
Razlika je skoraj zanemarljiva.
To pomeni, da razlika ni bila v osnovni ideji treniranja.
V vseh treh primerih so se drevesa zaporedno učila popravljati napake dotedanje napovedi.
Elastic Neta, naključnega gozda in logistične regresije pri teh vremenskih poskusih nismo uporabljali.
Glavna ugotovitev je bila drugje.
Menjava programske izvedbe iste metode ni rešila glavnega problema.
Veliko več je prinesla sprememba načina treniranja.
Torej prehod iz:
“Iz lokalne temperature napovej vreme čez sedem dni.”
v:
“Vzemi fizikalno napoved in se nauči njenega lokalnega popravka.”
Včasih ni treba iskati pametnejšega modela.
Treba mu je postaviti pametnejše vprašanje.
Kaj se je model dejansko naučil?
Med pomembnimi signali so bili:
- ura dneva,
- del leta,
- sončno sevanje,
- relativna vlaga,
- veter in oblačnost,
- temperaturni gradienti med okoliškimi točkami,
- ter razlika med napovedmi GFS, ICON in ECMWF.
To nam pove nekaj zanimivega.
Model se ni naučil ene skrivne formule za vreme.
Učil se je ponavljajočih se lokalnih vzorcev.
Na primer, da je napaka fizikalnih modelov v kotlini lahko drugačna ponoči kot popoldne.
Da se napaka spreminja z letnim časom.
Da sončno sevanje pomaga oceniti dnevno segrevanje.
In da nestrinjanje med fizikalnimi modeli samo po sebi pove nekaj o negotovosti napovedi.
Kje model še vedno odpove?
Dober povprečen rezultat ne pomeni, da zadene vsak dogodek.
Lep primer je bil vročinski skok julija 2026.
Izmerjeni maksimum je bil:
31,62 °C.
Hibridni model je napovedal največ:
26,76 °C.
Zakaj?
Ker tudi vhodni fizikalni napovedi nista dovolj dobro videli dogodka.
GFS je ob uri dejanskega vrha napovedal 27,7 °C.
ECMWF pa 26,1 °C.
ICON za sedmi dan ni imel podatka.
ML lahko popravi običajno lokalno napako.
Težko pa iz nič ustvari vročinski dogodek, če zanj v vhodih ni dovolj signala.
To je pomembna meja hibridnega pristopa.
Model je dober korektor.
Ni čarovnik.
Kaj smo se torej naučili?
Najprej:
Časovna delitev podatkov je pri napovedovanju prihodnosti nujna.
Potem:
Baseline pove, ali model sploh dodaja vrednost.
Pa tudi:
Kratkoročna in sedemdnevna napoved nista isti problem.
Trenutno stanje je izredno uporabno za naslednjo uro.
Za naslednji teden potrebujemo informacijo o prihodnjem razvoju ozračja.
Naučili smo se še:
Kakovost priprave podatkov je lahko pomembnejša od izbire knjižnice.
Napačno povprečene padavine, časovni zamik ali majhno uhajanje podatkov lahko pokvarijo celoten eksperiment.
In mogoče najpomembnejše:
Dobra kombinacija fizike in Machine Learninga je močnejša od poskusa, da bi ML vse odkril sam.
Fizikalni modeli razumejo razvoj ozračja.
ML pa zelo dobro išče ponavljajoče se lokalne napake.
Ko vsakemu damo nalogo, v kateri je dober, dobimo uporaben rezultat.
Ne popolne napovedi.
Ampak na več kot 164.000 nevidenih primerih smo povprečno napako zmanjšali za 16,2 %.
In to že ni več samo lep training rezultat.
To je merljiva izboljšava na prihodnosti, ki je model med učenjem ni poznal.
Naslednje vprašanje pa je:
Ali lahko model poleg napovedi pove tudi, koliko ji lahko zaupamo?
Intervali negotovosti.
Redki ekstremi.
In razlika med:
“Napoved je 24 °C.”
ter:
“Najverjetneje bo med 21 °C in 27 °C.”
Next post ☺️
#MachineLearning #AI #DataScience #WeatherForecast #GradientBoosting #ZaFirbce