Savaitė be nuosavo automobilio

Nežinau už kokius nuopelnus, bet šią savaitę buvau pakviestas prisijungti prie Europos judrumo savaitės (European Mobility Week) akcijos #ditchyourkeys ir ištisas septynias dienas atsisakyti savo automobilio. Tiesa, tam kad šis iššūkis nebūtų labai sudėtingas, akcijos rėmėjai Uber, Vilniaus Viešasis Transportas, Cyclocity, Citybee bei Spark suteikė galimybę šiomis dienomis jų paslaugomis naudotis nemokamai – tad per šią savaitę galėjau išbandyti visokiausius judėjimo po Vilnių būdus, kuriais iki šiol nesinaudojau.

Už Vilniaus ribų šiomis dienomis neplanavau niekur vykti, o pasižiūrėjęs į savo judėjimo istoriją, supratau, kad mano geografija buvo ganėtinai ribota: visą laiką maliausi tarp namų Lazdynuose, senamiesčio ir dviejų klientų biurų. Į kitas seniūnijas dažniausiai koją buvau įkėlęs tik epizodiškai: arba pro jas pakeliui pravažiuodamas, arba ten užsukdamas tik kelioms valandoms dėl kokio konkretaus tikslo. Tiesą pasakius, galvojau,kad mano kelionių geografija platesnė, bet visgi ši savaitė ganėtinai gerai atitinka mano judėjimo įpročius: 95 procentus laiko praleidi tose pačiose vietose ar judėdamas tarp jų.

Visą savaitę praleidau arba Lazdynuose, kur gyvenu, arba Naujamiestyje bei Senamiestyje

Detalesnis intensyvių vietų žemėlapis (heatmap) iš principo rodo tą patį: yra namai Lazdynuose, klientų biuras Konstitucijos prospekte, bei Gedimino prospektas. Į Karoliniškes savaitgalį su šeima ėjau pasivaikščioti pėsčiomis, o dažniausiai važiuoju Geležinio Vilko gatve, kuriame stoviniuoju kamštyje prie Gerosios Vilties žiedo.

Detalesnis žemėlapis rodo, jog mano laikas buvo praleistas namie (Lazdynai), Quadrum verslo centre bei Gedimino prospekte.

Tad kaip man sekėsi mieste judėti be automobilio? Per savaitę visomis transporto rūšimis nuvažiavau iš viso 140.3 kilometrų ir neteko pasinaudoti tik Cyclocity paslaugomis. Visgi lietinga rudens savaitė sėsti ant dviračio neviliojo – manau esant geresniam orui dviračiais tikrai būčiau pasinaudojęs. Vienas tokio judėjimo be savo automobilio privalumų yra tas, kad nereikia mokėti už parkavimą: paskaičiavau, jog per šią savaitę už parkavimą būčiau susimokėjęs apie 19-20 eurų (nemažai laiko praleidau Gedimino prospekte, kur už parkingą moku pats). Priskaičiavus visokius automobilio nusidėvėjimo kaštus (maždaug 30 eurų per savaitę) bei išlaidas už kurą gaunu, jog jei visur būčiau važinėjęs su nuosava mašina, tai transportui būčiau išleidęs apie 65 eurus, arba vidutiniškai 0.46 EUR už kilometrą.

Nuvažiuoti kilometrai pasiskirstę gana tolygiai

Čia nuvažiuotų kilometrų suvestinė:

Kelionių skaičius Viso km Viso kaina, € Vidutinė km kaina
Uber 6 51.4 43.76 0.851
Citybee 6 38.0 28.01 0.737
VVT 4 29.1 2.85 0.098
Spark 3 21.8 11.04 0.506
Bendrai 19 140.3 85.66 0.611
Palyginimui: nuosavas Subaru 140.3 64.65 0.461

Aišku, žiūrint pagal kainą, tai vienareikšmiškai su Vilniaus miesto autobusais ir troleibusais konkuruoti niekas negali – važiuoti viešuoju transportu yra 5-10 kartų pigiau nei bet kaip kitaip. Uber liko brangiausias, nors iš dalies dėl to, kad penktadienio vakare net kelis kartus teko juo važiuoti piko metu, kai kainos buvo žymiai pakeltos (vienos kelionės metu pataikiau net ant 2.2x surge pricing!). Užtat Uber buvo pats greičiausias sprendimas: iki įsėdimo į transporto priemonę praeidavo mažiausiai laiko, o be to priveždavo prie durų ir nereikėjo ieškoti vietos kur paparkuoti ir palikti mašiną.

Iki šiol nebuvau naudojęsis nei Citybee, nei Spark paslaugomis, bet jau tikrai žinau, kad tai ne paskutinės kelionės šiomis nuomotomis mašinomis. Citybee man patogi tuo, jog galiu mašiną palikti ir pasiimti tiesiai prie laiptinės durų, nors, tiesa, ryte neretai aplink namus buvo laisvų mašinų trūkumas, tad tekdavo arba pėdinti gerą puskilometrį arba visgi kviestis Uberį. Spark pasirodė kaip labai ekonomiškas transporto variantas, tik bėda tame, jog iki namų juo nusigauti negaliu – arčiausiai, kur galiu palikti mašiną yra prie Litexpo. Tad deja, Spark man tinka tik trumpoms kelionėms miesto centre, nors pagal kilometro kainą jis labai konkurencingas su nuosavos mašinos kaštais.

Savaitgalį keliaudavau ne vienas, o su vienerių metų dukra bei vežimėliu. Tokioms kelionėms visgi patogiausia yra viešasis transportas. Savaitgaliais autobusai apytuščiai, ir į juos labai patogiai galima įvažiuoti su visu vežimu, o tai net kai kuriais atvejais nukonkuruoja ir nuosavą mašiną: nei vežimo lankstyti, nei pasivaikščiojus mieste būtinai grįžti iki ten, kur palikai mašiną. Jau nekalbu apie tokio transporto kainą. Bėda tik su senaisiais troleibusais: užsikelti vežimą per laiptelius yra reikalų, o ir praėjimai siauri, nėra erdvės. Jei visi troleibusai ateityje bus atnaujinti, tai viešasis transportas keliaujant su dukra iš vis bus vienvaldis nugalėtojas.

Tad, ar galima Vilniuje apsieiti be nuosavos mašinos? Galima. Tik iki pilno komforto reiktų atnaujinti troleibusus (kas, girdėjau, vyksta) ir leisti man prie namų parkuotis Spark.

Apie (perdėtą) metrikų svarbą

