A MOL Bubi Challenge Adatikus szemszögből Kerepesi Csaba alias Adatikus E LT E, I n f o r m a t i k a D o k t o r i I s k o l a P I T B i o i n f o r m a t i c s G r o u p h t t p : / / p i t g r o u p. o r g
A történet szereplői kitalált adatok, mindennemű egyezésük a valósággal csupán a véletlen műve.
Adatikus: lol
Hello adat! station_data.csv place_id,place_name,lat,lng,num_of_rack,datetime_start,datetime_end 0102,Szilágyi Dezső tér,47.5034243929,19.0397143364,15.0,2015-01-01 00:00:01,2015-05-31 23:55:03 0103,Clark Ádám tér,47.4975859462,19.040915966,15.0,2015-01-01 00:00:01,2015-05-22 15:35:03 0103,Clark Ádám tér,47.4975859462,19.040915966,16.0,2015-05-22 15:40:02,2015-05-31 23:55:03 weather_data.csv time,tempm,hum,wspdm,wdird,wdire,pressurem,vism,windchillm,fog,rain,snow,hail,thunder 2015-01-01 00:00:00,-12.0,85,5.6,0,Variable,1037,5.0,-15.5,0,0,0,0,0 2015-01-01 00:30:00,-11.0,85,3.7,0,Variable,1036,4.0,-999,0,0,0,0,0 2015-01-01 01:00:00,-10.0,86,3.7,0,Variable,1036,4.0,-999,0,0,0,0,0 train.csv bicycle_id,start_time,end_time,start_location,end_location 86602,2015-01-01 00:04:00,2015-01-01 00:10:00,0802,0508 86157,2015-01-01 00:04:00,2015-01-01 00:16:00,0802,0508 86091,2015-01-01 00:08:00,2015-01-01 00:32:00,0513,1106
Előfeldolgozás Regisztráció a versenyre: Október 10. Napi forgalom illetve napi demand generálása az adatból: bicycle_id,start_time,end_time,start_location,end_location 86602,2015-01-01 00:04:00,2015-01-01 00:10:00,0802,0508 86157,2015-01-01 00:04:00,2015-01-01 00:16:00,0802,0508 86091,2015-01-01 00:08:00,2015-01-01 00:32:00,0513,1106 Task 1 0102-0102,2015-01-01,0 0102-0102,2015-01-02,12 0102-0102,2015-01-03,5 0102-0102,2015-01-04,1 Task 2 0102,2015-01-01,1 0102,2015-01-02,5 0102,2015-01-03,0 0102,2015-01-04,3
Október 11. - az első próbálkozások Trivi megfigyelés: sokfélék az útvonalak ill. az állomások: egyik forgalmasabb mint a másik, a demand is változatos Task1: Össz átlag útvonalanként Minden útvonalra számítsuk ki az átlagforgalmat Válasszuk ki a top 100 útvonalat Az összes evaluate napra ezt a top 100-at írjuk be Task1: 0.542 5. hely (most 18. lenne) Task2: Össz átlag állomásonként Minden állomásra számítsuk ki az átlagkeresletet Ezt írjuk be az összes kiértékelő nap összes állomására Task2: 4.83 1. hely (most 13. lenne)
Felbátorodás, ötletelés Ötlet: csak április-május jobban jellemzi a kiértékelési időszakot Miért ha nekünk úgyis a top 100 kell? Egy kiránduló útvonal januárban egy munkába járó útvonal mögött lehet a top100-ban, míg májusban előtte (munkába muszáj menni) Rossz időben jól járható vs kevésbé jól járható útvonal? Task1: 0.542 0.587 Task2: 4.83 4.44 (ma 7. lenne) Task2 miért lett ilyen jó? A kereslet egyenesen arányos a globális összforgalommal forgalommal?
Hétköznap-hétvége Hétköznap-hétvége január 1-től Kiránduló útvonal vs munkába járó Ekkor még a péntek is hétvége volt Minden útvonalra két kategóriában (hétköznap és hétvége) átlagoltam a napi forgalmat (a teljes adatot januártól) Ha a kiértékelő nap hétköznap, akkor ide a hétköznapi top 100-at írom, ha hétvége akkor a hétvégei top 100-at. Task1: 0.587 0.661 1. hely! (ma 11. lenne)
Október 12. - Task 1
Október 12. - Task 2
Dőlj hátra! Vagy mégse? :)
Okt. 15. - magamat előzgetem Hétköznap-hétvége és csak április-május Csak április-májusra átlagoltam Két kategória: h-k-sze-cs-p és szo-v Task1: 0.661 0.670 (ma is 2. lenne) Task2: 4.44 4.40 (ma 7. lenne)
Bubi buli - http://molbubi.bkk.hu/bubi-buli.php
Task1 végső megoldás Bubi Buli: Ha egy nap az x állomáson "Bubi buli" volt,akkor az aznapi forgalmat az x-x útvonalon osztottam 2.1-gyel Ha egy nap az x állomáson "Bubi buli" volt, akkor a becsült forgalmat az x-x útvonalon szoroztam 2.1-gyel Task1 végső megoldás: 1207-1714-Marc23+-Avg-Weekd52-buli-2.1-67309 Task1: 0.670 0.67309 Az első Bubilize! lett 0.67472-vel
Task1 végső megoldás vázlat Minden útvonalra (állomáspárra) és training napra kiszámoltam az aznapi össz forgalmat Ha egy nap az x állomáson "Bubi buli" volt,akkor az aznapi forgalmat az x-x útvonalon osztottam 2.1-gyel Minden egyes útvonalra külön kiszámoltam a (módosított) forgalmak átlagát március 23-tól május 31-ig külön a hétköznapokra és külön a hétvégékre Ha az evaluate nap hétköznapra esett, akkor minden útvonalra az annak megfelelő hétköznapi átlaggal becsültem Ha az evaluate nap hétvégére esett, akkor minden útvonalra az annak megfelelő hétvégei átlaggal becsültem Ha egy nap az x állomáson "Bubi buli" volt, akkor a becsült forgalmat az x-x útvonalon szoroztam 2.1-gyel Végül minden evaluate napra a becsült adatok alapján kiválasztottam a top 100 útvonalat és ezt küldtem be.
Időjárás adatok - előfeldolgozás Előfeldolgozás: Napi átlagadatok 6:00-tól 22:00-ig rain-snow-thunder=1, ha volt rain v. snow v. thunder weather_data.csv time,tempm,hum,wspdm,wdird,wdire,pressurem,vism,windchillm,fog,rain,snow,hail,thunder 2015-01-01 00:00:00,-12.0,85,5.6,0,Variable,1037,5.0,-15.5,0,0,0,0,0 2015-01-01 00:30:00,-11.0,85,3.7,0,Variable,1036,4.0,-999,0,0,0,0,0 2015-01-01 01:00:00,-10.0,86,3.7,0,Variable,1036,4.0,-999,0,0,0,0,0 avg_weather_perday.csv: 2015-01-01;-3.8;8.0;0.15 2015-01-02;-0.8;9.0;0.18 2015-01-03;4.0;16.7;0.12 2015-01-04;2.8;37.1;0.00 dátum;avg_tempm;avg_wspdm;avg_rain-snow-thunder
A hőmérséklet növekedés hatása Ha nő a hőmérséklet nő a várható forgalom De: februárban 10 fokban kevesebben lesznek mint májusban 10 fokban (nincsenek felkészülve lelkileg, nincs bérlet vásárolva) Ha nő a hőmérséklet nő a hiány? Nem feltétlen! Ha azért nagy a demand mert pl. reggel sokan mennek munkába/iskolába egyszerre akkor a hőmérséklet növekedésekor nő a hiány is pl. olyan állomáson ahol jóval nagyobb a bemenő forgalom mint a kimenő
Nem nő a demand a hőmérséklettel: 0204 (Kodály körönd), jan1-maj31 $avg_demand_weekdays{$temp} $avg_demand_weekend{$temp}
1304 (Margitsziget), jan1-maj31 $avg_demand_weekdays{$temp} $avg_demand_weekend{$temp}
Okt. 28.: hőmérséklet szeparálás, Meetup Alert!Alert!Alert! Idő közben megelőzött a Brewster Analystics 4.30794-gyel! És este lesz a Mol Bubi Meetup Marc01+-Avg-Weekd52-WeekdSep-9 Minden állomásra 3 kategóriában átlagoltam: a hétköznapot felbontottam 9 foknál hidegebb ill. melegebb napokra Most március 1-től számoltam, hogy legyen elég adat minden kategóriában Érdekes, hogy sokkal jobb lett mint a linreg Task2: 4.40 4.279-1. hely (most a 4. helyre elég lenne)
Task2: végső megoldás Task2: Végső megoldás: 1213-2108-Marc01+-Avg-Weekd52-WeekdSep-10-WeekendSep-8.55-buli-1.4- rst-0.7-0.06-wind-0.005-error_corr--0.5-4.231 Task2: 4.279 4.23134 (most 3. hely) 1. hely: Tamas 3.93574 2. hely: Brewster Analytics 4.20916
Task2: végső megoldás Minden állomásra és training napra kiszámoltam az aznapi demandot Ha egy training nap egy állomáson "Bubi buli" volt, akkor az aznapi demandot ezen az állomáson osztottam 1.4-gyel Minden training napra kiszámoltam az aznapi napközbeni (6:00-22:00) átlaghőmérsékletet, átlagos szélsebességet (avg_wind) és azt, hogy átlagosan hány olyan fél óra volt amikor volt eső, hó, vagy mennydörgés (ez utóbbi értéket avg_rst-nek nevezetem) Ha egy training nap az adott állomáson 0.06-nál nagyobb volt az avg_rst érték akkor szoroztam a demandot az 1+0.7*avg_rst értékkel Minden állomásra és training napra az aznapi demandot szoroztam az 1+0.005*avg_wind értékkel Minden egyes állomásra külön kiszámoltam a demandok átlagát március 1-től május 31-ig külön a hideg hétköznapokra, a hideg hétvégére, a meleg hétköznapokra és a meleg hétvégékre (hétvégén és hétköznap máshol húztam meg a hideg-meleg határt) Ha az evaluate nap hideg hétköznap volt, akkor minden állomásra az annak megfelelő hideg hétköznapi átlaggal becsültem A másik három kategóriára hasonlóan Ha egy evaluate nap egy állomáson "Bubi buli" volt, akkor az aznapi demandot ezen az állomáson szoroztam 1.4-gyel Ha egy evaluate nap az adott állomáson 0.06-nál nagyobb volt az avg_rst érték akkor a becsült demandot osztottam az 1+0.7*avg_rst értékkel Minden állomásra és evaluate napra a becsült demandot szoroztam az 1+0.005*avg_wind értékkel 9 állomás evaluate értékéből levontam 0.5-öt minden nap (a tesztek alapján jött)
Sikertelen próbálkozások Pl. hasonlóságon alapuló modell, lineáris regresszió, medián, adattisztítás, munkaszüneti napok, harmonikus közép, reverse type stations És sokféle paraméterbeállítás.