Lineární regrese

Autor: JAKUB

Představte si, že stojíte u stánku s horkými párky na velkém náměstí plném lidí. Stánkař je velmi zručný a dokáže jeho párek hodit přesně tam, kde stojí zákazník. Jde o úžasnou schopnost predikce - stánkař předpovídá, kde bude stát zákazník, a pak tam hodí párek. Tato předpověď je založena na jeho zkušenostech a intuici.

V našem světě dat a statistiky se ale spoléháme na něco méně uměleckého než na stánkařovu intuici. Potřebujeme způsob, jak systematicky a přesně předpovídat výsledky na základě dostupných dat. A tady vstupuje do hry lineární regrese.

Lineární regrese je způsob, jakým statistika hledá vztah mezi dvěma nebo více proměnnými. Jako kdybychom chtěli zjistit, jaký vztah existuje mezi velikostí náměstí a počtem prodaných párků. Pokud máme dostatečně velký vzorek dat - řekněme, že známe velikost desítek náměstí a počet prodaných párků na každém z nich - můžeme tento vztah určit pomocí lineární regrese.

Co je ale "lineární" na lineární regresi? Zkuste si představit, že naše data o náměstích a párkách vložíme do grafu, kde velikost náměstí je na x-ose a počet prodaných párků je na y-ose. Každé náměstí je bod v tomto grafu. Pokud jsou naše data dobře uspořádaná a existuje mezi nimi jasný vztah, měli bychom být schopni nakreslit přímou čáru, která se co nejlépe přizpůsobí těmto bodům. Tato čára je "lineární" - což znamená, že její tvar je přímý a nekřivý. Ale pozor!

Teď vás nejspíše všechny zmatu. To, co jsem uvedl není úplně správně :D. Tak se to uvádí všude, ale není to úplně tak. Teď zabrousíme hluboko do matematické teorie statistiky. Lineární regrese se týká modelování vztahu mezi dvěma nebo více proměnnými tak, že regresní funkce je lineární v koeficientech, ne nutně v proměnných. Tak teď jsem Vám asi moc nepomohl. Jednoduchý model lineární regrese může být vyjádřen jako:

y = a + bx + e,

kde y je závislá proměnná, x je nezávislá proměnná, a je konstanta, b je koeficient regrese pro x (tj. směrnice regresní čáry) a e je náhodný chybový člen. Pozoruhodné ale je, že x může být jakákoli funkce. Například, můžeme mít model jako:

y = a + b*sqrt(x) + e,

který je stále považován za "lineární" v tom smyslu, že je lineární v koeficientech. Důležité je, že vztah mezi závislou proměnnou y a koeficienty (a a b) je lineární. Takže termín "lineární" v "lineární regrese" se nevztahuje na proměnné, ale na koeficienty modelu. Hrozné, že? Ale mohu vás uklidnit. Tohle je opravdu marginální problematika a často se s ní nesetkáte. Budeme tedy považovat na lineární regresi přímku, rovinu a jinou lineární funkci. Je to v podstatě jednoduchý lineární model, který se používá nejčastěji.

Přímka nám umožňuje předpovídat výsledky. Když stánkař přijede na nové náměstí, nemusí čekat, až se prodeje rozjedou, aby zjistil, kolik párků asi prodá. Stačí mu znát velikost náměstí, najít ji na x-ose a pak se podívat, kde na y-ose příslušná přímka ukazuje. To je jeho předpověď.

Samozřejmě, skutečný svět je složitější než naše analogie s párky. Existuje mnoho faktorů, které mohou ovlivnit prodej párků - počasí, cena, konkurence a mnoho dalších. Lineární regrese může zahrnovat i tyto další proměnné, čímž se stává mnohonásobnou lineární regresí. Ale princip je stejný - hledáme lineární vztahy mezi proměnnými, abychom mohli předpovídat výsledky.

