Aplikace Summary of Financial Articles (SFA) je určena pro získávání článků z oblasti finančních trhů publikovaných různými internetovými médii a jejich následnou analýzu. Cílem je usnadnit práci finančním analytikům, kteří musí každodenně zpracovávat velké množství informací, na jejich základě si vytvářet obrázek o stavu finančních trhů a jednotlivých cenných papírů a následně vydávat doporučení zákazníkům ke strategii obchodování.

O aplikaci

Ze získaných dokumentů (článků a krátkých zpráv) vytváří aplikace zkrácené souhrny vystihující podstatu textu a analyzuje jejich sentiment. Aplikace pravidelně stahuje dokumenty a zobrazuje je ve webové aplikaci ve formě přehledného seznamu. Uživatelům tak nejsou předkládány celé články, ale pouze jejich souhrn. Ten je k dispozici v několika formách. V případě, že autor článku sám v úvodu téma shrnuje, je tato část zobrazena (záložka Author). Podobně je to i s případným souhrnem na závěr, který také často obsahuje důležité informace (Conclusion). Nejdůležitější je však souhrn generovaný vlastní aplikací SFA (Generated). Ten je vytvářen vždy, pokud článek obsahuje dostatečné množství textu, aby bylo možné souhrn vytvořit. Například u krátkých zpráv to není vždy nutné. Jednotlivé souhrny jsou k dispozici přehledně na samostatných kartách a uživatel tak má možnost si jednoduše vybrat, co ho zajímá.

Články

Ke každému dokumentu je také k dispozici informace o datu publikování, klíčová slova charakterizující oblast, které se zpráva týká, a odkaz na celý článek dostupný přes jeho název. Je také vyznačeno, zda se jedná o článek (Analysis) nebo krátkou zprávu (News).

Jednotlivé dokumenty je v aplikaci možné filtrovat dle:

  • datumu, kdy byly publikovány (Date range),
  • tickerů – názvů cenných papírů, kterých se týkají (Tickers),
  • tagů – oblastí, do které spadají (Tags),
  • kategorie – článek nebo news (Category),
  • sentimentu – pozitivní, negativní nebo neutrální hodnocení (Sentiment),
  • domén – webových zdrojů, ze kterých se stahuje (Domains).

a řadit podle data vzestupně či sestupně.

Filtry

Aplikace také v záhlaví zobrazuje přehled sentimentu získaných dokumentů za určité období. V levém grafu je tak možné analyzovat poměr pozitivních a negativních zpráv. V pravém grafu je informace o nejvíce diskutovaných tickerech za vybrané období, respektive těch, u kterých došlo k největší změně v počtu komentářů. V iniciálním nastavení jsou zobrazeny nejdiskutovanější bez ohledu na sentiment. Pomocí tlačítka Change je možné specifikovat konkrétní sentiment a zobrazí se přehled nejdiskutovanějších s daným sentimentem. U každého tickeru je zobrazena i hodnota ukazující, zda došlo k nárůstu či poklesu počtu (pozitivní/negativní hodnota).

Vývoj sentimentu
Diskutovanost tickerů

Nastavení všech filterů je možné zrušit tlačítkem Reset all filters v záhlaví aplikace.

Design aplikace

Frontend

Architektura frontendu aplikace je implementována jako Single Page Application. Tento typ aplikace je webová aplikace s jednou stránkou HTML, která se inicializuje jednou a při dalších interakcích se změní pouze potřebný obsah. Téměř celá aplikace běží přímo v klientském prohlížeči, zatímco server se většinou používá k autentizaci a jako zdroj nebo úložiště dat. Ve srovnání s tradičními serverově orientovanými aplikacemi je hlavním rozdílem způsob, jakým jsou data přijímána a odesílána po počátečním požadavku HTTP. Jednostránkové aplikace používají k přenosu dat mezi serverem a klientem AJAX (asynchronní JavaScript a XML), které jsou obvykle ve formátu JSON. To znamená, že v okamžiku, kdy se data dostanou ke klientovi, klient částečně znovu vykreslí stránku HTML, aniž by musel aktualizovat celou stránku. Proto se pokaždé nenačte celý kód HTML, což se odráží v rychlosti aplikace.

