Temporal Fusion Transformer: aegridade prognoosimine süvaõppega — täielik õpetus

Looge täpseid ja tõlgendatavaid ennustusi

Loodud DALLE-ga [1]

Vastavalt [2] Temporal Fusion Transformer ületab aegridade prognoosimisel kõiki silmapaistvaid süvaõppe mudeleid.

Sealhulgas esiletõstetud Gradiendi võimenduspuu mudel tabelite aegridade andmete jaoks.

Aga mis on Temporal Fusion Transformer (TFT)[3] ja miks see nii huvitav on?

Selles artiklis selgitame lühidalt selle uudsust Temporal Fusion Transformer ja ehitage sellele otsast lõpuni projekt Energianõudluse prognoosimine. Täpsemalt käsitleme:

  • Kuidas oma andmeid TFT-vormingu jaoks ette valmistada.
  • Kuidas luua, koolitada ja hinnata TFT mudelit.
  • Kuidas saada ennustusi valideerimisandmete ja valimiväliste prognooside kohta.
  • Kuidas arvutada funktsioonide tähtsust, hooajalised mustrid, ja äärmuslike sündmuste vastupidavus kasutades sisseehitatud mudelit tõlgendatav tähelepanu mehhanism.

Lähme sukelduma!

Temporal Fusion Transformeri arhitektuuri põhjalikuks analüüsiks vaadake minu eelmist artikkel.

Temporaal Fkasutamine Tmuutja (TFT) on transformaatoril põhinev mudel, mis kasutab enesetähelepanu, et tabada mitme ajajada keerukat ajalist dünaamikat.

TFT toetab:

  • Mitu aegrida: Saame treenida TFT-mudelit tuhandete ühe- või mitmemõõtmeliste aegridade põhjal.
  • Mitme horisondi prognoosimine: Mudel väljastab ühe või mitme sihtmuutuja mitmeastmelisi ennustusi, sealhulgas ennustusintervalle.
  • Heterogeensed omadused: TFT toetab mitut tüüpi funktsioone, sealhulgas ajavarianti ja staatilisi eksogeenseid muutujaid.
  • Tõlgendatavad ennustused: Ennustusi saab tõlgendada muutuva tähtsuse ja hooajalisuse alusel.

Üks neist omadustest on ainulaadne Temporal Fusion Transformer. Seda käsitleme järgmises osas.

Märkimisväärsete DL-aegrea mudelite hulgas (nt DeepAR[4]), TFT paistab silma, kuna see toetab erinevat tüüpi funktsioone. Need on:

  • Ajaliselt muutuv teatud
  • Ajaliselt muutuv tundmatu
  • Ajas muutumatu reaalne
  • Ajas muutumatu kategooriline

Näiteks kujutage ette, et meil on a müügi prognoosimise juhtum:

Oletame, et peame ennustama 3 toote müüki. The num sales on sihtmuutuja. The CPI index või number of visitors See on ajas muutuv teadmata funktsioonid, sest need on teada ainult ennustusajani. Kuid, holidaysja special days See on ajas muutuv teada üritused.

. product id is ajas muutumatu (staatiline) kategooriline tunnusjoon. Muud funktsioonid, mis on numbrilised ja ei sõltu ajast, näiteks yearly_revenue võib liigitada kui ajas muutumatu reaal.

Enne meie projekti juurde liikumist näitame esmalt miniõpetust, kuidas oma andmeid teisendada laiendatud aegrea formaat.

Märge: Kõik selles artiklis olevad pildid ja joonised on autori loodud.

Selle õpetuse jaoks kasutame TemporalFusionTransformer mudel pärit PyTorchi prognoosimine raamatukogu ja PyTorch Lightning:

pip install tõrvik pytorch-lightning pytorch_forecasting

Kogu protsess hõlmab kolme asja:

  1. Looge pandade andmeraamistik meie aegridade andmetega.
  2. Mähkige meie andmeraam a-sse TimeSeriesDataset Näiteks
  3. Mööda meie TimeSeriesDataset näiteks selleks TemporalFusionTransformer.

. TimeSeriesDataset on väga kasulik, kuna aitab meil määrata, kas funktsioonid on ajas muutuvad või staatilised. Lisaks on see ainus formaat TemporalFusionTransformer aktsepteerib.

Loome minimaalse treeningu andmestiku, et näidata, kuidas TimeSeriesDataset töötab:

Peaksime oma andmed vormindama järgmisel viisil: Iga värviline kast tähistab erinevat aegrida, mida esindab selle aeg group väärtus.

Joonis 1: Andmeraam sample_data pandas

Meie andmeraami kõige olulisem veerg on time_idx — see määrab proovide järjestuse. Kui puuduvaid vaatlusi pole, peaksid väärtused suurenema +1 iga aegrea kohta.

Järgmisena mähime oma andmeraami a-sse TimeSeriesDataset näide:

Kõik argumendid on iseenesestmõistetavad: The max_encoder_length määrab tagasivaate perioodi ja max_prediction_length määrab, kui palju andmepunkte ennustatakse. Meie puhul vaatame 3 ajasammu minevikku tagasi, et väljastada 2 ennustust.

. TimeSeriesDataset eksemplar toimib nüüd andmelaadijana. Prindime partii ja kontrollime, kuidas meie andmed TFT-le edastatakse:

See partii sisaldab treeningväärtusi [0,1] esimesest aegsarjast (group 0) ja testimisväärtused[2,3,4]. Kui käivitate selle koodi uuesti, saate erinevad väärtused, kuna andmed segatakse vaikimisi.

Meie projekt kasutab ElectricityLoad Diagrams20112014 [5] UCI andmestik. Selle näite märkmiku saab alla laadida aadressilt siin:

See andmestik sisaldab 370 kliendi/tarbija energiakasutust (kW-des) 15-minutilise sagedusega. Andmed hõlmavad 4 aastat (2011–2014).

Mõned tarbijad loodi pärast 2011. aastat, seega on nende energiatarbimine esialgu null.

Andmete eeltöötlust teostame vastavalt [3]:

  • Koondage meie sihtmuutuja power_usage tundide kaupa.
  • Leidke varaseim kuupäev iga aegrea jaoks, mille võimsus on nullist erinev.
  • Looge uusi funktsioone: month, day, hour ja day_of_week.
  • Valige kõik päevad vahemikus 2014–01–01 ja 2014–09–07.

Alustame:

Andmete allalaadimine

wget https://archive.ics.uci.edu/ml/machine-learning-databases/00321/LD2011_2014.txt.zip
!paki lahti
LD2011_2014.txt.zip

Andmete eeltöötlemine

Iga veerg tähistab tarbijat. Kõige esialgsem power_usage väärtused on 0.

Järgmisena koondame tunniandmed. Mudeli suuruse ja keerukuse tõttu koolitame oma mudelit ainult 5 tarbija jaoks (nullist erineva väärtusega tarbijatele).

Nüüd valmistame oma andmestiku ette TimeSeriesDataset vormingus. Pange tähele, et iga veerg esindab erinevat aegrida. Seetõttu "sulatame" oma andmeraami, nii et kõik aegread virnastati vertikaalselt, mitte horisontaalselt. Selle käigus loome uusi funktsioone.

Nimetatakse lõplik eeltöödeldud andmeraamistik time_df. Trükime selle sisu:

. time_df on nüüd jaoks sobivas vormingus TimeSeriesDataset. Nagu olete praeguseks arvanud, kuna granulaarsus on tunnipõhine, hours_from_start muutuja on ajaindeks.

Uurimisandmete analüüs

5 tarbija/aegrea valik ei ole juhuslik. The power usage igal aegreal on erinevad omadused, näiteks keskmine väärtus:

time_df[['consumer_id','power_usage']].groupby('consumer_id').mean()

Joonistame iga aegrea esimese kuu:

Joonis 2: Kõigi 5 aegrea/tarbija esimene kuu.

Märkimisväärset trendi pole, kuid igal aegreal on veidi erinev hooajalisus ja amplituud. Saame täiendavalt katsetada ja kontrollida statsionaarsust, signaali lagunemist ja nii edasi, kuid meie puhul keskendume ainult mudeli loomise aspektile.

Samuti pange tähele, et teised aegridade prognoosimismeetodid nagu ARIMA peavad vastama mõnele nõudele (näiteks aegrida peab esmalt muutuma statsionaarseks.) TFT-ga saame jätta oma andmed nii, nagu nad on.

Looge DataLoaders

Selles etapis möödume oma time_df Euroopa TimeSeriesDataSet vorming, mis on tohutult kasulik, kuna:

  • See säästab meid oma Dataloaderi kirjutamisest.
  • Saame määrata, kuidas TFT andmekogumi funktsioone käsitleb.
  • Saame oma andmestiku hõlpsalt normaliseerida. Meie puhul on normaliseerimine kohustuslik, kuna kõik ajajadad erinevad suuruse poolest. Seega kasutame Rühma normaliseerija iga aegrida eraldi normaliseerimiseks.

