diff --git a/Latex/BP_Radek_Pus_2019.pdf b/Latex/BP_Radek_Pus_2019.pdf index 252399406df9c894e65e377b6589a08ebdb5e5bb..b23a2cce60de059f538b0b968f8f974af73e19d3 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 027a7e6903689d6d78daf0936ccc88029072e5a3..ba8c6a32217268859f64fdb66ecfe03ebb32a638 100644 --- a/Latex/BP_Radek_Pus_2019.tex +++ b/Latex/BP_Radek_Pus_2019.tex @@ -41,19 +41,23 @@ \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{Ing. Miroslav BalĂ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ĹŻ.} +\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ĹŻ. TakĂ© dÄ›kuji svĂ˝m rodiÄŤĹŻm, za veškerou podporu pĹ™i psanĂ práce} \abstractCS {V BakalářskĂ© práci byl Ĺ™ešen problĂ©m pĹ™edpovĂdánĂ budoucĂch transakcĂ klientovi, na základÄ› jeho uplynulĂ© finanÄŤnĂ historie. CĂlem práce je pokusit se implementovat toto pĹ™edvĂdánĂ pomocĂ umÄ›lĂ© inteligence spolu s vytvoĹ™enĂm webovĂ©ho rozhranĂ. Toho bylo dosaĹľeno pomocĂ Angularu JS, tvoĹ™ĂcĂ klienskou aplikaci, frameworkem .NET Core, kterĂ˝ tuto aplikaci obsluhuje ve spojenĂ s databázĂ Microsoft SQL. ZabezpeÄŤenĂ vyuĹľĂvá JWT tokenu a o šifrovánĂ uĹľivatelskĂ˝ch hesel se stará RFC~2898/SHA512. UmÄ›lá inteligence byla Ĺ™ešena jako lineárnĂ regrese. %============= % <= mÄ›lo by obsahovat mojĂ vlastnĂ implementaci problĂ©mu -\newline UmÄ›lá inteligence je implementována jako nÄ›kolik po sobÄ› jdoucĂch vrstev, jejichĹľ poÄŤet neuronĹŻ se postupnÄ› sniĹľuje na jeden jedinĂ˝, kterĂ˝ dává informaci, zdali se bude transakce opakovat, ÄŤi nikoli. Aby se poslĂ©ze mohlo vyhodnotit, zda se transakce opravdu opakovala, porovnávala se velikosti transakcĂ po jednotlivĂ˝ch tĂ˝dnech a ty částkou si nejvĂce podobnĂ© byly oznaÄŤeny za opakujĂcĂ se. -\newline Tento zpĹŻsob pĹ™edvĂdánĂ je dále doplnÄ›n o odfiltrovánĂ trvalĂ˝ch transakcĂ, jeĹľ se uĹľ ze svĂ© podstaty vĹľdy opakujĂ. + +UmÄ›lá inteligence je implementována jako nÄ›kolik po sobÄ› jdoucĂch vrstev, jejichĹľ poÄŤet neuronĹŻ se postupnÄ› sniĹľuje na jeden jedinĂ˝, kterĂ˝ dává informaci, zda se bude transakce opakovat, ÄŤi nikoli. Aby se poslĂ©ze dalo vyhodnotit, zda se transakce opravdu opakovala, byly porovnávány velikosti transakcĂ po jednotlivĂ˝ch tĂ˝dnech a ty částkou si nejvĂce podobnĂ© byly oznaÄŤeny za opakujĂcĂ se. +% +%Tento zpĹŻsob pĹ™edvĂdánĂ je dále doplnÄ›n o odfiltrovánĂ trvalĂ˝ch transakcĂ, jeĹľ se uĹľ ze svĂ© podstaty vĹľdy opakujĂ. } %============= \abstractEN{ In the Bachelor thesis was solved the problem of forecasting future transactions to the client, based on his past financial history. The aim of this work is to try to implement this prediction by using artificial intelligence together with creating a web interface. This was achieved by using Angular JS, a client application, with the .NET Core framework, which runs the application in conjunction with the Microsoft SQL database. Security uses the JWT token and RFC~2898/SHA512 takes care of user password encryption. Artificial intelligence was solved as linear regression. -\newline I have implemented artificial intelligence as several consecutive layers, the number of neurons gradually decreasing to one, which gives me information whether the transaction will repeat or not. In order to assess whether the transaction was actually recurring, I compared the size of the transactions on a week-by-week basis and described the amount most similar as recurring. -\newline I have further supplemented this way of anticipation by filtering out permanent transactions, which by their very nature always repeat themselves. + +I have implemented artificial intelligence as several consecutive layers, the number of neurons gradually decreasing to one, which gives me information whether the transaction will repeat or not. In order to assess whether the transaction was actually recurring, I compared the size of the transactions on a week-by-week basis and described the amount most similar as recurring. +% +%I have further supplemented this way of anticipation by filtering out permanent transactions, which by their very nature always repeat themselves. } %ing \placeForDeclarationOfAuthenticity{V~Praze} @@ -300,7 +304,7 @@ TĂmto zpĹŻsobem je vytvoĹ™en tzv. ĂşplnĂ˝ k-partitnĂ graf. \caption[Struktura neuronovĂ© sĂtÄ›]{Struktura neuronovĂ© sĂtÄ›\cite{ANN_structure}} \end{figure} -\subsubsection{PĹ™edvĂdánĂ} +\subsubsection{PĹ™edvĂdánĂ}\label{predvidani} %TODO BIAS PĹ™i pĹ™edvĂdánĂ vĂ˝sledku se do počáteÄŤnĂ (vstupnĂ) vrstvy vložà vstupy. Tato vrstva je pošle do vrstvy vnitĹ™nĂ. V tĂ©to vnitĹ™nĂ vrstvÄ› se v kaĹľdĂ©m neuronu všechny vstupy vynásobĂ s korespondujĂcĂmi váhami a následnÄ› se seÄŤtou. VĂ˝slednĂ© ÄŤĂslo projde pĹ™es nÄ›jakou formu aktivaÄŤnĂ funkce ("squashing function"), která snĂžà velikost hodnoty na ÄŤĂslo v intervalu \textless -1;1 \textgreater . @@ -439,9 +443,76 @@ AÄŤkoli komparátor, jako takovĂ˝, je pomÄ›rnÄ› sloĹľitĂ˝, jeho vĂ˝stup uĹľ tak Lze zde pozorovat, jak se jednotlivĂ© částky na sebe namapovaly (oznaÄŤeno šipkou) a jak jsou od sebe vzdáleny (v závorce). Transakce, kterĂ© se nepodaĹ™ilo pĹ™iĹ™adit, jsou vypsány v části "Major". Ty jsou tedy oznaÄŤeny za neopakujĂcĂ se. \subsection{Datafeeder} +Část, v práci pojmenována jako Datafeeder, vycházĂ z anglickĂ˝ch slov \textit{"data"} a \textit{"feeder"} -- v doslovnĂ©m pĹ™ekladu "data-krmĂtko". Tato funkcionalita sloužà pro naÄŤĂtánĂ dat do neuronovĂ© sĂtÄ›. Je takĂ© pomÄ›rnÄ› jednoduchá. Jako vstupnĂ parametry dostane uĹľivatele, jehoĹľ data má naÄŤĂtat poÄŤet "\textit{epoch}", kterĂ© má projĂt. Epochou se rozumĂ nÄ›jakĂ© ÄŤasovĂ© obdobĂ, po kterĂ˝ch práci procházĂ a pro nevelkĂ© mnoĹľstvĂ dat je jedna epocha definována jako tĂ˝den. + +Po naÄŤtenĂ vstupnĂch parametrĹŻ, se vytvořà dotaz do databáze, kterĂ˝ naÄŤte dvÄ› epochy a pomocĂ komparátoru doplnĂ oznaÄŤenĂ o opakujĂcĂch se transakcĂch (viz. sekce \ref{komparator} Komparátor). Dále data normalizuje a pĹ™edá neuronovĂ© sĂti, jeĹľ tyto transakce postupnÄ› po jednĂ© zpracuje. + +\subsection{Normalizace dat}\label{normalization} +Pro vyhodnocovánĂ neuronovou sĂtĂ, je dĹŻleĹľitĂ© mĂt data v rozmezĂ nÄ›jakĂ©ho konstantnĂho intervalu. Pro práci byl konkrĂ©tnÄ› zvolen ve velikosti <-1,1>. Interval je definován z toho dĹŻvodu, Ĺľe pokud by došlo k jeho pĹ™ekroÄŤenĂ nÄ›kterĂ˝mi ze vstupnĂch dat, mohlo by to zpĹŻsobit "pĹ™ebĂjenĂ" ostatnĂch vah v neuronu. JinĂ˝mi slovy, výše aktivace neuronu by závisela na nÄ›kolika vstupnĂch datech a ostatnĂ by se ignorovala. + +PrvnĂ poloĹľkou, která se normalizuje, je datum transakce. Datum sám o sobÄ› nenĂ pĹ™Ăliš vypovĂdajĂcĂ, proto by se tato akce dala povaĹľovat i za lehkĂ© obohacenĂ dat. Pro je normalizaci je totiĹľ vyuĹľito znalosti, Ĺľe tĂ˝den se dÄ›lĂ do sedmi dnĹŻ (pondÄ›lĂ - pátek). Z data transakce se tedy zjistĂ, v kterĂ˝ den v tĂ˝dnu transakce probÄ›hla a zároveĹ se vytvořà sedm neuronĹŻ. KaĹľdĂ˝ z nich bude mĂt hodnotu 1 nebo -1 (krajnĂ body intervalu), v závislosti, jestli transakce probÄ›hla v ten danĂ˝ den. + +KupĹ™Ăkladu na vstupu pĹ™ijde transakce, která probÄ›hla v pondÄ›lĂ. Po normalizaci vznikne šest neuronĹŻ, s hodnotou -1, jeĹľ jsou obrazem všech dnĹŻ v tĂ˝dnu mimo pondÄ›lĂ a jeden, zobrazujĂcĂ pondÄ›lĂ, jeĹľ má hodnotu 1. + +Je tĹ™eba poznamenat, Ĺľe hodnota 0 nenĂ zvolena zámÄ›rnÄ›. UvnitĹ™ sĂtÄ› se jednotlivĂ© vstupy násobĂ s jednotlivĂ˝mi váhami. Nula nenĂ z hlediska násobenĂ neutrálnĂ prvek a zároveĹ pĹ™i násobenĂ nulou vĹľdy vznikne nula. TĂm by došlo k znehodnocenĂ vah a proto je mĂsto nuly zvoleno -1. +\newline -\subsection{Normalizace} -\subsection{NapojenĂ UmÄ›lĂ© inteligence na databázi a komparátor} +Dalšà poloĹľkou jsou KonstantnĂ symboly. KonstantnĂ symbol je, obdobnÄ› jako datum, ÄŤĂselnÄ› dalšà neurÄŤitou poloĹľkou. V sekci \ref{ObohaceniDat} ObohacenĂ dat je však rozdÄ›len do jednotlivĂ˝ch kategoriĂ. Ty jsou definovány jako samostatnĂ© poloĹľky v nÄ›kolika tabulkách databáze. Z toho vycházĂ i zpĹŻsob implementace - jsou definovány jako výše zmĂnÄ›nĂ˝ datum. Tedy pro kaĹľdou poloĹľku je vytvoĹ™en neuron s hodnotou -1, kromÄ› poloĹľek, pod kterĂ˝ konstantnĂ symbol spadá. TÄ›m je pĹ™iĹ™azena hodnota 1. +\newline + +PoslednĂ poloĹľka k normalizaci je výška transakce. Správnou hodnotu nenĂ lehkĂ© urÄŤit. NenĂ totiĹľ moĹľnĂ© urÄŤit maximálnĂ velikost transakce. Ăšvaha pro normalizace byla tedy zaloĹľena na základÄ› výše škody, dle trestnĂho práva. Z hlediska trestnĂho práva jsou částky rozdÄ›leny následovnÄ›: +\begin{enumerate}[1)] + \item Ĺ koda nikoli nepatrná – nejmĂ©nÄ› 5 000 KÄŤ + \item Ĺ koda nikoli malá – nejmĂ©nÄ› 25 000 KÄŤ + \item VÄ›tšà škoda – nejmĂ©nÄ› 50 000 KÄŤ + \item ZnaÄŤná škoda – nejmĂ©nÄ› 500 000 KÄŤ + \item Ĺ koda velkĂ©ho rozsahu – nejmĂ©nÄ› 5 000 000 KÄŤ\cite{velikostSkody} +\end{enumerate} + +K rozdÄ›lenĂ byla pĹ™idána ještÄ› jedna částka 500 KÄŤ. Ta vycházĂ z limitu pro bezkontaktnĂ platby kartou, kdy nenĂ tĹ™eba zadávat kĂłd PIN.\cite{wirelessLimit}. + +TĂmto principem zároveĹ došlo k rozdÄ›lenĂ pĹ™esnÄ› na šest druhĹŻ transakcĂ. ÄŚĂslo šest je sudĂ© a vzhledem k tomu, Ĺľe je částky potĹ™eba normalizovat do intervalu <-1,1>, pĹ™Ămo se vybĂzĂ rozdÄ›lit tyto kategorie na dvÄ› části. KonkrĂ©tnÄ› 0~--~25~000~KÄŤ v intervalu <-1;0) a vše od 25~000~KÄŤ výše v intervalu (0;1> + +Částky jsou však stále vysokĂ©. Pro jejich snĂĹľeni bylo tedy tĹ™eba vyuĹľĂt nÄ›jakou funkci, pro jejich zmenšenĂ. K tomu se vĂ˝bornÄ› hodĂ obdoba aktivaÄŤnĂ funkce (squashing function) ze sekce \ref{predvidani} PĹ™edvĂdánĂ. Ta částku sniĹľuje na velikost v intervalu (0,1). + +Aby byly částky rozdÄ›leny do zmĂnÄ›nĂ˝ch šesti kategoriĂ, staÄŤĂ funkci rozdÄ›lit na šestiny, s aktivaÄŤnĂ funkcĂ pĹ™izpĹŻsobenou jednotlivĂ˝m částkám. Pro aktivaÄŤnĂ funkci bylo zvoleno tanh a částky roztaĹľeny na celĂ˝ interval pomocĂ "magickĂ˝ch konstant" následovnÄ›: +\begin{enumerate}[1)] + \item 0 -- 500 KÄŤ + \begin{enumerate}[] + \item $ \frac{tanh(\frac{x}{189})}{3}-1 $ + \end{enumerate} + \item 500 -- 5 000 KÄŤ + \begin{enumerate}[] + \item $ \frac{tanh(\frac{x-500}{1889})+1}{3}-1 $ + \end{enumerate} + \item 5 000 -- 25 000 KÄŤ + \begin{enumerate}[] + \item $ \frac{tanh(\frac{x-5000}{9446})+2}{3}-1 $ + \end{enumerate} + \item 25 000 -- 50 000 KÄŤ + \begin{enumerate}[] + \item $ \frac{tanh(\frac{x-25000}{18892})}{3} $ + \end{enumerate} + \item 50 000 -- 500 000 KÄŤ + \begin{enumerate}[] + \item $ \frac{tanh(\frac{x-50000}{188918})+1}{3} $ + \end{enumerate} + \item 500 000 -- 5 000 000+ KÄŤ + \begin{enumerate}[] + \item $ \frac{tanh(\frac{x-500000}{1889180})+2}{3} $ + \end{enumerate} +\end{enumerate} + +DetailnĂ rozloĹľenĂ lze tĂ©Ĺľ pozorovat na obr. ÄŤ. \ref{ExpenseNormalization} Normalizace částky + +\begin{figure} + \includegraphics[width=1\textwidth]{img/normalization0-25000.png} + \includegraphics[width=1\textwidth]{img/normalization25000+.png} + \includegraphics[width=1\textwidth]{img/normalizationAll.png} + \centering + \caption[Normalizace částky]{Normalizace částky} + \label{ExpenseNormalization} +\end{figure} \section{PropojenĂ importĹŻ a umÄ›lĂ© inteligence} @@ -500,8 +571,10 @@ PĹ™i vĂ˝bÄ›ru formy zpracovánĂ umÄ›lĂ© inteligence jsem se rozhodl pro vyuĹľit \begin{conclusion} %sem napište závÄ›r Vašà práce 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). + +V práci se mi nepodaĹ™ilo umÄ›lou umÄ›lou inteligenci vytrĂ©novat do tĂ© mĂry, Ĺľe je schopna pĹ™edpovÄ›dÄ›t chovánĂ uĹľivatelĹŻ. To bylo zpĹŻsobeno buÄŹ nedostateÄŤnĂ˝m mnoĹľstvĂm dat pro trĂ©novánĂ anebo chybou v implementaci. + +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} @@ -639,24 +712,31 @@ Pro svou práci jsem si nastudoval syntaxi a pouĹľitĂ jazykĹŻ, jmenovitÄ› Types % % % % % % % % % % % % % % % % % % % % % % % % % % % % %============================== temporary disabled ======================= +\chapter{PĹ™iloĹľenĂ© soubory} +\begin{description} + \item [KB\textunderscore ARES.xml] VĂ˝pis z ARES (KomerÄŤnĂ banka) +\end{description} + \chapter{Obsah pĹ™iloĹľenĂ©ho CD} %upravte podle skutecnosti - \begin{figure} \dirtree{% .1 readme.txt\DTcomment{struÄŤnĂ˝ popis obsahu CD}. %.1 exe\DTcomment{adresář se spustitelnou formou implementace}. - .1 src.\DTcomment{zdrojovĂ© kĂłdy implementace}. + %TODO pĹ™emĂstit do adresáře implementace + .1 src.\DTcomment{zdrojovĂ© kĂłdy implementace}.% .2 bin. .3 x64. .4 Debug. .5 netcoreapp2.2. .6 publish\DTcomment{adresář se spustitelnou formou implementace}. %.2 impl\DTcomment{zdrojovĂ© kĂłdy implementace}. + .2 Recommender.bak\DTcomment{Databáze se základnĂmi daty}. .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}. %.2 thesis.ps\DTcomment{text práce ve formátu PS}. } \end{figure} diff --git a/Latex/mybibliographyfile.bib b/Latex/mybibliographyfile.bib index 5e1f132ee70ea9ddc3c926831207f4075b08f21b..c8e5eec0b26572feb35f3ec4ab7a5b349498f2b8 100644 --- a/Latex/mybibliographyfile.bib +++ b/Latex/mybibliographyfile.bib @@ -249,6 +249,22 @@ url = "https://www.finance.cz/511323-konstantni-symboly-prehled/" } +@MANUAL {velikostSkody, + title = "MajetkovĂ© trestnĂ© ÄŤiny {[online]}", + organization = "Policie ÄŚeskĂ© reubliky", + howpublished = "[online]", + url = "https://www.policie.cz/clanek/pomoc-obetem-tc-majetkove-trestne-ciny.aspx", + note = "[cit. 2019-19-12]" +} + +@MANUAL {wirelessLimit, + title = "NejÄŤastÄ›jšà dotazy: PlatebnĂ karty, platby na internetu a platebnĂ nálepky {[online]}", + organization = "ÄŚeskoslovenská obchodnĂ banka, a. s.", + howpublished = "[online]", + url = "https://www.csob.cz/portal/documents/10710/25109/nejcastejsi-dotazy-platebni-karty.pdf", + note = "[cit. 2019-19-12]" +} + %==================== Examples ================= @ARTICLE {YoutubeTechnet, title = "Jak vám Google vnucuje videa? NahlĂ©dnÄ›te pod pokliÄŤku YouTube",