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 :-)


12 responses
Díky za zajímavý článek, nejzajímavější jsou vždy ta promítnutí teorie do praktických příkladů. Vzpomínám si ze statistiky (což je už nějaký pátek), že pro identifikaci odlehlých pozorování (anomálií) se používalo pásmo ± 3 směrodatné odchylky (μ ± 3σ), což je jen 0,63% hodnot souboru, které se myslím z dalšího zpracování odstranily. V článku to ale nezmiňujete, proto mě zajímá, zda-li se v praxi odlehlá pozorování v rámci předzpracování dat ze souboru odstraňují vždy/vůbec a nebo je tam nějaký další faktor kdy odstranit/neodstranit (např. záleží na povaze analýzy, kterou nad daty provádíme, či přesnost výsledků, které chceme dostat) ?
Můžu se zeptat, v čem jste vytvářel ty pěkné vizualizace? Díky za informaci!
@Roman Sklenář: Díky, jsem rád, že se vám to líbí! +/-3 směrodatné odchylky - podle mě jde vždycky o charakter dat. Statistici (alespoň mám ten pocit) vždycky pracují s korpusem dat typu "populace ČR". Jim pak vyhovuje vyhodit 0.63%. V datech, které jsou blízké naší práci (BI) se většinou potřebujeme zbavit hodnot, které nemají smysl díky nějaké technické podmínce (například je v datech místo 0 několik 9tek nebo prázdné datum není NULL ale 1970-01-01). V takovém případě chceme poznat tzv. "outliers" (nevím, jak je to správně česky, popis je tady: http://en.wikipedia.org/wiki/Outlier). Na to se pak směrodatná odchylka nehodí.
@Petr Jirásek: Tohle je seznam zdrojů, od shora dolů. Posthaven.com bohužel neumí popisovat obrázky, proto to tam nepíšu - bylo by to protivně v textu. 1) GoodData 2) http://yakezie.com/203705/featured/build-robust... 3) GDrive 4) http://www.mathsisfun.com/data/standard-deviati... 5,6) Rko+Skitch 7,8,9) Stará prezentace od Lorenzo Albertona, sám zdroj neuvádí (http://www.slideshare.net/slideshow/embed_code/...)
Hmm, ten první graf je fakt zvláštní. Nad +2sd nebo pod -2sd by mělo být jen 2% dat, ale na tom grafu je toho od pohledu spousta. Nahoru to šahá až někam k +10sd. Skoro mi přijde, že to Ray Light blbě spočetl. Jinak praktických využití to má hodně. Třeba u finančních produktů. Když cena slítne pod -2sd, tak nakupujete, když vylítne nad +2sd, tak prodáváte. (tohle je jedna z nejjednodušších strategií - bacha, neaplikujte bezhlavě, je potřeba to nad konkrétními daty dost důkladně otestovat)
Jeee, mam tvuj obdiv, parada :) Zrovna delame na alertovacim systemu a tohle jsme meli v 2do (jak zjistit ktere live video ma prave ted sledovanost mimo normalni prubeh v danou dobu), takze jsi nam zrejme usetril nejake ty mozkove zavity :) DIKY!
Zdravim, zajimalo by me co si myslite o tomto clanku: http://www.edge.org/response-detail/25401 Dekuji
Díky za pěkný článek. Taky to využiváme v produktu pro alerty. Uživatel si například může nastavit alert, který se aktivuje když je odezva systému větší než MEAN+2STDEV a podobně.
Existuje k tematu skvela kniha: Naked Statistics od Charlese Wheelena. Takove Statistics 101
"Mám-li mnoho dat, nemůžu je většinou vidět všechny najednou." - právě že už docela často i můžeme, třeba na 4k monitor se vejde 8M bodů, a když se použijí třeba 3 barevné složky, tak je to s přehledem celá ČR, skoro dva a půlkrát. A "humans are excellent pattern matchers" ( https://segment.io/academy/the-secret-to-real-t... ). Používat displeje s miliony pixelů na zobrazení 10 - 100 těžce agregovaných čísel ve sloupcovém grafu považuju za ekvivalent řízení formule 1 podle třech čidel parkovacích senzorů...
Tomáši, to je hrozně naivní představa. Člověk je sice asi dobrej "pattern matcher", ale zobrazením diskrétních hodnot úplně nevyřešíš všechny "BI" problémy.
Petře, jasný - jiná věc jsou nástroje k 'obrábění' dat a pohledů na ně, abychom ten pattern matching mohli využít (zjednodušený příklad - týdenních patternů si asi líp všimnu na vizualizaci v gridu kde x = týden a y = dayOfWeek, než na grafu kde x čas). Hlavní postesk byl, že v naprosté většině vizualizací je vidět max pár desítek datových bodů (platí i o gooddata dashboardech). Asi za to může cargo kult používání pár základních grafů z excelu (který pak podědily i skoro všechny komponentové knihovny). Tohle je třeba ukázka bohatější vizualizace (zvlášť se zmenšením na 50 %): http://bl.ocks.org/mbostock/4063318