Vienas svarbiausių dalykų šiuolaikinėje vadyboje – metrikų (KPIs, key performance indicators, pagrindinių veiklo rodiklių) sekimas. Juk jei kažko nematuoji, tai ir negali pagerinti. Iš tiesų, poreikis reguliariai matuoti savo progresą organizacijas priverčia rimčiau pažiūrėti į savo duomenų ūkį, mat iki tol duomenų surenkama mažai ir ne daug kam rūpi jų kokybė. Ir tik turint pakankamai duomenų palaipsniui galima prieiti prie „data-driven“ kultūros: visus svarbesnius sprendimus priimti vadovaujantis nebe nuojauta, o paanalizavus objektyvius skaičius.

Tačiau čia, kaip ir visur, galima persūdyti. Nereikia pamiršti, jog visas metrikas galima apgauti: vien jau rodiklio pasirinkimas gali lemti keistus organizacijos kultūros pokyčius. Ekonomisto Goodhart’o dėsnis teigia, jog metrikos nustoja būti efektyvios vos tik jos tampa tikslu, kurį reikia pasiekti. Kai tik kažkas siekdamas suvaldyti bankų riziką apriboja kapitalo pakankamumo rodiklį, randama būdų paskolas paversti obligacijomis (o šios kapitalo pakankamumo formulėje traktuojamos atlaidžiau). Kai interneto rinkodaros efektyvumą matuoji reklamų paspaudimais, atsiranda automatinių botų, kurie nuolat spaudalioja ant banerių. Kai prieš reklamdavius reikia girtis atverstų puslapių skaičiumi, portalų antraštės optimizuojamos taip, kad skaitytoją užkabintų, bet neperteiktų straipsnio minties: veiksmo daug, o portalo vartotojai turiniu nusivilia. Jei tik pradedi rimtai optimizuoti kokią nors metriką, net nepastebi, kaip jau toli nuvažiavai į lankas.

Žmogaus elgsenos beveik neįmanoma tobulai išmatuoti – belieka rinktis kažkokius skaičius, kurie gal būt arčiausiai galėtų atspindėti esamą situaciją. Taip „atverstų puslapių skaičius“ apytiksliai matuoja „kiek žmonių perskaitė šį straipsnį?“, o „paspaudimais ant reklamos“ galima išmatuoti vartotojų norą įsigyti reklamuojamą produktą. Kapitalo pakankamumas tampa apytiksliu banko rizikos matu, NPS tyrimas maždaug parodo ar vartotojams patinka jūsų kompanija, studentų egzamino balai maždaug parodo, ar jie išmoko paskaitų medžiagą. Turint prieš akis (kad ir netikslų) skaičių, jį galima stebėti, galvoti, kaip jį pagerinti ir sekti savo progresą. Tai ypač patinka inžinieriams ir matematiškai galvojantiems žmonėms: žymiai lengviau galvoti kaip „X procentų pagerinti egzaminų rezultatus“, nes tai skamba daug tiksliau ir apibrėžčiau nei „geriau mokyti studentus“.

Problema atsiranda tada, kai pamirštama, jog metrika tėra apytikslis pasaulio atspindys. Dar blogiau, kai pagrindiniu tikslu tampa tik metrikos pagerinimas – visada išlenda netikėti antriniai šių metrikų efektai. Norint padidinti straipsnių kokybę pradedama matuoti kiek jų perskaitoma, tada kyla noras optimizuoti paspaudimus ant straipsnių antraščių, o tai galų gale sumažina straipsnių kokybę. Norint, kad kuo daugiau vartotojų naudotųsi tavo programėle, pradedamas sekti vartotojų grįžtamumo dažnumas (retention and churn), o vėliau tai išsiverčia į besaikį elektroninio pašto brukalų ar notificationų naudojimą. Norint, kad studentai geriau išmoktų dėstomą medžiagą, pradedama siekti jų egzaminų rezultatų pagerinimo, ir galų gale profesoriai pradeda mokyti savo dėstomo dalyko egzamino išlaikymo triukų, o ne patį savo dėstomą dalyką.

O kartais reikia optimizuoti visai priešingą metriką nei atrodytų iš pirmo žvilgsnio. Nors standartiškai galvojant norisi siekti, kad vartotojai kuo daugiau laiko praleistų svetainėje, Google stengėsi šią metriką optimizuoti į priešingą pusę: kuo greičiau vartotojai randa ko reikia, tuo jie greičiau dings iš tavo paieškos svetainės ir bus laimingesni. Pasiteisino.

Besaikis skaičių fetišas irgi kenksmingas. Verta į verslą kartais pažvelgti ir ne vien per metrikas.

Keletas patarimų apklausų sudarytojams

