Predikce budoucnosti s Neurální sítí
Vždy mě fascinovala budoucnost. I když jsem člověk sezónně sentimentální žijící přítomností, budoucnost je to, co ve mě vzbuzuje pocit napětí, co mi dává energii a udržuje motivaci. Proto jsem před pár měsíci oprášil svůj dávno zapomenutý nedokončený projekt z jedné studentské soutěže pro nejmenovanou poradenskou firmu, jejíž zadáním bylo: “Navrhnout metodologii a způsoby predikce cen energetických komodit ve střednědobém horiontu”...
Tehdy jsem se zaměřil na obyčejné statistické metody a záhy mi bylo jasné, že jejich prediktivní síla je nižší než přenost predikce u denního horoskopu. Tušil jsem, že matematické modely, které jsme se učili ve škole jsou příliš statické, ačkoliv je používají například v NASA pro výpočet trajektorie objektů na oběžné dráze. Chyběla tomu jakási inteligence, která by se adaptovala a reagovala na nefyzikální podněty. Jednou z cest jak toho dosáhnout bylo použít výpočetní sílu dněšních výkonných počítačů a simulovat způsob predikce tak, jak by to udělal člověk, tj. s použitím neurálních sítí.
Když člověk bez hlubších znalostí výpočetní techniky a analýzy dat zaslechne pojem neurální síť, tak nabyde dojmu, že neurální sítě jsou něco futuristického, co patří jen do sci-fi románů. Alespoň takový byl můj první dojem. Původní myšlenka byla inspirovat se lidským mozkem. Lidský mozek má nespočet neuronů, každý obsluhující jinou úlohu a funkci. Každý neuron pak má různou váhu (koeficient důležitosti), která přispívá k porozumění vjemů, jež vstřebáváme našimy smysly. Jak vnímáme podněty z okolí je výsledkem rozhodnutí všech neuronů.
Jak jsou tyto neurony rozmístěny v mozku je předučen mapou, neboli topologií, která nám říká, jak jsou informace putovány po neuronech v neurální síti. Jednoduchá síť má vrstvu neuronů přijímající vstupní informace, několik vrstev neuronů, které informace zpracovávájí a konečnou výstupní vrstvu, která nám řekne odpověď na zadanou úlohu. Nevýhodou je netransparentnost sítě. Jedna síť může obsahovat miliony neuronů s různými váhami a koeficienty a nikdy nebudeme vědět, jak byla informace zpracována a po jakých neuronech putovala. Proto je lidský mozek tak složitý na chápání. To je například důvod, proč se říká, že u některých jedinců nechápeme jejich myšlenkové pochody.
Neurální sítě nejsou nic nového pod sluncem, první taková síť byla vytvořena v roce 1957 Frankem Rosenblattem a jednalo se o jednoduchý model s lineárním klasifikátorem, který dokázal lineární kombinací předpovědět výsledek předem zadané binární úlohy. Dneska jsou neurální sítě hojně používány velkými institucemi (banky, pojišťovny, farmaceutické firmy, vládní organizace atd.), využití v praxi je tedy široké od rozpoznání řeči a obrazu po předpověď počasí.
Neurální sítě lze laicky přirovnat k počítačovým procesům, které spolu komunikují a pracují k dosažení předurčeného cíle. Může to být nalezení odpovědi na jednoduchou otázku “Je lepší přítelkyni koupit čokoládu nebo růži?” na základě předem známých faktů, např. dle aktuálního menstruačního cyklu, indexu tělesné hmotnosti za poslední 3 měsíce a počtu darovaných růží, které dostala od svých nápadníků za poslední týden. Každému neuronu nejprve řekneme, jak důležitou váhu mají jednotlivá vstupní data. Toho dosáhmene standardní optimalizací. Poté už je neuronová síť schopna najít skryté vazby mezi čokoládou a menstruačním cyklem, nebo počtem darovaných růží a vývojem indexu tělesné hmotnosti. Mě to trvalo 16 let, než jsem na to přišel, neuronové síti to nezabere ani minutu.
Ale vraťme se od teorie k mému projektu. Věřil jsem, že simulací lidských neuronů dáváme počítačům mozek, nebo jinak řečeno samoadaptivní umělou inteligenci. Bylo zklamáním zjistit, že to není tak úplně pravda. Neurální sítě se sice snaží simulovat způsob, jakým reálně lidské neurony spolu komunikují, ale ve skutečnosti je charakter fungování v konečném důsledku jiný.
Místo cen energetických komodit zkusme vzít časovou řadu indexu EURUSD, neboť jsou k dispozici levná a kvalitní data a rozhodneme se aplikovat neuronovou síť na predikci jeho vývoje. Nepotrvá dlouho a na základě teorie a popisu struktury neuronů dojdeme k závěru, že neurální sítě nebudou moc úspešně v predikování nonstacionárních jevů (např. právě vývoj cen energetických komodit), neboť dochází k přefitování vůči skrytým vztahům, které se mohou, ale nemusí vyskytovat v budoucnosti. Nejde tedy o formu umělé inteligence, nýbrž o jinou formu sofistikované optimalizace. I přesto se neurální sítě úspěšně používají, jen musíme pochopit slabiny a přednosti neurálních sítí. Je třeba zjistit co lze a co nelze prediktovat.
Představme si například jednoduchou úlohu ve SCIO testu, vyskytujicí se v přijímacích testech na gymnázia. Dokážete mi říct jaké číslo následuje po sérii čísel 2,3,5,7? 11? Ne, může to být třeba 50. Člověk postavený před takovou úlohu použije svůj mozek k tomu, aby napasoval úlohu na znalosti a dovednosti, které se předtím naučil a vzpomene si na prvočísla. V případě takové stacionární problematiky je velká šance, že splní úlohu dobře. Tzn. nehledě na to jak komplikovaná jsou data, vždy se nalezne matematická funkce, která matematicky popíše, proč se tak data chovala v minulosti a jaký je její budoucí trend (v tomto případě další čísla v pořadí série čísel). Z toho důvodu existuje nekonečně moho matematických funkcí definující jakýkoliv historický jev. Vždy existuje funkce, která bude plně pasovat na testovaná historická data. Nikdo ovšem nedokáže říct, jestli nalezená matematická funkce má relevantní váhu a dokáže predikovat budoucnost. Pokud řeknete počítači, aby našel matematickou funkci vysvětlující křivku na obrázku níže a neurčíme mu mezní podmínky, nalezne Vám N-tou polynomiální funci, která perfektně sedne na zadanou křivku.
Pro tyto důvody, pokud byla data vytvořená velmi komplikovanou kombinací faktorů a navíc obsahuje faktory náhodné, je skoro nemožné s pomocí neurálních sítí predikovat budoucnost. Například cenu elektrické energie je nemožné předpovědět na měsíce dopředu, protože závisí na mnoha fundamentálních faktorech, z nichž některé jsou naprosto náhodné (např. státní regulace, blackouty, katastrofy typu Fukušima atd.).
Co tedy lze předpovědět s akceptovatelnou přesností s pomocí neurálních sítí? Třeba jev, který má cyklický aspekt a je pravděpodobné, že se bude jeho výskyt opakovat, například obecnou trendovost a netrendovost. Výsledek snažení najdete níže na grafu.
Graf vyjadřuje normalizovaný vztah mezi 70-ti týdením vývojem indexu EURUSD a prediktivním modelem založené na neurální síti. Výkonnost prediktivního modelu je hodnocen scoringovým systémem, který jednoduše přičítá body, byla-li týdenní predikce přesná a odečítá body, pokud se stal opak. Ať už výsledky interpretujete jakkoliv, neurální síť vcelku neúspěšně předpověděl trend indexu, ale vcelku úspěšně dokázal predikovat vztah mezi volatilitou indexu a entropií trhu.
Jaké jsou závěrečné postřehy a výstupy z projektu?
• Pokud bych býval dokončil a odevzdal výstupy projektu s neurální sítí, pravděpodobně bych studentskou soutěž nevyhrál, protože nakonec model našel a předpověděl jiné vztahy než např. to kde bude cena plynu za dva měsíce ode dneška.
• V poskytnutých datech chyběly informace, které by modelu umožnily předpovědět to, co jsem chtěl.
• Zvolil jsem moc složitou topologie sítě, tím se zredukovala schopnost zobecnění vstupních informací a “dekodování” šumu.
• K úspěšné předpovědi nám stačí i 60% pravděpodobnost.
Doufám, že pro Vás byl článek poučný a srozumitelný. Příště zas třeba něco méně technického, třeba o vztazích.
Tehdy jsem se zaměřil na obyčejné statistické metody a záhy mi bylo jasné, že jejich prediktivní síla je nižší než přenost predikce u denního horoskopu. Tušil jsem, že matematické modely, které jsme se učili ve škole jsou příliš statické, ačkoliv je používají například v NASA pro výpočet trajektorie objektů na oběžné dráze. Chyběla tomu jakási inteligence, která by se adaptovala a reagovala na nefyzikální podněty. Jednou z cest jak toho dosáhnout bylo použít výpočetní sílu dněšních výkonných počítačů a simulovat způsob predikce tak, jak by to udělal člověk, tj. s použitím neurálních sítí.
Když člověk bez hlubších znalostí výpočetní techniky a analýzy dat zaslechne pojem neurální síť, tak nabyde dojmu, že neurální sítě jsou něco futuristického, co patří jen do sci-fi románů. Alespoň takový byl můj první dojem. Původní myšlenka byla inspirovat se lidským mozkem. Lidský mozek má nespočet neuronů, každý obsluhující jinou úlohu a funkci. Každý neuron pak má různou váhu (koeficient důležitosti), která přispívá k porozumění vjemů, jež vstřebáváme našimy smysly. Jak vnímáme podněty z okolí je výsledkem rozhodnutí všech neuronů.
topologie
Jak jsou tyto neurony rozmístěny v mozku je předučen mapou, neboli topologií, která nám říká, jak jsou informace putovány po neuronech v neurální síti. Jednoduchá síť má vrstvu neuronů přijímající vstupní informace, několik vrstev neuronů, které informace zpracovávájí a konečnou výstupní vrstvu, která nám řekne odpověď na zadanou úlohu. Nevýhodou je netransparentnost sítě. Jedna síť může obsahovat miliony neuronů s různými váhami a koeficienty a nikdy nebudeme vědět, jak byla informace zpracována a po jakých neuronech putovala. Proto je lidský mozek tak složitý na chápání. To je například důvod, proč se říká, že u některých jedinců nechápeme jejich myšlenkové pochody.
Neurální sítě nejsou nic nového pod sluncem, první taková síť byla vytvořena v roce 1957 Frankem Rosenblattem a jednalo se o jednoduchý model s lineárním klasifikátorem, který dokázal lineární kombinací předpovědět výsledek předem zadané binární úlohy. Dneska jsou neurální sítě hojně používány velkými institucemi (banky, pojišťovny, farmaceutické firmy, vládní organizace atd.), využití v praxi je tedy široké od rozpoznání řeči a obrazu po předpověď počasí.
Neurální sítě lze laicky přirovnat k počítačovým procesům, které spolu komunikují a pracují k dosažení předurčeného cíle. Může to být nalezení odpovědi na jednoduchou otázku “Je lepší přítelkyni koupit čokoládu nebo růži?” na základě předem známých faktů, např. dle aktuálního menstruačního cyklu, indexu tělesné hmotnosti za poslední 3 měsíce a počtu darovaných růží, které dostala od svých nápadníků za poslední týden. Každému neuronu nejprve řekneme, jak důležitou váhu mají jednotlivá vstupní data. Toho dosáhmene standardní optimalizací. Poté už je neuronová síť schopna najít skryté vazby mezi čokoládou a menstruačním cyklem, nebo počtem darovaných růží a vývojem indexu tělesné hmotnosti. Mě to trvalo 16 let, než jsem na to přišel, neuronové síti to nezabere ani minutu.
Ale vraťme se od teorie k mému projektu. Věřil jsem, že simulací lidských neuronů dáváme počítačům mozek, nebo jinak řečeno samoadaptivní umělou inteligenci. Bylo zklamáním zjistit, že to není tak úplně pravda. Neurální sítě se sice snaží simulovat způsob, jakým reálně lidské neurony spolu komunikují, ale ve skutečnosti je charakter fungování v konečném důsledku jiný.
Místo cen energetických komodit zkusme vzít časovou řadu indexu EURUSD, neboť jsou k dispozici levná a kvalitní data a rozhodneme se aplikovat neuronovou síť na predikci jeho vývoje. Nepotrvá dlouho a na základě teorie a popisu struktury neuronů dojdeme k závěru, že neurální sítě nebudou moc úspešně v predikování nonstacionárních jevů (např. právě vývoj cen energetických komodit), neboť dochází k přefitování vůči skrytým vztahům, které se mohou, ale nemusí vyskytovat v budoucnosti. Nejde tedy o formu umělé inteligence, nýbrž o jinou formu sofistikované optimalizace. I přesto se neurální sítě úspěšně používají, jen musíme pochopit slabiny a přednosti neurálních sítí. Je třeba zjistit co lze a co nelze prediktovat.
Představme si například jednoduchou úlohu ve SCIO testu, vyskytujicí se v přijímacích testech na gymnázia. Dokážete mi říct jaké číslo následuje po sérii čísel 2,3,5,7? 11? Ne, může to být třeba 50. Člověk postavený před takovou úlohu použije svůj mozek k tomu, aby napasoval úlohu na znalosti a dovednosti, které se předtím naučil a vzpomene si na prvočísla. V případě takové stacionární problematiky je velká šance, že splní úlohu dobře. Tzn. nehledě na to jak komplikovaná jsou data, vždy se nalezne matematická funkce, která matematicky popíše, proč se tak data chovala v minulosti a jaký je její budoucí trend (v tomto případě další čísla v pořadí série čísel). Z toho důvodu existuje nekonečně moho matematických funkcí definující jakýkoliv historický jev. Vždy existuje funkce, která bude plně pasovat na testovaná historická data. Nikdo ovšem nedokáže říct, jestli nalezená matematická funkce má relevantní váhu a dokáže predikovat budoucnost. Pokud řeknete počítači, aby našel matematickou funkci vysvětlující křivku na obrázku níže a neurčíme mu mezní podmínky, nalezne Vám N-tou polynomiální funci, která perfektně sedne na zadanou křivku.
fce
Pro tyto důvody, pokud byla data vytvořená velmi komplikovanou kombinací faktorů a navíc obsahuje faktory náhodné, je skoro nemožné s pomocí neurálních sítí predikovat budoucnost. Například cenu elektrické energie je nemožné předpovědět na měsíce dopředu, protože závisí na mnoha fundamentálních faktorech, z nichž některé jsou naprosto náhodné (např. státní regulace, blackouty, katastrofy typu Fukušima atd.).
Co tedy lze předpovědět s akceptovatelnou přesností s pomocí neurálních sítí? Třeba jev, který má cyklický aspekt a je pravděpodobné, že se bude jeho výskyt opakovat, například obecnou trendovost a netrendovost. Výsledek snažení najdete níže na grafu.
graf
Graf vyjadřuje normalizovaný vztah mezi 70-ti týdením vývojem indexu EURUSD a prediktivním modelem založené na neurální síti. Výkonnost prediktivního modelu je hodnocen scoringovým systémem, který jednoduše přičítá body, byla-li týdenní predikce přesná a odečítá body, pokud se stal opak. Ať už výsledky interpretujete jakkoliv, neurální síť vcelku neúspěšně předpověděl trend indexu, ale vcelku úspěšně dokázal predikovat vztah mezi volatilitou indexu a entropií trhu.
Jaké jsou závěrečné postřehy a výstupy z projektu?
• Pokud bych býval dokončil a odevzdal výstupy projektu s neurální sítí, pravděpodobně bych studentskou soutěž nevyhrál, protože nakonec model našel a předpověděl jiné vztahy než např. to kde bude cena plynu za dva měsíce ode dneška.
• V poskytnutých datech chyběly informace, které by modelu umožnily předpovědět to, co jsem chtěl.
• Zvolil jsem moc složitou topologie sítě, tím se zredukovala schopnost zobecnění vstupních informací a “dekodování” šumu.
• K úspěšné předpovědi nám stačí i 60% pravděpodobnost.
Doufám, že pro Vás byl článek poučný a srozumitelný. Příště zas třeba něco méně technického, třeba o vztazích.