Aplikace je naprogramována s využitím JavaScriptové knihovny React. V současné době je to jedna z nejpopulárnějších knihoven nebo frameworků pro vytváření webového uživatelského rozhraní. React je založen na opakovaně použitelných komponentách s dobře definovaným a jednoduchým tokem dat. React používá syntaxi JSX (rozšíření syntaxe k JavaScriptu) a komponenty se vykreslují rychleji díky virtuálnímu DOM. React jsme vybrali zejména kvůli dobré podpoře TypeScriptu, rozsáhlé komunitě a stavu dokumentace.

Pro vývoj nebyl použit čistý JavaScript, ale TypeScript. Ten poskytuje rozhraní a řízení typů, které usnadňují vývoj a umožňují jeho lepší kontrolu. Aplikace centralizuje a udržuje svůj globální stav pomocí kontejnerů stavu Redux. Tato knihovna umožňuje spravovat a předvídatelně mutovat stav aplikace JavaScriptu. Celá aplikace je pak zabalená v rozhraní Ant Design UI, které nabízí několik dynamických a vizuálně připravených komponent.

Backend

Serverová část aplikace funguje jako komunikační rozhraní s databází a realizuje logiku aplikace. Na základě požadavku zpracovává data v požadovaném formátu a struktuře. Tato část aplikace je implementována v populárním programovacím jazyce Python verze 3, a to především díky široké škále dostupných knihoven, které přispívají k principu opětovného použití kódu a tím výrazně urychlují vývoj.

Ze zkušeností z předchozích projektů jsme upustili od nasazení v tradičním prostředí serveru a tradičním životním cyklu spuštění, včetně fází analýzy, kompilace, spuštění a vypnutí. Aplikace je provozována v izolovaném prostředí, v takzvaných Docker kontejnerech. Kontejner je jednoduchý samostatný softwarový balíček a jako monolit obsahuje vše potřebné ke spuštění kódu prostředí aplikace, systémových knihoven a konfigurace. Kontejnery izolují software a prostředí a zajišťují nezávislost platformy. Hlavní výhodou tohoto přístupu je mimo jiné možnost místního rozvoje, kdy má každý vývojář vlastní kopii aplikace, na které může pracovat. Nemusí se starat o nekompatibilitu mezi svou místní platformou a serverem, protože kontejnery mají své vlastní běhové prostředí. Tím je zajištěno, že aplikace funguje stejně v jakémkoli prostředí podporovaném Dockerem.

Komunikační rozhraní

Pro vývoj byl použit framework Flask, který implementuje obvyklé osvědčené postupy v oblasti vývoje webových aplikací. Umožňuje také rychlé nasazení díky komunikačnímu rozhraní WSGI, které je podporováno webovým serverem Apache. Rámec funguje jako REST-API, což znamená že na základě metody URI a HTTP požadavku provádí akci a vrací příslušnou odpověď, obvykle strukturovanou ve formátu JSON. Výsledkem je, že implementace jednoho backendu zvládne požadavky webového i mobilního klienta. Flask, na rozdíl od jiných frameworků (například Django), nevyžaduje přísnou aplikační architekturu a do značné míry ponechává vývojářům volnost při implementaci, což bylo pro prototyp aplikace velmi žádoucí. Jedna nebo více instancí aplikace se inicializuje na začátku služby, když se také načtou nezbytné závislosti a modely a vytvoří se připojení k databázi. Tato data jsou trvalá až do konce služby, což výrazně urychluje aplikaci. Kromě toho je možné spustit další instance pro škálování výkonu podle aktuálního zatížení. Při vývoji používáme principy CI / CD. Nasazení nové verze aplikace je plně automatizované (inicializace kontejneru, spuštění služby, testovací skripty a samotná aplikace) pomocí nástrojů GitLab.

Uložení dat