Artėjant tam pavasario metui, kai į elektroninį paštą bei Facebook’o srautą pradeda plaukti studentų prašymai užpildyti nuobodžias ir skausmingai ilgas bakalaurinių ar magistrinių darbų anketas, užtikau labai neprastą „Partially Derivativepodcast‘o seriją apie tai, kaip teisingai tas apklausas sudarinėti. Kadangi patarimai buvo vertingi ir man pačiam, dalinuosi trumpa jų santrauka:

  • Prieš sudarant apklausos anketą reikia gerai pagalvoti, kokius duomenis nori surinkti ir kaip tuos duomenis analizuosi. Visai ne pro šalį būtų iš anksto susidaryti sąrašą grafikų, kuriuos norėsi nupiešti ir nuspręsti, kokias regresijas skaičiuosi. Anketa žymiai sutrumpės, kai tikrai žinosi kokių tiksliai duomenų reikia, o ir klausimai bus žymiai tikslesni: gal iš tiesų reikia sužinoti, kaip klientai vertina restorano maisto kokybę, o ne tai, ar jiems tiesiog patiko jame apsilankyti. Kuo trumpesnė anketa – tuo geriau. Niekas nenori švaistyti laiko pusvalandį pildydamas anketą apie restoraną.
  • Tiksliai apibrėžk savo tiriamųjų populiaciją, nes nuo to priklausys ir tavo klausimai. Jei darai apklausą apie Pokemonus, tikriausiai gali naudoti ir ne tokią formalią kalbą, nes tavo respondentai bus jauni, bet jei klausinėji apie pensijų fondus, tai ir klausimai turėtų būti labiau solidūs.
  • Klausimai turi būti trumpi ir aiškūs. Juos respondentai turi suprasti be jokių papildomų paaiškinimų.
  • Klausimai turi būti objektyvūs. Neklausk „Ar tau labai patiko mūsų restorane?“ (Bet juk tai savaime suprantama, ar ne?)
  • Kad ir kokį užduosi klausimą visada gausi kažkokį atsakymą, bet ar pats klausimas buvo teisingai suformuluotas ir teisingai suprastas?
  • Geriausia prieš paleidžiant apklausą ją patestuoti su keliais žmonėmis. Reiktų jų paklausti, kaip jie suprato klausimus, ar jiems nekilo neaiškumų. Kiek užtruko laiko užpildyti anketą? Jei testuojama internete, galima pažiūrėti ties kuriuo klausimu žmonės daugiausiai užtrunka laiko – gal jis per sudėtingas ar tiesiog sunku apsispręsti?
  • Apklausa turėtų būtų kuo trumpesnė, bet jei apklausinėji žmones asmeniškai gyvame susitikime, ji gali trukti ir pusvalandį ar valandą. Apklausiant telefonu respondentai ima dairytis į laikrodį po 10-15 minučių, o internete jie dažniausiai pasiruošę paskirti tik keletą minučių. Tiesa, jei apklausos klausimai yra labai įdomūs, jos trukmė gali būti ir ilgesnė, bet geriausia galvoti, kad tavo apklausa nėra labai įdomi.
  • Reikėtų vengti atvirų klausimų, nes juos sunku analizuoti. Analizuojant juos kažkaip reikės sudėlioti į kategorijas, o tai nėra lengva automatizuoti.
  • Internete reikėtų vengti didelių klausimų blokų, kur prašoma nuo 1 iki 10 sužymėti savo vertinimus daugeliu kriterijų (pvz „Nuo 1 iki 10 įvertinkite: grožį, spalvą, kvapą, vaizdą, pojūtį, šaltį, etc“). Dažniausiai tokie klausimų blokai netelpa mobilaus telefono ekrane ir juos labai sunku teisingai sužymėti, ypač jei reikia slinkti ekraną.
  • Respondentai dažnai yra tinginiai ir linkę pasirinkti lengviausią variantą. Jei reikia rinktis iš kelių kategorijų („obuolys“, „kriaušė“ ar „bulvė“), jie dažnai pasirinks pirmą, todėl kartais vertakiekvienam respondentui atsakymus pateikti atsitiktine tvarka.
  • Jeigu vertinimo skalė susideda iš nelyginio skaičiaus kategorijų („įvertinkite nuo vieno iki penkių“), tingus respondentas žymiai lengviau pasirinks neutralią vidurinę reikšmę. Jei būtinai norima, kad respondentas pagalvotų geriau ir išreikštų savo (kad ir silpną) preferenciją, reikia prašyti rinktis iš lyginio skaičiaus kategorijų („nuo vieno iki keturių“ arba „nuo vieno iki dešimt“). Tiesa, skalė nuo vieno iki dešimt dažnai yra per smulki: lengviau apsispręsti, kai galima rinktis iš 4-5-6 kategorijų.
  • Ar leisti rinktis kategoriją „kita“ paliekant vietos įrašyti savo variantą? Dažniausiai taip, bet reikia palikti vietos tik vienam ar dviem žodžiams, kad nebūtų daug vietos plėstis (kiek vietos paliksi, tiek kas nors ir prirašys, o po to tai sukels problemų duomenis analizuojant ir kategorizuojant). Apklausos testavimo metu reikia stebėti, ar daug kas renkasi variantą “kita” ir pagal tai pakoreguoti atsakymų variantus. Galutinėje apklausoje reiktų tikėtis, kad šio varianto pasirinkimas nedominuos.
  • Analizuojant apklausos duomenis reikia atkreipti dėmesį į atsakymų pasiskirstymą. Jei visi repondentų atsakymai yra beveik vienodi, iš apklausos gausi nedaug informacijos. Jei visi tavo restoraną vertina penkiomis žvaigždutėmis, tikriausiai ne visai teisingai formuluoji klausimą.
  • Apklausos pradžioje nedėk demografinių klausimų (amžius, lytis, pajamos ir t.t.), nes respondentui tai nuobodu. Paklausk ką nors intriguojančio, kad respondentas susidomėtų ir norėtų iki galo užpildyti visą anketą. Žmonės nuo pat pirmųjų klausimų savo anketinių duomenų pildyti nenori – jie vis dar sprendžia ar verta paskirti savo penkias ar dešimt gyvenimo minučių tavo apklausai.

Robotas irgi žmogus

Iš pažiūros duomenų analizė yra labai nešališkas ir objektyvus reikalas: paimi krūvą duomenų, perleidi per sudėtingą statistinių algoritmų mėsmalę ir gauni kažkokias įžvalgas. Mūsų produktą labiau mėgsta Marijampolėje, brangesnius produktus moterys perka savaitgaliais, socialiniuose tinkluose sekantys veikėją X skaito portalą Y, bent tris kartus gavę labai didelę mėnesinę sąskaitą yra linkę perbėgti pas konkurentus. Su regresijomis (ar sudėtingesnėmis analizėmis) ginčytis sunku, nes duomenys lyg ir kalba už save. Nebereikia spėlioti ir remtis dažnai mus pavedančia intuicija. Bet algoritmai nėra jau tokie neutralūs: jie klysta visai kaip žmonės, nes jie mokosi iš tų pačių žmonių jiems pateiktų duomenų. Tad aklai pasitikėti algoritmų sprendimais nereikėtų.

Vienas to pavyzdys yra JAV naudojamas algoritmas, sprendžiantis apie nuteisto nusikaltėlio polinkį dar kartą nusikalsti. Neseniai buvo pastebėta, jog šis algoritmas turėjo rasistinių polinkių: jeigu esi juodaodis, jo nuomone, tavo recidyvizmo tikimybė didesnė. Kadangi tokiais algoritmais naudojamasi sprendžiant, kokio dydžio bausmę skirti, juodaodžiai už tokius pat pažeidimus automatiškai baudžiami stipriau nei visiškai toks pats baltasis kaimynas, kuris gyvena beveik identiškomis socialinėmis sąlygomis. Su panašiomis diskriminacinėmis problemomis susiduria ir moterys: algoritmai mano, kad jos turi žymiai mažesnę tikimybę uždirbti aukštesnę algą, todėl net joms net nerodo gerų darbo pasiūlymų. Jei tik keliolika procentų vadovų yra moterys, tai net neverta švaistyti lėšų joms rodant vadovų darbo skelbimus.

