Další úspěch Kebooly - energetika a analýza dat v cloudu

Když jsem před 5ti lety začal obcházet místní trh a prodávat “pomůžu vám vyznat se v datech”, narážel jsem na nepochopení, strach z cloudu a lobby různých interních sil mých potenciálních zákazníků. Za těch pár let ušli Češi velkou cestu a nám se otevřely dveře do spousty firem, o kterých se mi dřív mohlo jen zdát. 

Loni v říjnu jsem popsal 8 důvodů, proč se firmy bojí cloudu. Myslím, že ve světle našeho nového klienta získá jakýkoliv argument "proč nezpracovávat data v cloudu” spíš jasnější obrysy výmluvy, protože plácnutí si s MND posunulo Cloud BI v ČR daleko do vod “offline korporátního businessu”.

MND (Moravské naftové doly) jsou největší těžební společností ropy a zemního plynu v České republice s více jak stoletou tradicí. Zároveň nabízí druhou největší skladovací kapacitu plynu v ČR.

27.1.2014 vstoupila MND a.s. na trh prodeje plynu domácnostem a o 4 měsíce později jsme jim po úspěšném “proof of concept” projektu zapli do produkčního prostředí analytiku dat, kterou pro ně zajišťuje úderné kombo Keboola Connection s "analytickým modulem” od GoodData.com. Celý projekt byl na BI svět neskutečně svižně - v našem paymo.biz má natrackováno 70 hodin - čili necelé 2 týdny práce. Lví podíl na takové rychlosti má samozřejmě skvělá příprava od lidí v MND a.s., kteří vědí, co chtějí, umí se perfektně ptát a jejich interní IT je hyper-kompetentní sehraná parta.

Z pohledu laika je pro mě business MND zhmotněný do fascinace zásobníky plynu a automatizovanými “hnízdy” na Moravě, kde jsem před dvěma lety překonal pud sebezáchovy a skrz plot s výhružnými cedulemi udělal jednu fotku.

Jak nás MND používá?


Srdcem celé analytiky v MND je náš produkt "Keboola Connection", což je kombinace datového skladu v cloudu a přidružených služeb, které umožňují data čistit, obohacovat (rozpoznávat v datech lokality a dotahovat k nim předpověď počasí nebo třeba odhadovat další nákup existujícího zákazníka) a různě auditovat, a nebo třeba posílat do dalších služeb. Součástí Keboola Connection je zároveň nativní napojení na GoodData.com, která pro nás slouží jako takový analytický modul. Máme tendenci říkat, že jsme “Fedex na data” - kdekoliv je vyzvedneme a kamkoliv je doručíme. Po cestě s nimi navíc umíme udělat různá kouzla.

Aby vůbec mohl podobný projekt vzniknout, bylo hlavní podmínkou MND, že jejich analytický tým zůstane samostatný a nebude se muset na nás spoléhat. Cílem pak bylo integrovat dohromady různé zdroje dat a umožnit nad výsledkem sledovat efektivitu přímého prodeje plynu domácnostem skrz dealerskou síť. Pro tyhle účely aktivně vysáváme pomocí Google Analytics extraktoru data o chování lidí na webu mnd.cz a od interního IT dostáváme (pomocí našich open source klientů) data z interního informačního systému přímo na naše Storage API + k nám třetí partner obdobnou cestou posílá data z call centra, kde se řeší telesales a customer support.

Nad těmito daty běží různé sady transformací a matematických detekcí, které tvoří podklady pro analytiku akvizičního funnelu (aka “monitoring prodeje služeb”) a jak je ovlivňovaný pohybem lidí na webu. Zkoumá se nad tím kvalita a výkony dealerské sítě (sales analytika) + následná funkčnost call centra (jak dlouho s kým mluví, o kolik hovorů přijdou, protože zákazník dlouho čekal, atd.) a jeho vliv na celý business proces.

Co bude dál?


Věřím, že BI v oblasti sledování kvality prodeje zafunguje skvěle a analytici v MND začnou pracovat nad dalšími druhy dat - analýza těžby si o to úplně říká. 