Meie mudel kasutab järgmise 7 tunni energiatarbimise prognoosimiseks ühenädalast tagasivaateakent (24*24).

Samuti pange tähele, et hours_from_start on nii ajaindeks kui ka ajas muutuv funktsioon. The power_usage on meie sihtmuutuja. Demonstratsiooni huvides on meie valideerimiskomplekt viimane päev:

Põhimudel

Järgmine samm, mille peaaegu kõik unustavad: baasmudel. Eriti aegridade prognoosimisel üllatate, kui sageli naiivne ennustaja edestab isegi uhkemat mudelit!

Naiivse baasjoonena ennustame eelmise päeva energiatarbimise kõverat:

Ajutise termotuumasünteesi transformaatori mudeli väljaõpe

Saame oma TFT-mudelit treenida, kasutades tuttavat Treener liides PyTorch Lightningilt.

Pange tähele järgmisi asju:

  • Me kasutame Varajane peatumine tagasihelistamine, et jälgida valideerimiskaotust.
  • Me kasutame Tensorplaat meie koolitus- ja valideerimismõõdikute logimiseks.
  • Meie mudel kasutab Kvantiilne kaotus — eritüüpi kadu, mis aitab meil väljastada ennustusintervalle. Funktsiooni Quantile Loss kohta lisateabe saamiseks kontrollige seda artiklit.
  • Meie kasutame 4 tähelepanu juhid, nagu originaalpaber.

Oleme nüüd valmis oma mudelit ehitama ja koolitama:

See on kõik! Pärast 6 perioodi käivitub EarlyStopping ja peatab treeningu.

Laadige ja salvestage parim mudel

Ärge unustage oma mudelit salvestada. Kuigi me saame seda marineerida, on kõige turvalisem võimalus salvestada parim epohh otse:

!zip -r model.zip lightning_logs/lightning_logs/version_1/*

Mudeli uuesti laadimiseks pakkige lahti mudel.zip ja käivitage järgmine – lihtsalt pidage meeles parimat mudeliteed:

Kontrollige Tensorboardi

Vaadake Tensorboardi treening- ja valideerimiskõveraid lähemalt:

Mudeli hindamine

Hankige ennustusi valideerimiskomplekti kohta ja arvutage keskmine P50 (kvantiilne mediaan) kaotus:

Kahe viimase aegrea kaotus on veidi suurem, kuna ka nende suhteline suurusjärk on kõrge.

Joonistage ennustused valideerimisandmetele

Kui me läbime mode=raw kohta ennustama () meetodit, saame rohkem teavet, sealhulgas prognoose kõigi seitsme kvantili kohta. Meil on juurdepääs ka tähelepanu väärtustele (sellest lähemalt hiljem).

Vaadake lähemalt raw_predictions muutuja:

Me kasutame plot_prediction() meie maatükkide loomiseks. Muidugi võite teha oma kohandatud süžee - plot_prediction() on täiendavaks eeliseks tähelepanu väärtuste lisamine.

Märge: Meie mudel ennustab järgmist 24 andmepunkti ühe korraga. See ei ole jooksev prognoosimise stsenaarium, kus mudel ennustab a ühekordne väärtus iga kord ja 'õmbleb' kõik ennustused kokku.

Iga tarbija kohta koostame ühe krundi (kokku 5).

Joonis 3: Ennustused MT_002 valideerimisandmete kohta
Joonis 4: Ennustused MT_004 valideerimisandmete kohta
Joonis 5: Ennustused MT_005 valideerimisandmete kohta
Joonis 6: Ennustused MT_006 valideerimisandmete kohta
Joonis 7: Ennustused MT_008 valideerimisandmete kohta

Tulemused on üsna muljetavaldavad.

Meie Temporal Fusion Transformer mudel suutis tabada kõigi 5 aegrea käitumist nii hooajalisuse kui ka ulatuse osas!

Samuti pange tähele, et:

  • Me ei teinud hüperparameetrite häälestamist.
  • Me ei rakendanud ühtegi väljamõeldud funktsioonitehnoloogia tehnikat.

Järgmises jaotises näitame, kuidas täiustada oma mudelit hüperparameetrite optimeerimisega.

Joonistage ennustused konkreetse ajarea jaoks

Varem koostasime ennustused valideerimisandmetele, kasutades idx argument, mis kordub kõigis meie andmestiku aegridades. Saame olla täpsemad ja väljastada ennustusi konkreetse aegrea kohta:

Joonis 7: Päev ette ennustus MT_004 treeningkomplektil

In Joonis 7, plaanime päeva ette MT_004 tarbija aja indeks=26512.

Pidage meeles, meie aja indekseerimise veerg hours_from_start algab 26304-st ja ennustusi saame saada alates 26388-st (kuna seadsime varem min_encoder_length=max_encoder_length // 2 mis võrdub 26304 + 168//2=26388

Valimivälised prognoosid

Loome valimiväliseid prognoose väljaspool valideerimisandmete lõplikku andmepunkti – mis on 2014–09–07 23:00:00

Peame vaid looma uue andmeraami, mis sisaldab:

  • Arv N=max_encoder_length möödunud kuupäevad, mis toimivad tagasivaateaknana – kodeerija andmed TFT terminoloogias.
  • Suuruse tulevased kuupäevad max_prediction_length mille jaoks tahame oma ennustused välja arvutada – dekoodri andmed.

Saame luua ennustusi kõigi viie aegrea või ainult ühe jaoks. Joonis 7 näitab tarbijale valimisväliseid ennustusi MT_002:

Joonis 7: Päev ette ennustus MT_002 jaoks

Täpne prognoosimine on üks asi, aga ka seletatavus loeb tänapäeval palju.

Ja see on veelgi hullem Deep Learning mudelite puhul, mida peetakse mustadeks kastideks. Sellised meetodid nagu LUBI ja SHAP võib pakkuda seletatavust (mingil määral), kuid ei tööta hästi aegridade puhul. Lisaks on need välised post-hoc meetodid ega ole seotud konkreetse mudeliga.

Temporal Fusion Transformer pakub kolme tüüpi tõlgendatavust:

  • Hooajalisuse järgi: TFT kasutab oma romaani Tõlgendatav mitmepealine tähelepanu mehhanism möödunud aja sammude tähtsuse arvutamiseks.
  • Funktsioonide järgi: TFT võimendab oma Muutuja valiku võrk moodul iga funktsiooni tähtsuse arvutamiseks.
  • Äärmuslike sündmuste vastupidavus: Saame uurida, kuidas aegread käituvad haruldaste sündmuste ajal

Kui soovite põhjalikumalt teada saada selle sisemisest toimimisest Tõlgendatav mitmepealine tähelepanu ja Muutuva valiku võrk, vaata mu eelmist artiklit.

Hooajalisuse järgi tõlgendatavus

TFT uurib tähelepanu kaalu, et mõista ajalisi mustreid möödunud ajaetappide lõikes.

Hallid jooned kõigil eelmistel graafikutel tähistavad tähelepanupunkte. Vaadake neid süžeesid uuesti – kas märkate midagi? Joonis 8 näitab leide Joonis 7 ja arvestab ka tähelepanu hinded:

Joonis 8: Eelneva päeva ennustus MT_001 jaoks koos hooajalisusega

Tähelepanu skoorid näitavad, kui mõjukad on need ajaetapid, mil mudel oma prognoosi väljastab. Väikesed tipud peegeldavad igapäevast hooajalisust, samas kui lõpupoole kõrgem tipp viitab tõenäoliselt iganädalasele hooajalisusele.

Kui me arvutame kõigi ajasammude ja aegridade (mitte ainult nende 5, mida me selles õpetuses kasutasime) tähelepanukõverad, saame sümmeetrilise kujundi Joonis 9 TFT-paberilt:

Joonis 9: Elektrienergia ajalised mustrid (allikas)

Küsimus: Mis kasu see on? Kas me ei saa lihtsalt hinnata hooajalisuse mustreid selliste meetoditega nagu ACF-graafikud, ajasignaali lagunemine jne?

Vastus: Tõsi. Kuid TFT tähelepanu kaalu uurimisel on täiendavaid eeliseid:

  1. Võime kinnitada, et meie mudel kajastab meie järjestuste ilmset hooajalist dünaamikat.
  2. Meie mudel võib paljastada ka peidetud mustreid, kuna praeguste sisestusakende tähelepanukaalud võtavad arvesse kõiki varasemaid sisestusi.
  3. Tähelepanu kaalude graafik ei ole sama mis autokorrelatsiooni graafik: autokorrelatsiooni graafik viitab konkreetsele jadale, samas kui tähelepanu kaalud keskenduvad siin iga ajasammu mõjule, vaadeldes kõiki ühismuutujaid ja aegridu.

Funktsioonipõhine tõlgendatavus

. Muutuja valiku võrk TFT komponenti saab hõlpsasti hinnata funktsiooni tähtsus:

Joonis 10: Omab valideerimisandmete tähtsust

In Joonis 10, märkame järgmist:

  • . hour ja day_of_week neil on tugevad hinded nii varasemate vaatluste kui ka tulevaste ühismuutujatena. Algses dokumendis sisalduv võrdlusalus jagab sama järeldust.
  • . power_usage on ilmselt kõige mõjuvam täheldatud ühismuutuja.
  • . consumer_id ei ole siin väga oluline, sest kasutame ainult 5 tarbijat. TFT-dokumendis, kus autorid kasutavad kõiki 370 tarbijat, on see muutuja olulisem.

Märge: Kui teie rühmitamise staatiline muutuja pole oluline, on väga tõenäoline, et teie andmekogumit saab sama hästi modelleerida ka ühe jaotusmudeliga (nt ARIMA).

Äärmuslike sündmuste tuvastamine

Aegread on kurikuulsad selle poolest, et nad on haruldaste sündmuste ajal vastuvõtlikud äkilistele muutustele nende omadustes (nimetatakse ka kui šokkide).

Veelgi hullem, need sündmused on väga tabamatud. Kujutage ette, kui teie sihtmuutuja muutub lühikeseks ajaks muutlikuks, kuna ühismuutuja muudab vaikselt käitumist:

Kas see on juhuslik müra või varjatud püsiv muster, mis meie mudelist välja ei pääse?

TFT abil saame analüüsida iga üksiku funktsiooni tugevust nende väärtuste vahemikus. Kahjuks ei näita praegune andmestik volatiilsust ega haruldasi sündmusi – neid leidub tõenäolisemalt finants-, müügiandmetes ja nii edasi. Siiski näitame, kuidas neid arvutada:

Mõnede funktsioonide kõik väärtused ei ole valideerimisandmestikus olemas, seega näitame ainult hour ja consumer_id:

Joonis 11: Prognoosid vs tegelikud (normaliseeritud keskmised) tunnis
Joonis 12: Ennustused vs tegelikud (normaliseeritud keskmised) tarbija_id-s

Mõlemal joonisel on tulemused julgustavad. sisse Joonis 12, märkame seda tarbijat MT_004 teiste tarbijatega võrreldes veidi kehvem. Võiksime seda kontrollida, kui normaliseerime iga tarbija P50 kaotuse nende keskmise võimsuskasutusega, mille oleme eelnevalt arvutanud.

Hallid ribad tähistavad iga muutuja jaotust. Üks asi, mida ma alati teen, on leida, millised väärtused on madala sagedusega. Seejärel kontrollin, kuidas mudel nendes piirkondades toimib. Seega saate hõlpsalt tuvastada, kas teie mudel kajastab haruldaste sündmuste käitumist.

Üldiselt saate seda TFT-funktsiooni kasutada oma mudeli nõrkuste tuvastamiseks ja edasise uurimise jätkamiseks.

Saame sujuvalt kasutada Temporal Fusion Transformer koos Opt hüperparameetrite häälestamiseks:

Probleem on selles, et kuna TFT on transformeripõhine mudel, vajate märkimisväärseid riistvararessursse!

Temporal Fusion Transformer on aegridade kogukonna jaoks kahtlemata verstapost.

Mudel mitte ainult ei saavuta SOTA tulemusi, vaid loob ka raamistiku prognooside tõlgendamiseks. Mudel on saadaval ka Noolemäng pythoni teek, mis põhineb PyTorch Forecasting teegil.

Lõpuks, kui soovite saada teavet selle arhitektuuri kohta Temporal Fusion Transformer üksikasjalikult kontrollige kaasartikkel originaalpaberil.

Temporal Fusion Transformer: aegridade prognoosimine süvaõppega – täielik õpetus uuesti avaldatud allikast https://towardsdatascience.com/temporal-fusion-transformer-time-series-forecasting-with-deep-learning-complete-tutorial-d32c1e51cd91? rss—-7f60cf5620c9—4 https://towardsdatascience.com/feed kaudu

<!–

->

Ajatempel:

Veel alates Blockchaini konsultandid