Tokią algoritmo klaidą ištaisyti nėra taip paprasta, kaip gali pasirodyti. Net jei įstatymais uždrausi kuriant algoritmą atsižvelgti į žmogaus lytį ar odos spalvą, yra daug kitų su šiais dalykais koreliuojančių faktorių. Jei 82% namų ūkių su nepilnamečiais ir tik vienu suaugusiuoju sudaro vieniša mama su vaikais, tai iš šeimos sudėties nesunku atspėti suaugusiojo lytį. Juodaodžius galima atskirti pagal vardus, o Lietuvos atveju, tautybę tikriausiai nesunku suprasti pagal pavardę. Žmogaus gyvenamosios vietos pašto indeksas irgi labai daug ką pasako.

Dirbtinio intelekto algoritmai yra kaip vaikai, kurie mokydamiesi iš aplinkos pradeda suvokti ryšius tarp kintamųjų. Lygiai taip, kaip svarbu, jog vaikas bendrautų su tinkamais žmonėmis ir augtų ne asocialioje aplinkoje, taip ir algoritmo negalima lengvabūdiškai tiesiog paleisti mokytis į platųjį pasaulį. Tai pernai suprato Microsoft, paleidusi savaime besimokantį Twitterio botą Tay, kuris per kelias valandas iš interneto vartotojų išmoko daug rasistinių frazių ir tapo piktu keikūnu. Net ir akylai prižiūrint dirbtinio intelekto mokymosi procesą, mokymosi pavyzdžių imtis turi gerai atitikti realaus pasaulio proporcijas (o tai nevisada lengva pasiekti). 2015-aisiais Google išleistas atpažįstantis objektus nuotraukose algoritmas sukėlė skandalą, mat juodaodžių nuotraukas klaidingai klasifikuodavo kaip beždžiones: jis mokėsi daugiausiai iš baltųjų nuotraukų. Panašiai, kaip Delfi žino apie automobilius tik tiek, kad jie dažnai patenka į avarijas.

Galų gale net jei ir labai atsargiai suformuosi duomenų imtį algoritmo mokymuisi ir atidžiai prižiūrėsi visą procesą, mūsų visuomenėje yra tam tikrų stereotipų ar šališkumų, kurie atsispindės duomenyse. Jei dirbtinio intelekto algoritmą mokysi naudodamasis 1870-ųjų studentų duomenų baze, tikėtina, jog jis į magistro programą siūlys priimti beveik vien tik vyrus. Jeigu algoritmas išmoksta tavo keistumus ir atsižvelgdamas į tavo iškreiptą pasaulio vaizdą tau siūlo skaityti tik straipsnius apie konspiracijos teorijas, tai tik padidina tavo tikėjimą jomis – algoritmai ne tik kad nepadeda objektyviau suvokti pasaulį, bet vis labiau jį iškreipia. Klaidingi įsitikinimai sustiprinami ir daromos vis didesnės klaidos.

Ar yra išeitis iš šios spiralės? Vargu, ar visiškai įmanoma sukurti idealius algoritmus, nes jie tėra mūsų visuomenės atspindys. Kritinis mąstymas ir skeptiškumas tampa labai svarbiais įrankiais atskiriant tiesą nuo melagingų naujienų, tik šiais hiperaktyviais laikais, kai dėmesį gali sukaupti tik kelioms sekundėms, tai tampa brangu ir nemadinga.

Dear Data,

Vieną Kalėdų senelio dovanotų knygų surijau per vieną vakarą. Dvi profesionalios duomenų dizainerės (net nesu tikras, kaip teisingai vadinti duomenų atvaizdavimu užsiimančiuosius) – viena Londone, o kita Niujorke –  ištisus metus kas savaitę viena kitai siųsdavo ranka pieštus atvirukus su duomenų schemomis, diagramomis ir grafikais. Kiekvieną savaitę jos pasirinkdavo vis naują temą – kiek kartų pasakei „ačiū“, kiek kartų per savaitę nusijuokei, kas kabo tavo spintoje, kas yra tavo geriausi draugai, kiek kartų nusikeikei ar kiek išgėrei alkoholio. Pasirodo, per septynias dienas tokių duomenų galima prikaupti devynias galybes, ypač jei žymėsiesi ne vien plikus faktus, bet ir su šiais faktais susijusias aplinkybes: ne visi pasakyti „ačiū“ yra vienodi, kai kurie būna ištarti kita kalba, kai kurie parašyti elektroniniame pašte, kai kurie buvo pasakyti tik iš mandagumo, o kai kurie ypač nuoširdūs, nes buvo sakyti su meile savo vyrui. Per daugiau nei penkiasdešimt savaičių šios dizainerės sugalvojo daug išradingų duomenų vaizdavimo būdų ir kone kiekviena atvirutė stebina detalių gausa – bet detalės neužgožia bendro duomenų piešiamo paveikslo, jos nenumaldomai traukia gilyn, ten kur abstraktūs agreguoti skaičiai nutrindami ribą tarp statistikos ir asmeninio intymumo pavirsta į atskirus išgyventus faktus. Kai dešimt kartų pasakytas žodis „ačiū“ tampa trimis „ačiū“ padavėjai už pateiktą sriubą, dviem „ačiū“ bendradarbiui už persiųstą emailą, padėka draugui už tai, kad jis šalia ir keturiais „ačiū“, kuriuos turėjai pasakyti, bet neišdrįsai, tai nebe plika statistika: tikrai jautiesi gerai pažįstantis autorę.

Peržvelgus šio projekto atvirutes pradedi suprasti, kad duomenimis savo gyvenime galima paversti beveik bet ką, tačiau vien pats duomenų rinkimas priverčia atkreipti dėmesį į tuos dalykus, kuriuos šiaip būtum praleidęs pro pirštus. Vien tai, kad skaičiuoji šypsenas, verčia tave daugiau šypsotis, vien tai, kad seki savo alkoholio suvartojimą, galbūt daro tavo blaivesniu, vien tai, kad surenki duomenis apie žmones, su kuriais bendravai per savaitę, primena tau, kad reiktų paskambinti seniai matytai tetai. Ką matuoji, tuo ir gyveni. Apie ką nuolat galvoji, su tuo ir susitapatini. Bet norint daugiau judėti neužtenka nuolat ant rankos nešioti Fitbit apyrankę – jei duomenys surenkami paprastai ir neskausmingai, į juos lengva numoti ranka ir užsimiršti. Kuo sunkiau duomenis teko rinkti ir analizuoti, tuo juos vertini rimčiau. Kartais nėra blogai duomenis sąmoningai užsirašinėti ranka: tai leidžia stabtelti ir pagalvoti apie kiekvieną konkretų stebėjimą.