Možná i díky nám - nejefektivnější cestě jak analyzovat vlastní data z mnoha různorodých zdrojů - zůstane MND jedním z nejlevnějších dodavatelů plynu pro domácnosti, jaký na trhu dneska je (mrkněte sami: https://www.mnd.cz/plynzprvniruky/kalkulacka#vypocet)! 

Držte jim i nám palce!

P.S. Credits: Tomáš Netrval a Martin Matějka

SQLdep

Máme tu v Praze jednu hodně perspektivní partu, která zatím uniká pozornosti médií. Loni v prosinci mě s nima na “šunkovým” mejdanu seznámil Eda z Avastu. Říkal, že mu je někdo z Wayra dost chaoticky pitchnul jako partu, co optimalizuje SQL dotazy (což není pravda).


Martin Masařík (vpravo) mi v těžké opilosti popsal co dělá a na první dobrou se trefil do problému, který hrozí v každém našem analytickém projektu. Martin stojí za službou sqldep.com, do které se pošle SQL kód a ona ho celý rozebere, zanalyzuje a vizualizuje. K analytikovi se vrátí vizuální vztahy všech operací v databázi. Zní to trochu jako #firstworldproblem, ale pravda je taková, že podobný nástroj potřebuje každý rozjetější 'data tým'.

Dneska jsou firmy plné různých SQL dotazů, pomocí kterých se analytici dotazují interních databází a vytahují data pro různé reporty. SQL, které vrátí počet zákazníků s produktem “abc” vypadá jednoduše:

SELECT Count(client_id)
FROM   clients
WHERE  product = 'abc';

Problém je v situaci, kdy je SQL dotaz veliký a jeho autor navíc opustil firmu před 4 lety a úpravy v něm máte dělat zrovna vy! Chce-li po vás někdo udělat v podobném dotazu změnu, máte na výběr - buď to budete 2 dny zkoumat nebo použijete SQLdep a změnu uděláte přesně a neomylně tam, kde má být. Je rozdíl, jestli máte k dispozici pouze SQL dotazy nebo interaktivní vizualizaci, ve které vidíte souvislosti a dopady:

Kluci ze SQLdepu mají za sebou implementaci svého nástroje v GE bance a co vím, tak se perspektivně chytají v České spořitelně.

Představím-li si situaci, kdy mi někdo řekne, že se od příštího měsíce změní v datech nějaký sloupec a já mám SQL scripty, které mají tisíce řádků, jdu si to bez SQLdepu asi hodit. S ním je to easy úloha - kliknu na vstupní sloupce a vidím všechny souvislosti a na druhý klik i konkrétní řádky SQL příkazů. Vyjádřeno v ušetřeném čase bankovních data-mining expertů a ve větší bezpečnosti prováděných změn, tečou klukům peníze proudem. Podobné nástroje existují jako přidružené tooly kolem databází samotných, ale často jsou drahé (nekoupíte to každému kdo by to potřeboval), neohrabané nebo třeba něco klíčového nezvládají (pl/sql). Dělat podobnou věc jako online nástroj s API je super. 

P.S. Akorát finišujeme implementaci jejich API do Keboola Connection. Všichni naši zákazníci budou mít SQLdep k dispozici nejpozději od konce června. Rozšíří se tím naše existující vizualizace ETL procesů, takže zjistit kde je potřeba upravit transformace odvozených attributů v GoodData projektu bude úkol z kategorie “trapárna” :-)

Google BigQuery workshop s Felipe Hoffa

Včera odpoledne pod taktovkou Felipe Hoffa proběhl workshop na téma “Google BigQuery”. Sešlo se tam asi 15 lidí, které na CZ trhu BigQuery láká. Felipe, jako Google Developer Advocate stručně proskákal historii zpracování velkých dat v Google - počínaje MapReduce v roce 2004, přes white paper Dremelu, konče dnešním BigQuery.

Je evidentní, že do toho Google masivně šlape a nechává konkurenci pěkných pár let za sebou. Pro běžného smrtelníka je BigQuery nejdostupnějším nástrojem na zpracování velkých dat na trhu, přičemž Felipe zmínil usecase australského telco operátora Telstra, který v BigQuery zpracovává logy, ze kterých extrahuje eventy - což do té byl schopen dělat pouze nad 1% svých dat.


Jedenáct věcí, co stojí za vypíchnutí:
  • Nová cenová politka - jak objem zpracovaných dat, tak samotné úložiště masivně zlevnilo 

  • Vysvětlení, jak fungují JOIN EACH a GROUP EACH BY (Shuffler nody zpětnovazebně zapojují zpracovaná data zpět na Leaf nody) 

  • Možnost v reálném čase dělat dotazy na data, která se do BigQuery streamují. Limit na stream je 100.000 řádků / sec proti jedné tabulce. Google to řeší oddělením streamovaných dat od standardně naloadovaných CSV/JSON (které se musejí přeparsovat pro sloupcové uložení) 
  • Překvapila me nativní podpora pro dělání kartézských součinů. Nevím proč, ale jsem zvyklý, že se jim chce člověk vyhnout. BigQuery má na to nově CROSS JOIN. 
  • Konektory k BigQuery. Co si nejsem jistý, jestli spojení BigQuery a Hadoopu implikuje kopírování dat “pryč” nebo se MapReduce joby spouští přímo v BQ. Super mi přijde, že v případě že si platíte Google Analytics Premium, můžete traffic data exportovat v jejich nejnižší granularitě do BigQuery a dotazovat se jich jako SQL databáze. 

  • BigQuery bude brzo podporovat uživatelské funkce, napsané v Javascriptu!
  • Felipe aktivně skáče kolem Reddit skupiny, kam dává cokoliv zajímavého kolem něj projde. Jiný jeho kámoš provozuje http://bigqueri.es/, kde jsou příklady dotazů a sample data. 
  • Pěkný příklad korelace: Které letiště umí lépe předpovědět lety z NY 

SELECT a.departure_state, b.departure_state, corr(a.avg, b.avg) corr, COUNT(*) c FROM (SELECT date, departure_state, AVG(departure_delay) avg , COUNT(*) c FROM [bigquery-samples:airline_ontime_data.flights] WHERE departure_state = 'NY' GROUP BY 1,2 HAVING c > 5 ) a JOIN (SELECT DATE(DATE_ADD(timestamp(date), 1, 'DAY')) date, departure_state , AVG(departure_delay) avg, COUNT(*) c FROM [bigquery-samples:airline_ontime_data.flights] GROUP BY 1,2 HAVING c > 5  ) b ON a.date=b.date GROUP EACH BY 1, 2 HAVING c > 5 ORDER BY corr DESC; 

  • Existuje projekt http://gdeltproject.org/, který od roku 1979 denně mapuje všechny země na světě (broadcastované zprávy, tištěné média, online deníky,…). Sleduje tak vztahy ve společnosti (s podporou 100 jazyků). V BigQuery je jako public dataset o objemu 90GB. Dataset najdete tady: https://bigquery.cloud.google.com/table/gdelt-bq:full.events. Je skvěle anotovaný a výborně se hodí na hraní. Tady je příklad, který ukazuje rok za rokem vztahy čechů a okolních států, podle zaznamenaných událostí: 

