genericki okvir za predviˇ danje¯ potrošnje plina ... · grana racunarske znanosti koja je u...
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