Be to, kad ši knyga apie duomenis, ji dar priminė, jog reikėtų dažniau sakyti „ačiū“, tad dar kartą dėkoju Kalėdų seneliui už „Dear Data“.

Ką turi mokėti analitikas

Neseniai iš skaitytojo gavau klausimą: ką turi mokėti analitikas? Klausimas ne toks jau paprastas, nes neužtenka išvardinti kelias programavimo kalbas ar paminėti kelias technologijas: negali būti jokio baigtinio sąrašo prie kurio sudėliojus varneles galėtum sakyti, kad, va, šitas analitikas tikrai yra geras. Juk tai tėra tik įrankiai.

Nors daugelis analitiko negali įsivaizduoti be matematikos ar statistikos žinių, manau, kad pati svarbiausia sritis, kurią turi išmanyti analitikas yra verslas, kuriame jis dirba. Juk jokios naudos iš to, kad gali sudaryti labai protingą statistinį modelį, jeigu verslas iš to negali padaryti jokių protingų įžvalgų. Sugebėti užduoti teisingus klausimus ir į juos atsakyti gal ir ne šimto procentų užtikrintumu, bet greitai ir efektyviai versle yra labai svarbu. Ir labai dažnai būna, jog teisingai ir laiku užduotas klausimas („o mes toje šalyje sudarėme galimybes atsiskaityti debetinėmis kortelėmis?“) atneša žymiai daugiau naudos nei sudėtingi modeliai, beribės procesoriaus galios bei aukštosios matematikos diplomai. Gal būt dėl to ne visada akademinėje srityje daug pasiekusiems žmonėms sekasi dirbti analitikais: tam reikia kiek kitokios patirties, greito mąstymo ir susitaikymo su tuo, kad nemažai sprendimų gali būti ir klaidingi.

Verslo poreikių supratimas sudėtingas ir tuo, kad nelabai aišku, iš kur to mokytis – tai įgyjama per patirtį. Kai jau matai nebe pirmą ekonomikos nuosmukį, gali numatyti, kas bus su apyvartinėmis lėšomis, kai siuvi nebe pirmas kelnes, žinai, kad šitos medžiagos tiekėjas kartais vėluoja, kai klientų kreditingumą analizuoji nebe pirmus metus, supranti, kad verta atsižvelgti ir į kliento amžių ar šeimyninę padėtį. Bet tokios informacijos neperskaitysi kokioje nors vienoje knygoje: reikės ilgai ir aktyviai tuo domėtis. Todėl labai svarbu, kad analitikas būtų žingeidus, domėtųsi savo analizuojama sritimi bei mokėtų uždavinėti teisingus klausimus. Atsakymai ateis su patirtimi.

Aišku, techninės žinios analitikui irgi reikalingos: juk reikia mokėti iš duomenų atrasti dėsningumus. Kadangi nemaža analitiko darbo dalis yra duomenų traukimas ir valymas, analitikui praverstų mokėti elgtis su duomenų bazėmis (dažniausiai tai reiškia, jog vertėtų neblogai žinoti SQL kalbą). Duomenis transformuojant reiktų mokėti kokią nors programavimo kalbą: R, Python, Ruby ar dar ką nors ne itin sudėtingo. Tai labai pagreitina duomenų analizės darbus, jau nekalbant apie tai, kad šių programavimo kalbų reikės norint daryti sudėtingesnes duomenų analizes – Excelis yra lyg vaikiškas kastuvėlis, lyginant su kitais įrankiais, kuriais reikia mokėti norint kapstytis didelių duomenų sankaupose.

Beje, matematikos žinių analitikui ilgai gali neprireikti – jeigu nedaromi sudėtinti dirbtinio intelekto modeliai, visiškai galima apsieiti ir be jos. Matricų algebra tampa naudinga tik labai pažengusiems. Bet be statistikos žinių toli nenueisi: reikia žinoti, kas yra statistinis reikšmingumas tam, kad šią savaitę dviem procentais nukritus pardavimams nepultum į paniką – gal būt tai tik pokytis normalių svyravimų ribose. Neprošal žinoti ir kaip analizuoti laiko eilutes – trendų ir sezoniškumo analizė gali duoti puikių įžvalgų.

Dar viena dažnai pražiūrima analitiko savybė: mokėjimas komunikuoti. Kad ir kokias protingas įžvalgas iš duomenų padarytum, jas reikės papasakoti kitiems kolegoms, ir dažniausiai p-reikšmės, autokoreliacija ir Chi kvadratas jiems absoliučiai nieko nesakys. Geras analitikas moka duomenis prašnekinti: rasti įžvalgas, jas suprantamai pavaizduoti grafikuose ir įtikinamai aprašyti žodžiais (ir nebijoti prieš auditoriją papasakoti jas gyvai). Puikus to pavyzdys yra Gitanas Nausėda – mokėjimas komunikuoti neretai yra svarbiau nei pačios sudėtingiausios akademinės analizės superkompiuteriais. Man pačiam to vertėtų pasimokyti.

Antro rinkimų turo prognozė pasitelkiant neuroninius tinklus

Pirmiausia turiu įspėti: nemanau, kad reikėtų į gautus rezultatus žiūrėti labai rimtai. Neuroninio tinklo mokymui naudojau tik 2012-ų metų Seimo rinkimų apygardų duomenis, tad imtis labai nedidelė, o tai turėtų lemti ir gana nemažą paklaidą prognozėse. Galbūt tikslesnių rezultatų būtų galima tikėtis naudojant apylinkių, o ne apygardų duomenis.

Prognozuoti šių metų rezultatus iš 2012-ų metų duomenų nelengva ir dėl stipriai pasikeitusio partijų populiarumo: žalieji valstiečiai prieš ketverius metus nebuvo labai patrauklūs rinkėjams, o ir Skvernelio atsiradimas labai šią partiją pakeitė. Įdomu tai, kad Darbo partijos bei tvarkiečių kritimas iš aukštumų gana gerai atsispindi neuroninio tinklo rezultatuose: jiems prognozuojama laimėti mažiau apygardų nei jie šiuo metu pirmauja.  Kad ir kaip ten būtų, gavau tokį rezultatą:

Prognozė Dabar pirmauja
LVZS 24 21
TSLKD 24 22
LSDP 9 10
LRLS 5 4
LLRA 3 3
TT 2 4
KITI 1 2
DP 1 3
NEP 2 2