SELECT Year, Actor1Name, Actor2Name, c FROM  (SELECT Actor1Name, Actor2Name, Year, COUNT(*) c, RANK() OVER(PARTITION BY YEAR ORDER BY c DESC) rank FROM (SELECT REGEXP_REPLACE(Actor1Name, "CZECH REPUBLIC", "CZECH") Actor1Name, REGEXP_REPLACE(Actor2Name, "CZECH REPUBLIC", "CZECH") Actor2Name,  Year FROM [gdelt-bq:full.events] WHERE Actor1Name < Actor2Name), (SELECT REGEXP_REPLACE(Actor2Name, "CZECH REPUBLIC", "CZECH") Actor1Name, REGEXP_REPLACE(Actor1Name, "CZECH REPUBLIC", "CZECH") Actor2Name, Year FROM [gdelt-bq:full.events] WHERE Actor1Name > Actor2Name), WHERE Actor1Name IS NOT null AND Actor2Name IS NOT null AND (REGEXP_MATCH(Actor1Name+Actor2Name, 'CZECH')) AND Actor1Name != Actor2Name GROUP EACH BY 1, 2, 3 HAVING c > 100) WHERE rank=1 ORDER BY Year;

  • Existuje rozšíření do Chrome, které umožnuje výsledky rychle vykreslit do grafů, počítá cenu dotazu, konvertuje timestampy, apod. 
  • V kanclu Google jsou na záchodě kartáčky na zuby 

Na závěr se nejaktivnější účastníci z Netmailu vyfotili 

a rozproudila se diskuse. V podvečer měl pak Felipe přednášku na FELu. Na to, že akorát přiletěl a měl jetlag, je dost hustej! :-)

Jak hlídáme útratu v našem Amazon AWS účtu?

Dlouhodobě jsem řešil, jak se dívat na náklady v Amazon AWS. Před lety jsme platili pár dolarů, pak stovek a dneska se nám měsíční účet pohybuje mezi 80.000 až 120.000,- Kč (a trend nepříjemně roste). Mimo jiné jsme si na to zařizovali dedikovanou platební kartu, protože když jsem odklikával na ČSOB kartě limit 150kKč pro platby na internetu, začlo mi pak bejt nepříjemný její číslo strkat kamkoliv jinam.

Za poslední dobu Amazon v “billingu” udělal poměrně pokrok, ale pořád to není to co bych chtěl. Platí, že nemají žádnou motivaci vás upozornit na zbytečně běžící služby (ze kterých jim padají $$) a rozhodně moc nepomáhají s optimalizací účtu. 

Pak jsem náhodou objevil službu Cloudability z Portlandu. Je skvělá! 

Platíme $49/měsíčně (cena je odvozená od útraty na AWS) a hned po prvním zapnutí jsem objevil různé zapomenuté Elastic IP adresy, neběžící LoadBallancery a (to bolelo nejvíc) pár velkých EBS s Provisioned IO, které se nepoužívaly. Spolehlivě jsem si povypínáním těhle AWS služeb ušetřil na 2~3 měsíce provozu Cloudability :-)

Jak to funguje?

Amazon umí logovat detaily o využití infrastruktury do S3 bucketu. Zapíná se to v sekci Billing > Preferences:


Data jsou poměrně pěkně čitelná:


ale scházel jim “nástroj” na míru. 

Kromě kvanta pěkně připravených pohledů na útratu, umí Cloudability dělat ad-hoc reporty až tří dimenzí a tří metrik (zamazal jsem hostname a jména klientů)


a posílat denní reporty s útratou:


Na ty koukám letmo na mobilu a hned je mažu. Jediné co sleduju je, zda tam není nějaký šílený skok (používáme SPOT instance s vysokým "bidem" a může se nám to poměrne snadno to stát).

Kdyby tohle měl Petr O. od svého providera, nemusel by se s nima hádat o meloun za konektivitu (k hacklýmu serveru jeho zákazníka, který měl blbej tarif na přenesený data)


... protože by si "průseru" všiml ihned.

Používáte-li AWS, určitě Cloudability zkuste, stojí to za investované úsilí!

Už je to 3 roky, Keboolo...

Před 3 lety nám Michael Gear podepsal první smlouvu na nákup platformy...

Téměř přesně rok předtím jsem na dovolené na Šumavě po večerech tlačil svoje první data do GoodData. Ou, jak to bolelo! :) Takhle jsem zformuloval do emailu první dojem:

Vlastně mě dneska překvapuje jak jsem intuitivně “trefil” důležitý aspekty z týhle zkušenosti. Vzpomínám si, jak to bylo silný. 

Tehdá jsme pro První multimediální v Keboole dělali zakázkovej vývoj a denně se prali s jejich (později EtNetera) projekťákama. Fér je říct, že to s náma taky asi neměli snadný a utrpení to mohlo bejt na obě strany. Do GoodData jsem teda zákonitě nahrával exporty z Atlassian JIRA. Tohle byly jedny z mých prvních reportů vůbec. Po tom UI se mi docela stejská :)

Když už jsem u toho vzpomínání, tak jsem si vylovil fotku našeho prvního “vlastního” kanclu. Byla to jedna místnost v paláci Lucerna za 12.000,- Kč měsíčně, kterou jsme měli v kanceláři WIA spol. s r.o. Jsem moc vděčný za vstřícnost s jakou nám lidi z wia.cz se vším pomáhali. Bylo to super období - takovej správnej boj o přežití. Díky, Filipe!

2011

Ten první kontrakt s GoodData jsme podepsali pro Centrum Holdings a de-facto celý rok 2011 v tom sami sebe hledali. Těší mě, že tam úplně původní GoodData projekt funguje dodnes na stejném datovém modelu. 