Základní koncept lineární regrese spočívá v odhadu vztahu mezi dvěma množstvími. Máme nějakou nezávislou proměnnou, kterou lze měnit podle libosti, a závislou proměnnou, jejíž hodnoty se snažíme předpovědět. V našem příkladu je velikost náměstí nezávislou proměnnou (protože ji můžeme volit) a počet prodaných párků je závislou proměnnou (protože se snažíme předpovědět její hodnoty).

V lineární regresi se snažíme najít takovou rovnici přímky, která nejlépe odpovídá našim datům. Tato přímka je v podstatě model, který popisuje vztah mezi nezávislou a závislou proměnnou. Ve zjednodušené formě lze tuto rovnici zapsat jako:

y = ax + b,

kde:

  • y je závislá proměnná (počet prodaných párků)
  • x je nezávislá proměnná (velikost náměstí)
  • a je koeficient směru přímky (říká nám, o kolik se y změní, když se x změní o jednotku)
  • b je y-intercept (místo, kde přímka protíná y-osu)

Cílem lineární regrese je najít hodnoty 'a' a 'b', které minimalizují rozdíly (chyby) mezi skutečnými hodnotami y a hodnotami y předpovězenými naším modelem (tj. naší přímkou). Tento proces se často nazývá "metoda nejmenších čtverců".

Jak to tedy uděláme?

  1. Shromáždíme data. Máme nějaký vzorek dat, který obsahuje hodnoty x a odpovídající hodnoty y.

  2. Vytvoříme model. Naším modelem je rovnice přímky y = ax + b. Na začátku můžeme začít s náhodnými hodnotami 'a' a 'b'.

  3. Vypočteme chybu. Pro každý bod v našich datech vypočteme rozdíl (chybu) mezi skutečnou hodnotou y a hodnotou y předpovězenou naším modelem. Potom umocníme tyto chyby (abychom se zbavili záporných hodnot) a sečteme je. To nám dá celkovou chybu našeho modelu.

  4. Upravíme model. Změníme hodnoty 'a' a 'b' tak, aby se celková chyba našeho modelu snížila. Tento proces se nazývá optimalizace a obvykle se provádí pomocí techniky zvané gradient descent.

  5. Opakujeme kroky 3 a 4. Tento proces opakujeme mnohokrát, dokud se celková chyba našeho modelu nesníží na co nejnižší možnou úroveň.

Když máme konečnou rovnici naší přímky, můžeme ji použít k předpovídání hodnot y pro jakékoliv nové hodnoty x. To je esence lineární regrese. Je to silný nástroj, který nám umožňuje rozumět vztahům v našich datech a předpovídat budoucí výsledky. Ale stejně jako všechny nástroje, je důležité ho používat s porozuměním a uvědoměním si jeho omezení.

Na obrázku vidíme nějaká data proložená přímkou. V podstatě potřebujeme přímku natočit tak vhodně, aby  vyhovovala všem bodům. Abychom mohli říct, že má od všech bodů svisle nejmenší vzdálenost. To je samozřejmě obtížné. Samotný koncept lineární funkce takovou možnost pro spoustu bodů nezahrnuje. Musíme si vypůjčit metody z diferenciálního počtu. Nebude to ale těžké, pouze nějaké derivace - hledání extrému funkce. Ale to ještě předbíhám.

Teď udělám matematické okénko. Koho nezajímá nebo děsí, tak to prostě nečtěte:). Nejprve bude nutné si říct základní vlastnosti. Začneme s průměrem. Vezměte si, že máte sadu čísel 1, 2, 3, 4, 5, 6, 7. Jejich aritmetickým průměrem je číslo 4. Průměr má tu skvělou vlastnost, že Součet odchylek od něj je vždy roven nule. Pro naše data je to jednoduché vidět, protože to máme (-1 + 1) + (-2 + 2) atd. To je samozřejmě  rovno 0. Ale platí to pro libovolný soubor, ve kterém určíme aritmetický průměr. Teď si ale představte, že spočítat takový průměr je komplikované (samozřejmě není, ale představte si to). Musíte ho odhadnout podle něčeho jiného. Potřebujeme jinou metodu, abychom zjistili tento "ideální" průměr. Dobře, mohli bychom hledat takové číslo, kdy součet všech odchylek od něj je roven 0. No jo, ale představme si, že máme pouze tři body a tedy tři odchylky o1, o2 a o3, pak musí platit

