Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
% arara: pdflatex
% arara: pdflatex
% arara: pdflatex
% options:
% thesis=B bachelor's thesis
% thesis=M master's thesis
% czech thesis in Czech language
% slovak thesis in Slovak language
% english thesis in English language
% hidelinks remove colour boxes around hyperlinks
\documentclass[thesis=B,czech]{FITthesis}[2019/03/06]
\usepackage[utf8]{inputenc} % LaTeX source encoded as UTF-8
% \usepackage{amsmath} %advanced maths
% \usepackage{amssymb} %additional math symbols
\usepackage{dirtree} %directory tree visualisation
% % list of acronyms
% \usepackage[acronym,nonumberlist,toc,numberedsection=autolabel]{glossaries}
% \iflanguage{czech}{\renewcommand*{\acronymname}{Seznam pou{\v z}it{\' y}ch zkratek}}{}
% \makeglossaries
\newcommand{\tg}{\mathop{\mathrm{tg}}} %cesky tangens
\newcommand{\cotg}{\mathop{\mathrm{cotg}}} %cesky cotangens
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% ODTUD DAL VSE ZMENTE++
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
\department{Katedra softwarového inženýrství}
\title{Aplikace pro doporučování na základě finančních akcí}
\authorGN{Radek} %(křestní) jméno (jména) autora
\authorFN{Puš} %příjmení autora
\authorWithDegrees{Radek Puš} %jméno autora včetně současných akademických titulů
\author{Radek Puš} %jméno autora bez akademických titulů
\supervisor{doc. Ing. Pavel Kordík, Ph.D.}
\acknowledgements{Děkuji společnosti Trask Solutions a.s., zejména pak Ing. Petru Hnízdilovi a Ing. Pavlu Svobodovi, za veškeré konzultace a datové podklady k práci. Dále děkuji své přítelkyni Mariyi Tsanko, za dodání doplňujících dat ze svých bankovních účtů.}
{V Bakalářské práci byl řešen problém doporučování bankovních produktů klientovi na základě jeho uplynulé historie finančních transakcí. Cílem práce je doporučování transakcí implementovat pomocí umělé inteligence spolu s vytvořením webového rozhraní. Toho bylo dosaženo pomocí Angularu JS, tvořící klienskou aplikaci, a frameworkem .NET Core, který tuto aplikaci obsluhuje. Umělá inteligence byla řešena jednou z metod kolaborativního filtrování a to konkrétně metodou ALS (Alternating Least Squares)
%=============
Tuto metodu jsem implementoval jako využití produktů uživatelů s podobným finančních chováním, k doporučení produktu dalšímu uživateli.
% <= mělo by obsahovat mojí vlastní implementaci problému
\newline Vyhodnocení správnosti implementace algoritmu bylo následně provedeno pomocí další sady dat, která zobrazuje, jaké transakce reálně uživatelé provedli (jak se chovali) a případně i jaké produkty si objednali.}
\abstractEN{
In the Bachelor Thesis, the problem of recommending banking products to a client based on his past history of financial transactions was solved. The aim of this work is to implement transactions using artificial intelligence together with creation of web interface. This has been achieved with Angular JS as client application, and the .NET Core Entity framework that serves this application. Artificial intelligence was solved by one of the methods of collaborative filtering, namely by the ALS (Alternating Least Squares) method.
I have implemented this method as a use of users' products with similar financial behavior, to recommend the product to another user.
\newline
The evaluation of the correctness of the implementation of the algorithm was then carried out using another set of data that shows what transactions the users actually performed (how they behaved) and possibly what products they ordered.
}
%ing
\placeForDeclarationOfAuthenticity{V~Praze}
\declarationOfAuthenticityOption{4} %volba Prohlášení (číslo 1-6)
\keywordsCS{webový portál, rekomandace bankovní produktů, analýza finančních transakcí, umělá inteligence, .NET Core, Entity Framework, Angular JS}
\keywordsEN{web portal, financial products recommendations, financial transaction analysis, artificial intelligence, .NET Core, Entity Framework, Angular JS}
% \website{http://site.example/thesis} %volitelná URL práce, objeví se v tiráži - úplně odstraňte, nemáte-li URL práce
\begin{document}
% \newacronym{CVUT}{{\v C}VUT}{{\v C}esk{\' e} vysok{\' e} u{\v c}en{\' i} technick{\' e} v Praze}
% \newacronym{FIT}{FIT}{Fakulta informa{\v c}n{\' i}ch technologi{\' i}}
\begin{introduction}
%sem napište úvod Vaší práce
Ve své práci řeším problém zpracování finančních transakcí. Při výběru jsem využil možného zájmu bankovní instituce o odkoupení výsledného produktu. Ta by mohla využít mou práci k lepšímu doporučování vlastních produktů svým klientům. Mě osobně vždy zajímal vývoj v oblasti umělé inteligence a chtěl jsem si proto své znalosti prohloubit.
\newline Technologie, které jsem využil pro svou práci, jsem si vybral na základě svého současného zaměstnání. Skrze společnost Trask Solutions a.s. pracuji jako externista a software developer ve společnosti ČSOB Leasing. Zde pomáhám vyvíjet aplikaci právě v jazyce C\# a frameworku ASP .NET. Avšak framework jsem použil novější (Entity Framework pro .NET Core). Práci bych rád využil ke zvýšení své kvalifikace v oboru. Pro Frontend jsem zvolil Angular JS, protože jsem se chtěl také naučit něco nového. Navíc spolupracuji s týmem, který v tomto frameworku vyvíjí aplikace a v případě potřeby mi mohou obratem pomoci.
Cílem práce je vytvoření webové aplikace, která bude pro skupinu uživatelů poskytovat službu doporučování finančních produktů na základě jimi nahrané transakční historie.
\newline Cílem teoretické části práce je nastudování Angular frameworku, Typescriptu a Entity Frameworku Core / .NET Core. Dále je třeba zjistit možnosti využití umělé inteligence, která bude muset alespoň z části předpovědět chování uživatelů. Tato umělá inteligence bude předpovídat chování uživatelů na základě předem získaných (anonymizovaných) a obohacených dat jejich finanční historie uživatelů.
\newline Cílem praktické části je implementovat tuto webovou aplikaci včetně umělé inteligence, která bude vytěžovat údaje z uživatelem nahraných dat.
%\chapter{Analýza a návrh}
\chapter{Analýza}
Projekt je webová aplikace. Musí se proto skládat ze dvou částí: Backendu a Frontendu. Frontend je webovým rozhraním a Backend zpracovává údaje uživatele a dodává webovému rozhraní data.
\section{Webové rozhraní}
Pro webové rozhraní se nabízejí dvě možná řešení. Single Page Website a Multiple Page website. Každé má své pro a proti.
\subsection{One Page website}
Jak už název napovídá, je to web, skládající se z jediné stránky. Stránka obvykle neobsahuje příliš mnoho informací a je založena zejména na dynamičnosti prvků. Velmi často jsou to doprovodné stránky nebo krátké informativní stránky, s jejichž pomocí se subjekty na webu prezentují.
\subsection{Multiple Page website}
Tyto weby, vývojově starší, obsahují zpravidla hodně informací. Obsahují nějakou formu routování - ať už složitější, dynamickou, či jednodušší, statickou. Uživateli podávají poměrně velké množství informací. Jsou to zpravidla nejrůznější blogy, e-shopy, fóra. Jejich implementace je často snazší (zejména u statických webů), jsou schopny, často přehledněji, zprostředkovat uživateli více informací a jsou (i z historických důvodů) běžnější.
\section{Umělá inteligence}
Na českém trhu je, co se týče předpovídání transakcí, velmi pravděpodobně zatím jediné finanční bankovnictví České Spořitelny, zvané "\textit{George}." a její doplněk "\textit{Moje zdravé finance}."\cite{George} Aplikace je přístupná pouze klientům České spořitelny a zobrazuje pouze příjmy a výdaje. V části "Moje zdravé finance" lze pak vidět, jak dlouho mi vystačí současné úspory nebo například odhadnout výši mého budoucího důchodu. Tato aplikace neposkytuje žádné hlubší doporučování produktů, pouze je schopna vyhodnotit transakce a za drobný poplatek sjednat schůzku s fyzickou osobou (pracovníkem České spořitelny), která může poradit, na čem by mohl klient ušetřit.
\newline Na zahraničním trhu pak existují aplikace, které umožňují klientům sledovat např. jejich měsíční útratu a na základě výpočtu jim poskytnout informaci, jestli a jak moc, překročili průměrné výdaje v tom kterém měsíci. Některé jsou schopny za poplatek, stejně jako u České spořitelny, sjednat i schůzky. Jako příklad mohu uvést třeba \textit{Personal Capital}.\cite{PersonalCapitalCorporation}
\newline Asi jedinou formou vypracovávání odhadů, která se blíží mému tématu, jsou tedy služby, působící v naprosto jiném odvětví. Jsou to služby jako YouTube\cite{YouTube}, Netflix\cite{Netflix}, Steam\cite{Steam}, Spotify\cite{Spotify}. Tzn. služby, zabývající se doporučováním filmů, videí, hudby nebo videoher na základě statistik ostatních uživatelů. Konkrétní algoritmy jsou tajné,\cite{YoutubeTechnet} ale základní principy jsou občas zveřejněny\cite{YoutubeRecommendations}. V zásadě bych ale jednotlivé algoritmy rozdělil následovně:
\subsection{Statický}
Doporučování je implementováno pomocí nějaké formy rozhodovacího stromu (decision tree). Zadefinuje se tedy, co se má kdy zobrazit. Podrobně to rozebírá Steeve Huang ve svém článku \textit{Introduction to Recommender System. Part 1}\cite{StaticCF}
\subsection{Dynamický}
Tento způsob implementace využije transformaci problému do matice, na základě které se učí neuronové sítě rozpoznat vzorce. Přístup nemusí být ale nutně rychlejší, či s lepšími výsledky. Tyto souvislosti opět popisuje Steeve Huang ve své druhé části článku o kolaborativním filtrování.\cite{DynamicCF}. Pravě tento způsob využívá ale například YouTube,\cite{YoutubeRecommendations} o kterém jsem se, v této souvislosti, zmínil již dříve.
\section{Webové rozhraní}
Pro webové rozhraní jsem zvolil One Page website. Nepotřebuji uživateli předávat velké množství informací. V zásadě jen zobrazuji grafy a doporučuji produkty. Nemusím tedy vytvářet rozsáhlý web a nejrůznější routování. V případě jedné stránky se navíc snadněji pracuje s responzivitou, protože ji stačí vyladit na jedinou stránku webu. U Multiple Page webu by mohl tuto responzivitu rozbít přechod na jinou stránku. To zde nemůže nastat.
\section{Backend}
Při výběru formy zpracování umělé inteligence jsem se rozhodl pro využití neuronových sítí. Tato forma zpracování je novější, ale jinak nemá žádné výrazné výhody.\cite{DynamicCF}. Vybral jsem si ji tedy hlavně proto, že se mi zdá zajímavější. Pro zjištění, který model je přesnější, bych ale musel implementovat obě varianty, což je výrazně časově náročný problém a rozdíl by patrně nebyl markantní. Navíc lze jen těžko odhadnout, jak přesně by se jednotlivé modely chovaly v horizontu let.
%\section{Technologie}
%Jako technologický základ pro webovou část jsem zvolil AngularJS framework ve spojení s BootStrapem pro snazší responzivní stylování stránky. Pro grafy jsem využil knihovnu HighCharts, protože %obsahuje kvalitní dokumentaci, je responzivní a lze ji snadno zakomponovat do kódu.
%\section{Example} Cellý projekt který vytvářím by se dal rozdělit do dvou samostatných částí. První, pro uživatele viditelná, je frontend. Ten musí být schopen správně komunikovat s uživatelem. %Druhou autonomí částí je umělá inteligence. Ta tvoří backend a uživatel se k ní přímo nedostane.
%\newline Pro druhou, backendovou část, jsem zvolil jazyk C\#
Pro svou práci jsem si nastudoval syntaxi a použití jazyků, jmenovitě Typescriptu, Angularu a C\# ve spojení z Entity frameworkem, na kterém jsem založil webovou aplikaci jako takovou. Od firmy Trask Solutions a.s. jsem si zajistil data a ty obohatil o druhy konstantních symbolů. Následně jsem na nich učil umělou inteligenci.
\newline V práci se mi podařilo umělou umělou inteligenci vytrénovat do té míry, že je schopna do jisté míry předpovědět chování uživatelů. Bohužel, bez přístupu k reálným datům, se mi nepodařilo určit správnost mého rekomandačního modelu dostatečně obsáhle.
\newline Jako možná další možné vylepšení bych uvedl analýzu transakčních poznámek. Toto by šlo implementovat pravděpodobně nejlépe rozhodovacím stromem. V případě přístupu k neanonymizovaným datům, by se daly doplnit další možné souvislosti pro učení umělé inteligence. Protože je aplikace nezávislá, tak by pro pohodlí uživatelů byla také vhodná nějaká forma automatického importu transakcí (například formou pravidelného zasílání emailů do aplikace).
\end{conclusion}
\bibliographystyle{csn690}
\bibliography{mybibliographyfile}
\appendix
%============= seznam zkratek disabled ===================
%\chapter{Seznam použitých zkratek}
%% \printglossaries
%\begin{description}
% \item[GUI] Graphical user interface
% \item[XML] Extensible markup language
%\end{description}
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
% % % % % % % % % % % % % % % % % % % % % % % % % % % %
% % Tuto kapitolu z výsledné práce ODSTRAŇTE.
% % % % % % % % % % % % % % % % % % % % % % % % % % % %
%
% \chapter{Návod k~použití této šablony}
%
% Tento dokument slouží jako základ pro napsání závěrečné práce na Fakultě informačních technologií ČVUT v~Praze.
%
% \section{Výběr základu}
%
% Vyberte si šablonu podle druhu práce (bakalářská, diplomová), jazyka (čeština, angličtina) a kódování (ASCII, \mbox{UTF-8}, \mbox{ISO-8859-2} neboli latin2 a nebo \mbox{Windows-1250}).
%
% V~české variantě naleznete šablony v~souborech pojmenovaných ve formátu práce\_kódování.tex. Typ může být:
% \begin{description}
% \item[BP] bakalářská práce,
% \item[DP] diplomová (magisterská) práce.
% \end{description}
% Kódování, ve kterém chcete psát, může být:
% \begin{description}
% \item[UTF-8] kódování Unicode,
% \item[ISO-8859-2] latin2,
% \item[Windows-1250] znaková sada 1250 Windows.
% \end{description}
% V~případě nejistoty ohledně kódování doporučujeme následující postup:
% \begin{enumerate}
% \item Otevřete šablony pro kódování UTF-8 v~editoru prostého textu, který chcete pro psaní práce použít -- pokud můžete texty s~diakritikou normálně přečíst, použijte tuto šablonu.
% \item V~opačném případě postupujte dále podle toho, jaký operační systém používáte:
% \begin{itemize}
% \item v~případě Windows použijte šablonu pro kódování \mbox{Windows-1250},
% \item jinak zkuste použít šablonu pro kódování \mbox{ISO-8859-2}.
% \end{itemize}
% \end{enumerate}
%
%
% V~anglické variantě jsou šablony pojmenované podle typu práce, možnosti jsou:
% \begin{description}
% \item[bachelors] bakalářská práce,
% \item[masters] diplomová (magisterská) práce.
% \end{description}
%
% \section{Použití šablony}
%
% Šablona je určena pro zpracování systémem \LaTeXe{}. Text je možné psát v~textovém editoru jako prostý text, lze však také využít specializovaný editor pro \LaTeX{}, např. Kile.
%
% Pro získání tisknutelného výstupu z~takto vytvořeného souboru použijte příkaz \verb|pdflatex|, kterému předáte cestu k~souboru jako parametr. Vhodný editor pro \LaTeX{} toto udělá za Vás. \verb|pdfcslatex| ani \verb|cslatex| \emph{nebudou} s~těmito šablonami fungovat.
%
% Více informací o~použití systému \LaTeX{} najdete např. v~\cite{wikilatex}.
%
% \subsection{Typografie}
%
% Při psaní dodržujte typografické konvence zvoleného jazyka. České \uv{uvozovky} zapisujte použitím příkazu \verb|\uv|, kterému v~parametru předáte text, jenž má být v~uvozovkách. Anglické otevírací uvozovky se v~\LaTeX{}u zadávají jako dva zpětné apostrofy, uzavírací uvozovky jako dva apostrofy. Často chybně uváděný symbol "{} (palce) nemá s~uvozovkami nic společného.
%
% Dále je třeba zabránit zalomení řádky mezi některými slovy, v~češtině např. za jednopísmennými předložkami a spojkami (vyjma \uv{a}). To docílíte vložením pružné nezalomitelné mezery -- znakem \texttt{\textasciitilde}. V~tomto případě to není třeba dělat ručně, lze použít program \verb|vlna|.
%
% Více o~typografii viz \cite{kobltypo}.
%
% \subsection{Obrázky}
%
% Pro umožnění vkládání obrázků je vhodné použít balíček \verb|graphicx|, samotné vložení se provede příkazem \verb|\includegraphics|. Takto je možné vkládat obrázky ve formátu PDF, PNG a JPEG jestliže používáte pdf\LaTeX{} nebo ve formátu EPS jestliže používáte \LaTeX{}. Doporučujeme preferovat vektorové obrázky před rastrovými (vyjma fotografií).
%
% \subsubsection{Získání vhodného formátu}
%
% Pro získání vektorových formátů PDF nebo EPS z~jiných lze použít některý z~vektorových grafických editorů. Pro převod rastrového obrázku na vektorový lze použít rasterizaci, kterou mnohé editory zvládají (např. Inkscape). Pro konverze lze použít též nástroje pro dávkové zpracování běžně dodávané s~\LaTeX{}em, např. \verb|epstopdf|.
%
% \subsubsection{Plovoucí prostředí}
%
% Příkazem \verb|\includegraphics| lze obrázky vkládat přímo, doporučujeme však použít plovoucí prostředí, konkrétně \verb|figure|. Například obrázek \ref{fig:float} byl vložen tímto způsobem. Vůbec přitom nevadí, když je obrázek umístěn jinde, než bylo původně zamýšleno -- je tomu tak hlavně kvůli dodržení typografických konvencí. Namísto vynucování konkrétní pozice obrázku doporučujeme používat odkazování z~textu (dvojice příkazů \verb|\label| a \verb|\ref|).
%
% \begin{figure}\centering
% \includegraphics[width=0.5\textwidth, angle=30]{cvut-logo-bw}
% \caption[Příklad obrázku]{Ukázkový obrázek v~plovoucím prostředí}\label{fig:float}
% \end{figure}
%
% \subsubsection{Verze obrázků}
%
% % Gnuplot BW i barevně
% Může se hodit mít více verzí stejného obrázku, např. pro barevný či černobílý tisk a nebo pro prezentaci. S~pomocí některých nástrojů na generování grafiky je to snadné.
%
% Máte-li například graf vytvořený v programu Gnuplot, můžete jeho černobílou variantu (viz obr. \ref{fig:gnuplot-bw}) vytvořit parametrem \verb|monochrome dashed| příkazu \verb|set term|. Barevnou variantu (viz obr. \ref{fig:gnuplot-col}) vhodnou na prezentace lze vytvořit parametrem \verb|colour solid|.
%
% \begin{figure}\centering
% \includegraphics{gnuplot-bw}
% \caption{Černobílá varianta obrázku generovaného programem Gnuplot}\label{fig:gnuplot-bw}
% \end{figure}
%
% \begin{figure}\centering
% \includegraphics{gnuplot-col}
% \caption{Barevná varianta obrázku generovaného programem Gnuplot}\label{fig:gnuplot-col}
% \end{figure}
%
%
% \subsection{Tabulky}
%
% Tabulky lze zadávat různě, např. v~prostředí \verb|tabular|, avšak pro jejich vkládání platí to samé, co pro obrázky -- použijte plovoucí prostředí, v~tomto případě \verb|table|. Například tabulka \ref{tab:matematika} byla vložena tímto způsobem.
%
% \begin{table}\centering
% \caption[Příklad tabulky]{Zadávání matematiky}\label{tab:matematika}
% \begin{tabular}{|l|l|c|c|}\hline
% Typ & Prostředí & \LaTeX{}ovská zkratka & \TeX{}ovská zkratka \tabularnewline \hline \hline
% Text & \verb|math| & \verb|\(...\)| & \verb|$...$| \tabularnewline \hline
% Displayed & \verb|displaymath| & \verb|\[...\]| & \verb|$$...$$| \tabularnewline \hline
% \end{tabular}
% \end{table}
%
% % % % % % % % % % % % % % % % % % % % % % % % % % % %
%============================== temporary disabled =======================
%\chapter{Obsah přiloženého CD}
%\begin{figure}
% \dirtree{%
% .1 readme.txt\DTcomment{stručný popis obsahu CD}.
% .1 exe\DTcomment{adresář se spustitelnou formou implementace}.
% .1 src.
% .2 impl\DTcomment{zdrojové kódy implementace}.
% .2 thesis\DTcomment{zdrojová forma práce ve formátu \LaTeX{}}.
% .1 text\DTcomment{text práce}.
% .2 thesis.pdf\DTcomment{text práce ve formátu PDF}.
% .2 thesis.ps\DTcomment{text práce ve formátu PS}.
% }
%\end{figure}