V polovině roku 2011 jsme vykopli první certifikovanou aplikaci (Facebook Insights data). Pokud mě pamět neklame, byli jsme první non-GoodData firma, kdo něco takového udělal. Uzavření smlouvy a domluvení $$ na prodej téhle analytické apky bylo dost peklo - a tady masivně nastupuje na scénu Milan Veverka, můj dnešní společník a parťák, bez kterého bysme dneska asi leštili okna těm EtNetera projekťákům :-) 

Koncem roku 2011 konečně dejiny leštiček CDček dojdou tam, kam 2 roky předpovídám a Milan opouští svoje tehdejší zaměstnání (šéfkonstruktér a designer strojů, co leští CD/DVD/BR) a nastupuje do svýho basementu jako náš 1. fulltime člověk mimo ČR. Musel na tenhle krok mít hodně odvahy, respekt!

2012

V Praze máme 2 analytiky, 3.5 vývojáře a support kolem. V Kanadě je 1 člověk. BI dělá asi 24% našeho obratu. První commit Storage API do GitHubu! Na naší tiskárně se tisknou akcie Apiary.io, Klára hraje “svědka” při jejich podepisování.

Koncem roku 2012 odjíždí do Kanady Ondra Hlaváček. Má pomáhat Milanovi. Zakládáme v Kanadě firmu a přijímáme první 2 místní zaměstnance. Nemáme moc peníze a plán je, že si je vyzkoušíme a jednoho z nich si necháme a druhého horšího budeme muset propustit. Adam a Cameron jsou ale megahustý borci a necháváme si je oba. Tou dobou máme na Tomášovi Trnkovi v Praze otestovaný draft prvních “Report Master” Keboola Academy projektů a díky nim bootujeme Adama i Camerona do GoodData ekosystému (rozuměj MAQL) de-facto za 14 dní. Adam v 1. měsíci u nás implementuje projekt pro Shazam, který končí velkým úspěchem a pro nás ziskem (= nedoplácíme na Adamovu vejplatu). Zároveň získáváme velkého zákazníka - bojí se, aby neinspiroval svojí konkurenci, proto nás tlačí k zákazu jmenovat ho v referencích (#trapáci) - který si nás nachází sám - posílá nám poptávku přes kontaktní formulář. Ten ale u nás pankáčů nikdo nečte. Takže nám od nich během 14 dnů přijdou do schránek 2 další urgence. Když je to ve fázi že nás prosí, abysme mu zavolali, přijde nám že asi nepůjde o indickej spam a voláme mu zpět - uf! Tohle je náš první projekt, který má šestimístný rozpočet v dolarech - začíná pro nás novej level hry. 

2013

V lednu máme plnohodnotný analytický týmy v Praze a Vancouveru, BI dělá 84% našeho obratu. Kolem GoodData věcí maká 6 analytiků a 5 programátorů (+ support kolem). 

V květnu v Kanadě nastupují další lidi. V Brně se přidává Odin. Je nás celkem asi 20 a BI dělá 100% našeho obratu. Po létě se Nailoš a Kachna přesouvají z White Rock kanclu do vlastního baráku v severním Vancouveru - izolujeme tak analytiky od programátorů (tady by se mohla GoodData od nás inspirovat - hodně věcí by to u nich prospělo) a získáváme trochu víc místa pro další lidi co tam nastupují. Koncem roku je jasné, že se do stávajícího kanclu nevejdeme - začíná nám první CAN stěhování, paralelně s tím nabíráme další lidi. Rok 2013 končíme dost spokojeně. 

Q1/2014 ve zkratce

Nastupují 3 další lidi (2 v ČR, 1 v CAN), odchází Vojta Roček, pouštíme se s Pavlem Doležalem do offline analytiky, zamilovávám se do nového datového zdroje (počítačové vidění), zapínáme další typ backendu (AWS Redshift) a Elasticsearch u nás hraje víc a víc rolí. GoodData oznamuje "Open Analytics Platform" (nechám si na separátní téma). 


Uf, budu si muset sepsat věci časem víc podrobnějc. Stalo se toho za tak krátkou dobu strašně moc... Mám pocit, že jsme loni byli úplný matlalové. Snad je to dobrý znamení! 



Data Hackathon v NODE5

Tak máme za sebou hackathon v Node5, zaměřený na data. S nápadem podobnou akci zorganizovat přišel Petr Ocásek a nás v Keboole nemusel vůbec přemlouvat - hned jsme byli pro. Cílem akce bylo dát dohromady lidi, kteří si chtějí zkusit různé technologie a v příjemném prostředí Node5 si jen tak pohrát.

Ze mě se stal samozvaný fundraiser - GoodData.com jsem nabídl, že mají unikátní šanci přispět hotovostí pěkně na dřevo a že jim za to nabízíme jen dobrej pocit a nulovou propagaci, protože by pak Lukáš Hudeček akci prohlásil za komerční a zničil nás nájemní hustosazbou Node5. Jarda Gergič z GoodData bez mrknutí oka otevřel peněženku a vysloužil si tím náš nehynoucí respekt. My jsme ještě přihodili 7k. Chvilku to vypadalo, že se za takovouhle datařskou akci postaví ještě StartupYard, ale nakonec z toho sešlo, asi protože budou daně nebo co a kluci teď šetří každou korunu :)

Pátek

V Node5 bylo natřískáno! FB event sliboval 85 lidí, nakonec dorazili všichni kromě Pavla Čurdy, který dal přednost gauč surfingu v Brně :)