(průměr + o1) + (průměr + o2) + (průměr + o3) = 0,

pak 

3průměr = -o1 -o2 -o3

a úpravou dostaneme

průměr = -o1/3 - o2/3 - o3/3.

No jo, jenže  sice za o1, o2 a o3 dokážeme dosadit čísla tak, aby nám vyšel konkrétní průměr, jenže máme nekonečně mnoho možností, jak to udělat. Tohle tedy není dobrá metoda. Zkusme třeba myšlenku, že součet absolutních hodnot odchylek bude nejmenší pro číslo, které je průměrem z čísel r, q a s, . Pokud  tedy najdeme nejmenší číslo součtu odchylek od různých hodnot, pak nejmenší číslo je pro průměr. To samozřejmě nemusí být pravda. Ukážeme si to. 

Uvažujme tři čísla r, q a s tak, že r < 0, s > 0 a q > |r|. Průměr těchto čísel je (r + q + s) / 3. Nyní uvažujme bod x, který je roven průměru. Pro tento bod, součet absolutních hodnot odchylek je |(r + q + s) / 3 + r| + |(r + q + s) / 3 + q| + |(r + q + s) / 3 + s|.

Dále uvažujme bod y = s. Pro tento bod, součet absolutních hodnot odchylek je |y + r| + |y + q| + |y + s| = |s + r| + |s + q| + 0.

Z toho, jak jsme zvolili r, q a s, vyplývá, že |s + r| je menší než |(r + q + s) / 3 + r| a |s + q| je menší než |(r + q + s) / 3 + q|, protože s je větší než průměr. Proto součet absolutních hodnot odchylek pro bod y je menší než pro bod x, ačkoli x je průměr čísel r, q a s.

Tedy, pokud hledáme bod, který minimalizuje součet absolutních hodnot odchylek od daných čísel, nemusí to být vždy jejich průměr. Průměr minimalizuje součet odchylek, ale ne nutně součet absolutních hodnot odchylek.

Pokud budeme uvažovat matematicky, může nás napadnout, že kvadratická funkce je funkce, která má pouze jediné minimum. Takže v této funkci skutečně můžeme dosáhnout jedné nejmenší hodnoty. Dokažme si to tedy obecně.

Máme nějaké číslo x a průměr těchto čísel je p. Dále máme odchylky xi - p pro všechna i. Chceme dokázat, že

(Σ xi-p)² ≤ (Σ (xi - x))² pro všechna x.

Pokud se podíváme na levou stranu nerovnosti, vidíme, že součet odchylek od průměru je roven nule. Pak můžeme výše zmíněnou nerovnost přepsat jako

0 ≤ (Σ (xi - x))² pro všechna x. 

Pokud se podíváme na pravou stranu nerovnosti, vidíme, že (Σ (xi - x))² je vždy nezáporné, protože čtverec jakéhokoli čísla je nezáporný. Proto je (Σ (xi - x))² vždy větší nebo rovno nule.

Dokázali jsme tedy, že (Σ xi-p)² ≤ (Σ (xi - x))² pro všechna x. Pokud je x rovno průměru p, pak je pravá strana rovna nule a nerovnost je splněna. Pokud je x jiné než p, pak je pravá strana větší než nula a nerovnost je také splněna.

