Testování hypotéz a regrese
Testování hypotéz
Hypotézou obecně myslíme nějaké tvrzení. Testování hypotéz se zabývá ověřením, zda je nějaká hypotéza platná. Při testování hypotéz předpokládáme, že máme k dispozici nějaký vzorek dat, nikoli kompletní data. To vnáší prvek určité nejistoty.
Vraťme se k prvnímu příkladu - srovnávní voleb a předvolebního průzkumu. Uvažujme tvrzení, že má různou podporu voličů v Praze než v Brně. Pokud se díváme na skutečný výsledek voleb, jasně vidíme, kolik strana ve volbách získala v obou městech. Pokud provádíme předvolební průzkum, pracujeme s nějakým vzorkem (výběrem) z populace, který má např. 500 lidí v obou městech. To přináší do našeho zkoumání nejistotu. Může se například stát, že jsme (čistě náhodou) do našeho průzkumu v jednom městě vybrali lidi, kteří mají danou stranu více rádi, než zbytek města.
Uvažujme například následující výsledky:
- V Praze podporuje danou stranu 40 % lidí a v Brně pouze 5 %. V takovém případě bychom se asi intuitivně shodli, že podpora v Praze je vyšší.
- V Praze podporuje danou stranu 10 % lidí a v Brně 50 %. V takovém případě bychom se asi intuitivně shodli, že podpora v Brně je vyšší.
- V Praze podporuje danou stranu 26 % lidí a v Brně 25 %. Zde už výsledek není jednoznačně, protože rozdíl je opravdu malý. Znamená 1 procentní bod rozdílu v našem průzkumu opravdu, že se podpora voličů liší? Co když se nám pouze náhodou do našeho vzorku v Praze dostalo více podporovatelů dané strany.
Právě na posledním příkladě se ukazuje, proč je testování hypotéz užitečné. Nedokáže sice jednoznačně říct, zda je hypotéza pravdivá, může nám ale říct, s jakou pravděpodobností je pravdivá nebo s jako pravděpodobností se mýlíme.
Vrátíme-li se k našemu souboru o cenách domů. Náš datový soubor určitě neobsahuje informace o všech domech v USA, ale pouze o některých, tj. o nějakém výběru domů. Pokud bychom tedy chtěli ověřit nějaká tvrzení o všech domech, opět se dostaneme do roviny testování hypotéz.
- Domy s bazénem jsou v průměru dražší než domy bez bazénu.
- Cena domu je ovlivněna jeho obytnou plochou.
- Ceny domu ve středně hustě zalidněných oblastech jsou méně různorodé než ceny domů ve velmi hustě zalidněných oblastech.
- Průměrná cena pozemků je různá pro různé typy umístění pozemku v zástavbě.
Testování hypotéz má pevný postup, který se skládá z následujících kroků:
- Formulace statistických hypotéz.
- Výběr vhodného testu.
- Výpočet hodnoty testového kritéria.
- Rozhodnutí o platnosti nulové hypotézy.
Formulace statistických hypotéz
Při testování hypotéz vždy nejprve definujeme dvě hypotézy - nulovou a alternativní. Tyto dvě hypotézy musí být vždy ve sporu, tj. nemůže nastat situace, že by byly obě pravdivé. Nulová hypotéza v sobě má často znaménko rovná se, alternativní pak mívá znaménko nerovná se, větší než nebo menší než. Dále můžeme v nulové hypotéze tvrdit, že mezi dvěma sloupci v tabulce není závislost, a alternativní hypotéza bude říkat, že závislost existuje.
Navažme na předchozí lekci, kde jsme měřili sílu statistické závislosti mezi cenou domu a obytnou plochou. Hodnotu korelačního koeficientu sice známe, ale ta nám toho sama o sobě tolik neřekne. Nyní budeme chtít ověřit, že je vliv velikosti obytné plochy na cenu domu statisticky významný, tj. rozhodneme, zda tento vliv není čistě náhodný.
Uvažujme následující dvojici hypotéz:
- Nulová hypotéza: Obytná plocha domu a jeho cena jsou lineárně nezávislé.
- Alternativní hypotéza: Obytná plocha domu a jeho cena jsou lineárně závislé.
Je zřejmé, že obě hypotézy nemohou být pravidivé.
Poněkud nepříjemnou zprávou pro vás může být informace, že výsledek našeho testu může být chybný, a to i v případě, že jsme postuovali správně. Může se totiž stát, že prostě máme smůlu na náš vzorek, který nereprezentuje data úplně správně.
Při testování se můžeme dopustit 2 chyb, které jsou popsány v tabulce níže.
Nulová hypotéze platí | Nulová hypotéza neplatí | |
---|---|---|
Nezamítáme nulovou hypotézu | Správný výsledek | Chyba II. druhu |
Zamítáme nulovou hypotézu | Chyba I. druhu | Správný výsledek |
Při testování hypotéz si zpravidla vybíráme pravděpodobnost, s jakou se chceme dopustit chyby I. druhu. Pravděpodobnost chyby I. druhu označujeme jako hladinu významnosti.
Výběr vhodného testu
Dále zvolíme vhodný test pro ověření naší hypotézy. Statistických testů existuje obrovské množství a výběr toho správného závisí obecně na několika faktech:
- Počet souborů (skupin) dat, se kterými chceme v testu pracovat. V tomto konkrétním případě chceme pracovat se dvěma soubory, můžeme mít ale pouze jeden či naopak 3 a více.
- Statistický ukazatel nebo skutečnost, kterou chceme ověřit. Může to být například průměr, rozptyl nebo (jak je tomu v našem případě) statistická závislost.
- Předpoklady testu. Předpoklad je nějaká podmínka, která musí být splněna, aby test dával kvalitní výsledky. Mnoho testů má předpoklad statistického rozdělení dat. Často testy rozdělujeme na parametrické a neparametrické, kde neparametrické testy jsou testy s mírnějšími předpoklady.
Vraťme se k výběru korelačního koeficientu. Pandas ve výchozím nastavení používá tzv. Pearsonův korelační koeficient. Pokud bychom s jeho pomocí chtěli ověřit, zda je vliv jedné veličiny na druhou statisticky významný, je potřeba pamatovat na to, že test hypotézy o závislosti za pomocí Pearsonova korelačního koeficientu předpokládá, že data mají normální rozdělení (normalitu dat).
Pokud si nejsme jisti, zda je tento předpoklad splněn, můžeme opět použít testování hypotéz.
Počet datových souborů | Testovaný ukazatel | Předpoklady | Příklad výzkumné otázky | Vhodný test |
---|---|---|---|---|
1 | průměr | normální rozdělení | průměrná výška mužů na univerzitě je méně než 180 cm | t-test |
rozdělení dat | ceny domů mají normální rozdělení | Shapiro-Wilk test | ||
2 | průměr | párová pozorování | výkonnost pracovníků po školení se zvýšila | párový t-test |
normální rozdělení | výkonnost pracovníků v dílně A je vyšší než v dílně B | t-test (záleží na tom, zda mají data stejný rozptyl) | ||
neparametrický test | voliči vládních stran hodnotí politickou situaci pozitivněji než voliči opozice | Mann–Whitney test | ||
závislost kategoriálních proměnných | oblíbený nápoj osoby se liší dle pohlaví | chí-kvadrát test nezávislosti | ||
korelace | normální rozdělení | cena domu a obytná plocha domu jsou statisticky závislé | test s využitím Pearsonova koeficientů | |
korelace | cena domu a obytná plocha domu jsou statisticky závislé | Test s využitím Spearmanova koeficientu nebo Kendallova tau | ||
3 | průměr | normální rozdělení | výkonnost pracovníků ve třech dílnách se liší | ANOVA |
Test normality dat
Začneme s testem cen domů. Testujeme-li normalitu dat, formulujeme hypotézy následujícím způsobem:
- Nulová hypotéza: Ceny domů v našem souboru mají normální rozdělení.
- Alternativní hypotéza: Ceny domů v našem souboru nemají normální rozdělení.
Pro ověření normality dat existuje řada testů. Oblíbený je například Shapiro-Wilk test, který je součástí modulu scipy
. Pro provedení testu použijeme funkci shapiro
z modulu scipy
. Funkci předáváme data ve sloupci SalePrice
.
Pracujeme opět s daty v souboru clean_train.csv.
import pandas
from scipy import stats
data = pandas.read_csv("clean_train.csv")
res = stats.shapiro(data["SalePrice"])
print(res)
Funkce vrací tajemný výsledek
ShapiroResult(statistic=0.8918800354003906, pvalue=8.921436004661806e-31)
Co tato záhadná čísla znamenají?
statistics
je hodnota statistiky testu. Statistika testu je v podstatě matematický vzoreček. Každý statistický test má vlastní vzorek pro výpočet statistiky. V případě Mann-Whitney testu měří vzoreček, jak jsou hodnoty v datech odlišné od normálního rozdělení.pvalue
(p-hodnota) se váže k hladině významnosti. p-hodnotu využijeme pro rozhodnutí o platnosti alternativní hypotézy.
Platí následující pravidla.
- Pokud je p-hodnota větší než hladina významnosti, zamítáme nulovou hypotézu (tj. platí alternativní hypotéza).
- Pokud je p-hodnota menší než hladina významnosti, nezamítáme nulovou hypotézu.
Pokud si zvolíme hladinu významnosti jako 5 %, což je nejčastější volba, můžeme zapsat pravidlo konkrétněji.
- Pokud je p-hodnota > 0.05, zamítáme nulovou hypotézu (tj. platí alternativní hypotéza).
- Pokud je p-hodnota < 0.05, nezamítáme nulovou hypotézu.
Na internetu lze nalézt obrovské množství vědeckých i méně vědeckých obrázků, které vám umožní si toto pravidlo zapamatovat.
V našem případě je p-hodnota 8.921436004661806e-31
. Pozor, velmi důležitý je závěr e-31
. Číslo je ve skutečnosti velmi malé, prvních 30 čísel desetinné části jsou 0 a až poté přichází nějaká nenulová čísla. Hodnota je tedy rozhodně menší než 0.05, tím pádem nulovou hypotézu zamítáme a tvrdíme, že data o cenách domů nemají normální rozdělení.
Test korelace
Vraťme se k testu korelace. Víme, že data o cenách domů nemají normální rozdělení, měli bychom tedy použít test založený na Spearmanově koeficientu nebo na Kendallově tau.
Využijme Spearmanův koeficient.
res = stats.spearmanr(data["GrLivArea"], data["SalePrice"])
print(res)
Program vrátí výsledek
SpearmanrResult(correlation=0.7312378789702222, pvalue=7.801875110918258e-244)
Číslo je opět velmi malé a menší než 0.05, v tomto případě zamítáme nulovou hypotézu. Tento výsledek je pro nás příznivý. Prokázali jsme totiž závislost mezi cenou domu a jeho podlahovou plochou. Podlahová plocha domu je tedy důležitou informací pro jeho ocenění.
Cvičení
Plocha garáže
Na minulé lekci jsme řešili korelaci mezi plochou garáže (GarageArea
) a cenou domu. Ověř nyní, zda je tato korelace statisticky významná.
- Nejprve sestav hypotézy (nulovou i alternativní).
- Již víme, že cena domu nemá normální rozdělení, nelze tedy použít test na základě Pearsonova korelačního koeficientu. Použij Spearmanův koeficient i Kendallovo tau pro ověření statistické významnosti lineární závislosti. Zjisti p-hodnoty obou testů. Jaké jsou p-hodnoty? A zamítáme nulovou hypotézu?
Regrese
Samotná informace o tom, že existuje statisticky významný vztah mezi obytnou plochou domu a jeho cenou, sice může být zajímavá, ale můžeme zjistit více. K tomu můžeme využít regresi. Regrese je nástroj, který umí vztah mezi dvěma proměnnými popsat. Abychom si pod slovem "popsat" dokázali něco představit, využijeme graf. Využijeme opět modul seaborn
, tentokrát vygenerujeme graf pomocí funkce regplot()
. U regrese vždy rozlušujeme mezi závislou (vysvětlovanou) a nezávislou (vysvětlující) proměnnou. Závislou proměnnou umísťujeme na svislou osu (y) a nezávislou vodorovnou osu (x). V našem případě je nezávislou proměnnou obytná plocha domu a závislou proměnnou cena. Tvrdíme totiž, že obytná plocha domu ovlivňuje cenu, tj. cenu vysvětlujeme pomocí obytné plochy.
import pandas
import seaborn
import matplotlib.pyplot as plt
data = pandas.read_csv("clean_train.csv")
g = seaborn.regplot(x="GrLivArea", y="SalePrice", data=data, scatter_kws={"s": 1}, line_kws={"color":"r"})
plt.show()
Graf, který vygeneruje funkce regplot()
, je podobný grafu vygenerovanému funkcí plot_joint()
. Navíc je tam červená čára. Právě tato čára je popisem vztahu mezi obytnou plochou a cenou. Pokud bychom na základě obytné plochy chtěli odhadnout cenu domu, pro příslušnou obytnou plochu na ose x přečteme cenu na ose y.
Pro reálné použití modelu je ale lepší využít modul scipy
, který nám dá matematický popis dané funkce. Naší snahou je nyní odhadnout model, který lze matematicky zapsat jako:
y = a + b * x + e
kde y je cena domu, x je obytná plocha a koeficienty a a b jsou ty, které se snažíme odhadnout. Koeficient b udává "strmost" regresní čáry, tj. říká, jak rychle roste cena domu s růstem jeho obytné plochy. Koeficient a pak říká, kde červená čára prochází osou y. Pokud by došlo ke změně ceny všech domů bez ohledu na obytnou plochu (např. v důsledku ekonomické krize), změnila by se hodnota koeficientu a.
import pandas
import statsmodels.api as sm
import statsmodels.formula.api as smf
data = pandas.read_csv("clean_train.csv")
formula = "SalePrice ~ GrLivArea"
data = sm.add_constant(data)
mod = smf.ols(formula=formula, data=data)
res = mod.fit()
print(res.params)
Program provedl následující hodnoty koeficientu a (Intercept
) a b (GrLivArea
).
Intercept 12581.885623
GrLivArea 111.230746
dtype: float64
Regresní model máme, otázkou ale je, jak dobrý den model je? Jedním ze základních ukazatelů modelu je koeficient determinace. Ten říká, kolik procent rozptylu závislé proměnné jsme naším modelem vysvětlili.
print(res.rsquared)
V našem případě je jeho hodnota 0.519, tj. vysvětlili jsme 51.9 % rozptylu ceny, což zatím není moc dobrý výsledek. Další rozšíření modelu vyzkoušíme při cvičení.
Cvičení
Rozšíření modelu
Přidej do regresního modelu plochu garáže (GarageArea
). Přidání provedeš tím, že ve svém programu upravíš řádek formula
přidáním + GarageArea
. Jak se změnil koeficient determinace modelu?
Dále můžeš přidat plochu pozemku (LotArea
) a rok, kdy byl dům naposledy rekonstruován (YearRemodAdd
). Jaký je výsledný index determinace?