Večer byl o prezentacích, jídle a networkingu. Telegraficky:

  • Jan Hřivňák z Futurelytics; nevím co říkal, protože jsem u toho usnul (den předtím jsme měli v Keboole náročnej mejdan :)
  • Štěpán Bechyňský ukazoval Excel a nějakej add-on, kterej mu vyhodil tunu errorů. Všichni se začali smát - to mě probudilo! Nakonec to rozběhl a vypadalo to docela super - data o měření hluku a vibracích na dálnici D11, zobrazený v mapě
  • já jsem měl říct něco o BigQuery, Redshiftu a Vertice. Myslím, že se potvrdilo, že nejsem lev salónů, zvlášť po mejdanech :)
  • Štěpán Bechyňský pak ještě ukazoval různý mikropočítače - vypadalo to dost surově hackersky 
  • Adam Herout z Click2Stream ukazoval možnosti počítačového vidění - jsem na baru, neodnáším si z toho nic > to mě trochu mrzí, vypadalo to super
  • Dva kluci z Ataccama.com tam pak ukazovali blejskavý sales prezentace svýho hadoop řešení; míň self-promo, chce se mi říct...

Zbytek pátku byl pak ve znamení skvělého jídla od Gazdinka a kecání s lidma. Vzhledem k mojí únavě z předchozího mejdanu jsem zaparkoval v pytli, kde mě našel Martin Podval a Štefan Pacinda

Pracují v HP na projektu, který umí simulovat pokročilé SOAP/REST/whatever systémy - takové hustoadvanced Apiary.io. Ještě s Ondrou Popelkou jsme spolu asi hodinu povídali o GoodData, HP, jejich projektu a Vertice. 

Sobota

Vyrážíme na 9:00 do Node5. Pavel a Ondra spí u mě (bydlím nově za rohem). Ráno je ve znamení vykopnutí skutečné práce. 

Kebooláci se rozdělují mezi “naše” svěřence - Click2Stream a Twisto. Začínám rychlovysvětlením, proč je pro ně GoodData super - nakonec před všema lidma, protože je o to docela zájem. Jdu na dřeň a atakuju interní programátory, co míchaj chartové knihovny a vlastní SQL dotazy na data. Ukazuju “report explain” a rozvoj MAQL na SQL + vypichuju API. Nevím jak se to chytlo, ale jsme na hackathonu, ne? :) Dotazy jsou jen k realtime datům - s tím se vypořádávám protidotazem, zda je potřeba z realtime měřiče teploty vody v reaktoru dělat Month-to-Date a drillovat do toho. Chvilku řešíme rozdíl mezi BI a reportingem. 

Twisto a Click2Stream se přesouvá do menší místnosti, kde se bavíme o business kritériích jejich projektů, povídáme o tom, jak se do GoodData data dostanou a co s nima bude nutné předem udělat. 

Na tuhle diskusi se nabalí další lidi a já začínám mít z celé akce moc příjemný pocit.

Twisto

Tým twisto má připravená data v docela dobré kvalitě a přináší si existující reporting. Tomáš Trnka celý GoodData projekt vykopne za 60 minut.

V tu chvíli do toho už kluci klikají o 106. Velmi rychle se koukají například na

  • dynamiku fakturací
  • upomínky po zákaznících
  • profit share s e-shopama
  • podíl zaplacených a nezaplacených faktur

... všechno pěkně filtrovatelné časem, typem zboží či skupinama zákazníků. Po obědě už běží domů, za ně hotovo (trochu škoda, mohli jsme kutit další věci).

Click2Stream

Tým Click2Stream do hackování dat nastoupil s vervou a velmi masivně. Všechny svoje firemní data otevřeli a pustili k nim každého kdo měl zájem. Odměnou jim za to byl tým, do kterého se přidal z venku například Adam Mika, Michal Procházka a Jan Panoch. Společně jsme pak drtili GoodData v asi osmičlenném seskupení - spolehlivě největší stolní hnízdo na celém hackathonu.

Celý den byl ve znamení validace dat, žhavých diskusí o rozdílu price vs total price nebo o referenční integritě dat na vstupu. Odměnou za vynaložené úsilí je seznam zlepšení do jejich produktu; například nemazat v DB kamery, které jsou vypnuté, protože jsou k nim v účetnictví historické transakce. 

Ke konci dne jsem se ještě bavil s klukama ze sinfin.cz, kteří dělali mapování pohybu po Node5 pomocí BT4 zařízení. Vypadá to super, hned mi hlava brousí k našim klientům - určitě spolu něco upečeme! 

Node5 jsme opouštěli lehce po 23:00. Petr Ocásek tam spí na gauči, aby ráno brzo otevřel holkám co dovezou snídani - respekt! Já si domů tentokrát přivádím Tomáše Trnku a 2 staroprameny. 

Alena z nás musí být nadšená :-))

Neděle

Před snídaní v Node5 je nutné se doma řádně nasnídat. Páreček od Dolejších a čerstvá vajíčka nám dělají základ na dopolední sprintování za počítačem. Několik prvních hodin to v Node5 vypadá, že náš tým Click2Stream+Keboola je jedinej, kdo přijde pracovat - ostatní osamělé hackery totálně válcujeme “na počet”. Kolem 11 se to ale dost srovnává a Node5 hučí jako v úle.

Dopoledne trávím laděním modelu a transformací. Tomáš Trnka obíhá stul a radí s MAQL metrikama a kurzama v Keboola Academy. C2S tým je ale bystrý jako nikdo jiný, v poledne jsou z nich ostřílený borci a do projektu sázejí pohledy na 

  • expirující plány v nejbližších 30 dnech
  • revenue share po streamovacích plánech
  • nárůst zákazníků
  • poměr orders vs refunds
  • % placených kamer co nemají zaplé automatické obnovení plánu
  • chargebacks
  • CLV zákazníka, apod

Dělá mi dobře, když vidím, jak jim to jde. 

Roman Staněk by měl radost - roste jim tu nová generace Haplíků /* internal joke */ :-)

Vyhlášení

