diff --git a/Latex/BP_Radek_Pus_2019.pdf b/Latex/BP_Radek_Pus_2019.pdf index b23a2cce60de059f538b0b968f8f974af73e19d3..45116372b2041bdadbcf3e92b472bd513ed6c613 100644 Binary files a/Latex/BP_Radek_Pus_2019.pdf and b/Latex/BP_Radek_Pus_2019.pdf differ diff --git a/Latex/BP_Radek_Pus_2019.tex b/Latex/BP_Radek_Pus_2019.tex index ba8c6a32217268859f64fdb66ecfe03ebb32a638..bf01b308e789f7dc4d87ef78f221bbef19aac353 100644 --- a/Latex/BP_Radek_Pus_2019.tex +++ b/Latex/BP_Radek_Pus_2019.tex @@ -78,14 +78,17 @@ I have implemented artificial intelligence as several consecutive layers, the nu % - moĹľná - ÄŤĂm se nezabĂ˝vám % - nepatřà se podnadpisy! 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 zobrazovánĂ pravdÄ›podobnĂ˝ch transakcĂ vlastnĂm uĹľivatelĹŻm. PĹ™ĂpadnÄ› by mohla lĂ©pe porozumÄ›t chovánĂ a potĹ™eby klientĹŻ samotnĂ˝ch. TĂm by mohla produkty lĂ©pe cĂlenĂ© na zakaznĂky. MÄ› osobnÄ› navĂc 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šà (.NET Core ve spojenĂ s Entity Frameworkem). 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. + +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šà (.NET Core ve spojenĂ s Entity Frameworkem). 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. %TODO PĹ™edstavenĂ struktury celĂ© práce –obsah jednotlivĂ˝ch kapitol \end{introduction} \chapter{CĂl práce} CĂlem práce je vytvoĹ™enĂ webovĂ© aplikace, která bude pro skupinu uĹľivatelĹŻ poskytovat sluĹľbu pĹ™edvĂdánĂ finanÄŤnĂch transakcĂ na základÄ› jimi nahranĂ©ho vĂ˝pisu z účtu. -\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. -\newline CĂlem praktickĂ© části je implementovat tuto webovou aplikaci, vÄŤetnÄ› zabezpeÄŤenĂ, a pokusit se implementovat a integrovat umÄ›lou inteligenci, která bude vytěžovat Ăşdaje z uĹľivatelem nahranĂ˝ch dat. + +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. + +CĂlem praktickĂ© části je implementovat tuto webovou aplikaci, vÄŤetnÄ› zabezpeÄŤenĂ, a pokusit se implementovat a integrovat umÄ›lou inteligenci, která bude vytěžovat Ăşdaje z uĹľivatelem nahranĂ˝ch dat. %\chapter{AnalĂ˝za a návrh} @@ -216,7 +219,7 @@ ProblĂ©m desetinnĂ© čárky nenĂ o tolik těžšĂ. PĹ™ed parsovánĂm staÄŤĂ \subsection{UkládánĂ} Po zparsovánĂ dokumentu docházĂ k ukládánĂ pouze tÄ›ch záznamĹŻ, kterĂ© se podaĹ™ilo ĂşspěšnÄ› zpracovat. Všechny neĂşspěšnĂ© záznamy jsou pĹ™eskoÄŤeny. ZároveĹ docházĂ k zaloĹľenĂ záznamu o nahranĂ©m souboru. Ten obsahuje jen jmĂ©no souboru a identifikaci, uĹľivatele, kterĂ˝ ho nahrál. K tomu to záznamu se poslĂ©ze pĹ™iĹ™adĂ veškerĂ© transakce, kterĂ© byly tĂmto souborem nahrány. DÄ›je se tak z dĹŻvodu, Ĺľe by uĹľivatel chtÄ›l danĂ˝ soubor smazat. -\subsection{ObohacenĂ} +\subsection{ObohacenĂ}\label{RealizaceObohaceni} ProtoĹľe data z ARES nelze smysluplnÄ› zpracovat, došlo k obohacenĂ data na základÄ› konstantnĂch symbolĹŻ. Tento prvek sice nemusĂ bĂ˝t pĹ™Ătomen v transakci, pro operace, jeĹľ má na starosti banka (karetnĂ operace, vĂ˝bÄ›ry z bankomatu,...), jsou však ÄŤasto pĹ™Ătomny. PĹ™idánĂ závislostĂ na konstantnĂch symbolech bylo zaloĹľeno na ÄŤĂselnĂku MFÄŚR. V práci pak bylo konkrĂ©tnÄ› vyuĹľit jeho souhrn ze serveru Finance.cz\cite{ConstantSymbolList}. ÄŚĂselnĂk byl zároveĹ rozdÄ›len do následujĂcĂch kategoriĂ: @@ -353,11 +356,10 @@ Pokud se naopak vyuĹľijĂ všechny vstupy najednou, mĹŻĹľe u velkĂ˝ch datasetĹŻ Tento pĹ™Ăstup uspořà paměť, je schopen se lĂ©pe uÄŤit a zároveĹ tĂm lze eliminovat problĂ©m, kdy chodĂ data jednoho druhu a po slĂ©ze jinĂ©ho (nemajĂ uniformnĂ rozdÄ›lenĂ). SĂĹĄ by se totiĹľ pĹ™ipravila jen na jeden druh dat. CoĹľ je zároveĹ problĂ©m, ke kterĂ©mu došlo kvĹŻli porovnávánĂ transakcĂ (detailnÄ› rozebráno v sekci \ref{komparator}). -\subsection{Export, Import sĂtÄ›} +\subsection{Export, Import sĂtÄ›}\label{ANNexportImport} Aby bylo moĹľnĂ© vyuĹľĂt uĹľ jednou natrĂ©novanou sĂĹĄ, je nutnĂ© si ji nÄ›jakĂ˝m zpĹŻsobem zapamatovat. Pro sĂĹĄ jsou dĹŻleĹľitĂ© pouze dvÄ› vÄ›ci a totiĹľ váhy neuronĹŻ spoleÄŤnÄ› s tvarem sĂtÄ›. Tvarem sĂtÄ› se rozumĂ mnoĹľstvĂ vrstev a poÄŤet neuronĹŻ v nich obsaĹľenĂ˝ch. Pro Ĺ™ešenĂ uloĹľenĂ sĂtÄ› si ji lze pĹ™edstavit jako 3D objekt. PrvnĂm rozmÄ›rem jsou vrstvy, druhĂ˝m poÄŤet neuronĹŻ v kaĹľdĂ© vrstvÄ› a tĹ™etĂ jsou váhy v kaĹľdĂ©m neuronu. StejnĂ˝m zpĹŻsobem se proto ukládajĂ resp. naÄŤĂtajĂ do/z databáze. -%TODO model databáze \subsection{TestovánĂ funkÄŤnosti neuronovĂ© sĂtÄ›} Pro zjištÄ›nĂ funkÄŤnosti sĂtÄ› musely bĂ˝t vytvoĹ™eny nÄ›jakĂ© dva primitivnĂ problĂ©my, na základÄ› kterĂ˝ch by se dalo ověřit, Ĺľe opravdu funguje. Byl tedy zvoleno pĹ™edvĂdánĂ sudĂ˝ch a lichĂ˝ch ÄŤĂsel spoleÄŤnÄ› s testovánĂm operátoru XOR pro dvÄ› ÄŤĂsla. Pro oba testovanĂ© pĹ™Ăpady byl implementován ÄŤĂtaÄŤ pokusĹŻ - kolik bylo správnÄ› a kolik špatnÄ› i kolikrát v testu mÄ›lo dojĂt k pĹ™edpovÄ›di o správnĂ©m ÄŤi špatnĂ©m vĂ˝sledku. Tento ÄŤĂtaÄŤ zároveĹ ověřuje, jestli sĂĹĄ nepĹ™edpovĂdá jen jedno ÄŤĂslo pĹ™ĂpadnÄ› generátor, kterĂ˝ testy provádĂ funguje správnÄ›. @@ -514,24 +516,61 @@ DetailnĂ rozloĹľenĂ lze tĂ©Ĺľ pozorovat na obr. ÄŤ. \ref{ExpenseNormalization} \label{ExpenseNormalization} \end{figure} -\section{PropojenĂ importĹŻ a umÄ›lĂ© inteligence} +%TODO maybe +%\section{PropojenĂ importĹŻ a umÄ›lĂ© inteligence} \section{Databáze} -PĹ™i vĂ˝bÄ›ru druhu databáze jsem se musel rozhodnout mezi strukturovanĂ˝m a nestrukturovanĂ˝m pĹ™Ăstupem k datĹŻm. PrvnĂ ze zmĂnÄ›nĂ˝ch je reprezentován SQL, druhĂ˝ pomocĂ NoSQL -\subsection{NoSQL} -% TODO screen z excelu -Tento pĹ™Ăstup je vhodnĂ˝ pro nestrukturovanĂ© informace a zvaĹľoval jsem ho jako prvnĂ. VeškerĂ© záznamy, ve vĂ˝pisu z účtu, jsou tedy vlastnÄ› jen jedna \mbox{"velká tabulka"/super-entita.} Záznamy mohou bĂ˝t nevyplnÄ›nĂ© (pĹ™. jednotlivĂ© symboly) a na prvnĂ pohled nijak nesouvislĂ©. Pokud se ale na data zaměřĂm vĂce, mohu si všimnout, Ĺľe transakce lze rozdÄ›lit napĹ™Ăklad na TrvalĂ© a jednorázovĂ© pĹ™Ăkazy, poplatky~atp. PouĹľitĂ NoSQL databáze pro transakÄŤnĂ historii i tak ale nic nebránĂ. Nakonec zmĂnÄ›ná data dokonce vĹľdy dostanu jako jednu jednu jedinou, nic neĹ™ĂkajĂcĂ, tabulku. -\subsection{SQL} -DruhĂ˝m pĹ™Ăstupem, kterĂ˝ jsem nakonec zvolil, jsou standardnĂ SQL databáze. Tento pĹ™Ăstup vyĹľaduje strukturovánĂ dat a to, jak jsem jiĹľ zmĂnil výše, je splnÄ›no. Lze zde nalĂ©zt rĹŻznĂ© závislosti. Pro vstupy pro mnou implementovanou umÄ›lou inteligenci je navĂc mnohem lepšà jasnÄ› definovanĂ© vstupy, coĹľ SQL pĹ™Ăstup nabĂzĂ. NavĂc veškerou historii transakcĂ všech uĹľivatelĹŻ nechci ukládat do databáze, ale radÄ›ji v *.csv souborech na disk a zaregistrovat jen nÄ›kterĂ© transakce. V opaÄŤnĂ©m pĹ™ĂpadÄ› by se celá databáze stala zbyteÄŤnÄ› velkou a pomalou. +Databáze by se dala rozdÄ›lit na ÄŤtyĹ™i samostatnĂ© celky. KaĹľdĂ˝ celek je ale strukturovanĂ˝ a propojenĂ˝ s ostatnĂmi. NĂĹľe jsou všechny popsány i s doprovodnĂ˝mi výřezy diagramu. KompletnĂ diagram databáze je ale pĹ™Ăliš rozsáhlĂ˝ pro vloĹľenĂ do textu. Je proto pĹ™iloĹľen mezi externĂmi pĹ™Ălohami typu \ref{DBdiagram} jako obrázek s názvem \textit{DB\textunderscore diagram.png}. -\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. +\subsection{UĹľivatel} +Prvnà částĂ je ukládánĂ dat o uĹľivateli. Pomyslnou hlavnĂ tabulkou je "User". Obsahuje uĹľivatelská jmĂ©na registrovanĂ˝ch uĹľivatelĹŻ a heslo, kterĂ© je zahashovanĂ© a propojenĂ© se solĂ. +Pro kaĹľdĂ©ho uĹľivatele si tĂ©Ĺľ, v tabulce "Files", ukládá informace, jakĂ© soubory nahrál, resp. jejich jmĂ©no a obsah. Je zde ale vystaveno omezenĂ na ukládánĂ souborĹŻ tak, aby bylo jejich jmĂ©no, v rámci uĹľivatele, unikátnĂ. OmezenĂ bylo vytvoĹ™eno z dĹŻvodu zabránÄ›nĂ nahrávánĂ duplicitnĂch souborĹŻ, kterĂ© je těžkĂ© odhalit. UĹľivatel sice mĹŻĹľe stále upravit jmĂ©no a soubor nahrát, tĂmto zpĹŻsobem je ale upozornÄ›n, Ĺľe uĹľ systĂ©m data pravdÄ›podobnÄ› obsahuje. -%\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\# +Dalšà vĂ˝hoda tĂ©to tabulky tvĂ v tom, Ĺľe pokud si uĹľivatel pĹ™eje smazat nahranĂ˝ soubor, jsou známy transakce, kterĂ© jsou k danĂ©mu souboru navázány. + +\begin{figure}[H] + \includegraphics[width=0.55\textwidth]{img/model-user.jpg} + \centering + \caption[Model databáze - uĹľivatel]{Model databáze - uĹľivatel} + \label{ModelUser} +\end{figure} +\subsection{Transakce} +Dalšà poloĹľka databáze jsou jednotlivĂ© transakce. Ty pĹ™edstavujĂ pomyslnĂ© centrum databáze, protoĹľe jsou hlavnĂ informacĂ, od kterĂ© se veškerá ÄŤinnost odvĂjĂ. Obsahuje naÄŤtená data transakce - datum transakce, částku, poznámku, symboly, účty pĹ™Ăjemce i plátce a pĹ™ĂpadnĂ˝ typ transakce. + +Dále jsou zde napojeny odkazy na tabulky, zaznamenávajĂcĂ si o jakĂ˝ typ transakce se jednalo i jakĂ© byl účty pĹ™Ăjemce a plátce. + +Co se pĹ™edpovĂdánĂ opakovánĂ týče, v rámci transakce je vytvoĹ™en i odkaz na tabulku "Repetition", která oznaÄŤuje transakce, kterĂ© se opakovaly a nebyly identifikovány za opakujĂcĂ se pomocĂ neuronovĂ© sĂtÄ›. + +\begin{figure}[H] + \centerline{\includegraphics[height=0.65\textwidth]{img/model-transactions.jpg}} + \caption[Model databáze - transakce]{Model databáze - transakce} + \label{ModelTransaction} +\end{figure} + +\subsection{KonstantnĂ symbol} +KonstantnĂ symboly v databázi jsou hlavnÄ› ÄŤĂselnĂkem. Sloužà k obohacenĂ transakcĂ a jakĂ˝ majĂ vĂ˝znam jiĹľ bylo zmĂnÄ›no v sekci \ref{RealizaceObohaceni} ObohacenĂ. + +Tato část obsahuje tabulku "ConstantSymbol", coĹľ je entita, na kterou je odkazováno z "Transactions". Definuje, jestli pĹ™ĂpadnĂ˝ konstantnĂ symbol, kterĂ˝ uĹľivatel vloĹľil je validnĂ. Pokud ano, naváže na sebe jednotlivĂ© ÄŤĂselnĂky, pro kterĂ© je symbol definován. TÄ›mito ÄŤĂselnĂky se rozumĂ \textit{"Kind"} (druh transakce), \textit{"LastNumber"} (vĂ˝znam poslednĂ ÄŤĂslice), \textit{"MinistryPredefined"} (PĹ™eddefinovanĂ© tĹ™Ădy MFÄŚR) a \textit{"ReservedSymbol"} (RezervovanĂ© symboly). + +PoslednĂ tabulkou je \textit{"ForeignPayment"}, jeĹľ sloužà k odlišenĂ zahraniÄŤnĂch transakcĂ. +\begin{figure}[h] + \includegraphics[width=0.55\textwidth]{img/model-KS.png} + \centering + \caption[Model databáze - konstantnĂ symbol]{Model databáze - konstantnĂ symbol} + \label{ModelKS} +\end{figure} + +\subsection{Neuronová sĂĹĄ} +Poslednà částĂ databáze je neuronová sĂĹĄ. Sloužà k ukládánĂ vypoÄŤĂtanĂ˝ch nastavenĂ, aby natrĂ©novanou sĂĹĄ bylo moĹľnĂ© pozdÄ›ji znovu pouĹľĂt. SystĂ©m ukládánĂ funguje dle logiky zmĂnÄ›nĂ© v sekci \ref{ANNexportImport} Export, Import sĂtÄ›. + +V databázi je seznam sĂtĂ (\textit{"Network"}). KaĹľdá se potom dÄ›lĂ na dalšà podseznamy -- vrstvy (\textit{"Layer"}) a ty dále na neurony (\textit{"Neuron"}). Jako poslednĂ seznam je seznam vah (\textit{"Weights"}) ke korespondujĂcĂm neuronĹŻm. +\begin{figure}[h] + \includegraphics[width=0.55\textwidth]{img/model-ann.png} + \centering + \caption[Model databáze - neuronová sĂĹĄ]{Model databáze - neuronová sĂĹĄ} + \label{ModelANN} +\end{figure} \chapter{MoĹľnosti rozšĂĹ™enĂ} \begin{enumerate} @@ -715,6 +754,7 @@ Jako moĹľná dalšà moĹľnĂ© vylepšenĂ bych uvedl analĂ˝zu transakÄŤnĂch pozn \chapter{PĹ™iloĹľenĂ© soubory} \begin{description} \item [KB\textunderscore ARES.xml] VĂ˝pis z ARES (KomerÄŤnĂ banka) + \item [DB\textunderscore diagram.png] KompletnĂ diagram datovĂ©ho modelu\label{DBdiagram} \end{description} \chapter{Obsah pĹ™iloĹľenĂ©ho CD} @@ -736,7 +776,7 @@ Jako moĹľná dalšà moĹľnĂ© vylepšenĂ bych uvedl analĂ˝zu transakÄŤnĂch pozn .2 BP\textunderscore Radek\textunderscore Pus\textunderscore 2019.tex\DTcomment{zdrojová forma práce ve formátu \LaTeX{}}. .1 text\DTcomment{text práce}. .2 BP\textunderscore Radek\textunderscore Pus\textunderscore 2019.pdf\DTcomment{text práce ve formátu PDF}. - .1 PĹ™Ălohy\DTcomment{PĹ™Ălohy práce}. + .1 PĹ™Ălohy\DTcomment{PĹ™iloĹľenĂ© soubory (PĹ™Ăloha B)}. %.2 thesis.ps\DTcomment{text práce ve formátu PS}. } \end{figure}