3. domača naloga: napovedovanje prihodov avtobusov LPP

Na voljo imate podatke o vožnjah avtobusov LPP v letu 2012 od začetka januarja do konca novembra. Cilj naloge je zgraditi čim boljši model, ki bo znal iz časa odhoda z začetne postaje napovedati čas prihoda na končno postajo. Vaš model bomo preizkusili na podatkih o avtobusnih vožnjah v decembru 2012.

Predvidevamo, da boste za vsako avtobusno linijo zgradili svoj napovedni model. Značilk je trenutno zelo malo, poleg tega pa niso primerne za linearno regresijo. Eksperimentirate z različnimi tehnikami tvorbe značilk, uporabo različnih tehnik strojnega učenja in združevanjem napovedi različnih modelov (najbolje z metodo "stacking").

Za dodatna navodila, primere, podatke in oddajo napovedi obiščite stran tekmovanja. Geslo smo vam poslali na elektronski naslov, s katerim ste se prijavili na piazzo. Če ga ne najdete, pišite na marko.toplak@fri.uni-lj.si.

Predtekmovanje (obvezno). S strani predtekmovanja snemite podatke. Ti podatki opisujejo le eno avtobusno linijo. Zanjo z linearno regresijo izdelajte napovedi in jih do vključno 18 11. 2016 oddajte na lestvico. Vaš cilj je doseči rezultat pod 160.

Ocenjevanje:  50% prilagoditev značilk, da bodo koristile linearni regresiji in uporaba linearne regresije. Nadaljnjih 20% je vredna vaša implementacija internega preverjanja na učnih podatkih, 10% pravočasen predtekmovalni rezultat do 160, ostalih 20% pa bo izhajalo iz kakovosti implementiranih tehnik.

Bonusi:

  • Prvo mesto: ocena +50%.
  • Drugo, tretje in četrto mesto: ocena +30%.
  • peto, šesto, sedmo, osmo, deveto in deseto mesto: ocena domače naloge +15%.
  • Smiselno združevanje napovedi več dobrih modelov: osnovno +10% ALI pravilno uporabljena tehnika stacking: +20%.
  • Uporaba drugih virov podatkov (recimo vremenskih, zgolj prazniki ne štejejo!): +10%.

Oddaja: Na strani tekmovanja oddajte končne napovedi, na spletni učilnici pa poročilo in izvorno kodo (kot pri preteklih domačih nalogah). Poročilo mora biti napisano s predpisano predlogo. V posameznem dnevu lahko oddate največ štiri napovedi testnih podatkov.

Poročilo naj vsebuje:

  • Uvod (enostavčni opis cilja domače naloge)
  • Metode, s podpoglavji Ocenjevanje točnosti in Napovedni modeli. V prvem podpoglavju v enem odstavku opišete, kako ste interno, na učnih podatkih, ocenjevali točnost. V drugem podpoglavju opišete metode, ki ste jih za oblikovanju napovedi implementirali. Vsako metodo poimenujte (akronim), njen opis pa naj ne bo daljši od 5 vrstic. Te opise postavite v latex okolju description (\item[ime] Opis.). Predvidevamo, da boste razvili nekaj metod, katerih rezultate boste preverili na strežniku. Med njimi izberite do pet najbolj zanimivih ali najbolj točnih, in te vključite v poročilo o domači nalogi.
  • Rezultati, s tabelo z rezultati (ime metode, oddaja, ocena s preverjanjem na učnih podatkih, ocena na tekmovalnem strežniku) ter kratek, enoodstavčni komentar. V tabeli z znakom "*" označite končno oddajo.

Napotki

Linearna regresija

Uporabite lahko linearno regresijo, ki smo jo napisali izvajalci predmeta. Pogumnejši naj jo poskusijo implementirati sami. Nekaj priročne kode in preprostih primerov smo objavili na strani tekmovanja.

Matrike v Pythonu

Za delo s numeričnimi podatki skoraj obvezno uporabite knjižnjico numpy, saj bo tako vaša koda delovala veliko hitrejo.

Redke matrike

Če so vaše matrike podatkov redke (večina elementov je enakih nič), se vam za hitrejše izvajanje splača uporabiti redke matrike iz knjižnjice scipy.sparse. Seveda šele, ko zahtevne dele opravite zgolj z matričnimi operacijami. Učne podatke predstavite s tabelo tipa csr_matrix. Najhitreje jo ustvarite, če podate samo neničelne elemente. Če želimo matriko velikosti 3x4 napolniti z enicami na vseh kotih (ostalo naj bodo ničle), lahko zapišemo:

X = scipy.sparse.csr_matrix(([1,1,1,1], [ [0,0,2,2], [0,3,0,3] ]))

Kadarkoli boste nato delali s podatkovno matriko pazite, da namesto operacij knjižnjice numpy uporabite operacije iz scipy.sparse. Na primer, namesto numpy.hstack uporabite scipy.sparse.hstack. Pri matričnih operacijah pazite, da bo prvi operand vedno redka matrika. Pri množenju matrik lahko vrstni red operandov obrnete, če upoštevate (AB)T = BTAT.

Stacking

Stacking je meta-metoda, ki elegantno združi rezultate več metod. Splača se vam šele, ko imate nekaj dobrih metod že izdelanih. Kako točno izvesti "stacking", lahko preberete v tem članku.