Hlasovalo se v průběhu prezentací pomocí http://sli.do. Výsledky: 

  1. sinfin.cz a jejich bluetooth monitoring lidí - kluci rozmístili po Node5 BT4 beacony a sbírali pomocí dobrovolníků data o pohybu v prostoru. Výsledky jsou super! Trápí je usínání aplikace v iPhone, ale věřím že to zlomí (cc Lukáš Foldyna)
  2. daty.cz a vizualizace vazeb mezi firmama - Adam Kurzok nám ukázal, že kluci z Mitonu maj větší assety než kluci z Credo Ventures :-)
  3. Futurelytics a data o kriminalitě - celou sobotu je trápilo získání čistších dat než původně měli, pak je v Google BigQuery pročistili a upravili a na jejich instanci v AWS nad tím provedli K-means segmentaci. Výsledky dali do Excelu. Tomáš Trnka jim nabídl, že jim to hodí do GoodData, což využili a GoodData dashboard ukázali. Vypadalo to dost dobře!

Překvapením na závěr byl pak opět Tomáš Trnka, který si od kluků z Futurelytics vzal jejich data a vedle jejich GoodData projektu si udělal ještě druhý, na kterém nám prezentoval, že se dle údajů v datech rozhodně nevyplatí 

  • Braní rukojmích
  • Nedovolená výroba a držení radioaktivního a jaderného materiálu
  • Vojenské trestné činy
  • Výtržnictví - útoky na záchranáře

... jelikož jsou ve ~100% případů vyřešené

a naopak můžeme dost lehkovážně páchat

  • Krádeže leteckých zásilek
  • Sdělení nepravdivé informace, která může ohrozit bezpečnost nebo provoz vzdušného dopravního prostředku za letu
  • Padělání a pozměňování peněz
  • Manipulace s kurzem investičních nástrojů
  • Nesplnění oznamovací povinnosti v daňovém řízení

... jelikož jsou objasněné v ~0% případů

Na úplný závěr jsme (Kebooláci) dostali od Click2Stream prasečí nohu - epický! 

Díky moc, nebejt tam kamery, asi vás obejmu :)

Ende

Hackathon byl super! Rád bych poděkoval Petrovi Ocáskovi, že celé tohle dítko vymyslel a porodil. Jídlo od Gazdinka.cz, lidi co se tam sešli, prostor Node5, vymyšlené nápady - jedním dechem paráda. Na závěr jen doufám, že nejpozdějc do roka bude další kolo! :) 

Kdo dočetl až sem, tady jsou blogposty a fotky ostatních, pokud víte o dalších, pište do komentářů, prosím.


Proč nevlastním dům?

Protože je potřeba se o něj starat. Nedávno jsem si to ověřil - v květnu 2012 jsme si s Káčou postavili barák.

Byl super! Vlastní zahrada, 3 koupelny, celej z přírodních materiálů... Pak jsme museli na chvilku odjet, přestali se o něj starat a takhle to dopadlo:

Tak zatím zůstanem tam kde jsme... :)


Jak poznat v datech anomálie? Směrodatnou odchylkou!

Loni v září napsal Ray Light mini how-to, jak vyrobit v GoodData směrodatnou odchylku (dneska už tam je přímo vlastní funkce). S nástupem GoodData AQE se hřiště s metrikama krapet rozšířilo a začne se ukazovat, kdo nad věcma jak přemýšlí. 

Směrodatná odchylka mě trochu trápí, resp. její skutečná aplikace. Pořád jsem si říkal, k čemu je mi dobré vědět, že nějaké věci jsou větší než 2 směrodatné odchylky? V Rayově grafu to vypadá takhle:

Pak mě Ondra Popelka přivedl hláškou “to je celý na prd, když nevíš rozložení dat” k tomu, trochu si to pro sebe sesumírovat. Nuže…

Co je směrodatná odchylka?

Matematickou definici si můžete najít na wikipedii. Humpolácky řečeno, je směrodatná odchylka číslo, které lze použít dvěma způsobama:

  1. definuje nám interval, do kterého spadá určité % událostí/hodnot/…; pokud sledovaná data mají navíc tzv. "normální rozložení”, víme o tomhle intervalu i pár dalších vlastností
  2. za všech okolností nám říká, o kolik je nějaká množina dat uvnitř různá
(1) Normální rozložení

Pokud si vyneseme data do grafu tak, že na Y-ose budeme mít četnost a na X-ose budeme mít hodnotu (teplota, prodejní cena, barva vlasů, značka ukradeného auta, …), vyrobíme graf, který nám ukazuje, jak máme data rozprostřená. Pokud bude tvar připomínat zvoneček (bell curve), máme normální rozložení. U něj platí, že vrcholek udává nejčetnější výskyt (osa Y) a zároveň je tohle číslo průměrem (a i mediánem). Takovéhle rozložení dat má spousta dějů v biologii, chyby měření v nějaké laboratoři nebo třeba počty lidí podle jejich IQ. 

Všichni víte, že se říká, že IQ 100 je průměr. Pak platí, že nejvíc lidí má IQ 100 a čím menší/větší IQ, tím méně lidí jej má. 

Pokud spočítáme směrodatnou odchylku nad daty, které mají normální rozložení, získáme super věc: interval +/- 1 směrodatná odchylka od průměru bude pásmo, do kterého se nám vejde 68% všech hodnot. Pokud vezmeme pásmo +/- 2 směrodatné odchylky, získáme pásmo ve kterém máme 95% všech hodnot.

(2) Různorodost dat

