genericki okvir za predviˇ danje¯ potrošnje plina ... · grana racunarske znanosti koja je u...

67
SVEU ˇ CILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RA ˇ CUNARSTVA DIPLOMSKI RAD br. 1357 Generi ˇ cki okvir za predvi ¯ danje potrošnje plina razli ˇ citim algoritmima Zlatan Siˇ canica Zagreb, srpanj 2017.

Upload: others

Post on 19-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

  • SVEUČILIŠTE U ZAGREBUFAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

    DIPLOMSKI RAD br. 1357

    Generički okvir za predvid̄anjepotrošnje plina različitim

    algoritmimaZlatan Sičanica

    Zagreb, srpanj 2017.

  • Zahvaljujem se svom mentoru, Borisu Milašinoviću, što mi je omogućio da

    radim na ovom projektu i na usmjeravanju prilikom odred̄ivanja glavnih ciljeva rada.

    Njegove smjernice i savjeti najvećim su dijelom oblikovale strukturu ovog teksta.

    Zahvaljujem se Stjepanu Sučiću što mi je osigurao mjesto gdje mogu raditi na

    projektu, upoznao me s kolegama s kojima sam surad̄ivao i u velikoj mjeri pomogao

    mi u poslovnom napretku unutar Končar KET-a.

    Zahvaljujem se Zdravku Oklopčiću i Matiji Zečeviću na tome što su mi omogućili

    pristup empirijskim podacima o potrošnjama plina na području Zagreb i Osijeka.

    Svojim savjetima vezanim uz razvoj i korištenje samih algoritama velikim dijelom su

    oblikovali konačni proizvod projekta.

    Zahvalio bih se i Ivoni Sičaji na korištenju programskog alata Nostradamus za

    razvoj referentnog rješenja problema prognoze potrošnje plina te na predaji empirijskih

    podataka o potrošnji električne energije korištenih u ovom radu.

    Zahvaljujem se Miri Antonijeviću na savjetima vezanim uz sam programski dio

    projekta i ostatku KET RT tima na pružanju najbolje moguće radne (i neradne) atmosfere.

    Konačno, zahvalio bih se i svim prijateljima, kolegama s fakulteta i obitelji za svu

    podršku bez koje ne bi bilo moguće napisati ovaj rad.

  • SADRŽAJ

    1. Uvod 11.1. Motivacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    1.2. Doprinos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2. Vezana istraživanja i zahtjevi 32.1. Vezana istraživanja . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    2.1.1. Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.1.2. Referentni modeli . . . . . . . . . . . . . . . . . . . . . . . . 14

    2.2. Zahtjevi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.2.1. Zahtjevi modela za prognoziranje potrošnje plina . . . . . . . 17

    2.2.2. Zahtjevi generičkog programskog okvira . . . . . . . . . . . 18

    3. Generički okvir za prognoziranje 203.1. Arhitektura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    3.2. Implementacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    3.2.1. Pretprocesiranje ulaza . . . . . . . . . . . . . . . . . . . . . 22

    3.2.2. Rad s algoritmima . . . . . . . . . . . . . . . . . . . . . . . 25

    3.2.3. Moduli za rad s izlazom . . . . . . . . . . . . . . . . . . . . 27

    3.3. Scenariji korištenja . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    4. Primjer korištenja programskog okvira 344.1. Instalacija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    4.2. Učitavanje i pretprocesiranje ulaza . . . . . . . . . . . . . . . . . . . 35

    4.3. Rad s algoritmima . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    4.4. Obrada izlaza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    5. Prognoza potrošnje plina 395.1. Empirijski podaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    5.2. Metodologija evaluacije modela . . . . . . . . . . . . . . . . . . . . 41

  • 5.3. Konfiguriranje programskog okvira . . . . . . . . . . . . . . . . . . . 43

    5.4. Alternativni problem - analiza potrošnje električne energije . . . . . . 44

    6. Rezultati i diskusija 466.1. Rezultati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    6.2. Diskusija . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    7. Zaključak 51

    Literatura 53

  • 1. Uvod

    Problem predvid̄anja potrošnje nekog resursa čest je u razvoju i korištenju energetskih

    sustava. Ispravno prognoziranje koliko će u odred̄eno vrijeme neki subjekt trošiti

    struje, plina ili nekog drugog resursa korisno je za planiranje i alokaciju tih resursa,

    što dalje rezultira uštedama i povećanjem efikasnosti.

    Kroz godine rada različitih distributera električne energije i plina, prikupljena je

    velika količina podataka o potrošnjama tih resursa. Ti podaci su iskoristivi za statistička

    predvid̄anja novih potrošnji. Predvid̄anje potrošnji svodi se na pronalazak matematičke

    funkcije koja najbolje aproksimira te podatke. Taj problem poznat je kao regresija.

    Grana računarske znanosti koja je u usponu u zadnjih nekoliko godina i koja se bavi

    regresijskim problemima je strojno učenje (engl. Machine learning). Problem pronalaska

    modela koji daje najbolju regresiju potrošnje plina, najvećim dijelom analiziran je kroz

    perspektivu nadziranog strojnog učenja.

    Kroz rad s algoritmima strojnog učenja, primijećeno je kako je veliki broj operacija

    koje se obavljaju generički i da se automatizirati. Drugi dio problema kojim se bavi

    ovaj rad upravo je ta automatizacija. Razvijen je programski okvir koji svojim korisnicima

    omogućuje brzo konfiguriranje algoritama strojnog učenja, pretprocesiranje podataka

    i druge generičke operacije.

    1.1. Motivacija

    U Končar inženjeringu za energetiku i transport (KET) postoji potreba za programskim

    modulom koji bi na brz i jednostavan način mogao raditi statističke prognoze potrošnji

    energetskih resursa. Ovakvi moduli i alati već postoje, ali su proizvodi stranih firmi za

    koje su potrebne komercijalne licence te postoji potreba za domaćim proizvodom.

    Glavna značajka samog razvijenog programskog proizvoda je modularnost u korištenju

    algoritama za prognoziranje. Korisnik mora moći brzo konfigurirati predikcijske algoritme

    pomoću konfiguracijskih datoteka ili sučelja. Takod̄er, mora moći jednostavno dodavati

    nove algoritme poput pluginova. Algoritmi moraju biti ugradivi u druge informacijske

    1

  • sustave koji bi ih koristili, odnosno mora postojati jednostavan način da se napravi

    predikcija koristeći što manje naredbi. Za kraj, programski okvir mora omogućiti

    korisnicima jednostavan rad s nekim generičkim operacijama poput pretprocesiranja

    podataka ili validacije modela.

    Osim potrebe za samim programskim okvirom, postoji i konkretan problem na

    koji bi se on mogao primijeniti. U Končar KET-u vodi se evidencija potrošnje plina

    na području Gradske plinare Zagreb. Postoje dva skupa podataka, dnevni i satni.

    Programski okvir bi morao moći iskoristiti te podatke kako bi pronašao optimalan

    model za prognoziranje potrošnje plina. Postoje slična istraživanja na ovu temu, čak i

    neki alati koji se koriste u Končaru. Ta rješenja mogu se poboljšati i zadnji cilj projekta

    je nadograditi ih ili ponuditi nova.

    1.2. Doprinos

    Kao što je već spomenuto, postoje alati i algoritmi strojnog učenja koji se mogu

    koristiti za prognoziranje potrošnji u energetskim sustavima. Programski okvir razvijen

    tijekom projekta, za razliku od tih alata, nudi:

    • Širi raspon algoritama koji se mogu koristiti.

    • Kvalitetnije prognoze.

    • Jednostavnu integraciju u postojeće aplikacije.

    • Manje podešavanja konfiguracija algoritama.

    • Automatski odabir najboljeg algoritma za dani skup podataka.

    • Potpuno modularan i nezavisan programski paket za pretprocesiranje podataka.

    Što se tiče samog modela za prognoziranje potrošnje plina, u radu nije predložen

    nikakav novi predikcijski algoritam. Novi doprinos rješavanja problema potrošnje je

    u činjenici da ne postoje publikacije u kojima se analiziraju podaci Gradske plinare

    Zagreb. Najsličnije istraživanje radila je Hrvatska Elektroprivreda u 2014. godini, ali

    na podacima vezanim uz drugo područje [46]. Ovaj rad je, dakle, prvi slučaj korištenja

    podataka Gradske plinare Zagreb za predvid̄anje potrošnje plina.

    2

  • 2. Vezana istraživanja i zahtjevi

    Prilikom svakog istraživanja korisno je pronaći radove koji se bave sličnom problematikom.

    U nastavku su navedeni opisi algoritama korištenih u drugim radovima. Osim opisa

    algoritama, ukratko su navedeni i sami rezultati istraživanja u kojima su korišteni.

    Nakon toga, detaljnije je definiran sam cilj projekta. Definirani su zahtjevi koje moraju

    zadovoljavati predikcijski algoritmi i razvijeni programski okvir.

    2.1. Vezana istraživanja

    U kontekstu projekta, kad se govori o predikcijskim algoritmima, najčešće se misli na

    algoritme strojnog učenja koji rješavaju problem regresije. Strojno učenje je područje

    računarske znanosti koje se bavi razvojem algoritama sa sposobnosti učenja rješavanja

    problema bez da su eksplicitno programirani za to [37]. Problem regresije odnosi

    se na pronalazak optimalne aproksimacije funkcije u slučaju kad su dostupni samo

    ulazni parametri i očekivani izlazi (slika 2.1). Postoji velik broj zabilježenih uspješnih

    primjena ovakve metodologije na problem prognoze potrošnje energije i to je glavni

    razlog zašto je ona odabrana za rješavanje problema.

    Slika 2.1: Regresija - stvarni podaci (plavo) i najbolja linearna funkcija koja ih aproksimira(crveno).[55]

    3

  • 2.1.1. Algoritmi

    Prije opisa samih algoritama, potrebno je definirati matematičku notaciju koja će se

    koristiti u ovoj sekciji:

    N - Broj uzoraka u nekom skupu podataka.

    n - Dimenzija vektora značajki.

    x - Vektor značajki ulaza. Uzorak iz stvarnog svijeta preslika se u niz brojeva koji se

    prosljed̄uje algoritmu strojnog učenja. Dimenzije n.

    y - Očekivana izlazna vrijednost danog vektora značajki.

    X - Skup ulaznih vektora značajki. Matrica dimenzijaN×n gdje jedan redak predstavljajedan uzorak iz skupa.

    y - Skup očekivanih izlaznih vrijednosti. Ima N dimenzija.

    x(i) - i-ti redak matrice X.

    yi - i-ta vrijednost vektora y.

    w - Najčešća oznaka za vektor parametara modela.

    h - Najčešća oznaka za funkciju izlaza predikcijskog modela.

    Kod algoritama nadziranog strojnog učenja, često se mogu izdvojiti tri glavne

    komponente. Prva je sam matematički model pomoću kojeg se radi predikcija. To je

    najčešće parametrizirana funkcija ulaznih varijabli [45]. Druga komponenta je funkcija

    gubitka. Ona predstavlja kriterij uspješnosti rada modela strojnog učenja. Funkcija

    gubitka prima dvije varijable - očekivanu i prognoziranu vrijednost. Povratna vrijednost

    funkcije gubitka predstavlja iznos greške modela na pojedinom uzorku [51]. Dodatno,

    definira se i funkcija greške modela na nekom skupu podataka kao suma svih gubitaka

    na uzorcima u tom skupu. Zadnja komponenta koja povezuje prve dvije je algoritam

    optimizacije. Njen cilj je pronalazak optimalnih parametara prediktivnog modela tako

    da je funkcija gubitka na podacima za učenje što manja. U nastavku, kroz analizu

    ove tri glavne komponente, opisani su modeli strojnog učenja koji su našli praktičnu

    primjenu u rješavanju problema predikcije energetskih potrošnji.

    4

  • Polinomijalna regresija linearnim modelima

    Linearni regresijski modeli temelje se na pretpostavci da se odnos ulaza i očekivanih

    izlaza može prikazati pomoću linearne funkcije (slika 2.1) [52]. Ako se pretpostavi

    kako je funkcija izlaza modela prilikom obavljanja predikcije parametrizirana vektorom

    w, to znači da je moguće prikazati ju izrazom 2.1 [45].

    h(x|w) =n∑

    i=1

    xiwi + w0 (2.1)

    Funkcija pogreške koju linearni modeli najčešće minimiziraju je srednje kvadratno

    odstupanje:

    E(h|X,y) = 12

    N∑i=1

    (h(x(i)|w)− yi)2 (2.2)

    Zadnja komponenta algoritma, optimizacijska metoda, obično je bazirana na minimizaciji

    gradijenta pogreške učenja. U izraz 2.2 uvrsti se 2.1 i sve se derivira po parametru w

    te izjednači s nulom. Rezultat je funkcija optimalnih težina modela prikazana izrazom

    2.3 [45].

    w = (XTX)−1XTy (2.3)

    Osim opisane, osnovne vrste linearne regresije, postoje i regularizirane verzije.

    One funkcioniraju na sličan način, ali uz dodatnu pretpostavku da će modeli s prevelikim

    težinama biti prenaučeni (engl. overfitted - davati izrazito dobre rezultate na skupu

    za učenje, ali loše na nepoznatim podacima) [45]. Osim greške učenja, definira se

    novi član, regularizacijska greška, koji se pribroji izrazu 2.2 [18]. Općeniti izraz za

    regulariziranu funkciju pogreške:

    Ereg(w) =1

    2

    N∑i=1

    (h(x(i)|w)− yi)2 + λ

    (n∑

    i=1

    |wi|p) 1

    p

    (2.4)

    Drugi dio izraza 2.4 odgovara Minkowskijevoj udaljenosti vektora w od ishodišta, s

    tim da je parametar w0 isključen iz izračuna. To znači da će modeli čije težine su dalje

    od ishodišta biti više kažnjeni. Postoji više podvrsta ovakve regularizacije, u ovisnosti

    o iznosu parametra p. U sklopu projekta, najviše je korištena verzija gdje je p = 1,

    odnosno L1 regularizacija [45]. Taj model se još naziva lasso i jedan je od modela

    korištenih za prognoziranje potrošnje plina.

    Za kraj, kako nije uvijek slučaj da se podaci podvrgavaju linearnoj funkciji, često

    se radi preslikavanje ulaznih podataka u polinom nekog stupnja. Primjerice, ulazni

    vektor:

    x =[a b

    ]5

  • može se preslikati u:

    φ(x) =[a2 ab a b2 b 1

    ](2.5)

    Funkcija φ(x) obavlja preslikavanje vektora x u polinom drugog stupnja. Linearni

    model onda taj preslikani vektor interpretira kao ulaznu vrijednost. Na taj se način

    linearna regresija pretvara u polinomijalnu.

    Linearni modeli su se i u prošlosti pokazali efikasnim u predvid̄anju energetskih

    potrošnji. U članku V. Bianca i O. Mance [17] pokazano je kako ovakvi modeli mogu

    predvid̄ati potrošnju električne energije s greškom izmed̄u 1% i 11%. Istraživanje

    je rad̄eno na različitim regijama u Italiji, a regresija obavljena na temelju podataka

    o BDP-u područja i povijesnoj potrošnji električne energije [17]. Slični modeli su

    korišteni i za predvid̄anje potrošnji plina u Istanbulu. Napravljena je studija u kojoj je

    ispitivano pet različitih modela i linearni model je bio na drugom mjestu po ukupnim

    rezultatima kvalitete prognoze [23]. Ovi modeli su vrlo jednostavni i intuitivni, ali i

    robusni te ih to čini čestim izborom u razvoju sustava za prognoziranje energetskih

    potrošnji.

    Umjetne neuronske mreže

    Slika 2.2: Neuronska mreža s jednim skrivenim slojem, prikazana slojevitom kompozitnomstrukturom (desno). Korištene prijenosne funkcije su ReLU i softmax [50].

    Umjetne neuronske mreže su danas sve češće korišten predikcijski i klasifikacijski

    model. U sklopu rada korištene su potpuno povezane unaprijed propagirajuće neuronske

    6

  • mreže. Takve mreže mogu se prikazati kompozitnom slojevitom strukturom kao na

    slici 2.2. Jedan sloj definira se kao linearni produkt težina i vektora značajki na ulazu te

    nelinearne aktivacijske funkcije kroz koju se šalje rezultat tog produkta. Ako se i-ti sloj

    neuronske mreže definira ured̄enom trojkom W(i) (težine), b(i) (pomak, ekvivalentno

    w0 u izrazu 2.1) i fi(x) (nelinearna aktivacijska funkcija), konačni izlaz neuronske

    mreže s L slojeva odgovara izrazu 2.6 [28].

    h(x) = fL(b(L) + W(L)fL−1(b

    (L−1) + W(L−1)fL−2(...f1(b(1) + W(1)x)...))) (2.6)

    Za funkciju gubitka neuronskih mreža najčešće se koristi srednje kvadratno odstupanje

    (2.2) u regresijskim problemima, odnosno unakrsna entropija u klasifikacijskim [38].

    Takod̄er je moguća regularizacija svakog sloja mreže pomoću izraza 2.4, s tim da se

    umjesto vektora w kažnjavaju elementi svih matrica W(i).

    Veći nedostatak neuronskih mreža je činjenica da, za razliku od klasične linearne

    regresije, derivacija pogreške po težinama nema rješenje u zatvorenoj formi kad se

    izjednači s nulom (ne postoji izraz poput 2.3 koji bi izračunao težine za koje je greška

    minimalna, već ih je potrebno izračunati optimizacijskim metodama). Zbog toga se

    mreže treniraju gradijentnim spustom. Osnovni algoritam za treniranje neuronskih

    mreža je propagiranje unatrag (engl. backpropagation). On radi tako da izračuna

    gradijent greške izlaza i onda ga propagira unatrag do ulaznog sloja (vizualizirano na

    slici 2.3) [41]. U k-toj iteraciji optimizacije težine se ažuriraju izrazom:

    w(k+1) → w(k) − ηδE(w|X,y)δw(k)

    (2.7)

    Slika 2.3: Vizualni prikaz backpropagationa primjenjenog na mrežu sa slike 2.2 [50].

    7

  • Optimizacija backpropagationom ima puno varijacija, prva je vezana uz vrijeme

    kad se obavlja ažuriranje težina. Razlikuju se stohastička i batch verzija, prva ažurira

    težine nakon svakog uzorka, a druga na temelju sume gradijenata greške na cijelom

    skupu za učenje. Takod̄er, postoji i verzija koja podijeli primjere za učenje u manje

    grupe i onda na svakoj grupi radi batch optimizaciju. Osim vremena kad se obavlja

    ažuriranje težina, moguće je mijenjati i sam izraz 2.7. Neki algoritmi iterativno, u

    svakoj epohi treninga izmjenjuju parametar η. U projektu je najčešće korišten Adam

    optimizator, koji ažurira težine na temelju trenutnog gradijenta, momenta (suma prethodnih

    gradijenata pomnožena s vrijednosti manjom od 1) i apsolutnog iznosa prethodnih

    gradijenata [32].

    Kao i linearni modeli, neuronske mreže nisu previše nov algoritam. Prve mreže s

    backpropagation algoritmom predložene su još 1974. godine [53]. U med̄uvremenu

    je obavljeno puno istraživanja u kojima su neuronske mreže korištene za predvid̄anje

    potrošnji energije. U istraživanju u Sloveniji pokazano je kako neuronske mreže mogu

    konkurirati linearnim i evolucijskim modelima u rješavanju problema predikcije potrošnje

    plina u čeličani [35]. U Hrvatskoj je HEP takod̄er radio slično istraživanje u 2014.

    godini. Predvid̄ana je potrošnja plina u kućanstvima i neuronske mreže su dale jedan

    od boljih rezultata, gdje je greška predikcije bila oko 5% [46]. U ranije spomenutom

    istraživanju u Turskoj je, osim linearnih modela, analizirana i neuronska mreža koja je

    dala slične rezultate kao i linearni model [23].

    Glavni razlog za popularnost neuronskih mreža je činjenica da su one univerzalni

    aproksimatori. Sa samo jednim skrivenim slojem s proizvoljnim brojem neurona mogu

    aproksimirati bilo kakvu Borelovu mjerljivu funkciju s različitim brojem dimenzija

    [29]. Ta svojstva čine ih vrlo korisnim alatom za regresiju i glavni su razlog zašto su

    uključene u ovakva istraživanja.

    Regresija potpornim vektorima (Support Vector Regression - SVR)

    Prethodna dva modela svoje predikcije su temeljila na pretpostavci da se podaci podvrgavaju

    distribuciji koja se može aproksimirati nekom funkcijom. Nakon odred̄ivanja parametriziranog

    oblika te funkcije, kreću u postupak traženja parametara čiji rezultati daju optimalno

    kvadratno odstupanje od očekivane vrijednosti. Regresor potpornim vektorima, iako na

    kraju rezultira modelom koji se može svesti na parametarsku funkciju, do tog modela

    dolazi temeljem drugačijih pretpostavki. Kod predvid̄anja SVR-om, glavna vodilja

    je pretpostavka kako je optimalna krivulja ona koja je, kad se svi uzorci smjeste u

    njen prostor, najmanje udaljena od svih njih. Alternativno, to znači da je optimalna

    8

  • hiperravnina ona koja ima minimalnu marginu izmed̄u sebe i najudaljenijeg uzorka iz

    skupa za učenje (slika 2.4) [14].

    Slika 2.4: Osnovni koncept SVR-a. Zelene krivulje su margine i svi uzorci se moraju nalazitiizmed̄u njih. Potporni vektori su uzorci označeni križićem i pomoću njih se izračunavaju

    decizijska ravnina i lokacije margina. Kod regresije se preferiraju modeli čije margine su što

    manje med̄usobno udaljene [2].

    SVR se može smatrati neparametarskim algoritmom strojnog učenja [45]. Razlog

    za to je način na koji dolazi do optimalne hiperravnine - pronalaskom potpornih vektora.

    Potporni vektori su uzorci iz skupa za učenje za koje vrijedi da ako margina hiperravnine

    provuče kroz njih, ona je optimalna. SVR se dakle trenira tako da zapamti one uzorke

    kroz koje mora provući marginu [14]. Iz tih uzoraka se mogu izvesti parametri hiperravnine

    izmed̄u margina i to je razlog zašto SVR možemo smatrati i parametarskim modelom.

    Konkretno, uz N uzoraka za učenje, vrijedi sljedeća jednakost iz [14]:

    h(x) = wTx + w0 =N∑i=1

    αix(i)x + w0 (2.8)

    Vrijednost αi je−1 ili 1 ako je x(i) potporni vektor, u suprotnom je 0. Iz ove jednakostividi se kako umnožak wTx direktno ovisi o odnosu potpornih vektora i ulaznog vektora

    značajki.

    Glavna prednost SVR-a u odnosu na druge, čiste parametarske modele je mogućnost

    primjene "jezgrenog trika" za nelinearnu regresiju [43]. Za postizanje nelinearnosti

    može se koristiti preslikavanje poput onog u izrazu 2.5. Takav pristup bio bi primjenjiv

    na prvi dio jednakosti izraza 2.8. Ipak, kao što je već rečeno, drugi dio te jednakosti

    funkcionira tako da uspored̄uje odnos potpornih vektora s vektorom na ulazu. U tom

    kontekstu, efikasnije je uvesti pojam jezgrene funkcije, funkcije za koju vrijedi da se

    njen izlaz može svesti na skalarni produkt dva vektora (izraz 2.9) [43].

    κ(x,x′) = φ(x)Tφ(x′) (2.9)

    9

  • Kombinacijom izraza 2.9 i 2.8 dobije se konačni model SVR-a s jezgrama(iz [43]):

    h(x) = wTφ(x) + w0 =N∑i=1

    αiκ(x(i),x) + w0 (2.10)

    Dodatna prednost jezgrenih funkcija u odnosu na preslikavanje 2.5 je činjenica da

    jezgra može biti implementirana bilo kako, dok god zadovoljava izraz 2.9. To znači

    da se, osim polinomijalnog preslikavanja, mogu koristiti funkcije poput Gaussove ili

    Laplaceove jezgre. Ta mogućnost SVR-u daje puno veću fleksibilnost od običnih

    linearnih modela [43].

    Postoji puno primjera korištenja SVR-a za potrebe prognoziranja potrošnji u energetskim

    sustavima. U prethodno spomenutom HEP-ovom istraživanju jedan od modela korištenih

    za prognoziranje potrošnje plina bio je SVR. Rezultati su bili 0,2% lošiji od neuronskih

    mreža, ali i dalje primjenjivi [46]. Osim toga, pokazano je kako je SVR primjenjiv

    i na prognoziranje potrošnji plina i na manjoj skali, u stambenim zgradama [31].

    Modeli s potpornim vektorima danas su sve korišteniji u području strojnog učenja

    jer na elegantan i intuitivan način rješavaju probleme poput regresije, klasifikacije i

    grupiranja (clustering).

    Polinomijalna regresija metaheurističkim optimizacijama

    Kod polinomijalne regresije linearnim modelima koeficijenti polinoma optimirani su

    metodama baziranim na gradijentu (gradijentnim spustom ili običnim pronalaskom

    ekstrema pomoću derivacije). Osim tih metoda, optimizacija koeficijenata može biti

    obavljena alternativnim, metaheurističkim metodama [21]. Metaheuristike nude strategije

    traženja i pronalaska novih rješenja unutar nekog prostora koje nisu nužno bazirane na

    gradijentu [16]. U kontekstu projekta, korištene su dvije metaheuristike inspirirane

    prirodom - genetski algoritmi i simulirano hlad̄enje. Obje su korištene tako da su

    tražile koeficijente polinoma iz izraza 2.1 koji daju što manje kvadratno odstupanje na

    skupu za učenje.

    Genetski algoritmi inspirirani su Darwinovom teorijom o opstanku najjačih. Rade

    tako da kreiraju populaciju rješenja (jedinki) i onda iz tih rješenja razvijaju nova tako

    da obavljaju operacije selekcije, križanja i mutacije nad postojećim [44]. Selekcijom

    se iz trenutne populacije odabire koje jedinke će se koristiti za reprodukciju. Nema

    strogo odred̄ene metode kojom se to radi, ali mora ovisiti o funkciji koja se optimira,

    odnosno bolje jedinke imaju veću vjerojatnost da će sudjelovati u reprodukciji [44].

    Križanje se obavlja tako da se odaberu dvije jedinke i njihovi parametri se na neki

    način kombiniraju (slika 2.5). Križanjem se postiže lokalnost pretraživanja, odnosno

    10

  • Slika 2.5: Neke od operacija križanja nad poljem realnih brojeva [24].

    provjeravaju se rješenja izmed̄u onih koja su dosad obrad̄ena [44]. Zadnja operacija

    koja se obavlja je mutacija. Svaka jedinka koja nastane kao produkt križanja ima

    malu vjerojatnost da će neki njen parametar biti nasumično izmijenjen. Mutacijama se

    ostvaruje stohastičnost pretraživanja [44]. Eksperimentalno, genetski algoritmi dali su

    dobre rezultate u velikom broju različitih problema poput traženja ekstrema nepoznate

    funkcije, problema naprtnjače te čak i optimizacije neuronskih mreža.[44, 13]

    Simulirano hlad̄enje inspirirano je fizikom ponašanja čestica u vrućem metalu koji

    se postepeno hladi. Čestice u metalu se kreću nasumično i kaotično kad je temperatura

    visoka, a što se više hladi, to se sve više "smiruju" i raspored̄uju u uredne kristalne

    rešetke. Taj koncept je preslikan u pseudokod 1 [20, 33]. Algoritam radi tako da

    krene od nasumičnog rješenja i gleda njegovo susjedstvo. Odabere jednog nasumičnog

    susjeda i provjerava je li bolji ili ne. Ako je, prihvati ga kao trenutno rješenje. Ako

    nije, nasumično, s vjerojatnosti p = e−∆fT odred̄uje hoće li prihvatiti pogoršavajuće

    rješenje ili ne. Ta vjerojatnost ovisi o parametru T , kako se on iterativno u algoritmu

    smanjuje, pretraživanje postepeno prelazi iz stohastičkog u lokalno [20, 33]. Glavne

    varijacije u algoritmu su u odabiru početne temperature, metode odabira nasumičnog

    susjeda i načinu smanjenja temperature.

    Ove metode, iako su stohastičke, eksperimentalno pokazuju dobre rezultate. Primjerice,

    11

  • Algoritam 1 Simulirano hlad̄enje - pseudokod1: procedure SIMULATED_ANNEALING2: scurrent ← random_solution()3: T ← T0 # početna temperatura4: while T > Tmin do5: sneighbor ← random_neighbor(scurrent)6: ∆f ← |fitness(scurrent)− fitness(sneighbor)|7: if fitness(sneighbor) > fitness(scurrent) then8: scurrent ← sneighbor9: else if p < e

    −∆fT then # p je nasumični broj izmed̄u 0 i 1 (uniformna r.)

    10: scurrent ← sneighbor11: T ← reduce_temperature(T )

    return scurrent

    u prethodno spomenutom istraživanju u slovenskoj čeličani, model optimiran genetskim

    algoritmom dao je bolje rezultate od linearne regresije i neuronskih mreža [35]. Postoje

    i hibridni modeli gdje se genetski algoritam uspješno koristio za inicijalizaciju težina

    neuronske mreže [13]. Za simulirano hlad̄enje nisu pronad̄ena konkretna istraživanja,

    ali, zbog jednostavne implementacije i sličnosti s genetskim algoritmom, nije ga bilo

    previše teško integrirati u projekt.

    Stabla odluke

    Stabla odluke su neparametarski modeli koji se temelje na pretpostavci da se informacije

    iz skupa za učenje mogu strukturirati u hijerarhiju stabla odluke (slika 2.6). Prilikom

    odred̄ivanja izlaza modela, odabire se put kroz stablo na temelju ulaznog vektora

    do rješenja koje je zapisano na dnu [19]. Jedan očiti nedostatak ovog pristupa je

    činjenica da će stablo imati konačan broj listova, odnosno konačan broj izlaza, dok

    očekivanih rezultata regresije može potencijalno biti beskonačno (pogotovo ako je

    izlazna varijabla realna). Ipak, u primjeni algoritma ovo se ne pokazuje kao velik

    problem ako se zapamti dovoljan broj primjera.

    Stabla odluke rade tako da prilikom treninga odred̄uju po kojoj varijabli ulaznog

    vektora značajki je optimalno podijeliti skup podataka za učenje tako da su očekivane

    vrijednosti u podskupovima što manje raspršene [19]. Kriterij raspršenosti u klasifikacijskom

    problemu je entropija podataka, a u regresijskom može biti standardna devijacija ili

    srednje apsolutno odstupanje. Skup za učenje iterativno se dijeli sve dok svi uzorci s

    istim očekivanim vrijednostima nemaju svoj zaseban list (ili dok se ne dod̄e do nekog

    12

  • Slika 2.6: Stablo odluke, pokazuje X predstavlja varijablu koja se prosljed̄uje do dna stabla, avalue je vrijednost koja se pridružuje.

    drugog kriterija za zaustavljanje) [19]. Kad se model koristi za regresiju nepoznatih

    uzoraka, oni se evaluiraju u čvorovima odluke dok ne dod̄u do lista s nekom konkretnom

    vrijednosti koja im se onda dodijeli.

    Ova metoda je vrlo jednostavna, ali i efikasna te postoje rezultati istraživanja u

    kojima je dala zadovoljavajuće rezultate [56, 57, 12, 48]. U istraživanju sveučilišta

    Concordia stabla su iskorištena za modeliranje potražnje i prognoziranje potrošnje

    električne energije u raznim Japanskim regijama [56]. Postignuta je preciznost od

    92% na nevid̄enim primjerima [56]. Rezultati su bili lošiji od neuronskih mreža i

    regresijskih modela, ali je postupak treniranja stabla bio brži i sam rezultantni model je

    bio interpretativniji (pregledom stabla se puno lakše vidi zašto je dobiven neki rezultat,

    što nije slučaj kod parametarskih modela) [56]. Ista institucija godinu dana kasnije

    je upotrijebila sličan model za regresiju potrošnje električne energije na stambenim

    zgradama i dobiveni su slični rezultati [57].

    Stabla odluke brzo se optimiraju i rezultiraju jasno interpretativnim modelima.

    Osim toga, često se koriste i za data mining jer imaju sposobnost pamćenja relevantnih

    informacija nekog skupa podataka [40]. U sklopu projekta, osim korištenja stabala za

    direktnu regresiju, isprobana je i verzija gdje su korištena za pretprocesiranje podataka

    koje onda prosljed̄uju nekom drugom modelu, tipično SVR-u ili neuronskoj mreži.

    13

  • 2.1.2. Referentni modeli

    U industriji već postoje neki programski proizvodi i modeli koji se koriste za obavljanje

    zadatka prognoziranja potrošnji resursa. Ti modeli su korišteni za ocjenu kvalitete

    programskog okvira razvijenog u sklopu projekta tako što su uspored̄eni s implementacijama

    algoritama iz prethodne sekcije. Zbog toga su nazvani referentnim modelima. Kako bi

    usporedba algoritama iz programskog okvira i referentnih modela bila što kvalitetnija,

    potrebno je razumjeti kako ti modeli rade i koje funkcionalnosti nude.

    ABB Nostradamus

    ABB grupa (ASEA Brown Boveri) med̄unarodna je korporacija koja se bavi industrijskom

    digitalizacijom i razvojem industrijske opreme. Svojim djelovanjem pokrivaju industriju,

    transport i infrastrukturni razvoj [3]. Jedan od njihovih proizvoda je Nostradamus, alat

    za kratkoročno prognoziranje potrošnje plina i električne energije [36]. Neke dodatne

    funkcionalnosti Nostradamusa, osim samog prognoziranja, su:

    • Integracija u postojeće sustave.

    • Definiranje pravila za korekciju potencijalno netočnih podataka.

    • Prikazi očekivane i prognozirane vrijednosti na grafovima s različitim mogućnostimafiltriranja po vremenskim intervalima.

    Sam model koji obavlja predikcije baziran je na potpuno povezanim unaprijednim

    neuronskim mrežama. Moguće je koristiti samo jedan skriveni sloj s proizvoljnim

    brojem neurona [36]. Postoji puno različitih mogućnosti dostavljanja podataka alatu

    i izvoženju rezultata iz njega. Najjednostavniji je preko datoteka u CSV formatu.

    Nostradamus podatke interpretira kao vremenske sljedove, odnosno svaki uzorak bi

    trebao imati podatak o vremenu kad je mjeren [36]. Taj podatak može biti koristan

    u regresiji jer potrošnje plina i električne energije mogu ovisiti o danu u tjednu ili

    tome je li odred̄eni dan praznik ili ne. Osim toga, vremenski podatak se koristi i za

    unakrsnu validaciju. Prije treninga, odredi se na kojem vremenskom intervalu će se

    mreža trenirati, a koji će se koristiti za validaciju rezultata treninga. Kvaliteta modela

    procjenjuje se MAPE procjeniteljem.

    Važno je napomenuti kako ovaj alat ne predstavlja najnaprednije stanje tehnike u

    području regresije. Ipak, relativno često je korišten u području energetike i zbog toga

    ga je korisno usporediti s programskim okvirom razvijenim u sklopu projekta.

    14

  • Slika 2.7: Primjer rezultata treniranja Nostradamusa na nekom skupu podataka [10].

    Linearna regresija s Kalmanovim filtrom

    Drugi referentni model nije programski proizvod, već matematički model koji je zadnje

    četiri godine korišten u Končar KET-u za prognoziranje potrošnje plina [58]. Radi se

    o modelu linearne regresije kombiniranim s Kalmanovim filtrom.

    Model uzima podatak o tipu dana (nedjelja, blagdan, dani u tjednu...), godišnjem

    dobu i temperaturi. Ti podaci se prosljed̄uju linearnom modelu koji daje odred̄enu

    procjenu [58]. Kako je linearni model podložan šumu, izlaz se korigira Kalmanovim

    filtrom. Kalmanov filter je matematički model koji vrijednost na ulazu pojača ili

    smanji, kako bi što bolje neutralizirao očekivani šum tog uzorka [42]. Tako početni

    linearni model postaje robusniji i radi kvalitetnije predikcije [58]. Detaljnija skica

    ovog sustava prikazana je na slici 2.8.

    Ovaj model pokazuje dobre rezultate u praktičnoj primjeni i vlasnici skupa podataka

    o potrošnji plina su ga uspješno koristili zadnje četiri godine [59]. Ipak, jedan znatan

    nedostatak je njegov manjak fleksibilnosti prema promjeni domene podataka. Ako

    bi korisnik htio prijeći s prognoze dnevne potrošnje plina na satnu ili na potrošnju

    električne energije, morao bi ili mijenjati konfiguracijske datoteke u kojima su parametri

    modela ili pokretati Matlab skripte koje ih izračunavaju. Oba rješenja nisu previše

    pristupačna korisnicima. Zbog tih nedostataka, i mogućih unaprjed̄enja same kvalitete

    predikcije, korisno je algoritme korištene u programskom okviru usporediti s ovim

    referentnim modelom.

    15

  • Slik

    a2.

    8:M

    odel

    linea

    rne

    regr

    esije

    sK

    alm

    anov

    imfil

    trom

    [59]

    .

    16

  • 2.2. Zahtjevi

    Cilj projektnog zadatka može se podijeliti na dvije glavne komponente. Prva je pronalazak

    algoritama strojnog učenja koji daju kvalitetne predikcije potrošnje plina, a drugi je

    razvoj generičkog programskog okvira u koji bi ti algoritmi bili uključeni. Taj okvir

    bio bi izveden kao programski proizvod koji bi se mogao koristiti kao programska

    biblioteka ili backend aplikacije s grafičkim sučeljem.

    2.2.1. Zahtjevi modela za prognoziranje potrošnje plina

    Kvalitete prognoza koje algoritam daje odred̄uju se usporedbom s prognozama referentnih

    modela. Postoje razne funkcije dobrote prognoze, u statistici i strojnom učenju često

    se koriste srednje kvadratno odstupanje (engl. mean square error - MSE) i srednji

    apsolutni postotak odstupanja (engl. mean absolute percentage error - MAPE) te su oni

    korišteni i u sklopu ovog projekta. Postoje i drugi procjenitelji, ali oni su ili analogni

    ovima ili se rjed̄e koriste. MSE je opisana u izrazu 2.2, a MAPE se računa izrazom

    2.11 [47].

    EMAPE(h|X,y) =100

    N

    N∑i=1

    ∣∣∣∣yi − h(x(i)|w)yi∣∣∣∣ (2.11)

    Podaci su vezani uz potrošnju plina na području djelovanja Gradske plinare Zagreb.

    Obuhvaćaju Zagreb, Ivanju Reku i Zaprešić. Postoje dva skupa podataka, jedan s

    dnevnim potrošnjama plina i jedan sa satnim. Podaci su zapisani u CSV datoteku gdje

    jedan red predstavlja jedan dan, odnosno sat. U jednom retku zapisani su podaci o

    vremenskoj oznaci uzorka, prosječnoj temperaturi unutar vremenskog intervala koji taj

    uzorak predstavlja te pripadajućoj potrošnji plina u kubicima. U rješenju je prihvatljivo

    dodavanje novih ulaznih varijabli, dok god one pomažu unaprjed̄enju kvalitete prognoze.

    Na slici 2.9 prikazana je dnevna potrošnja plina u ovisnosti o datumu mjerenja.

    To je ciljna funkcija koja se aproksimira. Već na temelju nje mogu se izdvojiti neki

    zahtjevi vezani uz kvalitetu prognoze. Obično se regresija smatra uspješnom ako

    je postignuta preciznost od oko 5%. Kako je razlika izmed̄u uzorka s najvećom i

    najmanjom potrošnjom približno 3·106, prihvatljiva MSE greška na podacima o dnevnimpotrošnjama je (po izračunu iz [1]):

    1

    2(3 · 106 · 0, 05)2 = 1, 125 · 1010

    Slično, raspon podataka o satnim potrošnjama je 1, 625·105, što dovodi do MSE greške:

    1

    2(1, 625 · 105 · 0, 05)2 = 3, 3 · 107

    17

  • Slika 2.9: Ciljna funkcija - dnevna potrošnja plina u razdoblju od 23.2.2013 do 1.4.2017.

    Te vrijednosti ne predstavljaju objektivnu procjenu, ali su dobre kao smjernice kod

    procjene uspješnosti regresijskog modela. Što se tiče prihvatljivih MAPE grešaka, one

    su već ionako izražene u postocima, tako da se ne moraju detaljnije raspisivati.

    2.2.2. Zahtjevi generičkog programskog okvira

    Programski okvir trebao bi se moći koristiti kao konkretan programski proizvod, slično

    Nostradamusu. Prije razvijanja programskog proizvoda potrebno je definirati zahtjeve

    koje on mora zadovoljiti. Osnovna podjela zahtjeva je na funkcionalne i nefunkcionalne

    [25].

    Funkcionalni zahtjevi definiraju funkcionalnosti sustava ili njegovih komponenti[49]. Pojedine funkcionalnosti mogu se grubo razložiti na skup ulaza, ponašanje

    sustava te očekivanih izlaza. U kontekstu projekta, sustav je razvijeni programski

    okvir. Očekuje se da će korisnici biti razvojni inženjeri koji znaju koristiti uključene

    modele i integrirati ih u svoj sustav. Programski okvir u tom kontekstu mora korisnicima

    ponuditi standardizirano sučelje preko kojega će oni moći obaviti te operacije. To

    uključuje:

    • Povezivanje programskog okvira s podatkovnim sustavom (baza podataka ilidatoteke) iz kojeg može dobiti pristup empirijskim podacima.

    • Omogućavanje definiranja proizvoljnih metoda pristupa podatcima.

    • Konfiguriranje metoda pretprocesiranja ulaznih podataka.

    • Odabir algoritma strojnog učenja i njegovih hiperparametara.

    - Pomoću običnog importa u kod.

    - Definicija pomoću konfiguracijske datoteke.

    18

  • - Kreiranje vlastitih algoritama i njihova integracija u okvir u obliku pluginova.

    • Treniranje modela.

    • Serijalizacija i deserijalizacija modela iz datoteke.

    • Automatizacija procesa odabira najboljeg modela za odred̄eni skup podataka.

    • Izvoženje rezultata treninga i novih prognoza u standardizirane formate.

    Druga vrsta zahtjeva je nefunkcionalna. Ona se uglavnom odnosi na karakteristikesame implementacije i odgovara na pitanje kako softver treba biti implementiran [25].

    Mogu se izdvojiti sljedeći nefunkcionalni zahtjevi:

    • Programski okvir mora biti modularan i omogućiti lagano dodavanje novihkomponenti (metoda pristupa i pretprocesiranja podataka te novih modela).

    • Modeli moraju davati razumno dobre predikcije za dani skup podataka.

    • Operacije odabira optimalnog modela i treniranja moraju trajati razumno dugo,ovisno o kompleksnosti zadatka.

    Opisani zahtjevi detaljnije su obrad̄eni u idućem poglavlju gdje se više govori o

    samoj implementaciji generičkog okvira i njegovim obrascima korištenja.

    19

  • 3. Generički okvir za prognoziranje

    Kroz uporabu raznih algoritama strojnog učenja primijećeno je kako je veliki broj

    operacija donekle generički i može se automatizirati. Prve automatizacije primijenjene

    su na postupak učitavanja i pretprocesiranja empirijskih podataka. Nakon toga, automatizirane

    su i metode instanciranja algoritama strojnog učenja. U nastavku je opis osnovne

    arhitekture generičkog okvira za prognoziranje. Nakon toga su opisi glavnih obrazaca

    korištenja.

    3.1. Arhitektura

    Iz zahtjeva koje okvir mora ispunjavati mogu se izdvojiti tri glavne nezavisne logičke

    cjeline. Prva je predstavljena skupom alata za rad s empirijskim podacima. Njena

    odgovornost je učitavanje i pretprocesiranje ulaza. Druga logička cjelina predstavlja

    skup alata za rad s algoritmima za prognoziranje. U nju su uključene funkcionalnosti

    serijalizacije, deserijalizacije, treniranja i korištenja prognostičkih algoritama. Osim

    toga, tu spadaju i alati za verifikaciju algoritama, višestruku unakrsnu validaciju i

    selekciju najboljeg modela. Zadnja logička cjelina može se predstaviti raznim pomoćnim

    alatima, prije svega za rad s izlazima modela. U nju spadaju razni moduli za vizualizaciju

    izlaza, ispis statusa treninga i slično.

    Slika 3.1: Osnovna arhitektura programskog okvira.

    Opisana arhitektura prikazana je dijagramom na slici 3.1. Svaka komponenta može

    biti detaljnije razložena na nižu razinu apstrakcije. Logička cjelina zadužena za dohvat

    i pretprocesiranje empirijskih podataka može se, primjerice, prikazati stablastom strukturom

    20

  • (slika 3.2). Listovi stabla predstavljaju cjeline za učitavanje konkretnih podataka (čitanje

    datoteke ili dohvat iz baze podataka). Grananja predstavljaju spajanja skupova podataka.

    Cjeline koje nisu ni listovi ni grananja predstavljaju konkretne operacije pretprocesiranja

    podataka (one-hot kodiranja kategoričkih varijabli, obradu vremenskih oznaka, filtriranja

    redaka i slično).

    Slika 3.2: Prikaz toka podataka kroz jedinicu za pretprocesiranje.

    Cjelina zadužena za rad s modelima zamišljena je kao servis za upravljanje pluginovima.

    Jedan plugin predstavlja jednu ili više implementacija algoritama strojnog učenja, gdje

    svaka implementira predefinirano sučelje. Operacije unutar sučelja su specifične za

    implementaciju modela, poput treninga, predikcije, serijalizacije ili deserijalizacije.

    Osim toga, na razini servisa postoje operacije karakteristične za višu razinu apstrakcije.

    To bi obuhvaćalo unakrsnu validaciju, instanciranje preko XML konfiguracijskih datoteka,

    ocjenu modela i slično.

    Zadnja komponenta, pomoćni moduli, nema neku konkretnu arhitekturu i više

    se koristi ovisno o specifičnim potrebama unutar okvira. Glavna dva modula koji

    pripadaju ovoj cjelini služe za vizualizaciju regresije i izvoženje rezultata te zbog toga

    21

  • se cjelina naziva općenito "Rad s izlaznim podacima", kao na slici 3.1.

    3.2. Implementacija

    Okvir je implementiran u programskom jeziku Python i namijenjen je da se prije

    svega koristi kao programska biblioteka. Trenutna podržana verzija je Python 3.5.

    Implementacija je analogna arhitekturi opisanoj u prethodnoj sekciji, gdje je jedna

    logička cjelina izvedena kao jedan Python paket. U idućih nekoliko podsekcija opisano

    je kako su implementirane glavne logičke cjeline arhitekture iz prethodne sekcije.

    3.2.1. Pretprocesiranje ulaza

    Pretprocesiranje je implementirano u paketu input_handling. U tom paketu razlikuju

    se četiri glavna modula koji su opisani u ovoj podsekciji.

    Bazni razredi

    Prvi modul je input_handler. U njemu su definirane bazne klase za učitavanje i

    obradu podataka. Svrha ovog modula je implementacija logike prikazane na slici 3.2.

    Postoji jedno glavno sučelje i četiri pomoćna razreda koji se koriste u ovom modulu.

    Sučeljem InputInterface definiran je generički čitač podataka. Ono ima

    jednu metodu, get_data. Osim tog sučelja, postoji i nekoliko dodatnih pomoćnih

    klasa koji ga implementiraju. Razred FileInputInterface zadužen je za dohvat

    podataka iz datoteke. Podaci se vraćaju u obliku pandas-ovog DataFrame objekta.

    Razred InputMapper obavlja pretprocesiranje podataka. Implementiran je pomoću

    oblikovnog obrasca proxy (slika 3.3). To znači da ima referencu na originalni

    InputInterface, a prilikom poziva get_data pozove prvo metodu instance

    koju okružuje, na rezultat tog poziva primjeni neku operaciju (referencu na funkciju

    dobije u konstruktoru) i rezultat proslijedi dalje [9]. Razredom Appender ostvareno

    je konkateniranje dva različita izvora podataka (grananje na slici 3.2). Ovaj razred

    je zapravo posebna vrsta InputMapper-a, koja ima referencu na više originalnih

    InputHandler objekata čije izlaze jednostavno spoji. I, konačno, razred

    CustomHandler omogućuje dohvat podataka pomoću korisnički definiranih klasa.

    Kao ulaz primi lokaciju modula i ime klase u kojoj je implementacija te pozove njenu

    get_data metodu.

    22

  • Slika 3.3: UML klasni dijagram koji ilustrira proxy obrazac. Objekt Proxy izmjenjujeoperaciju DoAction na originalnom objektu RealSubject [54].

    Mapiranja

    U modulu data_mappings definirane su operacije mapiranja podataka. Ove operacije

    InputMapper koristi za pretprocesiranje. U implementaciji programskog okvira te

    operacije izvedene su pomoću alata iz programske biblioteke Pandas. Pandas omogućuje

    napredni rad s tabličnim podacima CSV i XLS datoteka ili rezultata SQL upita i zbog

    toga je prikladan za korištenje i u kontekstu ovog projekta. Zbog toga, očekuje se

    da su ulazni podaci u InputMapper objekte tipa pandas.DataFrame. Trenutne

    podržane operacije su:

    Kodiranje datuma - pretvaranje vremenske oznake u broj koji je šifra za odred̄enuvrijednost (dan u tjednu, praznik i slično). Podržana su korisnički definirana

    kodiranja.

    Dodavanje varijable zaostatka - Uzima vrijednost iz uzorka prije i zapisuje ju u novistupac.

    Normalizacija - Skalira vrijednosti u danom stupcu na prostor od 0 do 1.

    Funkcije pripadnosti (One-hot) - Stvori novi stupac za svaku različitu vrijednost udanom stupcu. Vrijednosti u novim stupcima su 1 ako se vrijednost koju stupac

    predstavlja pojavljuje u retku, inače 0. Služi za definiranje kategoričkih varijabli

    (slika 3.4).

    Brisanje redaka - Izbriše redove koji zadovoljavaju odred̄eni uvjet.

    23

  • Podjela skupa po vrijednosti - Primi ime stupca i podijeli ga tako da vrijednosti unjemu zadovoljavaju odred̄eni uvjet.

    Izračun razlike izmed̄u dva stupca - Uzmu se dva stupca i izračuna se razlika njihovihvrijednosti. Rezultat pohrani u treći stupac.

    Permutiranje skupa podataka - Nasumično permutira podatke, može primiti randomstate kao parametar.

    Slika 3.4: Vizualni prikaz kodiranja funkcija pripadnosti [8].

    Analiza datuma

    Modul date_analysis služi za detaljnije analiziranje datuma i kodiranje vremenskih

    oznaka. Razred BasicDateAnalysis radi najosnovnije kodiranje u kojem gleda

    koji dan u tjednu je odred̄eni datum i dodjeljuje mu vrijednost. Kao parametar konstruktora

    može primiti rječnik u kojem je opisano u koje vrijednosti treba pretvoriti koji dan.

    Osim toga, moguće je naslijediti taj razred i nadjačati metodu date_type. Ta metoda

    na ulaz prima vremensku oznaku a na izlaz vraća kodiranu vrijednost. Tako se mogu

    korisnički definirati nova kodiranja.

    24

  • Konfiguriranje ulaza preko XML-a

    Stablasta struktura sa slike 3.2 može se direktno preslikati u XML:

    1 < I z l a z >

    2

    3 < S p a j a n j e >

    4

    5 < S p a j a n j e >

    6 < P r i s t u p d a t o t e c i / >

    7 < P r i s t u p b a z i p o d a t a k a / >

    8 < / S p a j a n j e >

    9 < / Obrada p o d a t a k a >

    10

    11 < P r i s t u p Webu / >

    12 < / Obrada p o d a t a k a >

    13 < / S p a j a n j e >

    14 < / Obrada p o d a t a k a >

    15 < / I z l a z >

    Ovakav način definiranja ulaza intuitivniji je i modularniji od instanciranja niza

    ulančanih objekata za mapiranje. Logika za parsiranje XML-a u stablo za pretprocesiranje

    nalazi se u modulu xml_loader. Razred XMLInput potklasa je InputInterface-a

    iz prvog modula. On kao parametar konstruktora primi put do konfiguracijske XML

    datoteke, parsira ju i generira odgovarajuće stablo. Pozivom get_data vrati se izlaz

    korijenskog elementa stabla. Detaljnije upute za korištenje XML konfiguriranja dane

    su u poglavlju "Primjer korištenja".

    3.2.2. Rad s algoritmima

    Rad s algoritmima izveden je u paketu prognosis_management. U tom paketu

    nalaze se ugrad̄eni moduli u kojima su bazne klase za definiranje modela, funkcije

    za validaciju i algoritmi koji su korišteni tijekom rješavanja problema prognoze plina.

    Osim toga, slično kao kod rada s ulaznim podacima, omogućeno je i konfiguriranje

    modela pomoću XML-a.

    Bazni razredi

    U modulu prognosis_tools nalaze se bazne klase za rad s algoritmima strojnog

    učenja. Slično kao u formalnoj definiciji, jedan algoritam sastoji se od tri glavne

    komponente - parametriziranog modela za prognoziranje (razred PredictionAlgorithm),

    funkcije gubitka (funkcija s dva ulaza i jednim izlazom koji bi trebao predstavljati

    grešku) te optimizacijskog algoritma (razred Trainer). Ove tri komponente objedinjene

    25

  • su u razredu MLModel. Kod dodavanja novih pluginova predlaže se nasljed̄ivanje tog

    razreda.

    Osim razreda, definirane su i standardne funkcije gubitka, MSE i MAPE. Te funkcije

    se mogu proslijediti MLModel-u kao parametar loss. Implementirani su i dekoratori

    za normalizaciju ulaznih podataka (Normalize) i preslikavanje ulaza na polinom

    n-tog stupnja (PolyFeatures).

    Konačno, u ovom modulu su i osnovne funkcije za verifikaciju modela. Funkcijom

    cross_validation_split radi se podjela skupa podataka na skup za učenje i

    verificiranje. Funkcijom validate_models obavlja se višestruka unakrsna validacija

    liste modela.

    Algoritmi

    Algoritmi opisani u drugom poglavlju dio su prognosis_management paketa.

    Oni nisu implementirani ispočetka već su korištene programske biblioteke. Za implementacije

    SVR-a, linearnih modela i stabala odluke korištena je biblioteka scikit-learn

    [39]. Postojeći modeli iz te programske biblioteke omotani su klasama iz modula

    sklearn-models kako bi implementirali metode razreda MLModel. Svaki od

    modela može u konstruktoru primati hiperparametre analogne onima u sklearn-u.

    Za neuronske mreže korištena je biblioteka tensorflow [11]. U modulu

    tensorflow_models implementirana je unaprijedna potpuno povezana neuronska

    mreža, CompositeNetwork. Za instanciranje mreže konstruktoru je potrebno predati

    listu slojeva i broj epoha treninga. Osim toga, moguće je specificirati i stopu učenja,

    regularizacijski faktor, funkciju gubitka te metodu optimizacije.

    Konačno, za polinomijalnu regresiju metaheurističkim optimizacijama korišten je

    modul metaheuristic_optimization. Postoje dva modela, jedan optimira

    polinom genetskim algoritmom a drugi simuliranim hlad̄enjem. Za genetski algoritam

    korištena je biblioteka DEAP, a simulirano hlad̄enje implementirano je bez vanjskih

    programskih biblioteka. Osim toga, u paketu prognosis_management nalaze se

    i drugi algoritmi za metaheurističku optimizaciju, poput pohlepnog algoritma, i tabu

    pretraživanja, ali oni nisu formalizirani za korištenje u sklopu razreda MLModel, tako

    da se ne preporučuje njihovo korištenje.

    Upravljanje pluginovima

    Zadnja bitna komponenta vezana uz rad s algoritmima je services modul. U ovom

    modulu omogućeno je konfiguriranje algoritama pomoću XML datoteka. Pozivom

    26

  • funkcije models_from_xml dobije se lista instanciranih modela na temelju parametara

    u XML datoteci na danoj lokaciji. Moguće je instancirati nove modele, ali i deserijalizirati

    stare pohranjene. Bitno je napomenuti da se pomoću XML-a mogu učitati samo modeli

    koji imaju implementiranu klasnu funkciju xml_factory i čiji moduli su importani

    prije poziva funkcije models_from_xml. Uz sam programski okvir priložena je

    i datoteka model_template.py u kojoj je prikazana šablonska implementacija

    algoritma za prognoziranje.

    Osim konfiguriranja algoritama pomoću XML-a, ovaj modul nudi i pojednostavljene

    funkcionalnosti validacije i odabira najboljeg modela. Funkcija rate_models radi

    višestruku unakrsnu validaciju liste modela i vrati rječnik u kojem su ti modeli ocijenjeni,

    a find_best radi istu stvar, ali umjesto rječnika samo vrati model koji je najbolje

    ocijenjen. Ove funkcionalnosti su u principu iste kao u prognosis_tools, ali

    primaju manje argumenata i imaju jednostavnije sučelje, što ih čini lakše razumljivim.

    3.2.3. Moduli za rad s izlazom

    Postoje dva modula koja su zadužena za rad s izlaznim podacima, iako je sustav

    zapravo funkcionalan i bez njih. Glavne funkcionalnosti koje ovi moduli nude su

    izvoženje podataka, ispis trenutnog stanja treninga i vizualni prikazi.

    U modulu output_handling definiran je razred ActivityObserver. On

    obavlja izvještavanje korisnika o trenutnom statusu treninga pomoću oblikovnog obrasca

    observer [7]. U sebi ima tri metode: begin, update_progress i finish.

    Razred MLModel poziva begin prije početka treninga i finish na kraju. Ako

    korisnik koji implementira algoritam to želi, pozivanjem funkcije update_progress

    može ažurirati status treniranja (primjerice, ispisati broj iteracije treninga neuronske

    mreže). Nadjačavanjem ovih funkcija mogu se stvarati korisnički ActivityObserver-i.

    Ovaj modul takod̄er sadrži i funkciju save_regression_result, kojom se u

    datoteku u CSV formatu upisuju rezultati regresije i točne vrijednosti.

    Modul visual služi za vizualizaciju podataka. Kako problem potrošnje plina

    nije previše zahtjevan kad je u pitanju grafički prikaz podataka, nije razvijeno puno

    funkcionalnosti za ovaj modul. Postoji mogućnost iscrtavanja krivulje na kojoj su

    očekivane i prognozirane vrijednosti te iscrtavanja toplinske mape, za funkcije s dvije

    varijable. Osim toga, ovaj modul sadrži i posebnu implementaciju ActivityObserver-a,

    čija update_progress metoda se može koristiti kod treniranja neuronskih mreža.

    Prilikom svakog njenog poziva napravi se procjena modela na verifikacijskom skupu i

    skupu za učenje te se izračuna greška i pohrani u listu. Pozivom funkcije finish na

    27

  • zaslon se iscrta iznos greške na verifikacijskom skupu i skupu za učenje u ovisnosti o

    broju iteracija treninga. Ova informacija može biti korisna kad se bira koliko iteracija

    treninga je potrebno za treniranje neuronske mreže na nekom skupu podataka.

    3.3. Scenariji korištenja

    Korisnički zahtjevi služe opisu načina na koji bi korisnik mogao koristiti proizvod. Ti

    zahtjevi ipak nisu dovoljno detaljni i, ako se ne razrade detaljnije, mogu biti višeznačni,

    ili čak kontradiktorni. Zbog toga se često formalnije opisuju pomoću obrazaca korištenja

    [30]. U nastavku su funkcionalni zahtjevi iz prethodnog poglavlja prerad̄eni u glavne

    scenarije korištenja. U svim scenarijima glavni korisnik je razvojni inženjer koji integrira

    algoritme u sustav, tako da on nije eksplicitno navod̄en.

    Povezivanje programskog okvira s podatkovnim sustavom

    Opis Korisnik mora na neki način programskom okviru dostaviti empirijske podatkena kojima bi algoritmi bili trenirani. To se može raditi na klasični način -

    učitavanjem podataka u samom programskom kodu i izvlačenja empirijskih podataka

    iz njih, a moguće je i korištenjem konfiguracijske XML datoteke.

    Preduvjet Korisnik ima pristup podacima zapisanim u datoteci (CSV, XLS ili XLSX)ili bazi podataka.

    Glavni scenarij

    1. Korisnik u konfiguracijskoj datoteci upiše XML tag naziva file_reader.

    2. Jedan od atributa je put do datoteke, naziva path, u koji se zapiše put do

    datoteke s empirijskim podacima. Drugi je naziva separator i predstavlja

    separator korišten u CSV datoteci. Ako datoteka nije u CSV formatu,

    ignorira se, ali mora biti uključen.

    3. U kodu gdje se pristupa empirijskim podacima, iz modula xml_loader

    instancira se objekt XMLInput, kojem se preda put do konfiguracijske

    datoteke kao parametar konstruktora.

    4. Nad instancom XMLInput razreda pozove se metoda get_data kojom

    objekt parsira i pretprocesira podatke na temelju konfiguracijske datoteke.

    28

  • 5. Poziv metode kao rezultat vraća DataFrame objekt iz programskog okvira

    pandas u kojemu su učitani podaci.

    Altrernativni scenarijiAko korisnik želi podatke učitati iz baze podataka, to je takod̄er izvedivo pomoću

    konfiguracijske datoteke.

    2a. Umjesto file_reader taga koristi se database_reader.

    2b. Atributi taga su podaci za spajanje na bazu podataka.

    Ako korisnik želi podatke učitati na neki način koji nije uključen u originalni

    sustav, to je takod̄er izvedivo pomoću konfiguracijske datoteke.

    2a. Umjesto file_reader taga koristi se custom_handler

    2b. Atribut module je put do .py datoteke u kojoj je specijalizirana klasa za

    dohvat podataka.

    2c. Atribut class je naziv specijalizirane klase za dohvat podataka. Ta klasa

    treba biti potklasa InputHandler razreda iz modula input_handler.

    Moguće je da dod̄e do greške u učitavanju podataka.

    6a. Dolazi do greške u učitavanju podataka

    6b. Programski okvir na stderr izlaz ispisuje odgovarajući opis greške.

    Pretprocesiranje podataka konfiguracijskom datotekom

    Opis Osim samog učitavanja podataka pomoću konfiguracijske datoteke, moguće jedefinirati i operacije koje će se obaviti nad njima prilikom učitavanja.

    Preduvjet Aktor je u konfiguracijskoj datoteci definirao pristup podacima pomoćujednog od tagova iz prethodnog korisničkog obrasca.

    Glavni scenarij

    1. Aktor otvara konfiguracijsku datoteku.

    2. Oko taga u kojem se opisuje način pristupa podacima postavi tag naziva

    mapper

    3. U tagu se definira atribut operation čija vrijednost je naziv konkretne

    operacije mapiranja (konkretni nazivi su opisani u kasnijim poglavljima).

    29

  • 4. U tagu se definira atribut arguments čija vrijednost predstavlja ulazne

    parametre operacije. Parametri trebaju biti odvojeni zarezima.

    5. Konfiguracijska datoteka se pohrani i koristi jednako kao i u prethodnom

    korisničkom obrascu (4. korak), jedina razlika je da će se prilikom poziva

    metode get_data obavlja operacija definirana u trećem koraku.

    Altrernativni scenarijiKorisnik može jedan mapper tag okružiti drugim

    2a. Korisnik je oko jednog mapper taga stavio drugi

    2b. Ponašanje programa ostaje isto, obave se obje operacije mapiranja. Prvo se

    obavljaju operacije dublje u hijerarhijskoj strukturi konfiguracije.

    Moguće je više izvora podataka (tagovi iz prethodnog obrasca) obuhvatiti jednim

    mapper tagom.

    2a. Korisnik je u konfiguracijskoj datoteci u jednom mapper-u definirao više

    tagova kojima se pristupa podacima.

    2b. Prilikom izvod̄enja dohvata podacima nezavisno se obavljaju sve operacije

    definirane na istoj hijerarhijskoj razini.

    2c. Nakon što se izvedu, automatski se konkateniraju se po stupcima i proslijede

    vanjskom mapper-u koji ih obuhvaća (operacija spajanja podataka).

    2d. Ostatak dohvata se izvodi kao u glavnom scenariju.

    Učitavanje novog algoritama strojnog učenja

    Opis Korisnik treba moći učitati algoritam u programski kod. Algoritmi su sve potklaserazreda MLModel iz modula prediction_tools. U ovom obrascu opisano

    je kako korisnik može svoj vlastiti algoritam uključiti u programski okvir, ali to

    ne znači da ne može koristiti neku gotovu implementaciju algoritma koja dolazi

    s programskim okvirom. Te implementacije takod̄er prate konvencije opisane u

    ovom obrascu.

    Preduvjet Aktor je instalirao programski okvir i ima pristup datoteci model_template.py.

    Glavni scenarij

    1. Aktor kopira datoteku model_template.py u svoj radni prostor.

    30

  • 2. Aktor unosi implementaciju algoritma u klasu ModelTemplate u skladu

    s uputama u njoj.

    3. Aktor izmjeni ime klase ModelTemplate tako da odgovara imenu algoritma

    koji se unosi.

    4. U kodu gdje se model integrira u sustav, korisnik importa modul gdje je

    razred s implementacijom algoritma, instancira ga i koristi u sustavu.

    Altrernativni scenarijiOsim direktnog instanciranja iz koda, moguće je definirati model pomoću konfiguracijske

    datoteke. Važno je napomenuti da, iako se instanciranje obavlja preko konfiguracijske

    datoteke, i dalje se očekuje da će modul u kojem je implementacija algoritma biti

    importan u kodu.

    2a. Aktor u implementaciji algoritma nadjača klasnu funkciju xml_factory

    te u njoj definira metodu instanciranja modela iz etree podatkovne strukture.

    2b. Aktor u konfiguracijsku datoteku modela upiše tag s imenom klase modela

    i odgovarajućim atributima.

    2c. Aktor iz modula services poziva funkciju models_from_xml, preda

    joj put do konfiguracijske datoteke kao argument i kao rezultat primi konkretne

    instance modela opisane u XML-u.

    Alternativno, modeli mogu biti serijalizirani i pohranjeni u datoteke te deserijalizirani

    pomoću konfiguracijskih datoteka (ili direktno iz koda)

    2a. Aktor, osim implementacije modela implementira i klasnu metodu

    load_item(path), u kojoj je implementacija deserijalizacije instance

    modela iz datoteke na danom datotečnom putu.

    2b. Aktor odredi put do datoteke u kojoj je serijaliziran model.

    2c. Aktor u konfiguracijskoj datoteci upiše tag s imenom klase modela, ali,

    umjesto atributa za instanciranje modela, definira samo jedan atribut - from_file

    čija je vrijednost put do datoteke u kojoj je serijaliziran model.

    Treniranje i serijalizacija učitanog modela

    Opis Korisnik treba moći trenirati model na ulaznim podacima i imati mogućnostnjegove serijalizacije i deserijalizacije.

    31

  • Preduvjet Model je učitan po nekom od prethodnih obrazaca i pohranjen u varijablumodel. Empirijski podaci su takod̄er učitani i u ispravnom su formatu za model

    i pohranjeni su u varijable x i y.

    Glavni scenarij

    1. U programskom kodu, pozove se model.fit(x, y).

    2. Pričeka se da se model trenira. Ovisno o implementaciji modela, moguće

    je ispisivati status treninga na standardni izlaz.

    3. Ako je treniranje prošlo kako treba, model bi trebao biti spreman za korištenje.

    Moguće je pozivati njegovu metodu predict(x) za prognoziranje.

    4. Model se pohrani u datoteku pozivom model.save("put/do/datoteke.m").

    Nakon toga može se deserijalizirati kao u prethodnom obrascu.

    Alternativni scenarijiAlgoritmi uključeni u programski okvir na svoj očekuju ulazne vrijednosti u

    numpy.ndarray formatu. Može se dogoditi da korisnik ne proslijedi modelu

    podatke u tom obliku.

    2a. Podaci predani modelu su u neispravnom formatu i dolazi do greške.

    2b. Korisnik prepravi podatke i preda ih modelu u ispravnom formatu ili izmjeni

    model tako da je kompatibilan s originalnim oblikom podataka.

    Odabir optimalnog modela za odred̄eni skup podataka

    Opis Ako korisnik nije siguran koji model koristiti za neki skup podataka, možeinstancirati više njih i pozvati funkciju automatskog ocjenjivanja kvalitete modela.

    Preduvjet Modeli i podaci su učitani kao u prethodnim obrascima. Modeli su pohranjeniu listu models, a podaci u varijablama x i y

    Glavni scenarij

    1. Aktor uveze modul services.

    2. Iz modula se pozove services.find_best(models, x, y)

    3. Sustav izvodi višestruku unakrsnu validaciju svakog modela i ocjenjuje ga.

    Po mogućnosti ispisuje status izvod̄enja na standardni izlaz.

    4. Funkcija vrati model koji je postigao najbolje rezultate. Model nije treniran,

    tako da je potrebno ponovno ga istrenirati na cijelom skupu podataka.

    32

  • Alternativni scenarijiKorisnik može pokrenuti metodu koja samo ocjenjuje modele, ne izdvaja najboljeg.

    2a. Korisnik pozove services.rate_models(models, x, y)

    2b. Sustav ocjeni modele kao u glavnom scenariju, ali ne vrati najbolji model

    već rječnik u kojem su ključevi članovi list models, a vrijednosti njihove

    prosječne greške na verifikacijskom skupu.

    Višestruka unakrsna validacija može biti dugotrajan proces. Ako su modeli

    previše komplicirani ili ako je lista modela prevelika, validacijska funkcija se

    može izvoditi predugo.

    3a. Sustav izvodi validaciju jako dugo.

    3b. Korisnik odustaje slanjem KeyboardInterrupt signala (Ctrl+C)

    3c. Korisnik pojednostavljuje modele ili smanjuje njihov broj.

    Rad s izlazom modela

    Opis Svaki model ima metodu predict(x) kojom daje svoju prognozu ovisnu ovektoru značajki na ulazu. Prilikom integracije, u kodu je dovoljno definirati što

    napraviti s povratnom vrijednosti te funkcije kako bi se izlaz "izveo". Ipak nakon

    treniranja modela korisno je prikazati neke statistike, poput greške na skupu za

    učenje, prikaza regresije na nevid̄enim primjerima i slično.

    Preduvjet Model učitan u varijablu model i treniran je podacima. U varijablama x iy su nevid̄eni uzorci, podaci koji nisu korišteni za vrijeme treninga.

    Glavni scenarij

    1. Aktor pomoću funkcije predict izračuna iznose prognoza nevid̄enih uzoraka.

    2. Korisnik iz modula services poziva funkciju save_results kojoj

    predaje očekivane iznose, iznose koje je prognozirao model, lokaciju datoteke

    i format u kojem će podaci biti zapisani.

    3. Korisnik iz modula visual pokreće funkciju plot_regression.

    4. Otvara se prozor u kojem je na grafu iscrtana aproksimirana krivulja uz

    očekivanu.

    5. Korisnik iz modula prognosis_tools pokreće funkciju mse ili mape,

    predaje očekivane i dobivene vrijednosti kao argument, a kao vrijednost se

    vraća MSE, odnosno MAPE greška.

    33

  • 4. Primjer korištenja programskogokvira

    U prethodnom poglavlju je bilo najviše govora o samoj arhitekturi i implementaciji

    generičkog okvira, ali nigdje nije opisano kako ga zapravo koristiti. U ovom poglavlju

    opisan je osnovni scenarij korištenja programskog okvira - njegova instalacija, pristup

    podacima zapisanim u CSV datoteku, konfiguriranje više modela i odabir najboljeg za

    dani skup podataka.

    4.1. InstalacijaProgramski okvir instalira se i koristi kao tipična Python biblioteka. Može se prikazatisljedećom strukturom direktorija:/

    buildlib

    ...docs

    html...

    numpy.whlREADME.mdrequirements.txtrequirements-win64.txtscipy.whlsetup.py

    U poddirektoriju build nalaze se izvorni kodovi u kojima je programski okvir

    implementiran. U poddirektoriju docs nalazi se dokumentacija izvornih kodova. Za

    instalaciju programskog okvira na operacijskom sustavu Linux dovoljno je pozicionirati

    se u korijenski direktorij i pozvati:

    $ p i p i n s t a l l −r r e q u i r e m e n t s . t x t$ p i p i n s t a l l .

    34

  • Ovaj poziv takod̄er radi i na operacijskom sustavu Windows, ako su u trenutno

    aktivnom Python okruženju instalirane biblioteke scipy i numpy (tipično, Anacondina

    distribucija Pythona dolazi s tim bibliotekama). Ako ih nema, prva naredba ne bi

    trebala raditi jer Pythonov upravljač paketma na operacijskom sustavu Windows ne

    sadrži scipy. Zbog toga potrebno je zamjeniti ju s:

    $ p i p i n s t a l l −r r e q u i r e m e n t s−win64 . t x t

    Tako će se za instalaciju zahtijevanih biblioteka koristiti lokalna datoteka scipy.whl.

    Takod̄er je potrebno i instalirati odgovarajuću verziju numpy-ja te zbog toga se koristi i

    numpy.whl. U datotekama projekta priložene su instance biblioteka koje su korištene

    za vrijeme razvoja programskog okvira, ali moguće je koristiti bilo koju verziju s

    neslužbenih stranica, dok god su za Python 3.5. Ako je instalacija prošla uspješno,

    unutar aktivnog Python okruženja moguće je uvoziti i koristiti module i pakete opisane

    u prethodnom poglavlju.

    4.2. Učitavanje i pretprocesiranje ulaza

    U programskoj biblioteci skcikit-learn postoji nekoliko standardnih skupova

    podataka za testiranje algoritama strojnog učenja [39]. Jedan od njih je predvid̄anje

    cijena nekretnina u Bostonu na temelju značajki naselja u kojem se nalazi [27]. Taj

    skup podataka poslužit će za demonstraciju rada programskog okvira.

    Podaci o cijenama i svojstvima naselja učitani su u datoteku u CSV formatu, boston.csv.

    Postoji 14 značajki:

    • Stopa zločina u naselju (CRIM)

    • Udio nekretnina površine veće od 25,000 kvadratnih stopa (ZN)

    • Udio nekupoprodajnih poslovnih lokacija (INDUS)

    • Oznaka nalazi li se naselje uz rijeku Charles (CHAS)

    • Koncentracija nitritnih oksida (NOX)

    • Prosječni broj soba (RM)

    • Udio zauzetih kuća izgrad̄enih prije 1940. godine (AGE)

    • Udaljenost od poslovnih centara Bostona (DIS)

    • Indeks dostupnosti obilaznici (RAD)

    • Stopa poreza (TAX)

    35

    http://www.lfd.uci.edu/~gohlke/pythonlibs/

  • • Omjer učenika i učitelja naselja (PTRATIO)

    • Udio Afroamerikanaca (B)

    • Broj stanovnika naselja (LSTAT)

    • Srednja vrijednost nekretnina u naselju (MEDV) - ciljna vrijednost

    Ove varijable su većinom realne i može se učiniti kako nema potrebe za daljnjim

    pretprocesiranjem podataka. Ipak, ako se pogledaju podaci, vidljivo je kako je druga

    značajka (ZN) može biti i kategorička. Postoji 26 različitih vrijednosti udjela. Ta

    dimenzija može se dodatno smanjiti daljnjom kategorizacijom podataka u stupcu (primjerice,

    vrijednosti od 0 do 10 su jedna kategorija, 10 do 20 druga...). U primjeru učitavanja

    podataka su razmotrene obje opcije.

    Za pretprocesiranje skupa podataka bez kategoriziranja stupca ZN koristi se XML

    konfiguracijska datoteka:

    1 < i n p u t _ c o n f i g u r a t i o n >

    2 < d a t a ou tpu t_co lumn ="−1">3

    4 < f i l e _ r e a d e r f i l e _ p a t h =" C: \ Data \ Othe r \ Bos ton \ b o s t o n . csv "

    5 s e p a r a t o r =" ; " / >

    6 < / mapper>

    7 < / d a t a >

    8 < / i n p u t _ c o n f i g u r a t i o n >

    Kako se radi o relativno jednostavnom primjeru, konfiguracija nije komplicirana.

    file_reader služi za učitavanje podataka, operacija matrix radi pretvorbu iz

    pandas.DataFrame objekta u numpy.ndarray za svaki stupac čije ime zadovoljava

    regularni izraz izmed̄u znakova $ (nisu dio regularnog izraza), a pomoću data odred̄uje

    se koji stupac matrice predstavlja ciljnu vrijednost (-1 znači zadnji stupac).

    Alternativno, ako bi korisnik htio stupac ZN modelirati kao kategoričku, a ne

    numeričku varijablu, to bi mogao napraviti sljedećom konfiguracijskom datotekom:

    1 < i n p u t _ c o n f i g u r a t i o n >

    2 < d a t a ou tpu t_co lumn ="−1">3

    5

    6 < f i l e _ r e a d e r f i l e _ p a t h =" C: \ Data \ Othe r \ Bos ton \ b o s t o n . csv "

    7 s e p a r a t o r =" ; " / >

    8 < / mapper>

    9 < / mapper>

    10 < / d a t a >

    11 < / i n p u t _ c o n f i g u r a t i o n >

    Vide se dvije razlike, prva je korištenje operacije one_hot_encode koja napravi

    kodiranje stupca ZN po funkciji pripadnosti i pohrani rezultate kodiranja ih u stupce

    36

  • zn_0, zn_1, zn_2, itd.[26]. Operacija matrix takod̄er prima drugačije argumente,

    razlog tome je činjenica da nema smisla zadržati ZN u skupu podataka nakon što je

    pretvoren u kodirane vrijednosti.

    Pod pretpostavkom da se konfiguracijska datoteka zove config.xml, učitavanje

    empirijskih podataka obavlja se pomoću isječka:

    1 from p r o g n o s i s _ f r a m e w o r k . i n p u t _ h a n d l i n g . x m l _ l o a d e r import XMLInput2

    3 x , y = XMLInput ( ’ . / c o n f i g s / c o n f i g . xml ’ ) . g e t _ d a t a ( )

    4.3. Rad s algoritmima

    U skladu s podacima učitanim u prethodnoj sekciji, može se definirati sljedeća konfiguracijska

    datoteka za modele:

    1

    2

    3

    4

    5

    6 < / Composi teNetwork >

    7

    8

    9

    10 < / model>

    Parsiranjem konfiguracijske datoteke i instanciranjem opisanih modela dobije se

    lista šest algoritama - lasso regresor (polinomijalna regresija linearnim modelom s L1

    regularizacijom), neuronska mreža, SVR, polinomijalni regresor optimiran genetskim

    algoritmom i simuliranim hlad̄enjem te stablo odluke. Takod̄er su definirani i hiperparametri

    tih algoritama, poput regularizacijskih faktora, brojeva iteracija treninga, arhitekture

    mreže i ostalo. Izvod̄enjem programskog koda u nastavku modeli se učitavaju, validiraju

    na skupu podataka iz prethodnog poglavlja te se odabere onaj koji najmanje griješi na

    podacima:

    1 from p r o g n o s i s _ f r a m e w o r k . p rognos i s_management import s k l e a r n _ m o d e l s , \2 t e n s o r f l o w _ m o d e l s , m e t a h e u r i s t i c _ o p t i m i z a t i o n

    3 from p r o g n o s i s _ f r a m e w o r k . p rognos i s_management import s e r v i c e s as s4

    5 models = s . models_from_xml ( ’ . / c o n f i g s / mode l s_bos ton . xml ’ )

    6 b e s t _ m o d e l = s . f i n d _ b e s t ( models , x , y )

    S učitanim modelima mogu se raditi sve operacije opisane u prethodnom poglavlju

    poput serijalizacije, deserijalizacije i obavljanja predikcija na nevid̄enim primjerima.

    37

  • 4.4. Obrada izlaza

    Konačno, nakon što se obavi regresija, potrebno je na neki način obraditi rezultate.

    Kako je ovaj dio dosta specifičan i ovisan o kontekstu u kojem će se predikcijski

    algoritam koristiti, nije implementirano puno različitih funkcionalnosti za to, već samo

    one koje su korisne za prognoziranje potrošnje plina. Sljedeći isječak koda će napraviti

    predikciju za neke (vid̄ene ili nevid̄ene) ulazne podatke i pohraniti rezultat u CSV

    datoteku. Nakon toga će iscrtati krivulju na kojoj su usporedno prikazane očekivane

    i dobivene vrijednosti te će ispisati MSE i MAPE grešku modela na danom skupu

    podataka.

    1 from p r o g n o s i s _ f r a m e w o r k import v i s u a l , o u t p u t _ h a n d l i n g2 from prognos i s_management . s e r v i c e s import mse , mape3

    4 p r e d i c t e d = model . p r e d i c t ( x )

    5 o u t p u t _ h a n d l i n g . s a v e _ R e g r e s s i o n _ r e s u l t ( ’ p u t / do / d a t o t e k e . csv ’ , y , p r e d i c t e d )

    6 v i s u a l . p l o t _ r e g r e s s i o n ( y , p r e d i c t e d )

    7 p r i n t ( mse ( y , p r e d i c t e d ) , mape ( p r e d i c t e d ) )

    Konkretno, nakon izvod̄enja prethodnih isječaka programskog koda, dobije se graf

    na slici 4.1. Procijenjeno je kako je optimalan model SVR s polinomijalnom jezgrom.

    Prosječno srednje kvadratno odstupanje mu je od 6,24 na nevid̄enim primjerima (očekivane

    vrijednosti u skupu podataka su izmed̄u 10 i 50). Bitno je napomenuti kako je na

    slici prikazana procjena modela na podacima na kojima je treniran. Da se prikazuje

    prognoza cijena na nevid̄enim podacima, graf bi vjerojatno izgledao malo lošije.

    Slika 4.1: Regresija cijene nekretnina u Bostonu na temelju značajki naselja u kojem se nalaze.

    38

  • 5. Prognoza potrošnje plina

    Ovo poglavlje posvećeno je drugom dijelu problema - pronalasku modela za prognoziranje

    potrošnje plina. Postoje dvije glavne komponente u pristupu tom problemu. Prva

    je detaljnija statistička analiza dostupnih podataka. U drugom poglavlju djelomično

    su opisana neka svojstva podataka, ali, kako bi se omogućila kvalitetna prognoza,

    potrebno je napraviti detaljniju analizu u kojoj bi se gledale ovisnosti ulaznih i izlaznih

    podataka te analiza trendova. Druga komponenta predstavlja opis metodologije uspored̄ivanja

    algoritama s referentnim modelima. Kako bi rezultati bili usporedivi, metode korištene

    za izračun dobrote modela moraju biti analogne onima korištenim u referentnim modelima.

    To se prije svega odnosi na informaciju o tome koji uzorci su korišteni za trening, a

    koji za verifikaciju. Konačno, kako bi se rezultati mogli reproducirati, potrebno je

    opisati i konfiguraciju samog programskog okvira korištenu za rješavanje problema.

    Osim prognoze potrošnje plina, u sklopu projekta je rješavan i jedan srodan problem -

    predvid̄anje potrošnje električne energije. Više o rješavanju tog problema rečeno je u

    posljednjem dijelu ovog poglavlja. Konačni rezultati, uz njihovu diskusiju, dani su u

    idućem poglavlju.

    5.1. Empirijski podaci

    Podaci na kojima su modeli trenirani i verificirani odnose se na potrošnju plina u sklopu

    Gradske plinare Zagreb u periodu izmed̄u 23.2.2013 i 1.3.2017. Postoje dva skupa

    podataka - jedan sa satnim i drugi s dnevnim potrošnjama. Kako su referentni modeli

    radili samo s dnevnim podacima, na njihovoj analizi je veći naglasak. Podaci (oba

    skupa) zapisani su u tablicu s tri stupca:

    • Vremenska oznaka uzorka

    • Prosječna temperatura zraka u vremenskom intervalu na koji se uzorak odnosi

    • Ukupna potrošnja plina u vremenskom intervalu na koji se uzorak odnosi

    U skupu podataka s dnevnim potrošnjama još je uključen stupac u kojem su zapisane

    39

  • vrijednosti koje je predvidio referentni model s Kalmanovim filtrom. Te vrijednosti su

    korištene za usporedbu s modelima iz okvira.

    Slika 5.1: Scatter graf ovisnosti dnevne potrošnje plina o prosječnoj dnevnoj temperaturi.

    Na slici 5.1 prikazan je scatter prikaz podataka o temperaturi i potrošnji. Vidi

    se očita negativna korelacija izmed̄u to dvoje za temperature manje od 15°C. Kad

    su temperature veće od 15°C, potrošnje su konstantne, odnosno nalaze se u užem

    području. Po ovim informacijama može se zaključiti kako bi se funkcija potrošnje

    plina mogla aproksimirati funkcijom ovisnom o temperaturi. Ta funkcija bila bi ili

    oblika prelomljenog pravca ili polinoma drugog stupnja. Ipak, kako se vidi na slici

    5.1, podaci su i dalje izrazito raspršeni i nije dovoljno aproksimirati ih samo pomoću

    temperature.

    Pretpostavi li se da se potrošnja plina unutar jednog dana ili sata razlike neće

    previše promijeniti, moguće je uvesti novu varijablu u skup podataka. U njoj je zapisan

    iznos potrošnje plina u vremenskoj jedinici prije uzorka koji se trenutno procjenjuje.

    Ta varijabla zove se varijabla zaostatka (lag) [22]. Na slici 5.2 prikazana je ovisnost

    potrošnje plina o njenoj varijabli zaostatka. Vidi se jaka linearna korelacija izmed̄u

    to dvoje, što je indikacija da je podatak o zaostatku jako koristan kod prognoziranja

    potrošnje plina. Još jedna pozitivna strana korištenja ovakve varijable je povećanje

    robusnosti modela na promjene u trendu potrošnje. Na slici 5.3 prikazane su prosječne

    godišnje potrošnje plina od 2013. do 2016. godine. Vidi se porast trenda kroz

    godine. Zbog te promjene, model naučen na podacima iz 2014. godine (bez varijable

    zaostatka) bi vjerojatno griješio na kasnijim podacima, osim ako i prosječna godišnja

    temperatura takod̄er nije padala. Korištenjem varijable zaostatka model ne računa

    40

  • Slika 5.2: Odnos dnevne potrošnje i potrošnje dan prije.

    potrošnju direktno iz ostalih podataka već ih koristi za izračun očekivanog odstupanja

    od vrijednosti zaostatka. Zbog toga može predvid̄ati neočekivano visoke ili niske

    vrijednosti koje inače ne bi mogao. Ipak, postoji negativna strana, a to je činjenica da

    model mora imati najnovije podatke kako bi radio prognoze na nepoznatim primjerima.

    Bez varijable zaostatka bilo bi moguće u algoritam uvrstiti temperaturu i vrstu dana

    i dobiti prognozu. Korištenjem varijable zaostatka model mora imati i informaciju o

    potrošnji nekoliko vremenskih jedinica prije kako bi mogao uspješno obaviti predikciju.

    Zadnji podatak za prognoziranje korišten je jer se koristi i u referentnim modelima.

    Radi se o kategoriji vremenske oznake uzorka. U nekim skupovima podataka, najčešće

    vezanim uz potrošnju električne energije, primijećeno je kako potrošnje plina budu

    veće neradnim danima nego radnim. Zbog toga je korisno uvesti varijablu u koju su

    zapisane odgovarajuće kategorije datuma kao zadnju dodatnu varijablu.

    5.2. Metodologija evaluacije modela

    Kako bi usporedba algoritama programskog okvira s referentnim modelima bila što

    objektivnija, potrebno je strogo utvrditi kako se odred̄uje kvaliteta modela. Podaci koji

    su na raspolaganju referentnim modelima za vrijeme treninga moraju biti dostupni

    modelima okvira i obrnuto.

    41

  • Slika 5.3: Prosječna godišnja potrošnja plina na području grada Zagreba u zadnje četiri godine.Vidi se da je prosječna godišnja potrošnja od 2013 do 2016 godine porasla za otprilike 10%.

    Model s Kalmanovim filtrom radi svoj trening dinamički, odnosno ažurira se sa

    svakom novom predikcijom. To znači da je svaka dostupna informacija o izlazu ovog

    modela predikcija na nevid̄enom uzorku. Kod uspored̄ivanja s modelima iz razvijenog

    programskog okvira korišteni su dnevni podaci izmed̄u 1.3.2016 i 1.3.2017. Modeli

    iz programskog okvira trenirani su, dakle, na podacima izmed̄u 23.2.2013 i 29.2.2016,

    dok je model s Kalmanovim filtrom treniran na svim podacima prije onog konkretnog

    dana za koji radi predikciju. Ovaj nesklad ne bi trebao previše negativno utjecati na

    ishod usporedbe jer se model s Kalmanovim filtrom zapravo trenira na većem broju

    uzoraka od modela iz programskog okvira, što bi ga trebalo činiti boljim.[5, 4]

    Nostradamus se verificira tako da se odredi koji interval datuma u skupu za učenje

    se koristi za trening, a koji za verifikaciju. To znači da se ista kombinacija skupova za

    evaluaciju modela s Kalmanovim filtrom može koristiti i za evaluaciju Nostradamusa.

    Predložena metoda verifikacije je funkcionalna, ali se oslanja na pretpostavku da

    skup podataka od 1.3.2016 do 1.3.2017 dobro predstavlja sve nevid̄ene podatke. Kako

    to ne mora biti slučaj, korištena je još jedna metoda evaluacije, peterostruka unakrsna

    validacija [34]. Cijeli skup podataka podijeljen je na pet manjih podskupova. Nakon

    toga jedan podskup je odabran da bude verifikacijski, a unija ostalih je skup za učenje.

    Modeli se verificiraju i njihove individualne greške se pohrane. Nakon toga, modeli

    se resetiraju, drugi podskup se odredi kao verifikacijski i postupak se ponavlja (slika

    5.4). Uprosječena verifikacijska greška predstavlja konačnu procjenu kvalitete modela.

    Kako je Nostradamus zaseban program koji u sebi nema ugrad̄enu mogućnost validacije

    42

  • na ovaj način, nije bilo moguće uključiti ga u ovu evaluaciju, ali svi ostali modeli su

    korišteni.

    Slika 5.4: Vizualizacija peterostruke unakrsne validacije. Crveni podskupovi podataka suverifikacijski, a unije zelenih su skupovi za učenje.

    5.3. Konfiguriranje programskog okvira

    Sve komponente korištene za analizu prognoze potrošnje plina konfigurabilne su pomoću

    XML-a. Pretprocesiranje ulaznih podataka obavlja se pomoću konfiguracije:

    1 2 < i n p u t _ c o n f i g u r a t i o n >

    3 < d a t a ou tpu t_co lumn ="−1">4

    6 8

    9

    10

    11 < f i l e _ r e a d e r f i l e _ p a t h =" C: \ Data \ D a i l y D a t a S e t . c sv " s e p a r a t o r =" ; " / >

    12

    13 < / mapper>< / mapper>< / mapper>< / mapper>< / mapper>

    14 < / d a t a >

    15 < / i n p u t _ c o n f i g u r a t i o n >

    Operacija encode_dates_holiday obavlja kategorizaciju stupca s vremenskim

    oznakama, razlikuje dane u tjednu, praznike i spojne dane (dan izmed̄u dva neradna).

    Praznike kodira jednako kao i nedjelje, spojne dane kao subote. Operacija

    train_test_split obavlja podjelu skupa podataka na skup za učenje i validacijski

    na temelju vrijednosti u argumentima.

    43

  • Za prognoziranje isprobane su sve vrste ranije opisanih algoritama. Od linearnih

    modela korišteni su lasso i obična linearna regresija. Lasso regresor je postavljen

    tako da mu je broj iteracija u treningu 10000 i faktor regularizacije je 1. Neuronska

    mreža ima strukturu s jednim skrivenim slojem s 30 neurona. Koristi stopu učenja od

    0,01 i nije regularizirana. Svi slojevi imaju sigmoidnu prijenosnu funkciju. SVR je

    konfiguriran tako da nije regulariziran (jako visok parametar C) i ima jako malenu

    meku marginu (nizak epsilon). To znači da neće kažnjavati modele s prevelikim

    težinama i da neće dopuštati velikom broju uzoraka da završe van margine [14]. Osim

    toga, koristi se polinomijalna jezgra trećeg stupnja. Korišteno stablo odluke ima maksimalnu

    dubinu od 5. Svi ovi hiperparametri odred̄eni su raznim odvojenim unakrsnim validacijama.

    Postoji mogućnost da nisu optimalni, ali, kako su eksperimentalno davali kvalitetne

    predikcije, vjerojatno je da nisu ni daleko od optimalnih.

    Opisani algoritmi prikazani su sljedećom konfiguracijom:

    1

    2 < L i n e a r R e g r e s s i o n W r a p p o l y _ d e g r e e =" 2 " / >

    3 < E l a s t i c N e t W r a p a l p h a =" 1 . 0 " p o l y _ d e g r e e =" 2 " m a x _ i t e r =" 10000 " l 1 _ r a t i o =" 1 " / >

    4

    5

    6

    7

    8 < / Composi teNetwork >

    9

    10 < SAPolyRegres s ion / >

    11

    12

    13 < / model>

    5.4. Alternativni problem - analiza potrošnje električne

    ener