Neuroninis tinklas „išmoko“, jog stiprus lenkų pirmavimas apygardoje dažniausiai lemia ir pergalę antrame ture. Algirdui Paleckiui pergalė neprognozuojama, nes istoriniai pernai metų duomenys rodo, jog „Frontui“ ne itin sekėsi – bet jo puikus pasirodymas pirmame ture tikriausiai buvo netikėtas ir daugeliui politikos analitikų. Keisčiausia prognozė, kuria sunku patikėti yra 52-oje Visagino-Zarasų apygardoje, kurioje antrame ture kausis Darbo partija su tvarkiečiais (pergalė prognozuojama Darbo partijai, nors stipriai pirmauja tvarkietis Dumbrava). Keistoka, bet gal ir logiška 40-osios Telšių apygardos prognozė, kur stipriai pirmaujantis darbietis turi mažai šansų atsilaikyti prieš valstietį Martinkų. Kaip jau minėjau, Darbo partijai šis modelis daug šansų nepalieka. Visas apygardų sąrašas su prognozuojamais nugalėtojais ir tikimybėmis, kad nugalės pirmaujantis:

Turint nedaug istorinių duomenų tikriausiai labiau pasitikėčiau politikos ekspertų prognozėmis konkrečioje apygardoje arba modeliuočiau tikimybes kiek kurios partijos rėmėjų ateis į antrą turą bei palaikys ne savo partijos kandidatą: būtent tokį modelį ruošia WebRobots komanda, kuri leido man pasinaudoti jų surinktais iš VRK duomenimis. Idėja patreniruoti neuroninį tinklą ir kilo susidūrus su problema ar nebūtų galima kaip nors statistiškai išskaičiuoti tikimybių, kiek, tarkim, socialdemokratų palaikytų konservatorių kandidatą jei jis būtų likęs prieš darbietį. Taip pat galima pažiūrėti į Vaidoto Zemlio prognozes.

Post Mortem

Rezutatai buvo stipriai kitokie, nei buvo tikimasi: daugiausiai prašauta (tikriausiai dėl to, kad 2012-aisias valstiečiai pasirodė ne itin įspūdingai) su LVŽS ir TSLKD. Tam tikros tendencijos buvo teisingos – Darbo partija, Tvarka ir Teisingumas bei Socialdemokratai iš tiesų gavo mažiau mandatų nei buvo pirmaujama po pirmo turo, tuo tarpu liberalai sugebėjo laimėti daugiau apygardų nei pirmavo po pirmo turo, tačiau šių pokyčių mastas buvo žymiai (žymiai žymiai) didesnis. Iš viso, neuroniniai tinklai sugebėjo atspėti 48 apygardas (67% tikslumas). Palyginimui – rankomis dėliotas Webrobots komandos modelis pasiekė 80% tikslumą. Tiesa, atmetus kai kuriuos nelogiškus neuroninio tinklo siūlymus, kurie plika akimi atrodė keisti ir pataisius prognozę Dainavos apygardoje dėl Vinkaus skandalo (ko iš 2012-ųjų duomenų niekaip nebuvo galima žinoti), buvo galima pasiekti maždaug 75% procentų tikslumą. Ne kažką, bet šis tas.

Skaičiuojant modelio patikimumą, dažnai žiūrimas plotas po Receiver Operating Characteristic (ROC) kreive (kuo gerenis modelis, tuo jis turėtų artėti link vieneto). Štai modelių palyginimai:

Area under ROC curve
Neuroninis tinklas (tikimybės) 0.597143
Webrobots modelis 0.708095
Neuroninis tinklas (binarinis) 0.549048
Laimės pirmaujantis 1 ture 0.500000
Laimės pirmaujantis daugiamandatėje 0.487619

O čia pačios ROC kreivės:

Skirtingų modelių ROC kreivės

 

Skaitykite toliau

Kaip skiriasi partijos pagal Manoseimas.lt duomenis

Prieš kelias dienas pasirodė manoseimas.lt svetainė, kurioje, atsakius į 12 klausimų, galima pasilyginti, kuri partija buvo arčiausiai jūsų nuomonės. Buvo įdomu paanalizuoti, kurios partijos yra panašiausios ir kiek jos skiriasi. Liberalai ryškiai kitokia opozicinė partija, bet išties, jiems artimiausi socialdemokratai, o ne konservatoriai.

Koreliacijos tarp partijų