Mám-li mnoho dat, nemůžu je většinou vidět všechny najednou. Kdyby mi někdo odečítal teplotu každou minutu, měl bych 1440 naměřených hodnot za jeden den. Přitom mi stačí vědět, že dopoledne bylo 11 stupňů a odpoledne 16. V určitých situacích ocením doplnění takto zprůměrované (zagregované) hodnoty o směrodatnou odchylku, spočítanou ze všech hodnot v intervalu, který mě zajímá.  Směrodatná odchylka totiž bude nulová, pokud jsou všechny data shodná. Čím víc se data od sebe liší, tím vyšší bude jejich směrodatná odchylka. Příklad s teplotou by vypadal takto:

Průměrná teplota v 10 i 11 hodin byla 22.03 stupně Celsia. Směrodatná odchylka mi ale poví, že v 10 hodin byl rozkmit dat veliký, zatímco v 11 hodin se naměřené teploty téměř neliší.

Co s tím?

Znám-li charakteristiku rozložení dat, mohu směrodatnou odchylku použít k snadnému izolování nejméně pravděpodobných dějů (anomálií).

“Ukaž mi věci, které jsou vyšší/nižší jak 2 směrodatné odchylky!”

= dostanu množinu dat zabírající (statisticky) 2.5% nejnižších a 2.5% nejvyšších hodnot, vím totiž, co mi směrodatná odchylka reprezentuje

Na webu mathisfun.com ukazují jak rozdělit psy na skupinu s “normální” výškou kohoutku a na skupinu s nenormální. Graficky to vypadá takhle:

Celý trik je v tom, že nám směrodatná odchylka pomáhá říct, “kolik” má být horní a dolní interval. Pokud ale budu zkušený chovatel, střelím to asi prostě od oka a nebudu se s tím jakkoliv zdržovat :-)

Lidi bohužel často inklinují k tomu, že začnou směrodatnou odchylku používat bez znalosti charakteristiky jejich dat. Pak má ovšem směrodatná odchylka pro takové použití význam shodný s “bulharskou konstantou”, protože neumím kvantifikovat, vůči čemu je “odchylkou”. Jakákoliv interpretace je v takové chvíli dost na tenkém ledě a snadno se mi stane, že vyleju dítě s vaničkou, protože mi směrodatná odchylka blbě nastavila hranice.

Strojové určení průběhu dat není úplně jednoduché. Tady mám příklad (histogramu) objednávek, které nemají čistě normální rozložení. Když se na ně podíváme, mají dva "vrcholy":

A teď babo raď ! Může to mít v zásadě 2 použitelné interpretace:

  1. přes všechny objednávky nemám normální rozložení a směrodatní odchylka mě zavede spíš na scestí
  2. mám v objednávkách 2 (zatím neznámé) druhy dat, které se mi překrývají

V případě, že se mi povede prokázat, že mám v datech množiny, které mají “něco” společného a v rámci tohoto “něčeho” mají normální průběh, mám docela vyhráno. Otevírá mi to pak snadnou cestu k další pokročilé statistice. Možná jsou objednávky z histogramu třeba takovéhle:

Najdu-li takové množiny - mohou tím být dvě skupiny sobě podobných produktů nebo chování levičáků vs. pravičáků - má velký smysl s nima pracovat odděleně. Kdo to myslí s BI vážně, měl by si na to dát pozor (reklama: detekce průběhů dat je v Keboola Connection hotová, zákazníkům to spouštíme během února).

Ať pracuje stroj!

Jak jsem nakous nahoře, směrodatná odchylka mi poví, jak jsou jednotlivé hodnoty dat od sebe rozdílné. Mám-li například data o tom, jak mi na youtoube kanále fanoušci komentůjí produktové video, můžu pomocí směrodatné odchylky detekovat příliš velký zájem. Hezké na tom pak je, že bude-li se kadence komentářů zvedat plynule, bude se odchylka podle toho adaptovat. To je jedna z jejích výhod oproti tvrdě nastavenému pásmu, nad/pod kterým chci dostávat notifikaci (ať jde o vlnu na sociálních sítích nebo počty vratek v e-shopu).

V praxi bych například mohl říct, že budu počítat medián (Percentile 50%) po hodinách a z posledních 10ti mediánů spočítám směrodatnou odchylku. Překročení takto nadefinované hranice pak bude důvodem k upozornění na zvláštní událost:

Pomocí toho jde velmi snadno definovat takový “alertovací rukáv” nebo statické pásmo. Jeho schopnost adaptovat se na průběh dat pak ovlivní období, za které počítáme z mediánů směrodatnou odchylku. 

Kdo dočetl až sem, má můj obdiv! Kdyby se někomu chtělo postavit v GoodData praktické příklady na použití směrodatné odchylky, bude mít obdivy dva :-)


Krize BI dashboardů

Lidi se v datech nevyznali - tak si našli nástroje, jak si pomoct. Od roku 1958, kdy Hans Peter Luhn poprvé použil termín “Business Intelligence”, do konce 80 let celé odvětví pomalu kráčelo směr termínům jako jsou datové sklady, OLAP kostky, apod. V roce 1989 Howard Dresner definoval BI jako “koncepty a metodiky ke zlepšení business rozhodování postaveného na systémech pracujících s fakty”.

Od té doby BI zrálo jako víno až do dnešních dnů, kdy narazilo na strop a zažívá podle mě drobnou krizi.

Dashboard Krize

