V minulých lekcích EDA jsme se hodně soustředili na zpracování dat a jejich vizualizaci a když už jsme zavadili o nějakou tu statistiku, řešili jsme ji převážně intuicí. Takový přístup funguje vcelku dobře, dokud je naše analýza jen povrchovým zkoumáním a nepotřebujeme své výsledky někde oficiálně publikovat nebo o ně opřít nějaká závažná rozhodnutí.
Když už se ale rozhodneme podrobit naše domněnky důkladnějšímu zkoumání, nevyhneme se statistickým testům.
Statistických testů existuje obrovská spousta a každý je dobrý na něco jiného. Situace je ještě složitější v tom, že na ověření jedné skutečnosti je možné použít hned několik testů, které se mezi sebou liší jen málo, a vybrat ten správný je samo o sobě celkem komplikované.
Vzpomínáš ještě na normální rozdělení pravděpodobnosti z minulých lekcí? Že ho nějaká proměnná může mít tě napadne hned, když uvidíš histogram tvaru zvonu. Jenže to je pouhá intuice a podpořit či vyvrátit tento pocit lze mnoha různými statistickými testy. Testy se navíc neomezují jen na složitý vzorec s číselným výsledkem. Pojďme si vzít test normality jako ukázkový příklad.
Chceme-li naši intuici jen trošku vylepšit a podpořit, můžeme využít pro přibližný test normality pár jednoduchých pravidel:
Je to stále ale jen lepší intuice.
Nejsnáze představitelný grafický test normality spočívá v proložení histogramu křivkou obkreslující ideální normální rozložení (Gaussova křivka). Pokud zkoumaný histogram perfektně kopíruje ideální stav, není dále nad čím přemýšlet.
Krabicový graf také pomůže. Pokud má zkoumaná proměnná normální rozložení pravděpodobnosti, bude její vyjádření v krabicovém grafu symetrické, průměr a medián budou stejné a uprostřed grafu a bude zde minimum odlehlých měření.
Drobet složitější grafickou metodou mohou být Q-Q nebo P-P grafy, kde rovná diagonální čára znamená perfektní shodu ideálního rozdělení s tím zkoumaným.
No a nakonec je tady samozřejmě řada početních testů, které k ověření normality přistupují po svém. A není jich málo. Tak například:
Často se ale používá jen omezená množina testů a další se hledají, až když se jedná o nějaký velmi specifický případ.
Vypočíst statistický test není s pomocí mocných knihoven problém. Je ale třeba na začátku stanovit několik věcí, nastavit to správné očekávání, vybrat ten správný test a umět interpretovat jeho výsledky. Jednou ze základních věcí jsou nulová a alternativní hypotéza.
Statistická hypotéza je určitá domněnka (předpoklad) o jakékoli vlastnosti základního souboru. Pokud řekneme „základní soubor má normální rozdělení“, je to jen naše domněnka, protože neznáme všechny prvky základního souboru. Proto každé tvrzení (hypotézu) o ZS musíme testovat. Teprve na základě testu, který vychází z naměřených (výběrových) dat můžeme rozhodnout, zda tuto domněnku (hypotézu) můžeme považovat za platnou nebo za neplatnou. Pro každý test musíme formulovat nulovou a alternativní hypotézu. Testovaná hypotéza se nazývá nulová hypotéza (H0). Předpokládáme, že platí, pokud nemáme k dispozici dostatečný statistický důkaz její neplatnosti. Pokud zamítneme platnost nulové hypotézy, předpokládáme, že platí alternativní hypotéza (HA). H0 a HA musí být formulovány tak, aby nebyla možná žádná „třetí možnost“. Buď platí H0 nebo HA, nic dalšího není možné.
Není třeba si s tím lámat hlavu. Na internetu je spousta návodů na tvorbu nulových hypotéz a každý statistický test má nějakou svou standardní nulovou hypotézu.
Pro náš test normality tedy nulová hypotéza bude:
H0: Zkoumané rozdělení pravděpodobnosti má normálního rozdělení
K nulové hypotéze existuje hypotéza alternativní, která nejčastěji říká v podstatě opak. V našem případě tedy bude:
HA: Zkoumané rozdělení pravděpodobnosti je odlišné od normálního rozdělení
Samotný výsledek statistického testu není dostačující. Vezměme například korelaci. Pokud budeme mít jen 10 záznamů, bude pravděpodobnost, že se vysoká korelace objeví jen náhodou, daleko větší, než když budeme mít záznamů 1000. Menší datová sada je i v tomto případě více náchylná na výskyt náhodných jevů a vztahů. A s tímto nám pomůže právě p-value, která nám výsledek statistického testu doplní o informaci, zda a jak moc je možné mu věřit.
Čím menší je p-value, tím menší je pravděpodobnost, že se zkoumaný jev (H0) v dané míře objeví jen náhodou. p-value u předchozího příkladu bude tedy daleko větší u datové sady s deseti záznamy, protože tam se vysoká korelace může daleko snáze objevit jen náhodou, zatímco u tisíce záznamů je pravděpodobnost takové náhody daleko menší.
p-value nám hlavně pomůže rozhodnout, zda zamítneme nulovou hypotézu, či nikoli. K tomu si ale musíme pro p-value stanovit nějakou hranici a to ještě před provedením testu samotného. Této hranici se říká hladina významnosti a označuje se řeckým písmenem α. Nejběžněji používanou hladinou významnosti pro p-value je 0,05. Pokud bude výsledná p-value menší, efekt se v datech může vyskytovat náhodou a my můžeme zamítnout nulovou hypotézu a podpořit hypotézu alternativní. Pokud bude p-value naopak větší, je pravděpodobnější, že data daný jev opravdu reprezentují a nulová hypotéza zůstane platná.
Pozor na to, že zde není žádná šedá zóna. Jakmile si hladinu významnosti stanovíme, je výsledek buď černý nebo bíly, buď ano nebo ne. Nic mezi tím. Ani kdyby p-value vyšla jen o 0,01 vyšší než je naše α.
Hladina významnosti pro p-value se samozřejmě dá nastavit i jinak. Pokud je pravděpodobnost výskytu zkoumaného jevu velmi malá, hladina významnosti se často snižuje. Například v CERNu při hledání velmi vzácného Higgsova bosonu měli hladinu významnosti nastavenu na 3×10⁻⁷. Naopak, pokud je pravděpodobnost, že se zkoumaný jen objeví náhodou, vysoká, může se hladina významnosti vyšplhat až na 0,1.
Pro naši potřebu testu normality s náhodnými daty si necháme α = 0,05.
Teď už víme vše potřebné a můžeme se pustit do testování.
V prvním pokusu si vygenerujeme náhodná data přibližně odpovídající normálnímu rozložení a zkusíme je otestovat Shapiro–Wilk testem.
from matplotlib import pyplot as plt
import numpy as np
from scipy.stats import shapiro
%matplotlib inline
S pomocí numpy vygenerujeme seznam tisíce čísel s normálním rozdělením pravděpodobnosti, průměrem 10 a směrodatnou odchylkou 2.
tisic_cisel = np.random.normal(10, 2, 1000)
Pro zobrazení jednoduchého histogramu můžeme použít matplotlib přímo a obejít se bez pandasu.
plt.hist(tisic_cisel);
shapiro(tisic_cisel)
První číslo je výsledek samotného testu. Hodnota velmi blízko jedné naznačuje, že distribuce našich náhodně generovaných čísel je velmi podobná normálnímu rozdělení.
Druhé číslo je p-value. p-value je daleko vyšší než naše α = 0,05 a tak nemůžeme zamítnout nulovou hypotézu, že se rozdělení našich dat neliší od normálního rozdělení. H0 je tedy přijata a můžeme prohlásit, že náše data pocházejí z normálního rozdělení.
V druhém statistickém testu se vrátíme k datům o výdělku a zdravém stravování zaměstnanců a pokusíme se znovu ověřit korelaci mezi výší výdělku a délkou praxe.
Nulová hypotéza v tomto případě bude: Neexistuje statisticky významný vztah mezi mzdou a délkou praxe v oboru. Alternativní hypotéza bude přesný opak: Existuje statisticky významný vztah mezi mzdou a délkou praxe v oboru.
Protože nemáme žádné další vodítka pro určení správné hladiny významnosti k zamítnutí nulové hypotézy, ponecháme si ji na hodnotě 0,05.
import pandas as pd
from scipy.stats import pearsonr
data = pd.read_csv("../multivariate/static/salary.csv")
data.describe()
data.corr()
pearsonr(data.salary, data.months_of_exp)
Výsledek testu obsahuje jako první číslo samotný korelační koeficient, který je shodný s tím, co nám nabídnul pandas v přehledové tabulce. Druhé číslo je p-value, která je v tomto případě o hodně menší než námi stanovená α = 0,05 a tak můžeme zamítnout nulovou hypotézu a podpořit hypotézu alternativní. Mezi mzdou a délkou praxe v oboru tedy existuje statisticky významná korelace.
Důležité je nenechat se odradit zdánlivou složitostí a brát statistické testy jako dobrou pomůcku pro ověřování hypotéz, které při analýze vyvstanou. Skoro každý statistický test má také svou stránku na Wikipedii, kde je vše podrobně vysvětleno a není tak ani třeba si lámat hlavu s vymýšlením nulové a alternativní hypotézy. Při použití je také dobré si ověřit, zda test klade nějaké podmínky na testovaná data (velikost populace, rozdělení pravděpodobnosti atp.).
Pokud stále ještě analyzuješ vlastní data, může být dobré se v analýze vrátit k některým zajímavým výsledkům a zkusit je podpořit vhodným statistickým testem.