Manoseimas.lt pateikia duomenis apie partijų balsavimus dvylika klausimų. Sudėjus visus duomenis į vieną CSV (kurį galima rasti http://petras.kudaras.lt/notebooks/manoseimas.csv) galima paskaičiuoti koreliacijas tarp partijų balsavimo:

data = read.csv2('/Users/petras/dev/manoseimas.csv', sep=',', header=T, row.names=1)
data = data/100
t(data[1:7,])
##                           TT   DP LSDP   AW LRLS   MG TSLK
## Šauktiniai              0.92 0.89 0.96 0.72 0.95 0.79 0.91
## Meras                   0.82 0.94 0.89 0.85 0.31 0.89 0.55
## Internetinis_balsavimas 0.49 0.80 0.91 0.11 1.00 0.74 0.22
## Darbo_kodeksas          0.91 0.79 0.98 0.15 0.95 0.41 0.42
## Švietimas               0.91 0.92 0.86 0.60 0.29 0.63 0.42
## Vaiko_teisės            0.74 0.78 0.91 0.44 0.76 0.40 0.34
## Alkoholis               0.59 0.53 0.55 0.68 0.44 0.75 0.82
## Pensijos                0.79 0.85 0.89 0.25 0.88 0.24 0.30
## Pabėgėliai              0.96 0.91 0.97 0.89 0.59 0.84 0.84
## Dviguba_pilietybė       0.94 0.90 0.94 0.83 0.91 0.81 0.64
## Asmenvardžiai           0.81 0.61 0.69 0.83 0.51 0.29 0.15
## Privati_informacija     0.76 0.76 0.81 0.59 0.75 0.63 0.74
kable(round(cor(t(data[1:7,])), 2))
TT DP LSDP AW LRLS MG TSLK
TT 1.00 0.57 0.50 0.45 -0.08 0.04 0.30
DP 0.57 1.00 0.85 0.07 0.10 0.36 0.13
LSDP 0.50 0.85 1.00 -0.23 0.51 0.12 0.00
AW 0.45 0.07 -0.23 1.00 -0.57 0.48 0.52
LRLS -0.08 0.10 0.51 -0.57 1.00 -0.19 -0.06
MG 0.04 0.36 0.12 0.48 -0.19 1.00 0.68
TSLK 0.30 0.13 0.00 0.52 -0.06 0.68 1.00

Mano paties rezultatai manoseimas.lt svetainėje mane nustebino, nes, pasirodo, mane geriausiai atstovauja Tvarkos ir Teisingumo partija. Iš tiesų, jų koreliacija su mano nuomone yra tampriausia.

kable(round(cor(t(data)), 2))
TT DP LSDP AW LRLS MG TSLK PETRAS
TT 1.00 0.57 0.50 0.45 -0.08 0.04 0.30 0.61
DP 0.57 1.00 0.85 0.07 0.10 0.36 0.13 0.12
LSDP 0.50 0.85 1.00 -0.23 0.51 0.12 0.00 0.07
AW 0.45 0.07 -0.23 1.00 -0.57 0.48 0.52 0.41
LRLS -0.08 0.10 0.51 -0.57 1.00 -0.19 -0.06 -0.01
MG 0.04 0.36 0.12 0.48 -0.19 1.00 0.68 -0.24
TSLK 0.30 0.13 0.00 0.52 -0.06 0.68 1.00 -0.07
PETRAS 0.61 0.12 0.07 0.41 -0.01 -0.24 -0.07 1.00

Pagrindinių komponenčių analizė

Nenuostabu, jog Facebooke daugelis save laikančių liberalais pamatė, jog jiems geriausiai atstovauja LSDP: liberalų koreliacija su šia partija tikrai geriausia. Bet matyt koreliacijos nėra viskas. Gal galima nupiešti partijų pozicijas vienoje koordinačių erdvėje? Tam galima panaudoti pagrindinių komponenčių analizę (principal component analysis) ir išskirti tiesiškai nepriklausomas komponentes. Tada galima pabandyti pavaizduoti partijas viename dvidimensiniame grafike.

  ggbiplot(prcomp(data[1:7,]/100, center=T), scale=0, 
           labels=rownames(data[1:7,]), var.axes=F)

Nieko keisto, kad koalicijos partnerės LSDP, TT ir DP balsuoja labai panašiai - jos ir glaudžiasi viename grafiko kampe. Tuo tarpu LRLS yra labai skirtinga opozicinė partija, ji patenka visai į kitą kampą nuo TSLK ar kitų opozicinių partijų. Kita vertus, nors LRLS ir geriausiai koreliuoja su LSDP, ji tolokai nuo jos nutolusi. Lygiai kaip ir nuo TSLK.

Tai į ką aš panašus?

Padariau interaktyvų grafiką: pastumdžius atsakymus, galima pastebėti, kaip artėjama ar tolėjama nuo vienos ar kitos partijos. Labiausiai nuo liberalų skiriuosi tuo, kad esu prieš internetinį balsavimą. Būtent šitas klausimas geriausiai atspindi radikalų skirtumą ašyje tarp lenkų AW ir LRLS ir labai stipriai mane atitolina nuo liberalų. Žaistis bus žymiai patogiau, jei atsidarysite šią nuorodą naujame lange: https://petras.shinyapps.io/manoseimas/

Įtakingiausių verslininkų analizė

Vakar dariau šiokią tokią analizę, apie kurią jau rašiau Facebooke. Šiandien tiesiog bandau būdą, kaip įkelti šią analizę į dienoraščio formatą. Geresnę notebook versiją galima rasti čia, o žalius duomenis šiuo adresu.

Svarbiausia pastraipa tiems, kas tingi skaityti viską:

Įdomu tai, kad politikai daug įtakos suteikia asociacijų ir konfederacijų veikėjams, bet verslininkams jie įspūdžio nedaro: grafiko apačioje liko Danas Arlauskas bei Stasys Kropas. Matyt politikams su jais tenka nemažai bendrauti, bet reali jų įtaka kyla ne iš pačių asmenybių, o iš atstovaujamų interesų. Tuo tarpu verslininkai žymiai daugiau reikšmės suteikia Dariui Mockui bei Nerijui Numavičiui: asmenims, kurie atstovauja savo pačių interesus. Gal kiek netikėtai trečias tarp labiausiai politikų nuvertintų verslininkų yra Dalius Misiūnas: energetika verslininkams labai svarbu, bet ji kontroliuojama valstybės ir pačių politikų, tad politikai energetikų galios nesureikšmina.

Tarp didžiųjų bankų ekonomistų irgi įdomus prasilenkimas: Gitanas Nausėda bei Raimondas Kuodis yra politikų ekonomistai, o Nerijus Mačiulis ir Jekaterina Rojaka – labiau verslininkų.

Delfi įtakingiausi verslininkai

Kiekvienais metais portalas Delfi daro svarbių žmonių apklausas ir taip išrenka įtakingiausius šalies žmones. Pasižiūrėjus į įtakingiausių verslininkų rinkimus pasirodė, jog politikai ir patys verslininkai labai skirtingai vertina tam tikrų verslininkų įtaką, tad ką politikai nuvertina ar pervertina?

Tam pirmiausia reikėjo išsivalyti duomenis. Po keliasdešimt search-replace operacijų iš HTML teksto pasidariau švarų CSV, kuris jau tinkamas analizei.

verslas = read.csv2('/Users/petras/datadev/verslininkai.csv', header=TRUE, sep=",")
head(verslas)
##         Verslininkas Politiku_balas Verslininku_balas Pop_balas
## 1    Robertas Dargis            128                89         9
## 2    Gitanas Nausėda             93                62         9
## 3      Darius Mockus             58                68        16
## 4 Nerijus Numavičius             56                62        18
## 5   Nerijus Mačiulis             41                39         4
## 6     Arvydas Avulis             36                22         4
##   Ziniasklaidos_balas Visuomenininku_balas Tarnautoju_balas
## 1                  54                   80              103
## 2                  46                   64               78
## 3                  53                   36               56
## 4                  50                   36               41
## 5                  30                   28               42
## 6                  23                   17               51

Duomenų normalizavimas

Žymiai patogiau dirbti su santykiniais skaičiais, tad absoliučius balus paverčiau į santykinius, padalindamas juos iš kiekvienos kategorijos respondentų skaičiaus (bent jau spėju, jog būtent tai reiškia maksimalus galimas balų skaičius kategorijoje). Santykinis rodiklis reiškia, kokia dalis respondentų pažymėjo konkretų verslininką kaip vieną iš 5 įtakingiausių Lietuvoje.

verslas %>% 
  mutate(Politiku_balas = Politiku_balas / 196) %>%
  mutate(Verslininku_balas = Verslininku_balas / 137) %>%
  mutate(Pop_balas = Pop_balas / 29) %>%
  mutate(Ziniasklaidos_balas = Ziniasklaidos_balas / 93) %>%
  mutate(Visuomenininku_balas = Visuomenininku_balas / 106) %>%
  mutate(Tarnautoju_balas = Tarnautoju_balas / 160) -> verslas

Tiesinė regresija

Pritaikome paprastą tiesinę regresiją.

fit <- lm(Verslininku_balas ~ Politiku_balas, data=verslas) -> fit
summary(fit)
## 
## Call:
## lm(formula = Verslininku_balas ~ Politiku_balas, data = verslas)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.118173 -0.017360  0.002104  0.012048  0.192314 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -0.002738   0.006480  -0.423    0.674    
## Politiku_balas  1.036687   0.049748  20.839   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.04563 on 68 degrees of freedom
## Multiple R-squared:  0.8646, Adjusted R-squared:  0.8626 
## F-statistic: 434.3 on 1 and 68 DF,  p-value: < 2.2e-16

Kad jau turime regresiją, kurios R^2 yra 0.86, galima pasižiūrėti, ką labiausiai vertina verslininkai, lyginant su politikais.

verslas$diff <- residuals(fit)
verslas %>% 
  ggplot(aes(x=diff, y=reorder(Verslininkas, diff))) + theme_light() + 
    geom_point(size=1) + 
    geom_segment(aes(y=Verslininkas, yend=Verslininkas, 
                     x=0, xend=diff, color=(diff>0))) +
    geom_point(size=1) + 
    theme(axis.text.y=element_text(size=6), axis.title=element_text(size=8)) + 
    guides(color=F) + ylab("") + 
    xlab("Verslininkų vertinimas, lyginant su politikais") 

Įdomu tai, kad politikai daug įtakos suteikia asociacijų ir konfederacijų veikėjams, bet verslininkams jie įspūdžio nedaro: grafiko apačioje liko Danas Arlauskas bei Stasys Kropas. Matyt politikams su jais tenka nemažai bendrauti, bet reali jų įtaka kyla ne iš pačių asmenybių, o iš atstovaujamų interesų. Tuo tarpu verslininkai žymiai daugiau reikšmės suteikia Dariui Mockui bei Nerijui Numavičiui: asmenims, kurie atstovauja savo pačių interesus. Gal kiek netikėtai trečias tarp labiausiai politikų nuvertintų verslininkų yra Dalius Misiūnas: energetika verslininkams labai svarbu, bet ji kontroliuojama valstybės ir pačių politikų, tad politikai energetikų galios nesureikšmina.

Tarp didžiųjų bankų ekonomistų irgi įdomus prasilenkimas: Gitanas Nausėda bei Raimondas Kuodis yra politikų ekonomistai, o Nerijus Mačiulis ir Jekaterina Rojaka - labiau verslininkų.

Balsuojančiųjų koreliacijos

Ne visos balsuotojų grupės turi vienodą nuomonę. Galima paskaičiuoti koreliacijas tarp skirtingų balsuotojų.

cor(verslas %>% select(-Verslininkas, -diff))
##                      Politiku_balas Verslininku_balas Pop_balas
## Politiku_balas            1.0000000         0.9298451 0.6915122
## Verslininku_balas         0.9298451         1.0000000 0.8094200
## Pop_balas                 0.6915122         0.8094200 1.0000000
## Ziniasklaidos_balas       0.8891672         0.9622906 0.8549599
## Visuomenininku_balas      0.9585121         0.9400149 0.6876915
## Tarnautoju_balas          0.9715207         0.9244120 0.6896682
##                      Ziniasklaidos_balas Visuomenininku_balas
## Politiku_balas                 0.8891672            0.9585121
## Verslininku_balas              0.9622906            0.9400149
## Pop_balas                      0.8549599            0.6876915
## Ziniasklaidos_balas            1.0000000            0.8930495
## Visuomenininku_balas           0.8930495            1.0000000
## Tarnautoju_balas               0.8978414            0.9541088
##                      Tarnautoju_balas
## Politiku_balas              0.9715207
## Verslininku_balas           0.9244120
## Pop_balas                   0.6896682
## Ziniasklaidos_balas         0.8978414
## Visuomenininku_balas        0.9541088
## Tarnautoju_balas            1.0000000

Atrodo, jog labiausiai išsišoka Popkultūros ir sporto atstovų nuomonė. Jų atotrūkis dar geriau matosi spalvotame grafike:

qplot(x=Var1, y=Var2, 
      data=melt(cor(verslas %>% select(-Verslininkas, -diff))), 
      geom="tile", fill=value) +
  xlab("") + ylab("") + guides(fill=F) + theme_light() + 
  theme(axis.text.x=element_text(angle=90)) 

Nenuostabu, kad tarnautojai ir politikai turi labai panašias nuomones (koreliacijos koeficientas net 0.97). Šiose dviejose grupėse buvo apklausta net 160 + 196 = 356 respondentų, tad vienoda valdininkų/politikų nuomonė rinkimuose yra labai stipriai reprezentuojama. Žiniasklaida yra antra labiausiai „nepriklausoma“ grupė (koreliacija su kitomis grupėmis mažesnė nei 0.9), nors jos nuomonė geriausiai koreliuoja su verslininkų nuomone.

Vilniaus viešojo transporto duomenys

Niekada iki šiol nenaudojau dplyr R paketo, tad norėjau pasižiūrėti, kaip jis veikia (o veikia jis tikrai patogiai!). Kadangi neseniai buvo paviešinti Vilniaus Viešojo Transporto vėlavimų duomenys, tai kaip tik šis duomenų rinkinys pasirodė tinkamas pasižaidimui. Kadangi tai labiau techninis galimybių bandymas, tai didelių įžvalgų ir neieškojau, nors visgi radau, kad privatūs vežėjai vėluoja žymiai rečiau nei VVT, troleibusai yra patikimesni nei autobusai, o savaitgaliais viešasis transportas yra punktualesnis (kuo nereiktų stebėtis – juk eismo mažiau).

Nevėluojančių reisų dalis
Nevėluojančių reisų dalis

Detaliau ir techniškiau, su visu kodu: Notebook: Transportas-vėlavimai