Krize je v zahlcení daty. Už né daty v surové podobě, ale daty, které jsou kategorizované a nějak matematicky upravené (reprezentované v podobě, kterou nazýváme “reporty"). 

Představte si, že máte velké množství dat. Víte že je v datech schováno spousta zajímavých informací - často vědomě přehlížených “long tailů” (long-tail je v obchodních datech definovaný jako množina velmi malých prodejů, které mohou společně zabrat tržní segment přesahující relativně malé množství bestsellerů). Takže vezmete nástroje, které vám data postahují na jedno místo, vyčistí, učešou a odprezentují - a začnete se na ně dívat (Keboola + GoodData). 

Časem ale přijdou 2 negativní efekty:
  1. rezignace / syndrom toustovače - v datech vidíte stále stejné informace. První týdny se v nich vrtáte, ale v čase upadá vaše pozornost spolu s tím, jak vám z dat (při pasivním používání) vycházejí věci, které jste se naučili odhadovat (Avast bude mít i zítra >200M uživatelů => tohle není informace, kterou potřebují denně připomínat). Pokud si pořídíte nový toustovač, jíte první týden jen tousty a pak jej dáte do skříně a tam na něj padá prach - něco podobného se vám může stát i v BI
  2. utopení / syndrom zavalení daty - při vhodném nástroji, který vám umožní zanořovat se do vašich dat, generujete jeden report za druhým - všude je přece něco zajímavého - a tak generujete reporty, až se v nich ztratíte

V momentě, kdy máte stovky reportů, selhává jakékoliv třídění, tagování nebo správné metodické pojmenovávání. Nastane efekt, kdy se v tom nikdo z vašich kolegů nevyzná a místo hledání dříve vyrobených reportů začnou lidi generovat od znovu nové a nové. Obchodní ředitel sice ví, že někde existuje report, který ukazuje "odhad marže na další 4 týdny podle předpokladů od sales manažerů”, ale najít ho je těžší než si ho znovu vyrobit (což je v případě GoodData enormě kvalitní znamení!).

Kudy z toho trh zkouší ven?

  • Použití přirozeného jazyka - Microsoft se ve svém “Power BI” snaží porozumět dotazům, podobně jako se ptáme vyhledávače. V takovém případě musí být přirozený jazyk napojený na sémantický model vedoucí k datům. Hezky se to ukazuje (viz odkaz na Power BI), ale dobře to vystihl Odin, můj kolega, který po přečtení jednoho takového článku reagoval:

"Precet jsem to a imho je to trosku bullshit, protoze clanky tohoto typu vychazi pravidelne od 50 let - s tim, ze zpracovani prirozeneho jazyka je ‘nadosah' :) Neboli nejlepsim obecnym vysledkem interaktivni prace s pocitacem (dotazovani se pocitace na neco) je zatim jazyk SQL, ktery puvodne mel byt tak jednoduchy, ze ho kazdy zvladne napsat jako vetu, a pak se ukazalo, ze realita (a tedy i prirozeny jazyk) je tak dementne slozita, ze ten jazyk je bohuzel taky dementne slozity a musis ho studovat 5 let, aby ses ho naucil poradne (stejne jako prirozeny jazyk).”

  • Použití vizuálního rozhraní mezi počítačem a člověkem - vidět je na příkladu BIRSTu. Je to krásně udělané marketingové video, ale jakmile se model dat (tedy vztahy mezi informacema) stane dostatečně složitým, přestane vizuální rozhraní fungovat - nerozumí co po něm chceme nebo se jeho ovládání tak zkomplikuje, že zmizí všechny jeho výhody.

Jak tomu pomůžeme my?

Je důležité nakombinovat od každého něco. Dál zůstane nejpodstatnější, aby mohl mít každý přístup k libovolné informaci kterou cítí že potřebuje (real-time validace hypotéz). Vedle toho musí stroje trochu pomoct s přehrabováním se ve výsledcích dat - abysme nemuseli generovat stovky pohledů na data s cílem najít “to ONO”.

V Keboole od léte 2013 připravujeme systém, který se tohle snaží vyřešit. Dneska je to téměř hotový soubor funkcí, které dokáží poznat typ dat (čas, IDčko, číslo, attribut, aj. - nazýváme to "data profiller"), vztahy v datech (pozná to třeba jak spojit google analytics a salesforce data) a následně provést spoustu testů, díky kterým se identifikují zajímavé momenty. Například je možné najít v datech zákazníky u kterých je zřejmá sezónost - na kterou je možné v předstihu upozornit - aniž by někdo musel přijít s nápadem něco takového provést. Náš systém v datech odhadne, kde je pospaný konkrétní zákazník a pokud u něj něco zajímavého najde, upozorní na to. Ideálně tak, že v GoodData vygeneruje report, který je automaticky filtrovaný na danou situaci. 

Pro typ dat “online transakce” máme sadu testů, které se snaží zajímavé momenty nalézt. Například test s pracovním názvem “WrongOrderTest” udělá histogramy všech kombinací faktů (typicky peněz) a attributů (produkty / lokality / měsíce / kategorie uživatelů / aj.). V nich pak zkontroluje, zda počty IDček (například objednávek) klesají shodně spolu se svojí hodnotou. Je-li nějaký attribut v nějaké kombinaci anomální, považuje to test za důvod k alarmu.


Na obrázku je pro konkrétní období a konkrétní produkt (nebo třeba skupinu uživatelů) nalezený nečekaný pokles profitu při konkrétním typu platby - tedy zvláštní chování. V případě, že vás nenapadne přesně takováhle kombinace reportu, nemáte prakticky šanci na tuhle situaci přijít, protože bude nejspíš schovaná v “long-tailu” dat a sama o sobě na vás nevyčouhne. Navíc o týden dřív/později se stejná anomálie nemusí vůbec opakovat - potřebujete tedy kontinuální detekci.

Můj cíl je, aby data která v Keboole držíme, byly periodicky testovány a jejim majitelům podobné zajímavé momenty předkládány formou materializovaného dashboardu v jejich GoodData projektech. Poslední co nám schází je definovat jak jednotlivé testy budeme konfigurovat - jejich síla je ve vzájemném provázání testů. Všechno ostatní - data profiller, testy, podpůrné R-kové funkce, API, backend servery, apod. je hotové. 

Tak kdo nemá co na práci, můžete nám držet ve finiši palce :-)