Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Távközlési és Médiainformatikai Tanszék
Magyar Zsanett
ELŐREJELZÉS KERÉKPÁRKÖLCSÖNZÉSI ADATOK ALAPJÁN
KONZULENS
Kazi Sándor BUDAPEST, 2015
Tartalomjegyzék Összefoglaló ..................................................................................................................... 5 Abstract............................................................................................................................ 6 1 Bevezetés ....................................................................................................................... 7 2 A feladatkiírás pontosítása és részletes értelmezése ................................................. 8 3 Előzmények................................................................................................................... 9 3.1 Az adatbányászat .................................................................................................... 9 3.1.1 A CRISP-DM módszertan ............................................................................... 9 3.1.2 Idősor elemzés ............................................................................................... 11 3.2 Hasonló alkotások ................................................................................................. 12 3.2.1 Lineáris regresszió ......................................................................................... 12 3.2.2 Gradient Boosting Regression ....................................................................... 13 4 A tervezés részletes leírása ........................................................................................ 14 4.1 Business Understanding ........................................................................................ 14 4.2 Data Understanding .............................................................................................. 14 4.2.1 Utazási információk ....................................................................................... 14 4.2.2 Dokkoló állások ............................................................................................. 15 4.2.3 Időjárási információk ..................................................................................... 15 4.2.4 Az adatok beolvasása ..................................................................................... 16 4.3 Data Preparation ................................................................................................... 17 4.3.1 Adatok generálása a munkarendi változásokról ............................................ 18 4.3.2 Az utazási adatok tisztítása ............................................................................ 18 4.3.3 Az állomások adatainak tisztítása .................................................................. 20 4.3.4 Az időjárási adatok tisztítása ......................................................................... 21 4.3.5 Adathalmaz előállítása a modellezéshez........................................................ 23 4.4 Modeling ............................................................................................................... 23 4.4.1 Benchmark ..................................................................................................... 24 4.4.2 Lineáris regresszió ......................................................................................... 25 4.4.3 Gradient Boosting Regression ....................................................................... 26 4.5 Evaluation ............................................................................................................. 28 4.5.1 Lineáris regresszió ......................................................................................... 28 4.5.2 Gradient Boosting Regression ....................................................................... 30
4.5.3 Lineáris regresszió – GBR összehasonlítása ................................................. 32 5 Értékelés, továbbfejlesztési lehetőségek ................................................................... 34 6 Köszönetnyilvánítás ................................................................................................... 35 Irodalomjegyzék............................................................................................................ 36 Függelék ......................................................................................................................... 38
HALLGATÓI NYILATKOZAT Alulírott Magyar Zsanett, szigorló hallgató kijelentem, hogy ezt a szakdolgozatot meg nem engedett segítség nélkül, saját magam készítettem, csak a megadott forrásokat (szakirodalom, eszközök stb.) használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen, a forrás megadásával megjelöltem. Hozzájárulok, hogy a jelen munkám alapadatait (szerző(k), cím, angol és magyar nyelvű tartalmi kivonat, készítés éve, konzulens(ek) neve) a BME VIK nyilvánosan hozzáférhető elektronikus formában, a munka teljes szövegét pedig az egyetem belső hálózatán keresztül (vagy hitelesített felhasználók számára) közzétegye. Kijelentem, hogy a benyújtott munka és annak elektronikus verziója megegyezik. Dékáni engedéllyel titkosított diplomatervek esetén a dolgozat szövege csak 3 év eltelte után válik hozzáférhetővé. Kelt: Budapest, 2015. 12. 09.
...……………………………………………. Magyar Zsanett
Összefoglaló Napjainkban a kerékpárkölcsönző rendszerek számos adatot generálnak, melyeket felhasználva előrejelzéseket, becsléseket adhatunk, amelyek nagy értéket képviselhetnek egy ilyen hálózat üzemeltetőjének, hiszen segíti az állomások közötti biciklielosztást és –szállítást. A
szakdolgozat
célja
adatbányászati
módszereket
felhasználva
kerékpárkölcsönzési adatok felhasználásával előrejelzést adni egy adott dokkoló állomás iránti keresletre egy adott nap adott órájában. Jelen dolgozat az MTA SZTAKI „Big Data – Momentum” csapata és a BKK által négy fős csapatok számára hirdetett verseny adatait használja, melynek során MOL Bubi adatokat kellett elemezni. A dolgozat 2. fejezete a feladatkiírás pontosításáról és részletes értelmezéséről szól, információt ad arról, hogy az egyes pontok hol vannak megvalósítva a dolgozatban. Általános elméleti ismereteket szolgáltat az adatbányászatról, ismereteket ad az ilyen projektek során használt legelterjedtebb módszertanról, információval szolgál arról, hogy mi az idősor elemzés, továbbá hasonló alkotásokról, és ott alkalmazott technikákról is számot ad. Ezek után a konkrét feladat megvalósításának ismertetése következik, a dolgozat felvilágosítást ad az adatokról, és a modellező eljárásokról, azok hatékonyságáról, és rámutat néhány továbbfejlesztési, javítási lehetőségre. Az implementáció során megismert új programozási technikákról, eljárásokról tájékoztatást ad.
Abstract Nowadays bike-sharing systems generate large amount of data, what can be used for prediction, estimation, hence creating value for these systems’ operators supporting the distribution and transportation of the bicycles between the stations. The goal of the thesis is to predict the demand of a docking station at a given time with data mining techniques based on bike-sharing data. This thesis uses data from a challenge organized by the "Big Data - Momentum" research group of the Hungarian Academy of Sciences (MTA SZTAKI) and the Centre for Budapest Transport (BKK), in which the participants analyze data of the MOL Bubi public bike-sharing system’s data. The second chapter of the thesis is about the project announcement and its detailed interpretation, it gives information where the points are discussed in this document. It introduces theoretical knowledge about data mining, the most popular methodology used by these projects, and gives information about time series analysis, furthermore about similar publications, and techniques used there. Then follows the statement of the actual task’s implementation, the dissertation provides information about data, and modelling processes, their efficiency, and outlines some further development, improvement possibilities. The document concludes by providing information about the new programming techniques, procedures learned during the implementation.
6
1 Bevezetés Napjaink kerékpárkölcsönző rendszereinek célja, hogy a kerékpárkölcsönzést olyan szolgáltatásként nyújtsa a felhasználóknak, hogy az gyorsaságával és a kerékfenntartás problémáinak elkerülésével egy elérhető és érdemes utazási alternatíva legyen a célközönség számára. Ezek a rendszerek rengeteg adatot generálnak, mind az állomásokon, mind a kerékpárok, amennyiben azok is szenzorokkal vannak felszerelve. Ilyen adat lehet például az állomáson rendelkezésre álló kerékpárok száma, a menetidő, az indulás vagy az érkezés helyszíne, ideje vagy az útvonalak és kölcsönzések jellemzői. Megfelelő mennyiségű adat rendelkezésre állása esetén lehetséges a forgalmat és az események egy részét előrejelezni, ami segítséget nyújthat a rendszer üzemeltetőjének. A szakdolgozat célja kerékpárkölcsönzési adatok felhasználásával előrejelzést adni egy adott dokkoló állomás iránti keresletre egy adott nap adott órájában. Ez nagy értéket képviselhet egy ilyen hálózat üzemeltetőjének, hiszen segíti az állomások közötti biciklielosztást és –szállítást. Jelen dolgozat az MTA SZTAKI „Big Data – Momentum” csapata és a BKK által négy fős csapatok számára hirdetett verseny adatait használja, melynek során MOL Bubi adatokat kellett elemezni. A szakdolgozat általános adatbányászati ismereteket szolgáltat, és egy konkrét példán végigiterálva gyakorlati példát is mutat egy ilyen folyamat kivitelezésére. A feladat megvalósítása során új programozói technikákat is ismertet.
7
2 A feladatkiírás pontosítása és részletes értelmezése A szakdolgozat célja korábbi kölcsönzési adatokat alapul véve egy modellezési megoldás fejlesztése, mely segítségével előrejelezhető egy adott állomás iránti kereslet. A szakdolgozatnak nem célja az eredeti versenyfeladat teljesítése, mert az eredeti – négy fős csapatokra kiírt – feladat túlmutat annak keretein, ehelyett egy kapcsolódó, de részleteiben eltérő feladat kerül megvalósításra. Az
Előzmények
fejezet
általános
elméleti
ismeretekre
szolgáltat
az
adatbányászatról, és az ilyen projektek során használt legelterjedtebb módszertanról (CRISP-DM), szól az idősor elemzésről, továbbá hasonló alkotásokról, és ott alkalmazott technikákról is. Az elemzés során használt eszközök, módszerek ismertetése is itt történik. A 4.1. fejezet információt ad a feladat részletezéséről, a megoldások értékeléséhez szükséges úgynevezett benchmark megvalósításáról. A következő két fejezet ismeretet nyújt az adatokról: a hiányzó, és az invalid értékekről,
azok
módosításáról,
újak
létrehozásáról.
Az
eredeti
adathalmaz
attribútumainak részletes ismertetője a Függelékben található. A Modeling és az Evaluation fejezetek a feladat során megvalósított modellező eljárásokról, azok javításáról, és a hatékonyságokról szolgál információt a benchmark alapján. A modellek összehasonlításán túl a megismert technikákról is szól. Az 5. fejezet az elért eredményeket ismerteti, majd rámutat néhány továbbfejlesztési, javítási lehetőségre azok alapján, hogy az eddig alkalmazott technikák közül melyek voltak a sikeresebbek, és azok milyen gyengeségeket tártak fel.
8
3 Előzmények Adatbányászattal nem először foglalkozom, korábban már az Önálló laboratórium alatt megismerkedtem az alapjaival, ezek ismertetése következik ebben a fejezetben [1].
3.1 Az adatbányászat Az adatbányászat alatt a nagy mennyiségben előforduló adatokban rejlő nemtriviális összefüggések kiaknázását értik. Az adatok tárolása önmagában nem jelent tudást a felhasználó számára, az információt a nyers adatok csak hordozzák. Idővel azonban kiszolgálhatóvá vált az igény a tudás feltárására, melynek egyik legfontosabb lépése az adatbányászat. Az adatbányászat elterjedésével különböző módszertanokat dolgoztak ki, melyekkel egy adatbányászati projekt megvalósítható. A legelterjedtebb ilyen módszertan a Cross-Industry Standard Process for Data Mining (Átfogó Adatbányászati Folyamatszabvány) [2].
3.1.1 A CRISP-DM módszertan A CRISP-DM alkotói egy szabványos és alkalmazási területtől független módszertan megalkotására törekedtek. A módszertan hierarchikus folyamatmodellen alapszik, hat általános fázisa van [3]. 3.1.1.1 Üzleti célok meghatározása (Business Understanding) Gyakran
hagyják
figyelmen
kívül
ezt
a
fázist,
valójában
azonban
elengedhetetlen a sikeres adatbányászati eredményhez. Ebben a fázisban adjuk meg azokat a kérdéseket, amelyekre az adatbányászati folyamatunk végén tudni akarjuk a választ. Kezdjük nagyratörő ötletekkel: Miért panaszkodnak a vevők? Hogyan növelhetem a nyereséget? Hogyan tudom előre jelezni és kijavítani a hibákat? Ha ezeket elkezdjük megválaszolni, akkor majd lehetővé válik a fejlesztés. Fontos meghatározni már ekkor, hogy mit várunk eredményül, mi alapján fogjuk a modellünket minősíteni, és mi számít majd jó eredménynek.
9
3.1.1.2 Az adatok megértése (Data Understanding) Régen az adatokat egy központi adatbázisban tárolták, és a munkavállalók onnan tudták lekérdezni a szükséges adatokat. Manapság azonban a PC-k, laptopok, tabletek, okostelefonok hozzájárulnak ahhoz, hogy az adataink eltávolodjanak egy központi adattártól, olykor értékes adatok vannak elszórtan tárolva. Ez sokoldalú problémához vezet, ugyanis előfordulhat, hogy alkalmazottak nem tudják, hogy hol keressék az adatokat, vagy mi az, amihez hozzáférhetnek. Ezért többféle módszert dolgoztak ki az adatok központosítására (adatbázisok, adatpiacok, adattárházak), ez azonban nem elég. Rengeteg kérdés merülhet fel még az adatokkal kapcsolatban, amikkel a DU fázisban foglalkozunk. Honnan származnak az adatok? Ki gyűjtötte őket, és milyen módszerrel? Mit jelentenek a különböző oszlopok és sorok? Vannak mozaikszavak, és rövidítések, amik jelentését nem tudjuk? Rendkívül fontos, hogy ellenőrizzük az adatok pontosságát, és megbízhatóságát, felfedezzük az esetlegesen hiányzó mezőket. Ezek megvizsgálása nélkül hibás, hiányzó adatokon dolgozva akár az egész adatbányászati kutatás megbukhat. 3.1.1.3 Adatelőkészítés (Data Preparation) Az adataink számos formában és formátumban lehetnek jelen: néhány adat numerikus, mások szövegesek, és lehetnek kép formátumú adataink is, például táblázat, grafikon, vagy térkép. Azokat az adatokat, amelyek nincsenek sorokba, vagy oszlopokba rendezve, nem kell elutasítani – néha a nem hagyományos formátum hordozza a legtöbb információt. Az adatok előkészítése egy sor tevékenységet foglal magába. Ebben a fázisban történik meg az adatok leválogatása és az algoritmusoknak megfelelő formára hozása. A hiányzó
adatokat
kezelni
kell,
valamilyen
becsült
értékkel
kitölteni,
vagy
alapértelmezett értéket adni neki. Összekapcsolhatunk több adathalmazt, csak azokat a változókat megtartva, amik érdekesek számunkra, ekkor esetleg szükséges újraformázni az adatokat (például ne legyen telefonszám többféle módon tárolva ugyanazon adatbázisban). Az adatok előkészítése segíthet, hogy sikeres kimenetet produkáljunk. 3.1.1.4 Modellezés (Modeling) A modell az adatbányászatban egy számítógépes reprezentációja a valós megfigyeléseknek. A modellek az algoritmusok alkalmazásai, arra, hogy megtalálják,
10
azonosítsák, és megjelenítsék az adatok mintáit, üzeneteit. A modellezési technikáknak két alapvető fajtája van az adatbányászatban: azok, amelyek osztályoznak, és azok, amelyek jósolnak, de van némi átfedés közöttük. Például a döntési fa alapvetően egy jósló (prediktív) modell, de az eredmény kifejezi, hogy a megfigyelés milyen kategóriába fog esni, így segít az osztályozásban is. A modell kiválasztásának befolyásoló tényezői lehetnek az adatok formátuma, a konkrét cél, annak követelményei, az eredmény megjelenítési formátuma. A modell futtatása után az eredmények értelmezése a feladat, melyet az adott területről
szerzett
végezhetünk.
ismeretek,
Összevethetjük
a
korábban
más
meghatározott
modellek
kritériumok
eredményeivel,
alapján
hangolhatunk,
visszacsatolhatunk, optimalizálhatunk. 3.1.1.5 Eredmények értékelése (Evaluation) Ebben a fázisban már azt vizsgáljuk, hogy a modellünk eredménye mennyire hasznos, mennyire használható. Előfordulhat, hogy nem találunk érdekes mintákat az adatokban, ez azért lehet, mert rosszul állítottuk fel a modellünket, vagy egyszerűen nincs semmi érdekes az adatainkban. Az modell értékelése számos technikával végezhető, mind matematikai és logikai jellegű. Ezeken túl modelleket emberi szempontok alapján is értékeljük: egyéni tapasztalatszerzés vagy szakértelem a magunk területén. 3.1.1.6 Üzleti szintű alkalmazás (Deployment) Ha sikeresen azonosítottuk a kérdéseinket, előkészítettük az adatainkat, amik válaszolni tudnak a kérdéseinkre, és van egy modellünk, ami érdekes és hasznos a tesztünk szerint, akkor megérkeztünk arra a pontra, hogy használjuk az eredményeinket. Ebben a fázisban lévő tevékenységek (modell automatizálása, a modell kimenetének megmutatása a fogyasztóknak…) javítják a modellben a pontosságot, nyomon követik a teljesítményt.
3.1.2 Idősor elemzés Az idősor elemzés az adatbányászat azon ága, amely során figyelembe veszik az adatok időbeli sorrendjét, és ez a tulajdonság fontos információt is hordoz, az adatok sorrendje egymással nem felcserélhető. Megfelelő módszerekkel számos hasznos információ nyerhető ki az adatainkból, képesek lehetünk előre jelezni a jövőbeni 11
értékeket. Fontos döntés, hogy az idősort mekkora időszakokra bontjuk fel és az így nyert értéket milyen pontossággal tároljuk. Nyilván azt szeretnénk, ha az idősor minél pontosabban leírná a megfigyeltet, de túl sűrű mintavétellel (túl rövid időszakok használatával) hatalmas tárolókapacitásra van szükség. Amikor egyetlen idősort elemzünk, célunk általában az, hogy az idősor jövőbeli értékeit minél jobban meg tudjuk becsülni [4]. Az idősorok elemzésére több módszer létezik, egyik ilyen a lineáris regresszió, amikor is egy függvénnyel megpróbáljuk a lehető legpontosabban közelíteni az idősorunkat. A legegyszerűbb esetben egy lineáris regressziót egy célváltozó és egy magyarázó változó között lehet értelmezni [2].
3.2 Hasonló alkotások Az ECML-PKDD 2015 hirdetett egy versenyt „Model Reuse with Bike rental Station data” címmel, melyen egyetemünk munkatársa Barta Gergő is részt vett a Dmlab tagjaként, és kiválóan szerepelt [5]. Az eredeti verseny célja itt az volt, hogy előre jelezzék az óránkénti kerékpár rendelkezésre állást számos dokkoló állomáson egy adott nap adott órájában. Az adatbázis két és fél év kerékpár elérhetőségi adatait tartalmazta óránkénti bontásban tíz állomáshoz, Valencia városában. Ezen kívül további részadatok is rendelkezésre álltak más állomásokról az egész városban. A verseny során együttes módszereket alkalmazott, ami azt jelenti, hogy alaposztályozók egy halmazát hozzuk létre a tanulóadatokból és úgy végzünk osztályozást, hogy egy többségi szavazást tartunk az egyes alaposztályozók által adott előrejelzéseken. Ebben az esetben egy olyan módszert alkalmazott, amely már sikeres volt korábbi versenyeken, ez pedig a Gradient Boosting regressziós fa kombinálva Random Foresttel. Később ezt kiterjesztette Ordinary Least Squere regresszióval, egy olyan modellel, amely széles körben használt az idősorok előrejelzésére. A szakdolgozat során e módszerek közül az OLS-en belül, Lineáris regressziót, valamint Gradient Boosting Regression Tree-t használtam, így most ezeknek a részletezése következik.
3.2.1 Lineáris regresszió A lineáris regresszió, mint más regresszió, egy olyan eljárás, amely során a célváltozó egy lineáris kombinációja a bemeneti változóknak [6]. Ennek alakja a következőképpen írható fel: Y’ = b1 * x + b0 + E 12
Ahol Y a függő változó, amely x változótól b1 arányában függ. A b0 egy eltolás paraméter, E pedig az ún. hibatag, amelyet a regressziós függvényünk nem magyaráz meg. A függvény által meghatározott Y’ érték és a valódi Y érték közti eltérést nevezzük residuumnak. Nyilvánvaló, hogy bizonyos értelemben az egyik legjobb regressziós egyenest akkor kapjuk, ha összegezzük a residuumok négyzetét és azt az egyenest választjuk, amelynél ez az összeg minimális (a négyzetösszeg lesz ebben az esetben a hibafüggvényünk) [2].
3.2.2 Gradient Boosting Regression Az együttes módszerek célja tehát, hogy kombinálják több eljárás, adott algoritmuson alapuló eredményét azért, hogy az általánosítás hatékonyabban működjön, és robosztusabb modellt lehessen alkotni. Az együttes módszereknek két családját különböztetjük meg:
Az átlagoló módszerek esetén a fő elv az, hogy több független becslést adjunk, majd átlagoljuk az eredményeket. Általában a kombinált becslő jobb, mint egyetlen előrejelző, mert a variancia csökken. Ilyen például a Random Forest.
Ezzel ellentétben a boosting módszerek esetén számos becslőt alkalmaznak szekvenciálisan, és egy becslő próbálja csökkenteni a kombinált becslő torzítását. A motiváció az, hogy számos gyengébb modellből létrehozzanak egy erősebbet. Ilyen a Gradient Boosted Regression Trees.
A Gradient Tree Boosting egy pontos és hatékony eljárás, ami használható regresszióra és osztályozó problémák megoldására is, így sok területen alkalmazzák. A GBRT előnyei közé tartozik, hogy vegyes típusú adatok is könnyen kezelhetőek, hatékony előrejelzést ad, és robosztus a kiugró értékekkel. Hátránya a skálázhatóság, mivel a boosting szekvenciális természete miatt nehéz a párhuzamosítás. Az implementációhoz a Python Scikit-learn libraryt használtam A lineáris regresszió és a GBR esetén is [7].
13
4 A tervezés részletes leírása A tervezés során a CRISP-DM fázisain végigiterálva jutottam el a megoldásig, ennek részletezése következik most. A feladatot Python nyelven valósítottam meg, és több új library, és modul ismeretére is szert tettem, pl.: pandas az adatok előkészítéséhez [8], csv új adatok létrehozásához és .csv fájlba mentéséhez [9], numpy a bonyolultabb matematikai műveletek elvégzéséhez [10], datetime az adathalmaz megfelelő felbontásának létrehozásához [11], matplotlib [12], és seaborn [13] az ábrák készítéséhez.
4.1 Business Understanding A kerékpárok iránti igény meghatározásához szükséges egy predikciós modellt megalkotni, azaz idősort kell elemeznem, és becslést adni a következő időponthoz tartozó értékre. A modell hatékonyságának ellenőrzéséhez elengedhetetlen egy úgynevezett benchmark létrehozására is, amelyben modellezési eljárás nélkül becslünk, és a két módszert összehasonlítva döntünk a modellünk jóságáról. A megvalósított benchmarkról részletesebben a 4.4.1 Benchmark fejezetben olvashatunk.
4.2 Data Understanding Az MTA SZTAKI három .csv fájlban tett közzé adatokat, melyek különböző információkat tartalmaznak [14]. Ezek részletes ismertetése a Függelékben olvasható.
4.2.1 Utazási információk A train.csv fájl tartalmazza az egyes utazásokhoz kapcsolódó információkat 2015.01.01-től 2015.05.31-ig. A szakdolgozat keretein belül a hiányos adatokat (napok) nem tartalmazó hónapok adatait használtuk, az áprilisban, és májusban rögzített adatokat nem vettük figyelembe, azok a versenyfeladat megvalósításához lettek volna szükségesek. Megjegyzések:
Vannak úgynevezett szerviz utazások, amikor az üzemeltetők újraosztják a kerékpárokat az állomások között, megbizonyosodva arról, hogy
14
minden állomáson minden időpontban található kerékpár. Ezek az utak nem szerepelnek az adathalmazban.
Érvénytelen utazások, amiknek az időtartama 0 volt, el lettek távolítva az adathalmazból.
A 0101 azonosítójú állomás (Batthyányi tér) kikerült az adatbázisból, mivel január 16. és április 16. között nem keletkezett adat erről az állomásról.
Egy utazáshoz mindig megtalálható az indulás és az érkezés ideje és helyszíne is. Ha egy utazás több napon ível át, és az egyik nap a training set-ben van, míg a másik az evaluation set-ben, akkor mindkét napot megjelenítjük mindkét halmazban.
4.2.2 Dokkoló állások A station_data.csv fájl tartalmazza a dokkoló állásokhoz kapcsolódó információkat. Megjegyzések:
Mivel néhány dokkoló állást újratelepített 2015-ben a szolgáltató, ez a fájl több rekordot is tartalmazhat egy adott állomásról.
Még ha az állomás teljes is, a felhasználók visszatérhetnek az állomások közelében található extra standokhoz.
4.2.3 Időjárási információk A weather.csv fájl időjárási információkat tartalmaz minden fél órában a teljes periódusban. Megjegyzés:
Az időjárási adatok elérhetőek mind a training, mind az evaluation időszakokhoz.
Bizonyos változók értéke -9999 vagy -999 akkor, ha a változóhoz nem tartozna érték, vagy értelmezhetetlen lenne [15].
15
4.2.4 Az adatok beolvasása Az adatokat a pandas read_csv() metódusával olvastam be, és közben megadtam az egyes attribútumok típusát is. Beolvasás után a data frame-ket kiírtam, így információt kaptam arról, hogy az egyes .csv fájlokban hány sor található, és ellenőrizhettem, hogy vannak-e hiányzó értékek. Ezeket csak a versenyben megadott helyen, az időjárási adatoknál (7235 rekord) találtam, a szélsebesség (wspdm), a látási viszonyok (vism), és a hőérzet (windchillm) attribútumok halmaza nem teljes. Ezeknek a változóknak az értékeit egy diagramon ábrázolva a 4.1. ábra eredményét kaptam:
4.1. ábra - Hiányzó időjárási értékek
Ezen az ábrán nem szembeötlő a szélsebesség bizonyos értékeinek hiánya, így azt külön is megtekintettem, hogy pontosan mely időpontokban hiányzik, ez látható a 4.1. táblázatban:
4.1. táblázat - A szélsebesség értéke két helyen hiányzik
Ez után megvizsgáltam, hogy a látási viszonyok, és a hőérzet értékei közül pontosan hány érték hiányzik, hogy a későbbiekben döntést tudjak arról hozni, hogy esetleg érdemes-e ezeket a sorokat eldobni, vagy próbáljam meg megbecsülni őket. Azt
16
az eredményt kaptam, hogy a látási viszonyoknak 4167 helyen, a hőérzetnek pedig 3629 helyen hiányzik az értéke, ezekről részlet a 4.2. táblázatban és a 4.3. táblázatban olvasható.
4.2. táblázat - A látási viszonyok néhány hiányzó értékei
4.3. táblázat - A hőérzet néhány hiányzó értékei
A hiányzó értékek kezeléséről az Adatelőkészítés során döntünk.
4.3 Data Preparation Az adatelőkészítés célja az, hogy az adatokat olyan formátumúra hozzuk, amit a modellezés során használni tudunk, így ebben a fázisban kell például a hiányzó adatokat kezelni. Ezen kívül létre kell hozni a training-validation halmazokat. A modellünket a training halmazon tanítjuk, a validation halmazzal döntést hozunk arról, hogy hogyan is teljesít a modellünk [1]. A feladat során a dokkolóban lévő kerékpárok számát akarjuk megbecsülni, ehhez összefüggést keresek az időjárás és a hétvégék, ünnepnapok hatásáról az emberek viselkedésére.
17
4.3.1 Adatok generálása a munkarendi változásokról Mivel az ünnepnapokról nem rendelkeztem információval, első lépésként létrehoztam egy új adathalmazt, amelyben eltároltam a 2015. évi munkarendi változásokat [18], amiket összevetve majd az eredeti adathalmazzal, képet kaphatunk arról, hogy a hosszú hétvégék, valamint a szombati munkanapok hogyan befolyásolják az emberek kerékpározási szokásaikat. A létrehozott táblázatnak két oszlopa van:
date: a munkarendi változás napja,
holiday: értéke 1, ha az adott dátum ünnepnap, és 0 abban az esetben, ha munkanap (szombati munkanap).
A 4.4. táblázatban olvasható a tartalma (2015. első három hónapjában előforduló változások):
4.4. táblázat - Munkarendi változások
4.3.2 Az utazási adatok tisztítása A train.csv beolvasása után az első teendő az adathalmaz redukálása volt, azaz az áprilisi, és a májusi adatok elhagyása. Így a kezdeti 135484 utazási adat 65469-re csökkent. Ez a jelentős különbség valószínűleg annak is köszönhető, hogy a tavaszi időjárás kedvezően hat a kerékpározási szokásokra, míg a téli hónapokban kevesebben ülnek biciklire. A 4.2. ábra erről ad információt.
18
4.2. ábra - Utazások száma napi bontásban
Ami az utazási adatok tisztítását jelenti, fontos lehet figyelembe venni az utazások időtartamát. Ha egy út kevesebb, mint három, vagy öt percig tartott, akkor előfordulhat, hogy abban az esetben valami probléma volt az adott kerékpárral (defekt, rossz ülés…), és a felhasználó inkább visszatette azt. Ezeken az adatokon látszik az is, hogy az indulás és az érkezés helye általában azonos (4.5. táblázat).
4.5. táblázat - Öt percnél rövidebb utazások
A rövid utazások számáról kapunk információt a 4.3. ábraán:
19
4.3. ábra - Rövid utazások száma napi bontásban
A következő fontos lépés az utazási adatokból az állomások iránti kereslet megadása. Ehhez megállapítottam az egyes állomások keresettségét napi szinten, külön indulásokat és érkezéseket tekintve, majd a két tábla összefűzésével, és egy új „demand”
attribútum
létrehozásával
kiszámoltam
a
daily_end_count
és
a
daily_start_count közötti különbséget (4.6. táblázat).
4.6. táblázat - Az állomások iránti kereslet
4.3.3 Az állomások adatainak tisztítása Az állomások beolvasása után itt is az a feladat, hogy töröljük azokat az adatokat, amelyek április, májusi időpontokra vonatkoznak (4.7. táblázat):
20
4.7. táblázat - Törölt állomás adatok
4.3.4 Az időjárási adatok tisztítása A továbbiakban a weather.csv adatok tisztításával foglalkoztam, ebben a fájlban voltak hiányzó értékek, melyet -999 vagy -9999 jelzett eredetileg, a beolvasás során ezeket felülírtam a numpy NaN értékével. Az előző részben láthattuk, hogy a szélsebesség a látási viszonyok, valamint a hőérzet bizonyos értékei hiányoznak. Mivel az adathalmaz nagy hányadában nincs információnk ezekről az értékekről, nem célszerű ezeket a sorokat eldobni, mert akkor más hasznos attribútumok értékét is elveszíthetjük, így inkább megpróbáltam ezeket az értékeket megbecsülni. Ehhez a napi értékek átlagát számoltam ki, és azt helyettesítettem be a hiányzó helyekre. A 4.8. táblázatban a kapott eredményhalmaz első öt eleme látható, amiből arra lehetett következtetni, hogy az értékeket sikerült pótolni.
4.8. táblázat - Hiányzó értékek becslése a napi átlagokkal
A biztonság kedvéért még leellenőriztem, hogy van-e valamelyik attribútumnak még olyan értéke, amit a napi átlaggal nem sikerült kiszámítani, az eredmény a 4.9. táblázatban látható. 21
4.9. táblázat - A látási viszonyok között még van hiányzó
Ez úgy fordulhatott elő, hogy voltak olyan napok, ahol egyik időpontban sem rögzítették a látási viszonyokat, így nem volt semmilyen adat, amiből az átlagot számolni lehetett volna az adott napra. Ezt végül úgy oldottam meg, hogy az előző napi értékével becsültem meg, melyről a 4.10. táblázatban látható egy részlet.
4.10. táblázat - Látási viszonyok becslése az előző napi értékekkel
22
A becsült értékekről látható egy diagram a 4.4. ábraán, ekkor már napi bontású adatokkal számolva. Jól látszik, hogy nincs szakadás a függvényekben, így a hiányzó értékeket sikeresen pótoltam.
4.4. ábra - Hiányzó értékek becsülve, napi bontás
4.3.5 Adathalmaz előállítása a modellezéshez Az előző pontokban ismertetett módokon tisztított adatokat szükséges egy nagy táblázatba összefoglalni, amit majd a modellezés során felhasználhatunk. Ezt a módosított utazási, állomás és időjárási adatok összefűzésével készítettem el, majd a keletkezett táblát elmentettem egy új .csv fájlba. Az ebben megtalálható attribútumok: year, month, day, location, daily_start_count, daily_end_count, demand, pressurem, vism, wspdm, wdird, windchillm, tempm, hum. Az attribútumok értékei a korábban ismertetetteknek megfelel. A modellezés során a demand értékét kell majd megbecsülni.
4.4 Modeling A CRISP-DM szerint az adatok előkészítése után a következő lépés a modellezés. A modellezés egy iteratív folyamat, ennek megfelelően több technikát is kipróbáltam. Első modelljeimet az Önálló Laboratórium során megismert lineáris regresszióval valósítottam meg [1], majd több modellt is készítettem az Előzményekben is ismertetett Gradient Boosting Regression-nel. A modellezést befolyásolja a magyarázó változók mennyisége, minősége, mindegyik modellt futtattam időjárási
23
adatok figyelembe vételével, és azok nélkül, valamint a munkarendi változásokat is hozzáadva. A modellezés hatékonyságára hatással van még a training-validation setek szétválasztása is, így az eljárásokat elvégeztem 70-80-90%-os vágás esetén is. A modellek jóságáról benchmark segítségével tudunk döntést hozni, amikor modellező eljárás nélkül becslünk. A következőkben erről és a modellek megvalósításáról írok.
4.4.1 Benchmark Az összehasonlítás alapjául szolgáló benchmarkot az adatelőkészítés során létrehozott új .csv fájl felhasználásával generáltam. A benchmark ötlete az volt, hogy a jósolt értéket adja az előző két nap demand-jának átlaga. Ehhez szükséges volt a meglévő adathalmazhoz új oszlopok hozzáadására, amely segítségével megkaphatjuk egy adott lokációhoz tartozó értéket a korábbiak átlagából, viszont az előkészítés során tisztított időjárási adatokat el lehetett hagyni, mivel azokat a benchmark számításánál nem vettem figyelembe.
4.11. táblázat - Adott állomáshoz tartozó benchmark adatok részlete
A 4.11. táblázat egy adott állomáshoz tartozó benchmark adatokról ad információt. Látható, hogy a demand értékát a ’daily_end_count’-’daily_start_count’ határozza meg, míg a ’benchmark_value’ értékét az aktuális és a korábbi demand átlaga adja. A benchmark hibájának meghatározását a modellekéhez hasonló módon, az adathalmaz megfelelő vágásával végeztem. A számítást a Scikit-learn metrics moduljának mean_squared_error funkciójával végeztem, az eredményt meghatároztam mind a train, mind a validation halmazok esetén.
24
4.4.2 Lineáris regresszió A lineáris regresszió megvalósításához a Scikit-learn library LinearRegression osztályát használtam. Az osztály fit(x, y) metódusával taníthatjuk a modellünket, ahol x a magyarázó változók halmaza, y pedig a célváltozónk. Ha ez megtörtént, akkor a predict(x) metódussal megkapjuk a becsült értékeket. A lineáris regressziót elvégeztem többféle vágással, többféle magyarázó változó alkalmazásával, de az eredmények azt mutatták, hogy ezek között csak nagyon kis eltérések voltak. A modellezést a következő kódrészlet valósítja meg: ''' Kapcsolat a célváltozóval ''' datas.corr()['demand'] ''' Train - validation szétvágása start index alapján''' d = datas.copy() train_linreg = d[d.index < start] val_linreg = d[d.index >= start] y_train = train_linreg.demand y_val = val_linreg.demand from sklearn import linear_model, metrics ''' Lineáris regresszió tanítása ''' regr = linear_model.LinearRegression() regr = regr.fit( train_linreg [ train_linreg.columns train_linreg.demand)
-
['demand']],
p_train = regr.predict( train_linreg [ train_linreg.columns - ['demand']]) p_val = regr.predict( val_linreg [ val_linreg.columns - ['demand']]) '''Train, validation hiba''' mse_train = metrics.mean_squared_error(y_train, p_train) mse_val = metrics.mean_squared_error(y_val,p_val)
A kis eltéréseket a 4.5. ábra szemlélteti, amin a jósolt értékek napi átlaga látható 70%-os vágásnál, a magyarázó változók szerinti eseteket egy diagramon ábrázolva. Mivel az egyes esetek közel azonos hibával teljesítenek, így azok átlagát véve és ábrázolva, a három eset egy görbére esik. Az előrejelzendő érték, a demand átlagát is ábrázolva, szintén erre a görbére esnek az értékek, látható, hogy a lineáris regresszió jól teljesít.
25
4.5. ábra - Lineáris regresszió előrejelzések a validation halmazon (70%)
4.4.3 Gradient Boosting Regression A Gradient Boosting Regression döntési fán alapuló módszer. A döntési fák az osztályozási feladatot döntések sorozatára vezetik vissza, először kiindulunk a teljes adathalmazunkból, majd valamilyen módszer segítségével kettő vagy több részre bontjuk azt úgy, hogy a kialakult halmazokban a célváltozónk kevésbé szórt. A továbbiakban a két részre külön-külön megkeressük ezt az optimális partícionálást biztosító értéket és mindaddig folytatjuk, amíg egy a rekurziót leállító megállási feltételbe nem ütközünk. Ez a feltétel többféle lehet, például:
Minden elem az adott partícióban egy osztályba tartozik
Adott csomópontnak nincs több eleme
A fa mélysége elért egy előre megadott korlátot.
A döntési fa eljárások, ha túl sok szintet tartalmaznak képesek az adatokat túl jól megtanulni. Ez a túltanulás jelensége, amely miatt ugyan a tanuló adathalmazon jó eredményeket (osztályozási pontosságot) tudunk elérni, a modell általánosító képessége mégis rossz, mert új adatokon a fa már nagyon rosszul teljesít. Erre megoldás lehet, ha a tanulás során kapott fának az éleit visszavágjuk. Sajnos a döntési fák csak egy dimenzió mentén képesek partícionálni így sokszor nem használhatók bonyolultabb feladatok megoldására [2].
26
A GradientBoostingRegressor osztály is a Scikit-learn library része, és különböző paramétereket állíthatunk be alkalmazásakor, amik közül én a következőket használtam [7]:
loss: ezzel a paraméterrel a különböző loss function-ket definiálhatjuk, az alapértelmezett értéke ’ls’ (least squares), ezt használom én is. Ekkor a kezdeti modellt a célváltozók átlaga adja
learning_rate: a gyenge tanulók (pl. regressziós fák) számát korlátozza, értéke a modellemben 1.0.
n_estimators: a boosting szakaszok száma. A GBR meglehetősen robosztus a túltanulással szemben, így egy nagyobb számmal jobb teljesítmény érhető el, értéka a modellemben 100.
max_depth: az egyes regressziós becslések maximális száma, korlátozza a csomópontok számát a fában. A legjobb teljesítményért érdemes használni, de ez függ a bemeneti változók kölcsönhatásától is, értéke a modellemben 15.
random_state: véletlen állapotok száma, a modellemben 0 az értéke.
A paraméterek beállítása után a modellünket a lineáris regresszióhoz hasonlóan a fit(x,y) metódussal taníthatjuk, a becsült értékeket pedig a predict(x) adja. A Gradient Boosting Regression-t is elvégeztem többféle vágással, többféle magyarázó változó mellett, de az eredmények nem voltak a lineáris regresszióval összehasonlíthatóak a validációs halmazon, míg a trainingen még hasonlóképp teljesített, amit a modell túltanulása okozhat. A 4.6. ábra a demand értékeit és a validációs halmaz becsléseit mutatja, látható, hogy több helyen is nagyobb kilengések vannak.
27
4.6. ábra - GBR előrejelzések a validation halmazon (70%)
4.5 Evaluation 4.5.1 Lineáris regresszió Lineáris regresszió 70 %-os training-validation vágása esetén azt vettem észre, hogy plusz magyarázó változók hozzáadása az adathalmazhoz nem befolyásolja, vagy csak nagyon kis mértékben a modell hatékonyságát (4.12. táblázat). Training
Validation
Benchmark
5.46509812667
11.885399449
LinReg időjárási adatok nélkül
2.64165722389 e-27 1.71759283091 e-27 2.34702262406 e-27
9.62372344183 e-27 9.30574979014 e-27 5.19743165283 e-27
LinReg időjárási adatokkal LinReg időjárási és ünnepnapi adatokkal
4.12. táblázat - Benchmark-lineáris regresszió hibaértékek 70%-os vágásnál
A 4.7. ábra a demand, és a különböző lineáris regressziós modellek becsléseinek átlagát mutatja a magyarázó változók szerint a validation halmazon (ezek egy görbére esnek), továbbá a benchmarkhoz való viszonyát. Látható, hogy a modellek közötti eltérés minimális.
28
4.7. ábra - Benchmark - Lineáris regresszió előrejelzések a validation halmazon (70%)
Az adathalmaz 80%-os szétválasztásakor a lineáris regresszió már kissé másként viselkedett. Az időjárási változókat hozzáadva a magyarázó változókhoz a modell javult, pontos értéke a 4.13. táblázatban olvasható. Training
Validation
Benchmark
5.89041764247
13.5276595745
LinReg időjárási adatok nélkül
7.99435471914 e-27 1.65427704192 e-27 2.66421678365 e-27
7.96575393203 e-27 2.0040078754 e-27 2.83477851102 e-27
LinReg időjárási adatokkal LinReg időjárási és ünnepnapi adatokkal
4.13. táblázat - Benchmark-lineáris regresszió hibaértékek 80%-os vágásnál
A training-validation halmazok 90-10 % arányban történő megadásakor az időjárási változók hozzáadásakor romlott a modell hatékonysága, de később a munkaszüneti napok figyelembe vétele ezt kompenzálta (4.14. táblázat). Training
Validation
Benchmark
6.70993061578
13.8478464419
LinReg időjárási adatok nélkül
7.81447398172 e-28 4.77963803696 e-27 1.27006114772 e-27
1.07187599363 e-27 6.63598519018 e-27 1.18290142074 e-27
LinReg időjárási adatokkal LinReg időjárási és ünnepnapi adatokkal
4.14. táblázat - Benchmark-lineáris regresszió hibaértékek 90%-os vágásnál
29
A 4.8. ábra alapján látható, hogy a lineáris regresszió a 90 %-os trainingvalidation szétválasztás esetén javulást mutatott, de az egyes esetek közötti különbség itt is kicsi, így az átlagot ábrázolva ismét egy görbére esnek az értékek.
4.8. ábra - Benchmark - Lineáris regresszió előrejelzések a validation halmazon (90%)
A táblázatokból kiolvasható, hogy minden esetben sokkal jobban teljesített (mean squared error) a lineáris regresszió a benchmarktól.
4.5.2 Gradient Boosting Regression Az adathalmaz 70 %-os szétválasztásakor látható a 4.15. táblázatban, hogy a Gradient Boosting Regression a benchmark becslésénél minden esetben jobb eredményt ad, viszont szembeötlő a training-validation halmazok közötti különbség, az, hogy a training halmazon sokkal kisebb hibaértékkel dolgozik a modell, mint a validation esetén. Ez a korábban említett túltanulással magyarázható. Továbbá látszik, hogy az időjárási változók hozzáadása a magyarázó változókhoz rontotta a modell hatékonyságát a validation halmazon, amit jól kompenzál majd a munkarendi változások figyelembe vétele. Training
Validation
Benchmark
5.46509812667
11.885399449
GBR időjárási adatok nélkül
1.09200188532 e-30 1.09200188532 e-30 1.09200188532 e-30
4.03140495868
GBR időjárási adatokkal GBR időjárási és ünnepnapi adatokkal
30
4.62424242424 4.00055096419
4.15. táblázat - Benchmark-GBR hibaértékek 70%-os vágásnál
A 4.9. ábra együtt mutatja a demand, és a GBR előrejelzéseit a különböző attribútumok figyelembe vételekor, továbbá a benchmark becslését. A táblázatban észrevetteket jól tükrözi az ábra, például azt, hogy az időjárási adatokkal romlott a modell hatékonysága. A lineáris regresszióval (4.7. ábra) összevetve az ábrát látszik, hogy nagyobb kilengések fordulnak elő ebben a modellező eljárásban.
4.9. ábra - Benchmark - GBR előrejelzések a validation halmazon (70%)
Az adathalmaz 80-20 % arányban történő vágásakor a modellünk hatékonysága tovább romlott a validation halmazon, míg a trainingen jobban teljesít, ezt szintén a túltanulás okozza. A magyarázó változók jellege hasonló viselkedést okoz az előző esetben látottakhoz (4.16. táblázat). Training
Validation
Benchmark
5.89041764247
13.5276595745
GBR időjárási adatok nélkül
6.27152036014 e-31 6.36900101045 e-31 6.27152036014 e-31
5.64255319149
GBR időjárási adatokkal GBR időjárási és ünnepnapi adatokkal
6.25276595745 5.69191489362
4.16. táblázat - Benchmark-GBR hibaértékek 80%-os vágásnál
A training-validation halmazok 90 %-os szétválasztásakor is megfigyelhető a korábban észrevett túltanulás jelensége, ugyanakkor már javult a validation halmazon a hatékonyság, ami valószínűleg annak köszönhető, hogy ez már csak kevés (7 nap) 31
adatait tartalmazza, ami már kevésbé változatos, és jobban illeszkedhet a korábban a modell által tanult adatok jellegéhez. Training
Validation
Benchmark
6.70993061578
13.8478464419
GBR időjárási adatok nélkül
8.34226071678 e-31 8.37631347339 e-31 8.34226071678 e-31
2.87968164794
GBR időjárási adatokkal GBR időjárási és ünnepnapi adatokkal
3.88576779026 2.95411985019
4.17. táblázat - Benchmark-GBR hibaértékek 90%-os vágásnál
A 4.10. ábra már nagyon hasonló a lineáris regresszió esetén látotthoz (4.8. ábra), de észrevehető, hogy nagyobb hibával teljesít a Gradient Boosting Regression.
4.10. ábra - Benchmark - GBR előrejelzések a validation halmazon (90%)
4.5.3 Lineáris regresszió – GBR összehasonlítása Az előző részekből láthattuk, hogy a lineáris regresszió sokkal jobb eredményeket adott, mint a Gradient Boosting Regression. Ennek több oka is lehet, például az, hogy a lineáris regresszió azért működik jobban, mert ténylegesen található az adatokban linearitás, de láthattuk azt is, hogy a GBR esetén a döntési fákra jellemző túltanulás alakult ki. A 4.11. ábra a lineáris regresszió becslését szemlélteti, ahol a fekete pontok a training halmaz adatait mutatja, míg a kék vonal a validation halmazét. Az ezt megvalósító Python kódrészlet: 32
%matplotlib inline plt.scatter(y_train, p_train, color='black') plt.plot(y_val, p_val, color='blue', linewidth=3) plt.show()
4.11. ábra - Lineáris regresszió előrejelzése
Az ábráról észrevehető, hogy az adatoknak tényleg van egy lineáris jellege A 4.12. ábra A Gradient Boosting Regression becslését szemlélteti, kék pontokkal a training adatai, pirossal a validaton halmazé láthatóak. Az ábra jól tükrzi a túltanulás jelenségét, míg a training lineíritást követ, a validation adatairól leolvashatóak a hibás becslések.
4.12. ábra - GBR előrejelzése
33
5 Értékelés, továbbfejlesztési lehetőségek A lineáris regresszióval megalkotott modell jól teljesített, a Gradient Boosting Regression ezzel szemben még több fejlesztést igényel. Mindkét eljárás esetén lehetséges a hatékonyság javítása, azzal, hogy módosítjuk a magyarázó változókat. Például a modellezés során az állomásokról kapott információkat nem használtam fel teljesen, próbáltam az időjárás és a munkanapokszabadnapok emberi viselkedésre tett hatását észrevenni. Ezen túl azonban értékes információt rejthetnek az állomásokról kapott információk, ugyanis azok földrajzi koordinátái ismertek, és érdemes lehet megvizsgálni az állomások egymáshoz viszonyított helyzetét, például 2-3 egymáshoz közeli állomás esetén milyen valószínűséggel választják a felhasználók egyik-másik állomást. Ezen túl tudjuk, hogy vannak állomások, amelyek többször is szerepelnek az adatbázisban, azok újratelepítése miatt, érdemes lehet ezeket az állomásokat is vizsgálni. A Gradient Boosting Regression esetén is van lehetőség a modellünk javítására, például a pandas get_dummies() metódusának használata. Ez javíthatja a döntési fa hatékonyságát, ugyanis a kategorikus változókat alakítja át olyan dummy változókká, amiket a fa nagyobb sikerrel tud osztályozni. További javítási lehetőség a Scikit-learn feature_selection modulja RFE (Recursive Feature Elimination) osztályának használata, amellyel súlyokat rendelhetünk változókhoz, és például beállíthatóak egy lineáris regresszió együtthatói. Ezek után a súlyozott változókon végezzük el a modell tanítását és a becslést a már megismert fit(x,y) és predict(x) metódusokkal.
34
6 Köszönetnyilvánítás Ezúton szeretném megköszönni a közreműködést mindazoknak, akik önzetlenül segítettek szakdolgozatom elkészítésében. Köszönöm konzulensemnek, Kazi Sándornak az útmutatást, a segítséget és a végtelen türelmet. Köszönöm az I.L.106a szoba összes munkatársának a segítségnyújtást, valamint az építő ötleteket. Köszönöm a CX-Ray munkatársainak a szakmai gyakorlat során nyújtott segítséget, hálás vagyok a kapott tudásért. Végül, de nem utolsó sorban köszönettel tartozom szüleimnek, páromnak, rokonaimnak és barátaimnak, akik mindvégig támogattak.
35
Irodalomjegyzék [1]
Zs. Magyar: Önálló laboratórium beszámoló – Összefüggések különböző időjárási mérőszámok között, 2015., 1-2, 4-5
[2]
G. Nagy, „Adatbanyaszat2 < Meres < Foswiki”: http://qosip.tmit.bme.hu/foswiki/pub/Meres/Adatbanyaszat2/adatbanyaszat_labor _elmelet_draft_0.4.pdf Letöltve: 2015. november 23.
[3]
M. Dr. North: Data Mining for the Masses, Global Text Project, 2012., 5-11.
[4]
J. Dr. Abonyi: Adatbányászat a hatékonyság eszköze, 2006., 295-342.
[5]
G. Barta: Bike sharing model reuse framework for tree-based ensembles: http://reframe-d2k.org/img_auth.php/4/4f/MoReBikeS_2015_paper_6.pdf Letöltve: 2015. november 23.
[6]
„Generalized Linear Models - scikit-learn 0.17 documentation”: http://scikitlearn.org/stable/modules/linear_model.html Letöltve: 2015. november 5.
[7]
„Ensemble methods - scikit-learn 0.18.dev0 documentation”: http://scikitlearn.org/dev/modules/ensemble.html#gradient-tree-boosting Letöltve: 2015. november 10.
[8]
„pandas: powerful Python data analysis toolkit - pandas 0.17.1 documentation”: http://pandas.pydata.org/pandas-docs/stable/ Letöltve: 2015. november 5.
[9]
„csv — CSV File Reading and Writing - Python 3.3.6 documentation”: https://docs.python.org/3.3/library/csv.html Letöltve: 2015. november 5.
[10] „Contributing to Numpy - NumPy v1.11.dev0 Manual”: http://docs.scipy.org/doc/numpy-dev/dev/ Letöltve: 2015. november 5. [11] „datetime — Basic date and time types - Python 3.6.0a0 documentation”: https://docs.python.org/3.6/library/datetime.html Letöltve: 2015. november 5. [12] „Overview - Matplotlib 1.5.0 documentation”: http://matplotlib.org/contents.html Letöltve: 2015. november 5. [13] „Seaborn: statistical data visualization - seaborn 0.6.0 documentation”: http://stanford.edu/~mwaskom/software/seaborn/index.html Letöltve: 2015. november 5 [14] „MOL Bubi Challenge”: https://dms.sztaki.hu/bubi/index.html#/app/dataset Letöltve: 2015. november 23. [15] „API | Weather Underground”: http://www.wunderground.com/weather/api/d/docs?d=resources/phraseglossary&MR=1 Letöltve: 2015. november 23. 36
[16] J. Bartholy, R. Mészáros, I. Geresdi, I. Matyasovszky, R. Pongrácz és T. Weidinger: „Meteorológiai alapismeretek”, Eötvös Loránd Tudományegyetem, 2013., 34, 54-56, [17] „A hőérzet I.”: https://www.idokep.hu/hirek/a-hoerzet-i Letöltve: 2015. november 23. [18] „28/2014. (IX. 24.) NGM rendelet”: http://net.jogtar.hu/jr/gen/hjegy_doc.cgi?docid=A1400028.NGM Letöltve: 2015. november 25.
37
Függelék 1. A train.csv attribútumai bicycle_id
a kerékpár egyedi azonosítója
start_time
az utazás indulási időpontja
end_time
az utazás végének időpontja
start_location
az induló állomás egyedi azonosítója
end_location
a célállomás egyedi azonosítója
2. A station.csv attribútumai place_id
az állomás egyedi azonosítója
place_name
az állomás neve
lat
GPS latitude (földrajzi szélesség)
lon
GPS longitude (földrajzi hosszúság)
num_of_rack
kapacitás (az állomás által befogadni képes kerékpárok száma)
datetime_start
az állomás üzembe helyezésének ideje
datetime_end
az időpont, amíg az állomás ezen a helyen volt
3.
A weather.csv attribútumai
time
dátum és idő
tempm
hőmérséklet Celsiusban
hum
páratartalom %-ban
wspdm
szélsebesség km/h-ban
wdird
szélirány fokban
38
szélirány leírás (például: SW - southwest,
wdire
NNE – north-northeast) pressurem
nyomás millibarban
vism
látási viszonyok km-ben
windchillm
hőérzet Celsiusban
fog
köd esetén értéke 1, egyébként 0
rain
ha esik, értéke 1, egyébként 0
snow
havazás esetén értéke 1, egyébként 0
hail
jégeső estén értéke 1, egyébként 0
thunder
villámlás estén értéke 1, egyébként 0
Az időjárási változók részletesebb magyarázata: Hőmérséklet: a levegő hőmérséklete. A hőmérséklet tulajdonképpen az energiával analóg fogalom. A levegő különböző gázok keveréke, a gázok hőmérsékletét pedig az adott gáz alkotórészecskéinek mozgása határozza meg. SI mértékegysége az abszolút (Kelvin) skála, a hétköznapi életben Celsius-fokban mérjük a hőmérsékletet, míg egyes országokban a Fahrenheit-skálát alkalmazzák [16]. Páratartalom: relatív páratartalom. A vízgőz keverési arányának (rv) és telítési keverési arányának (rs) a hányadosa, ami jó közelítéssel megegyezik a vízgőz nyomásának (e) és telítési nyomásának (es) a hányadosával. Ha 100 %-nál nagyobb értéket vesz fel, akkor az azt jelenti, hogy a levegő túltelítetté válik [16]. Keverési arány: az egységnyi térfogatú levegőben a vízgőz és a száraz levegő tömegarányát adja meg [16]. Telítési keverési arány: ha a vízgőz nyomása a telítési gőznyomással egyenlő, akkor a keverési arány az ún. telítési keverési arány [16]. Nyomás: Vízgőz nyomása: nemcsak a vízmolekulák koncentrációjától, hanem a hőmérséklettől is függ [16].
39
Telítési nyomás: a vízfelszínről mindig távoznak, illetve oda érkeznek vízmolekulák. Amikor a távozó és a lecsapódó molekulák száma megegyezik, a vízgőz nyomása az ún. telítési gőznyomással egyenlő, és a levegő telítettsége éppen 100 % [16]. Szélsebesség: a szélsebesség mérésének objektív módszerei előtt a Beaufortskálát használták a szél erősségének megfigyelésére és osztályozására. Még ma is hasznos ott, ahol nem állnak rendelkezésre szélsebességet mérő műszerek. Hőérzet (wind chill): főként hideg időben való alkalmazkodás miatt vezették be. A bevezetés hátterében az a jelenség áll, mikor meleg bőrünk érintkezik a hideg levegővel, felmelegíti azt, és ez a melegített rész is véd minket. Azonban előfordul, hogy a szél elfújja ezt a réteget (innen jön a wind). A wind chill nem hőmérséklet, csupán veszélyt leíró index [17].
40