Tak výborně. Přišli jsme na super věc. Ovšem v "reálném světě" regrese je to složitější. Nehledáme číslo jakožto průměr, ale lineární funkci jakožto "průměr". Potřebujeme tedy natočit přímku tak, aby byla jakým si "průměrem" pro všechny naměřené hodnoty. Aby tedy součet všech odchylek od přímky byl roven nule. K tomu tedy potřebujeme minimalizovat funkci

E = Σ (yi - a * xi - b)²

tedy

∂E/∂a = -2 Σ x_i * (y_i - a * x_i - b) = 0,

∂E/∂b = -2 Σ (y_i - a * x_i - b) = 0.

kde E je celková chyba, yi a xi jsou skutečné hodnoty v našich datech a součet je přes všechny naše data. Dále to rozebírám v pojednání o metodě nejmenších čtverců (viz). Tady to už nemusíme rozpitvávat. 

Pojďme tedy pokračovat s aplikací regrese. 

Příklad 1. 

Tento příklad bude modelový. Ukážeme si jej na nějakých vygenerovaných datech. Prodejce aut v České republice chce analyzovat vztah mezi cenou automobilu (v tisících korun) a jeho stářím (v letech). Cílem je zjistit, jak silně ovlivňuje stáří auta jeho cenu, a také, zda je tento vztah lineární.

Závislou proměnnou v našem modelu bude cena auta (y), zatímco nezávislou proměnnou bude stáří auta (x). Chceme odhadnout model y = β0 + β1*x + ε, kde β0 a β1 jsou koeficienty regresního modelu a ε je náhodná chyba.

Máme tedy 36 automobilů, jejich stáří a cenu. Uváděl jsem, že nezávislou proměnnou je stáří a závislou cena. Proč ne naopak? Tak my chceme na základě stanoveného stáří určit cenu, obráceně by to nedávalo moc smysl. 

Máme tedy 36 automobilů, jejich stáří a cenu. 

Nejprve vytvoříme data v R a pak spočítáme lineární regresi pomocí funkce lm(). Tohle je v podstatě jednoduché. Akorát se musíme naučit interpretovat výsledky. Takže kód je následující. 

Pokračování brzy:)


Výstup modelu nám dává několik užitečných informací. Zde je jednoduchá interpretace některých klíčových bodů:

Koeficienty (Estimate).

Odhad β0 je 517,08 a koeficient pro stáří (odhad β1) je -34.9985. To znamená, že pokud by auto bylo nové (0 let), model by odhadl jeho cenu na 517.08 tisíc Kč. Za každý rok stáří auta model předpokládá pokles ceny o 34.9985 tisíc Kč.

P-hodnoty (Pr(>|t|)).

 P-hodnoty pro oba koeficienty jsou extrémně malé (méně než 2e-16), což je mnohem méně než standardní hladina významnosti 0,05. To znamená, že oba koeficienty jsou statisticky významné, tedy existuje významný lineární vztah mezi stářím auta a jeho cenou.

R^2.

 Hodnota R^2 je 0,9792, což znamená, že tento model vysvětluje 97.92 % variability ceny auta pomocí stáří auta. Je to velmi vysoká hodnota, která naznačuje, že model velmi dobře zapadá do dat.

F-statistika a odpovídající p-hodnota.

F-statistika je 1602 a její p-hodnota je mnohem menší než 0,05, což naznačuje, že celkový model je statisticky významný.

Rezidua.

Šířka reziduí (Min, 1Q, Median, 3Q, Max) nám ukazuje rozdělení chyb modelu. V ideálním případě by rezidua měla být symetricky rozdělena kolem nuly s konstantní variabilitou.

Stručně řečeno, model nám říká, že existuje silný negativní lineární vztah mezi stářím auta a jeho cenou. Za každý rok stáří auta model předpokládá pokles ceny o zhruba 35 000 Kč. Tento model vysvětluje téměř 98 % variability ceny auta, což naznačuje, že stáří auta je velmi důležitým faktorem ovlivňujícím jeho cenu.