Pro ukládání dat se používají dvě různá úložiště. Data se automaticky načítají scrapování z různých webových stránek. Každá stránka má bohužel jinou strukturu, která se také časem mění, takže nemůžeme spoléhat na konzistenci získaných údajů. Proto jsou v první fázi data uložena v NoSQL databázi Mongo DB. Nerelační databáze neukládají data do tabulek, ale jako takzvané dokumenty. Každý dokument poté ukládá data ve formě klíč-hodnota, ale vnitřní struktura dokumentů nemusí být jednotná. Ve druhé fázi jsou data normalizována a uložena v tradiční relační databázi Postgres. Normalizace dat zahrnuje např. extrakci klíčových slov či autorských souhrnů a identifikaci tickerů.

Tvorba souhrnu

Analyzovali jsme několik různých přístupů jak z pohledu abstraktivního tak extraktivní tvorby souhrnu. Porovnávali jsme výstupy jak z vlastních řešení, tak z běžně dostupných knihoven (například Sumy, Python Text Summarizer).

Souhrn, který obsahuje podstatné informace z celého článku, je vytvořen extraktivním způsobem. Pro vytvoření souhrnu je použita knihovna Gensim z programovacího jazyka Python. Extrakce je založena na algoritmu TextRank, což je varianta algoritmu PageRank používaného společností Google pro hodnocení relevance webových stránek.

Princip algoritmu:

  • preprocesing (eliminace stopslov, stemming),
  • vytvoření grafu, přičemž věty tvoří vrcholy,
  • hrany označující podobnost mezi dvěma větami ve vrcholech,
  • na tomto váženém grafu pustíme algoritmus PageRank, 
  • vybere se nejvyšší skóre a vloží se do souhrnu, 
  • na základě poměru nebo počtu slov se rozhodne o počtu vrcholů, které mají být vybrány. 

V současné době pracujeme na vlastním řešení, které kombinuje oba přístupy (abstraktivní i extraktivní) a využívá výhod obou. V souhrnu jsou zahrnuty nezměněné klíčové informace, což je velmi důležité pro finanční analytiky a zároveň na sebe věty plynule navazují. Toto řešení nabídneme ve webové aplikaci jako další, alternativní, souhrn.

Identifikace sentimentu

Identifikace sentimentu dokumentu je vytvářena na základě nikoliv celého článku, ale pouze jeho souhrnu. V experimentální fázi vývoje prototypu jsme identifikovali tento přístup jako vhodnější, neboť při práci s celým článkem nám obvykle sentiment vycházel jako neutrální.

Tato část je postavena na modelu BERT, který byl firmou Google natrénován na článcích ze zpravodajství. My jsme tento model doplnili o dotrénovanou vrstvu stojící na manuálně olabelovaných textech z oblasti finančních trhů.

Sentiment je u každého článku nebo zprávy identifikován barvou záhlaví štítku. Pokud není označen žádnou barvou, znamená to, že nebylo možné sentiment určit. Obvykle je příčinou příliš krátký nebo neklasifikovatelný obsah. Články je možné na základě sentimentu i jednoduše filtrovat.

Tvorba souhrnu i identifikace sentimentu probíhají pravidelně v určených časových intervalech. Může se tedy stát, že některé články nebo zprávy nejsou ještě po stažení zpracovány.

Uplatnění

Aplikace je vytvářena ve spolupráci se společností CCF Research, a.s., která řešení nabízí komerčním subjektům. Firemní webová prezentace nabízené aplikace je k dispozici zde.

Komerční verzi rutinně využívá společnost Cyrrus, a.s. Tato verze nabízí oproti prototypu větší množství sledovaných zdrojů (domén) a dokumenty jsou stahovány s vyšší frekvencí, tak aby měli analytici k dispozici vždy nejčerstvější informace a dokázali se včas a správně rozhodovat.

Publikace

  • Chochula, P.: Summarization of Documents Focused on Financial Markets. In HAMPEL, Vránová PEFnet 2021: Abstracts. 1. vyd. Brno: Mendelova univerzita v Brně, 2021, s. 37–38. ISBN 978-80-7509-811-5.
  • Valovič, R. Šťastná, P.: Sentiment Analysis of FinanciaL News. In HAMPEL, Vránová PEFnet 2021: Abstracts. 1. vyd. Brno: Mendelova univerzita v Brně, 2021, s. 137–138. ISBN 978-80-7509-811-5.

Umístění

Volně dostupný prototyp aplikace demonstrující její možnosti je umístěn zde.