UNICORN COLLEGE Katedra informačních technologií
BAKALÁŘSKÁ PRÁCE Algoritmické doporučování na internetu
Autor BP: Adam Vilčko Vedoucí BP: Ing. David Hartman, Ph.D. 2015 Praha
Čestné prohlášení Prohlašuji, že jsem svou bakalářskou práci na téma Algoritmické doporučování na internetu vypracoval samostatně pod vedením vedoucího bakalářské práce a s použitím výhradně odborné literatury a dalších informačních zdrojů, které jsou v práci citovány a jsou také uvedeny v seznamu literatury a použitých zdrojů. Jako autor této bakalářské práce dále prohlašuji, že v souvislosti s jejím vytvořením jsem neporušil autorská práva třetích osob a jsem si plně vědom následků porušení ustanovení § 11 a následujících autorského zákona č. 121/2000 Sb.
V Praze dne 1.8.2015
….................................... Adam Vilčko
Poděkování Rád bych poděkoval vedoucímu bakalářské práce, panu Ing. Davidu Hartmanovi, Ph.D., za jeho pomoc, podněty a odborné vedení při zpracování této bakalářské práce.
Algoritmické doporučování na internetu Algorithm web recommendation systems
6
Abstrakt Tato bakalářská práce je zaměřena na představení problematiky algoritmického doporučování obsahu. Nejprve je představen důvod a historie vzniku doporučovacích systémů a termíny, které jsou s doporučovacími systémy spojené, následně jsou na vhodném příkladu představeny dva základní algoritmy, dle kterých je tvořeno doporučení a jsou uvedeny nejznámější příklady doporučovacích systémů z praxe. Další kapitola se představí aktuální vývoj a trendy, které jsou určující pro budoucí směřování tohoto oboru. V neposlední řadě je vytvořena finanční analýza přínosu investice do doporučovacího systému pro středně velký internetový obchod a na závěr je demonstrována síla doporučovacích algoritmů na vhodně zvolené aplikaci. Klíčová slova: Doporučení, Blízkost, Long Tail, Doporučovací systém, Kolaborativní filtrování, Analýza obsahu, Hybridní filtrování, Jaccard Index, Kosinová Blízkost Abstract This
bachelor
thesis
is
aimed
at
introduction
of
algorithmic
content
recommendations. First is introduced reason and history of creation of recommendation systems and the terms which are connected with recommendation systems. After that are on the appropriate example introduced two algorithms by which are created personalised recommendatios and the most known of practical recommendation systems examples are presented. Another chapter presents actual developent and trends which are determining for future direction of the recommendation systems field. Then is presented financial analysis of benefits of investment to recommendation system for middle medium-sized e-shop. Finally is demonstrated power of recommendation systems and it's algorithms on appropriate selected application. Keywords: Recommendation, Similarity, Long Tail, Recommendation system, Collaboration filtering, Content-based filtering, Hybrid filtering, Jaccard Index, Cosine Similarity 7
Obsah 1. Úvod.................................................................................................................................................4 2. Popis problematiky...........................................................................................................................5 2.1 Vznik doporučovacích algoritmů...............................................................................................5 2.2 Příklady z praxe.........................................................................................................................7 2.2.1 Amazon..............................................................................................................................7 2.2.2 Netflix................................................................................................................................8 2.2.3 Google................................................................................................................................8 3. Doporučování obecně.....................................................................................................................10 3.1 Proces tvorby doporučování....................................................................................................10 3.1 Poznání zákazníka...............................................................................................................11 3.2 Prezentace doporučení.........................................................................................................11 3.3 Dopad doporučení...............................................................................................................12 3.2 Kroky při tvorbě doporučovacího systému..............................................................................12 4. Kategorie doporučování.................................................................................................................14 5. Blízkost...........................................................................................................................................15 6. Popis vybraných algoritmů.............................................................................................................15 6.1 Jaccard index............................................................................................................................17 6.1.1 Normalizace hodnot.........................................................................................................17 6.2 Kosinová blízkost....................................................................................................................18 6.2.1 Normalizace hodnot.........................................................................................................19 Tabulka 3: Normalizace hodnocení pro index Cosinové blízkosti.....................................................19 6.3 Výběr doporučovaných položek..............................................................................................20 7. Aktuální vývoj a trendy..................................................................................................................20 8. Finanční aspekt použití...................................................................................................................22 8.1 Zadání......................................................................................................................................22 8.2 Výnosnost investice.................................................................................................................23 8.3 Čistá současná hodnota investice.............................................................................................24 9. Ukázková aplikace..........................................................................................................................25 9.1 Proč Twitter..............................................................................................................................26 9.2 Použité technologie..................................................................................................................26 9.2.1 Platforma..........................................................................................................................26 9.2.2 Sestavení aplikace............................................................................................................26 9.2.3 Nasazení...........................................................................................................................27 9.3 Zvolená architektura................................................................................................................28 9.4 Analýza aplikace......................................................................................................................29 9.5 Praktická implementace...........................................................................................................32 9.5.1 Zdrojový kód....................................................................................................................32 9.5.2 Ukázka.............................................................................................................................34 10. Závěr.............................................................................................................................................36 Seznam použitých zdrojů...................................................................................................................38 Seznam obrázků..................................................................................................................................39 Seznam tabulek...................................................................................................................................40 Seznam grafů......................................................................................................................................41 Seznam příloh.....................................................................................................................................42 Příloha 1 – CD-ROM..........................................................................................................................43
8
1. Úvod Podstatná část našeho života se přesouvá z fyzického světa do prostředí internetu, ve kterém trávíme daleko více času než kdykoliv v minulosti. Jednak je to způsobeno tím, že se zkvalitňují nabízené služby a chytré telefony nám umožňují být stále on-line. Zároveň můžeme na internetu nalézt téměř jakékoliv informace, můžeme si krátit dlouhou chvíli poslechem hudby, sledováním videa a nebo četbou denního tisku. Rovněž se stává zcela přirozené nakupování přes internet, kde si může uživatel vybrat z nepřeberného množství položek, které si může ihned objednat. Jak tedy zaujmout potenciálního zákazníka k nákupu právě na našich stránkách a ne u konkurence? Jak udržet uživatele na našich internetových stránkách delší dobu a maximalizovat z něj profit? Kromě kvalitní služby a líbivého designu může být cestou personalisování nabízeného obsahu danému uživateli přímo na míru v podobě implementace doporučovacího systému v rámci internetové služby. Ve chvíli, kdy se uživatel rozhodne pro nákup na našich internetových stránkách, tak o sobě začne prozrazovat informace nejrůznějšího charakteru, dle kterých můžeme usuzovat na uživatelův vkus a vytvářet tak personalisovaná obsah. Čím více informací o sobě uživatel v systému zanechá, tím mohou být doporučení přesnější a v ideálním případě pomohou zvýšit jednotkový zisk z uživatele. Hlavním cílem této bakalářské práce je popsat problematiku doporučovacích systémů a demonstrace jednoduchého řešení na vhodně zvoleném příkladu. Ukázková aplikace by měla prokázat, že i implementace jednoduššího řešení ji může zatraktivnit. Doporučovací systémy z pohledu uživatele mohou usnadnit orientaci v nepřeberném množství informací tím, že uživateli nabízí pouze takové položky, které jsou pro daného uživatele relevantní a které jsou v oblasti uživatelova zájmu. Stejně tak jako nakupování přes internet šetří čas tím, že odpadá cesta do kamenného obchodu, tak i doporučovací systém v rámci internetového obchodu může uživateli ušetřit čas tím, že mu nabídne pouze takové položky, které ho opravdu zajímají. V takovém případě, se může zvýšit uživatelova spokojenost s danou službou nabízející tuto funkčnost a přimět ho k opakovanému využití dané služby. Spokojeny mohou být tedy obě zainteresované strany, jak uživatel, tak i provozovatel internetové služby mající doporučovací systém implementován v rámci svého systému.
9
2. Popis problematiky Doporučovací systémy jsou čím dál častější kritickou součástí většiny úspěšných internetových služeb. Největším přínosem se tato funkčnost jeví být v oblasti e-commerce, ve které může velmi dobře pomoci k dodatečnému příjmu. Tento přístup využívá komplexní algoritmy pro analýzu velkého objemu dat a odvozuje, který produkt by si potenciální zákazník mohl koupit na základě uvedených preferencí, předchozích objednávek a lidí podobného vkusu, demografie, atp.. Problematika analýzy dat a strojové učení je v dnešní době velmi rozšířena a zabývá se jí stále více subjektů na trhu. Doporučování obsahu je jednou z disciplín analýzy dat a práce s nimi. Je mnoho důvodů proč je vhodné doporučovací algoritmy implementovat do řešení internetových služeb. Jedním z nejsilnějších motivů může být mimo jiné i to, že dnes jsou lidé zahlceni nepřeberným množstvím informací a nabídek. Každodenně dělají velké množství nejrůznějších rozhodnutí ohledně koupi automobilu, výběru správného bankovního účtu, výběru pana či paní Dokonalé, atp.. V prostředí internetu je velká výhoda, že je možné o uživateli zjišťovat a sbírat informace na základě jeho interakce. Tyto informace poté můžeme analyzovat a určit na jejich základě vkus uživatele a podle toho vybírat relevantní produkty, služby, či partnery/ky. Z tohoto důvodu je nejen důležité porozumět struktuře dat, která o uživateli sbíráme, ale je rovněž důležité umět s touto strukturou správně zacházet a vědět jaké informace jsou v datech hledány. Na základě určeného cíle, kterým může být právě nalezení nejpodobnější položky, která by mohla cílového uživatele zajímat a vyhodnocení, jsme teprve poté schopni udělat správné závěry a doporučit uživateli opravdu to co je pro něj relevantní. Jedním z hlavních cílů vytváření doporučování obsahu, je vytvářet relevantní výsledky doporučování, jejichž komplexnost je podružná. Nejde tedy o to vytvářet komplexní doporučení, ale taková, která jsou z pohledu daného uživatele užitečná a která mají přidanou hodnotu i z pohledu společnosti provozující danou internetovou službu. Tradiční způsoby reklamy trpí nedostatkem v tom, že necílí reklamu na základě našich potřeb. Hlavním cílem tradičního způsobu reklamy je rozšířit naše preference neustálým opakováním stejné zprávy a tím v nás vyvolat požadovanou potřebu. [1, s. 70] Z toho je patrné, že velká výhoda doporučení je v tom, že v uživateli nemusí vyvolat žádnou potřebu, protože může být velká pravděpodobnost, že tuto potřebu má.
2.1 Vznik doporučovacích algoritmů Ještě před tím, než budou popsány vybrané algoritmy, je představen důvod vzniku doporučovacích systému, ať už v internetových prodejnách nebo u různých internetových služeb typu Netflix. Kamenné obchody jsou limitovány nedostatkem místa ve svých regálech a tudíž nemohou svým 10
zákazníkům představit vše, co je na trhu dostupné. Z toho důvodu většinou volí takové produkty, které jsou u zákazníků úspěšné a vysoce oblíbené.[2, s. 307] Proto je doporučování ve fyzickém světě relativně snadné. V kamenných obchodech nelze uspokojit potřeby všech lidí a přizpůsobit prodejny na míru všem. Proto je výběr produktů silně ovlivněn jejich popularitou a tudíž pravděpodobností jejich prodeje. Názorný je příklad prodejců knih. Největší kamenný obchod v České republice s knihami je Palác knih Luxor na Václavském náměstí v Praze. Palác knih Luxor nabízí ve svých regálech přibližně osmdesát pět tisíc titulů knih.[3] Naproti tomu největší internetový prodejce knih Amazon má ve své nabídce miliony titulů knih k prodeji. Rozdíl mezi tímto fyzickým a on-line světem je nazýván fenomén Dlouhého ocasu1 [2, s. 307] a je znázorněn následujícím grafem. Na tomto grafu znázorňuje vertikální osa popularitu produktů či služeb. Na horizontální ose jsou seřazeny produkty či služby dle toho, jak jsou oblíbené u zákazníků. Bod vyznačený na tomto grafu znázorňuje fyzické limity pro kamenné obchody. Tento bod zachycuje maximální možné množství vystaveného zboží v regálech kamenných obchodů.
Graf 1: Fenomén „Dlouhého Ocasu“ Zdroj: [2, s. 307] Pro kamenné obchodníky je nemožné představit zákazníkům veškeré produkty ani služby. Také není možné, aby zákazníci všechny služby a produkty znali, a proto je důležité vybrat takové produkty a služby, o které je mezi širší veřejností největší zájem. Tento fakt je v kontrastu s možnostmi on-line prodejců, kteří mohou na svých internetových stránkách prezentovat množství produktů, které se teoreticky limitně blíží nekonečnu. Fenomén dlouhého ocasu je právě to, co motivuje on-line prodejce k tomu, aby hledali nejvhodnější produkty a služby, jejichž prezentaci zacílí na konkrétního zákazníka a tím zvýší prodej a v ideálním případě i svůj zisk. Prezentace 1
Tzv. Long Tail Phenomenon
11
i méně známých produktů na internetových stránkách a jejich správné zacílení může být jedna z možností jak ve velké konkurenci, která vládne na internetu uspět a být lepší než konkurence.
2.2 Příklady z praxe Doporučovacími systémy se dnes zabývají všechny velké společnosti působící na internetu a je již zcela běžné, že na většině internetových služeb je nějakým způsobem obsah doporučován. V následujících podkapitolách jsou popsány známé případy firem, které na svých internetových stránkách doporučují personalisovaný obsah s vysokou přesností a tím dosahují větších úspěchů než jejich konkurence.
2.2.1 Amazon Jedním z nejznámějších příkladů je internetový obchod Amazon, který úspěšně doporučuje dodatečné produkty svým zákazníkům na základě jejich preferencí z předchozí interakce. Preference je myšlen nákup produktu, či prosté zobrazení detailu produktu, který může značit uživatelův zájem o daný produkt. Amazon ke svým doporučením používá informace o nákupní historii svých zákazníků a na základě toho předvídá, jaké další produkty nebo služby by mohly být pro daného uživatele zajímavé.[4, s 5] Jelikož má Amazon ve své nabídce stovky milionů produktů, byl nucen vytvořit své vlastní vysoce škálovatelné algoritmy, které poskytnou relevantní výsledky doporučování v reálném čase. Nejznámějším příkladem algoritmu, který Amazon používá pro své doporučování a který si nechal patentovat, je algoritmus nazvaný Item-to-Item. [5; 14] Algoritmus Item-to-Item je zaměřený na nalezení podobných položek stejně jako jiné algoritmy, avšak dělá to trochu jiným způsobem. Raději než hledání blízkých uživatelů, hledá Itemto-item algoritmus blízké produkty k produktům, které byly uživatelem nakoupeny nebo ohodnoceny. Následně tyto dvě množiny zkombinuje a tím je získán seznam doporučených položek. [5, s. 78] K odvození nejbližší položky k vybrané položce, je nejprve vytvořena tabulka blízkých položek, u nichž mají zákazníci tendenci je kupovat společně. Tato tabulka je vytvořena v tzv. offline režimu. Následně, když uživatel interaguje s informačním systémem, jsou z této tabulky vybrány požadované produkty a z nich je vytvořena matice product-to-product (produkt k produktu) iterováním přes všechny páry položek a vypočtením indexu blízkosti pro každý pár. Produkty jsou poté seřazeny dle indexu blízkosti od nejvyššího po nejnižší a na výstup se dostanou pouze takové, které jsou vyhodnoceny jako nejvíce relevantní. Následující pseudo-algoritmus zachycuje přístup jakým Amazon vytváří doporučení vypočtením indexu blízkosti mezi konkrétním produktem a souvisejícími produkty: [5, s. 79]
12
Pro každou položku z produktového katalogu. I1 Pro každého zákazníka C, který objednal I1 Pro každou položku I2 objednanou zákazníkem C Zaznamenej, že zákazník objednal I1 a I2 Pro každou položku I2 Vypočítej blízkost mezi I1 a I2
2.2.2 Netflix Dalším známým a úspěšným příkladem doporučování obsahu svým uživatelům je streamingová služba Netflix. Společnost Netflix v roce 2006 vypsala soutěž tzv. Netflix Prize. Jednalo se o soutěž, která byla zaměřena na strojové učení a dolování dat pro zlepšení doporučovacích algoritmů na základě, kterých jsou uživatelům doporučovány filmy ke sledování. V této soutěži nabízela jako hlavní cenu jeden milion dolarů komukoliv, kdo zvýší přesnost doporučování v té době existujícího doporučovacího systému nazývaného Cinematch o 10%. Cílem této soutěže bylo najít nové způsoby ke zlepšení doporučování, které Netflix poskytuje svým členům, což je klíčová část jejich businessu. Výsledky byly kvantifikovány na základě chyby efektivní hodnoty (RMSE – root mean square error) předpovídaného hodnocení.[6] Po roce od vypsání soutěže byly vyhodnoceny průběžné výsledky a nejlepší tým dal k dispozici své algoritmy, kterými dosáhl na své prvenství. Jednalo se o kombinaci sto sedmi různých algoritmů, které společně zlepšily doporučování o 8,43%. Inženýři Netflixu poté prostudovali zdrojové kódy a vybrali z něho dva základní algoritmy s nejlepší výkonností z daného souboru použitých algoritmů. Konkrétně se jedná o algoritmus Faktorizace matice (Matrix Factorization, známý v komunitě vývojářů jako Singular Value Decomposition - SVD) a RBM (Restricted Boltzmann Machines). Tyto dva algoritmy byly poté nasazeny do produkce a od té doby jsou součástí doporučovacího systému, který běží na pozadí. Pro lepší seznámení se s problematikou doporučování video obsahu služby Netflix a výše zmíněných algoritmů doporučuji vědecký článek Restricted Boltzmann Machines for Collaborative Filtering odkázaný ve zdrojové literatuře.[7]
2.2.3 Google Doporučování obsahu je spojeno i s internetovými vyhledávači. Jako velmi pěkný příklad může posloužit internetový vyhledávač Google. I v případě tohoto vyhledávače jsou identifikovány
13
oblasti, které spolu nějakým způsobem souvisejí a ty jsou pak nabídnuty uživatelům, kteří by se o vyhledávanou oblast mohli zajímat. Příklad, který může mluvit za všechny je při vyhledání jména českého profesora Františka Běhounka. Jak je vidět na následujícím obrázku, tak kromě výsledků vyhledávání je v pravé části obrazovky sekce odkazující na záznam na Wikipedii a pod tímto detailem jsou jména lidí, kteří spolu s panem profesorem nějakým způsobem souvisejí a jsou tedy nabídnuti v rámci doporučení uživateli, jakož to možný cíl uživatelova dalšího zájmu. Generovaná doporučení jsou na obrázku zvýrazněna v červeném obdélníku.
Obrázek 1: Výřez obrazovky z vyhledaného dotazu „František Běhounek, Google I na tomto příkladu je demonstrována síla vytváření doporučení, která jsou následně doporučována uživateli nenásilnou formou. Jsou to právě takovéto drobnosti, které slouží k tomu, aby udrželi uživatele, či potenciálního zákazníka na internetových stránkách déle a v ideálním případě z jeho návštěvy generovali dodatečný příjem. Ve spojitosti s generováním doporučení je důležité mít na paměti především prezentaci relevantních výsledků doporučení, než-li jejich komplexnost.
14
3. Doporučování obecně V rámci doporučovacích systémů se můžeme setkat s celou řadou pojmů, a právě proto je nejprve vhodné definovat termín doporučovací systémy, který zastřešuje celý obor problematiky doporučování obsahu. Definic a pojmů, které jsou spojeny s tímto termínem, můžeme nalézt v odborné literatuře celou řadu. Pojmy, které jsou zastřešeny pod doporučovacími systémy, jsou například „personalizace“, „doporučovací agent“, „doporučovací klient“ a „interaktivní pomocný nástroj“.[8, s. 73] Těmto pojmům se nadále nebudeme blíže věnovat. Definice těchto pojmů a jejich význam v oblasti doporučovacích systémů jsou k nalezení ve zdrojové literatuře. V následujících podkapitolách se budeme bavit převážně o oblasti doporučovacích systémů, jejíž definice může být následující: „Doporučovací systémy jsou v rámci e-commerce kontextu technologie, které explicitně nebo implicitně shromažďují uživatelovi preference, doporučují na jejich základě produkty, a nebo služby přesně na jeho míru.“[8, s. 73] Jaké procesy jsou tedy s doporučovacími systémy spojeny?
3.1 Proces tvorby doporučování Jako základní rámec k zachycení procesu tvorby doporučování velmi dobře poslouží model procesu doporučování navržený pány Adomaviciusem a Tuzhilinem.[9] V jejich modelu je zachycen proces poskytování doporučování uživatelům ve třech základních krocích: 1. porozumění zákazníkovi, který zahrnuje shromažďování uživatelových dat a tvorba jeho profilu, 2. prezentace personalisovaných doporučení, které zahrnují produkty, nebo služby, které jsou nejvhodnější pro daného uživatele, 3. porozumění a měření dopadu těchto doporučení a nastavení personalisovaných strategií založených na zpětné vazbě. První dva body z tohoto výčtu zachycují aktivity procesu doporučování z technického hlediska. Tyto aktivity se odehrávají v rámci informačního systému jakožto použité algoritmy, či uživatelské rozhraní. Třetí bod se týká práce analytického týmu, který následně určí jakým způsobem budou dané algoritmy implementovány a rozvíjeny.
15
Obrázek 2: Tři fáze procesu tvorby doporučení Zdroj: [9, s. 77] Nyní se blíže seznámíme s jednotlivými body, které jsou zachycené na diagramu.
3.1 Poznání zákazníka K porozumění zákazníkových preferencí je nutné shromáždit o zákazníkovi informace. To může být uskutečněno explicitně, či implicitně. Explicitní metody zahrnují například přímé dotazování, zatímco implicitní metody jsou postaveny na monitorování uživatelova chování v rámci informačního systému (jedná se např. O uživatelovu nákupní historii, zobrazené položky, atp.). Obě metody mají své slabé a silné stránky a bylo prokázáno, že nejpřesnější doporučování jsou generována ve chvíli, kdy jsou oba přístupy shromažďování informací použity společně.[8, s. 77] K vytvoření uživatelova profilu je potřebné vědět jaké informace použít a jak ohodnotit jeho preference.[9] Informace o uživateli mohou zahrnovat jeho nákupní historii a charakteristiky produktů, demografické údaje, atp.. Není realistické a ani optimální využít všech těchto informací naráz při tvorbě uživatelova profilu, ale je důležité vhodně zvolit právě takové atributy, které popisují uživatelovy preference. Tyto atributy by měly být vybrány s ohledem na produkt či službu jakou daný provozovatel informačního systému nabízí.
3.2 Prezentace doporučení Nalezení blízkého objektu při vytváření doporučení je první krok procesu k poskytnutí doporučení uživateli.[9] To jakým způsobem bude toto doporučení vytvářeno je základní otázkou, kterou je potřeba před samotnou implementací odpovědných algoritmů zodpovědět. Doporučení jsou tvořena většinou na základě uživatelova profilu. Přístupy, které je možné využít při tvorbě doporučení, se věnuje samostatná kapitola popisující Kategorie doporučení, kde jsou jednotlivé přístupy detailněji popsány. 16
Ve chvíli, kdy je doporučení vytvořeno, je rovněž vhodné ho umístit v rámci uživatelského rozhraní (UI) tak, aby zaujalo uživatelovu pozornost. V případě nevhodného umístění personalisovaných doporučení uživateli v rámci UI, může uživatel tato doporučení ignorovat a v takovém případě vyjde úsilí věnované tvorbě personalisovaným doporučení nazmar. Výzkumy věnující se problematice správného umístění personalisovaných doporučení se zaměřuje na tři základní oblasti, které zkoumají účinnost desingu UI k prezentaci doporučení: 1) proces tvorby uživatelova rozhodnutí, 2) přímý dopad na uživatelovo vnímání, 3) zprostředkovaný dopad skrz sociální účast na uživatelovu důvěru.[8, s. 86]
3.3 Dopad doporučení V rámci doporučovacích systémů je vhodné rovněž měřit jejich dopad a také zkoumat to, jak ovlivňují uživatelovo nákupní chování. Na základě zodpovězení těchto otázek je možné rozhodnout o směru jakým způsobem se bude doporučovací systém v rámci informačního systému nadále rozvíjet. Některé studie například prokazují, že uživatelé na základě doporučení kupují více méně homogenizovaný produkt doporučovaný na základě uživatelova profilu.[8, s. 92] Naproti tomu stojí názor, že doporučení může rozšířit uživatelovy obzory o méně známé alternativy. V tomto případě může posloužit jako argument fenomén Dlouhého ocasu. Díky tomu, že není internetový obchodník limitován fyzickým místem v regálech, tak může zákazníkům prezentovat daleko širší sortiment i z méně známých produktů. Jelikož se může v rámci tvorby doporučení zohlednit několik faktorů, tak je možné záměrně vybírat i produkty či služby, které uživatel nezná. Jako příklad je možné uvést službu Netflix, která bere v potaz i rozmanitost tvořených doporučení a Top10 doporučovaných titulů je vždy různých žánrů.[6]
3.2 Kroky při tvorbě doporučovacího systému Hlavním cílem doporučovacích systémů je přesvědčit uživatele k objednání zboží, nebo služby. Avšak každá internetová služba je svým způsobem unikátní, z toho důvodu je dobré si stanovit jakým způsobem tohoto hlavního cíle chceme dosáhnout. V rámci této práce bylo analyzováno a vytyčeno pět základních kroků, pro ujasnění si hlavního motivu pro vytvoření doporučovacího systému: 1. Stanovit si cíl doporučování. Před samotnou implementací je vhodné mít jasno v tom co je možné a vhodné doporučovat uživatelům. Je tedy nutné zamyslet se nad tím, co chceme doporučovat. V rámci internetového obchodu to mohou být například produkty. U sociálních sítí to mohou být další uživatelé, či cokoliv specifického v rámci dané sociální sítě. Je také 17
dobré vědět jaké produkty budou doporučovány v případě, kdy ještě není dostatečné množství dat, která by bylo možné analyzovat. Jedná se o případy, kdy můžeme danou funkčnost teprve zavádět v rámci internetové služby, a nebo případy, kdy je uživatel nový v rámci internetové služby a nezanechal v ní ještě žádné stopy, které by bylo možné pro analýzu použít. Například nevytvořil ještě žádnou objednávku ani nepřiřadil žádné hodnocení. 2. Určit prostředek k vytváření doporučování. Znát svá data a jejich možnosti je více méně nutnost pro každého aplikačního vývojáře. Je dobré znát informace, které máme v rámci dat k dispozici. Může se jednat o pozitivní („lajk“), či negativní hodnocení („dislajk“) dané položky, kterou chceme doporučovat, a nebo může jít o hodnocení na stupnici od jedné do pěti. To jaká data máme k dispozici, určuje výrazným způsobem i to, jaké analýzy jsou nad těmito daty vhodné. 3. Vybrat metriku doporučování. Tento bod je výrazně ovlivněn bodem předchozím. Například v případě kdy máme pěti bodovou stupnici hodnocení doporučované entity, tak v takové chvíli můžeme použít Cosinovou blízkost pro výpočet doporučení. Naopak ve chvíli, kdy jsou k dispozici pouze pozitivní či negativní lajky, je výhodnější použít Jaccardův index pro nalezení průniku množin dvou entit k nalezení nejvhodnějšího kandidáta k doporučení. 4. Způsob a forma prezentace výsledků. Ve chvíli, kdy už víme co chceme doporučovat a jak to chceme doporučovat je dobré se zamyslet i nad tím, jakým způsobem budou výsledky prezentovány. Pro uživatele informačního systému je asi nadbytečná informace o vypočteném indexu blízkosti a tak není nutné ho vypisovat na uživatelské rozhraní. Zároveň je dobré určit kdy a jakým způsobem se budou daná doporučení zobrazovat. 5. Určit v jakém režimu budou daná doporučení vytvářena. Výpočet doporučování zabere výpočetní zdroje a ve chvíli, kdy není zvolena dostatečně robustní architektura informačního systému, mohou nastávat výrazné prodlevy v odezvě informačního systému. Takovýmto stavům je dobré předcházet z mnoha důvodů mimo jiné i proto, abychom neodradili potenciální uživatele od využívání naší internetové služby. Možnosti jsou v zásadě dvě. Počítat doporučení v online režimu, a nebo v offline režimu. V případě online režimu výpočtu doporučování jsou uživateli vytvářena doporučení na základě nejaktuálnějších dat a mohou být v čase různá, avšak je potřeba alokovat větší výpočetní výkon serveru. Ve chvíli, kdy jsou doporučení vytvářena offline nemusejí být pro daného uživatele v čase zobrazení již relevantní, avšak tento způsob zvyšuje nároky na paměť databáze pro ukládání 18
doporučení.
4. Kategorie doporučování V souvislosti s doporučovacími systémy se dají identifikovat čtyři kategorie a to jsou Kolaborativní filtrování, Analýza obsahu, Doporučování založené na sociálních sítích a v neposlední řadě Hybridní přístup kombinující více přístupů podle potřeby. [8, s. 80] První přístup, který zde popíšeme a který lze aplikovat na získání doporučování obsahu je Kolaborativní filtrování. Jedná se vytváření doporučení položek uživateli na základě nalezení uživatelů s podobným vkusem a podobnými preferencemi, které mají totožné s uživatelem pro kterého jsou vytvářena daná doporučení.[8, s. 81] Kolaborativní filtrování je postaveno na hledání blízkosti mezi uživateli a položkami na základě jejich vzájemného propojení. První implementace tohoto přístupu byla vyvinuta v laboratořích společnosti Xerox v roce 1992. Kolaborativní filtrování se opírá o stopy, které za sebou uživatel zanechá v interakci s daným informačním systémem.[1, s. 80] Typickými stopami zanechávanými uživateli v informačním systému jsou hodnocení obsahu, lajkování (označení zdroje za oblíbený), nákupní historie a tak podobně. Kvalita kolaborativního filtrování daleko více závisí na uživatelově minulém chování než na atributech položky v uživatelově zájmu. Velmi rozšířený přístup generování doporučení je analýza obsahu. Tento přístup doporučuje služby nebo produkty podobné těm, které již uživatel v minulosti preferoval.[9] Analýza obsahu je silně založena na uživatelově minulém transakčním chování. Hlavní charakteristikou tohoto přístupu je shromažďování a analýza informací souvisejících s položkou či uživatelem.[1, s. 80] Tyto související informace mohou být například klíčová slova spojená s danou položkou nebo kategorie do které patří. Tento přístup vytváření doporučení má tři silné nedostatky:[8, s. 82] 1) nedostatečná analýza, která je založena pouze na historickém hodnocení, zobrazení a objednávek k vytvoření uživatelova profilu (viz další kapitola), 2) přemíra specifikace znamená, že systém doporučí pouze položky, které jsou podobné položkám, které uživatel již viděl nebo si je dokonce objednal, 3) vyvolání uživatelovy zpětné vazby znamená, že kvalita doporučování může být zlepšována pouze, když uživatel poskytne dodatečné hodnocení produktu, nebo si ho zobrazí či objedná. Přístupy založené na sociálních sítí se objevují teprve v poslední době a jsou spojeny s nárůstem informací poskytovaných uživateli. Tyto informace mohou pomoci s procesem profilování uživatele a zlepšit tak generovaná doporučení. Předpoklad pro tento přístup je, že uživatelé mají podobné preference, jako jejich přátelé na sociálních sítích díky jejich sociálním vazbám.[8, s. 82] 19
V neposlední řadě je zde hybridní přístup, který může kombinovat výše zmíněné přístupy podle potřeby doporučovacího systému. Jelikož hybridní přístup kombinuje různé metody vytváření doporučení, tak také vyžaduje větší úsilí a více informací k jeho úspěšné implementaci. Zda-li tento přístup může vylepšit generovaná doporučení je otázka na samostatný výzkum.
5. Blízkost V kontextu doporučovacích algoritmů se vyskytuje pojem blízkost. Blízkost je ukazatel, který dovoluje porovnat blízkost dvou položek tak, jako nám hodnota mezi bodem A a bodem B na papíře dokáže určit jejich vzájemnou vzdálenost, resp. blízkost. Jsou různé indexy, které nám takové srovnání umožní. Příklady indexů, které nám umožní snazší srovnání blízkosti položek či uživatelů jsou například Jaccard index2, Euklidovská vzdálenost či Kosinový úhel vektorů matice 3. Ne každý z těchto ukazatelů je vždy vhodný a proto je nutné vybírat pečlivě pro potřeby konkrétních projektů. V jedné z následujících kapitol bude na příkladu ukázána nevhodnost použití indexu blízkosti (Jaccard index) v daném typu doporučovacích úloh. Všechny indexy blízkosti mají společné čtyři základní vlastnosti [1, s. 73] [3, s. 90]: •
Všechny indexy blízkosti jsou větší nebo rovno nule. Jejich výsledek tedy nemůže být v záporné číslo.
•
Vzdálenost mezi dvěma body A a B je rovna nule pouze tehdy pokud bod A je totožný s bodem B.
•
Všechny indexy blízkosti spojuje rovněž vlastnost symetrie. Vzdálenost mezi body A a B je stejná jako vzdálenost mezi body B a A.
•
Poslední vlastností je vlastnost trojúhelníkové nerovnosti. Pokud totiž d(A, B) značí blízkost mezi body A a B, tak potom trojúhelníková nerovnost říká, že d(A, B) <= d(A, C) + d(C, B) pro jakýkoliv bod C.
6. Popis vybraných algoritmů V kapitole Kategorie doporučování byly představeny čtyři kategorie přístupů k realizaci algoritmického doporučování. Jedna z nich je založena na analýze informací souvisejících s položkami či uživateli. Taková doporučení se získávají na základě nějaké vlastnosti, kterou položky či uživatelé mají. Například pokud by uživatel zobrazil detail filmu ze žánru western, tak v podmnožině této kategorie filmů by mohly být nalezeny filmy z tohoto žánru s co nejlepším hodnocením přiřazeným dalšími uživateli. Vlastností, které jsou spojeny s položkami, může být 2 3
Někdy též nazýván jako Koeficient blízkosti (někdy též podobnosti) Kosinový úhel vektorů matice je používán například při počítání blízkosti společností Amazon [5, s.77]
20
však celá řada a na jejich základě lze uskutečnit relevantní výběr doporučených položek pro uživatele. Tato bakalářská práce se netýká hledání příbuzných položek na základě analýzy vlastností objektů, proto k nastudování a lepšímu pochopení této problematiky může případný zájemce nalézt bližší informace v elektronické knize Mining of Massive Datasets, od A. Rajaramana, ve třetí kapitole této knihy.[3, s. 73] Nyní budou popsány vybrané přístupy získání doporučovaného obsahu na základě kolaborativního filtrování. V tomto přístupu se nehledá blízkost uživatelů, či položek na základě jejich vlastností, ale hledá se blízkost na základě interakce uživatelů s informačním systémem. Jedna z možností implementace kolaborativního filtrování je na základě nalezení takových uživatelů, kteří jsou danému uživateli co nejblíže svými preferencemi. Porovnání preferencí dvou uživatelů může být na základě jejich minulé interakce s informačním systémem. Může být odvozeno například hodnocením, které tito uživatelé přiřadili k jimi zobrazeným položkám. Další přístup může být odvození souvisejících produktů či služeb na základě historie navštívených položek daným uživatelem nebo skupinou uživatelů, do které byl daný uživatel přiřazen. V následující kapitole se budeme zabývat prvním způsobem, který je odvozen od nalezení relevantních uživatelů na základě hodnocení, které přiřadili navštíveným položkám. Zároveň je dobré říci co je vlastně doporučovacími algoritmy zkoumáno a s jakým výsledkem: “Doporučovací algoritmy zkoumají výběr prvků, například položek či služeb, který uživatel provedl v minulosti a může na tomto výběru prvků určit pravděpodobnost s jakou by daný uživatel mohl předmět, který ještě neviděl, chtít“. [1, s. 71] Nejprve však bude upřesněn pojem blízkosti pro další potřeby této práce. Uživatelé jsou navzájem blízcí pokud jsou jejich vektory blízké dle vybraného měřítka blízkosti, například Kosinová vzdálenost, či Koeficientu blízkosti. Doporučení pro uživatele U je dáno nalezením takových uživatelů, kteří jsou co nejblíže uživateli U a poté doporučíme uživateli U takové položky, které tito blízcí uživatelé ohodnotili kladně.[3, s. 319] V následující tabulce jsou zachyceni uživatelé (U) a položky (I), které byly vybranými uživateli ohodnoceny. Hodnocení je na stupnici od jedné do pěti s tím, že některé položky nejsou vybranými uživateli ohodnoceny. Hodnocení položek uživateli I1 U1
3
U2 U3 U4
I2
I3
I4
5
4
5 5
1
I5
I6
2
1
4
4 4 4 Tabulka 1: Matice s hodnocením položek uživateli na škále od 1 do 5
1
21
Nyní za pomoci dvou vybraných indexů nalezneme blízké uživatele uživateli U1. Na základě nalezení nejbližšího uživatele, pomocí vybraných indexů, můžeme nalézt položky, které lze uživateli U1 doporučit.
6.1 Jaccard index Pokud by byla zjišťována blízkost dvou uživatelů pomocí Jaccardova indexu, mohli bychom ignorovat hodnoty v dané matici a zaměřit se pouze na soubor hodnocených položek. Tento přístup je vhodný pokud by daná matice obsahovala pouze informace reflektující nákup, nebo navštívení položky uživatelem. Avšak v případě, kdy matice obsahuje detailnější informace, tak jako je tomu v tomto případě, tak je tento přístup méně vhodný, protože index blízkosti tyto důležité informace nereflektuje. Pomocí Jaccardova indexu se zjišťuje podobnost dvou konečných jednoduchých množin a je definován jako průnik množin dělený sjednocením těchto množin.[3, s. 72]
Po zavedení Jaccardova indexu, můžeme zavést i index vzdálenosti (rozdílnosti), který je jeho opakem a bude zapisován jako DIS(A, B) = 1 – J(A, B). Z matice uživatelů znázorněné výše vypočítáme dosazením hodnot do rovnic, hodnoty pro J(U1, U2) = 1/5, pro J(U1, U3) = 2/4, a v neposlední řadě J(U1, U4) = 1/6. Při porovnání výsledků se zdá býti uživatel U1 být blíže uživateli U3 než uživateli U4. Po seřazení výsledků od nejvyššího po nejnižší se jeví být jako nejbližší uživatel uživatel U3. Avšak při pohledu na hodnoty v matici je vidět, že hodnocení uživatele U4 se daleko více podobá hodnocení uživatele U1 než je tomu u uživatele U3. V tomto případě je vidět, že zjišťování Indexu blízkosti je v tomto případě zavádějící a může vést ke zhoršení výsledné hodnoty.
6.1.1 Normalizace hodnot Přesnost Jaccardova indexu v tomto případě se dá vylepšit pomocí zaokrouhlení hodnot v matici. V našem případě by se dala matice hodnocení upravit následujícím způsobem: hodnoty 3, 4 a 5 by se daly standardizovat jako hodnota 1 a hodnoty 1 a 2 by se označily jako nehodnocené, respektive nulová pole.[3, s. 321]
22
Výsledná matice by potom v našem případě vypadala následovně: I1 U1
I2
1
U2
I3
I4
1
1
I5
I6
1
U3
1
1
U4
1 1 1 Tabulka 2: Normalizace hodnocení pro Jaccardův index
1
Oproti původní matici jsou hodnoty uvedené v matici na první pohled řidší a jejich vypovídající hodnota není tak vysoká jako v matici s uvedenými hodnoceními daných uživatelů. Tento příklad bude demonstrován opět na uživateli U1 jako referenčním uživateli. Výsledek blízkosti pro uživatele U1 a uživatele U2 je ve standardizované matici roven nule. Tedy SIM(U1, U2) = 0, tedy jsou absolutně rozdílné. Zatímco výsledek pro uživatele U1 srovnávaného s uživatelem U4 je roven 1/5. Tento výsledek nám demonstruje, že uživatel U4 je bližší uživateli U1 více než uživatel U2. Pokud bychom takto hodnoty uvedené v matici nestandardizovali, vyšel by nám opak. Tedy, že uživatel U2 je bližší uživateli U1 než uživatel U4.
6.2 Kosinová blízkost V případě popsaném výše je vhodnější použití indexu Kosinové blízkosti a to z toho důvodu, že se při jeho použití neztratí důležité informace, které nám udávají hodnocení jednotlivých položek. Prázdná políčka, ve kterých chybí hodnocení, mohou být nahrazena nulovou hodnotou. Tento postup je však diskutabilní a to z toho důvodu, že v případě takovéhoto zásahu dáváme dané položce více negativní hodnocení než pozitivní. Kosinová blízkost se zjišťuje pomocí následujícího vzorce kde v čitateli je součin dvou vektorů A a B, a ve jmenovateli je normovaná hodnota vektoru A vynásobena normovanou hodnotou vektoru B. Tímto získáme cosinus úhlu omega, který představuje hledanou blízkost dvou uživatelů.
Pokud tedy bude porovnán uživatel U1 s uživatelem U3 z matice, která je znázorněna výše v textu, tak po dosazení do vzorce dostaneme hodnotu 0,4364.
23
Dále může být vypočítána kosinová blízkost vektorů znázorňující hodnocení uživatele U1 s uživatelem U2. V tomto případě vyjde hodnota 0,1033. Jelikož větší kosinová hodnota implikuje menší úhel mezi vektory a tudíž menší vzdálenost, tak nám tato hodnota říká, že uživatel U1 má hodnocení více podobné uživateli U3, než uživateli U2. Proto by při dalším doporučování obsahu bylo bráno v potaz hodnocení uživatele U3 jako více relevantní pro potřeby generování doporučeného obsahu.
6.2.1 Normalizace hodnot Pro větší relevanci výpočtu hodnot lze hodnocení uživatelů normalizovat odečtením průměrného hodnocení uživatele od všech jeho hodnocení jednotlivých položek. Tímto krokem dostaneme u nízkých hodnocení negativní hodnoty a u vysokých hodnocení pozitivní hodnoty. Poté co bude vypočítána kosinová blízkost s ostatními uživateli, tak uživatelé s rozdílným hodnocením budou mít své vektory v opačném směru a úhel mezi nimi bude relativně velký. Opačně budou uživatelé se stejným či podobným hodnocením, mít relativně malý úhel mezi vektory.[3, s. 321] I1 U1 U2
I2
-1
I3
I4
1
0
7/3
-5/3
I5
I6
-2/3
U3
-7/3
2/3
U4
-3/2 5/2 ½ Tabulka 3: Normalizace hodnocení pro index Cosinové blízkosti
-3/2
Pokud budou tyto hodnoty dosazeny do vzorce pro výpočet kosinové blízkosti, tak výsledek pro U1 a U3 bude 0,8498, zatímco výsledek pro U1 a U2 bude 0.
Nyní je míra blízkosti mezi uživatelem U1 a U3 dokonce výraznější než v předchozím případě, zatímco míra blízkosti mezi uživatelem U1 a U2 je výrazně nižší. Tímto způsobem lze nalézt takové uživatele, kteří jsou danému uživateli názorově bližší.
24
6.3 Výběr doporučovaných položek U uživatele, nebo skupiny uživatelů, jejichž hodnocení je vypočteno jako více relevantnější jsou vybrány všechny položky, které jsou daným uživatelem, či danými uživateli ohodnoceny a seřazeny od nejlépe hodnocených položek k hůře hodnoceným položkám. Poté je z této množiny vybrána taková podmnožina, která má nejlepší hodnocení a jsou vyřazeny ty položky, které daný uživatel již hodnotil nebo si je objednal. Vybrané položky jsou následně zobrazeny uživateli na výstup informačního systému a může si z nich libovolně vybírat. Například z posledního uvedeného výpočtu s normalizovanými hodnoceními pro výpočet blízkosti uživatelů za pomoci Cosinové blízkosti je vybrán jako nejbližší uživatel U3 k uživateli U1. Na základě tohoto zjištění bude uživateli U1 doporučena položka I6, kterou hodnotil uživatel U3 a zároveň ji uživatel U1 neviděl nebo nehodnotil.
7. Aktuální vývoj a trendy Segment doporučovacích systémů prožívá bouřlivý rozvoj a každým dnem přibývá další a další materiál, který rozšiřuje jejich možnosti. V této kapitole se zaměříme na možné budoucí trendy, které budou ovlivňovat jakým způsobem se bude nadále tato problematika vyvíjet a určovat další rozvoj. První oblast zájmu, která je důležitá v procesu tvorby doporučení, je shromáždění informací o uživateli procesem uživatelova profilování (zkráceně profiling). V dnešní době je většina studií zaměřených na generování doporučení limitována na produktové atributy a uživatelovy preference, které jsou získávány explicitně či implicitně.[8, s. 79] Přitom je čím dál tím větší množství informací o uživateli dostupné v nestrukturované formě, ať už v podobě uživatelových recenzí, nebo informací ze sociálních sítí. To, jakým způsobem mohou být tyto nestrukturované informace zpracovány a využity k uživatelovu profilingu, bude zajisté jedna z velkých výzev budoucnosti oboru. Avšak již dnes jsou první náznaky tohoto trendu patrné. Například Amazon, největší internetový prodejce, spustil službu Your Amazon Facebook Page (Vaše Amazon Facebook stránka), která poskytuje doporučení založená na minulých nákupech přátel daného uživatele.[8, s. 82] Zároveň jsou dnes známy čtyři základní kategorie doporučovacích systémů a to jsou: Analýza obsahu, Kolaborativní filtrování, Řešení založená na sociálních sítích a Hybridní přístup. Jednotlivé kategorie doporučovacích systémů jsou vhodné pro různé projekty a spolu s tím je spojena další otázka, na kterou bude rovněž nutné v budoucnu odpovědět. Dnes je studium zaměřeno převážně na vylepšování algoritmů a procesu tvorby doporučení, avšak jen málo prací se 25
týká emprického testování navržených algoritmů a modelů využívajících data z reálného provozu. Bylo by vhodné rovněž empiricky změřit praktický dopad navrhovaných algoritmů, procesů a modelů vytvářejících doporučení v prostředí e-commerce a zjistit jejich přínos. [8, s. 85] Informace získané z takovéhoto výzkumu by do budoucna mohly posloužit ke kvalifikovanému výběru nejvhodnějšího přístupu k vytváření doporučování a tím by se mohly ušetřit prostředky nutné k nalezení nejvhodnějšího přístupu pro unikátní projekty. Jedna z možností příkladu budoucího směru vývoje, který je spojen s vylepšováním doporučování na základě analýzy obsahu je možnost zlepšení procesu kolaborativního tagování obsahu uživateli. Jedná se o přiřazení nějakého tagu (klíčové slovo charakterizující položku) uživatelem k vybrané položce. Již dnes je velké množství nejrůznějších přístupů, které využívají funkčnosti tagování obsahu. Může se jednat například o reprezentaci uživatelského profilu ve formě vektoru jím přiřazených tagů, kde každý element označuje počet, kolikrát daný uživatel přiřadil tento tag k nějakému položce.[10, s. 22] Avšak v souvislosti s touto technikou existují ještě oblasti, které by měly být blíže prozkoumány. Například je s touto možností tvorby doporučovacích systémů spojena otázka na identifikaci významu tagů za pomoci různých zdrojů jako jsou například WordNet, nebo Wikipedia.[10, s. 24] Další výzkum, spojený s tagováním obsahu, může být representován analýzou tagů jako jeho zpětné vazby k odvození uživatelova profilu. Například tagy, které vyjadřují uživatelův názor a emoce jako je nuda, zájem a tak podobně, mohou reprezentovat uživatelův stupeň spokojenosti s vybranou položkou.[10, s. 24] Další významnou oblastí studia může být studium chování uživatelů a vliv doporučovacích systémů na tvorbu jejich rozhodnutí. Jelikož je hlavním cílem doporučovacích systémů přesvědčení uživatele k objednání zboží, nebo služby, tak je rovněž vhodné vědět jakým způsobem může být uživatelův výběr ovlivněn. Do budoucna by bylo by vhodné prozkoumat jak doporučovací systémy ovlivňují jednotlivé fáze tvorby rozhodnutí4 a jaké typy prezentace doporučení jsou vhodné v dané fázi tvorby rozhodnutí a v neposlední řadě jak načasovat prezentaci doporučení pro jednotlivé fáze. [8, s. 93] V každé fázi tvorby rozhodnutí je uživatel zaměřen na jiný druh informací, které vyhledává a využívá pro své rozhodnutí. Například v první fázi svého rozhodování se uživatel soustřeďuje ke shromažďování informací o produktu a jeho ceně. Časté je chování, kdy porovnává cenové nabídky různých prodejců tak, aby zjistil v jaké cenové relaci se jím požadovaný produkt pohybuje. Z toho důvodu může být přínosné vědět jakým způsobem uživatele pozitivně ovlivnit k vytvoření finálního rozhodnutí k dokončení objednávky.
4 Jednotlivé fáze mohou být fáze před rozhodnutím, fáze částečného rozhodnutí, fáze finálního rozhodnutí a fáze po rozhodnutí
26
To byly jen některé možnosti budoucího vývoje tohoto odvětví. Více informací je možné nalézt ve zdrojové literatuře.[8][10]
8. Finanční aspekt použití Stále ještě není zcela samozřejmé, že by poskytovatelé internetových služeb implementovali ve svých řešeních doporučovací systémy. Jako vše je i toto spojeno s finanční otázkou a tím, zda-li se doporučovací systém poskytovateli vyplatí implementovat. Autor těchto řádek si troufá tvrdit, že z dlouhodobého hlediska je to ve zostřující se internetové konkurenci jedna ze základních funkčností, kterou by měl úspěšný poskytovatel uživateli nabídnout. Pojďme se tedy nyní podívat na finanční stránku doporučovacích systémů.
8.1 Zadání Uvažujeme provozovatele středně velkého internetového obchodu, který se připravuje na investici do implementace doporučovacího systému v rámci svého internetového obchodu. Roční obrat popisovaného internetového obchodu činí 10 mil. Kč a čistý zisk 1,5 mil. Kč. Podniková diskontní míra je 4%. Životnost investice se počítá na 10 let. Na tuto investiční akci máme vyhrazen dostatek volných finančních prostředků a zajímá nás návratnost investice. Pro zjednodušení nebereme v potaz míru inflace a ani budoucí předpokládaný růst tržeb. Implementace doporučovacího systému bude řízena dle agilní metodiky SCRUM tak, aby byla zajištěna co největší participace zadavatele na projektu, a zároveň bude dodávka řízena v režimu Fix time - Fix price. Časová náročnost projektu je odhadována na šestnáct týdenních sprintů, tzn., že nasazení do ostrého provozu se odhaduje za čtyři měsíce od zahájení projektu. Projektový tým je složen ze čtyř členů, kteří mají jasně rozdělené úkoly v rámci týmu. Role zastoupené v rámci projektového týmu jsou: PM (projektový manažer), analytik, vývojář a tester. Jednotlivé role budou zastoupeny v rámci projektu po různou dobu. Následující tabulka zachycuje dobu obsazení role na projektu, náklady, které jsou s danou rolí spojené a celkové předpokládané náklady na projekt:
27
Týdnů na projektu
Hodin na projektu
Náklady na člověko-hodinu
Náklady na roli celkem
Projektový manažer
12
480
1 200
576 000
Analytik
10
400
1 050
420 000
Vývojář
10
400
900
360 000
Tester
10
400
750
300 000
∑
42 1680 1 656 000 Tabulka 4: Náklady na implementaci doporučovacího systému
Jak je patrné z nákladové tabulky, tak celkové náklady na projekt jsou vyčísleny na 1 656 000 Kč.
8.2 Výnosnost investice Jak již víme z minulých kapitol, tak existuje více přístupů doporučovacích systémů. Pro potřeby výpočtu návratnosti investice budou využita dostupná data z komerčního internetového obchodu ke dvěma z těchto přístupů a to konkrétně pro kolaborativní filtrování a analýzu obsahu. Hodnoty zachycené v následující tabulce byly získány metodou A/B testování pro konkrétní internetový obchod. V následující tabulce jsou zachyceny některé metriky pro tyto přístupy, které poslouží k výpočtu návratnosti investice:[11] Přístup Analýza obsahu
CTR (%)
TPR (%)
TIR (%)
IAT (%)
IR (%)
14,8
13,5
48,6
24,1
10,7
Kolaborativní filtrování 13,3 11,3 53,4 4,3 Tabulka 5: Hodnoty přínosu doporučovacího systému pro internetový obchod Zdroj: [11]
14,4
V prvním sloupci jsou dva vybrané přístupy doporučovacích systémů. Následující sloupec zachycuje ukazatel CTR, nebo-li míru prokliku doporučované položky. TPR ukazatel zachycuje poměr objednávek s doporučenou položkou. TIR zachycuje poměr doporučených položek na objednávku s doporučenou položkou. IAT ukazatel zachycuje nárůst (nebo pokles) průměrné ceny objednávky. A v neposlední řadě je ukazatel IR, který zachycuje nárůst (nebo pokles) příjmů získaných díky doporučování. Všechny zmíněné ukazatele mají v uvedené tabulce velmi pěkná čísla. Už pouze z těchto čísel je patrný pozitivní přínos doporučovacích systémů. Vyplatí se tedy našemu popisovanému poskytovateli investovat do doporučovacího systému? Jednou z metrik, kterou si pomůžeme pro kvalifikované rozhodnutí o investici je metrika ROI (Return on Investment). 28
Kde Zr je čistý roční zisk plynoucí z investice a IN jsou náklady na investici. Ze zadání víme, že roční tržby internetového obchodu činí 10 mil. korun českých a čistý zisk je 1,5 mil. korun českých. To znamená, že čistá marže internetového obchodu je 15%. Nejprve spočteme nárůst tržeb pro oba zmíněné přístupy. Spodní index CB značí doporučovací systém založený na analýze obsahu a spodní index CF značí doporučovací systém založený na kolaborativním filtrování.
Nyní, když máme představu o čistém zisku, který můžeme získat navíc pomocí doporučovacího systému, můžeme vypočíst ROI pro oba přístupy.
V případě zvoleného přístupu doporučovacího systému postaveném na analýze obsahu je výnosnost investice 9,7%. V případě kolaborativního filtrování je výnosnost investice 13%. Vyplatí se tedy investice do doporučovacího systému? Na tuto otázku by nám mohl pomoci odpovědět index čisté současné hodnoty investice.
8.3 Čistá současná hodnota investice Čistá současná hodnota investice představuje rozdíl mezi současnou hodnotou očekávaných výnosů (cash flow) a náklady na investici:[12, s. 257]
29
NPVI představuje hledaný ukazatel čisté současné hodnoty investice, CF je hodnota cash flow v období t, znak k značí kapitálové náklady na investici (podniková diskontní míra) a IN značí náklady na investici. V našem případě je cash flow pro přístup analýzy obsahu 160.500,- korun českých a 216.000,- korun českých pro kolaborativní filtrování. V případě dosazení do vzorce dostaneme následující:
Prezentované výsledky nám říkají, že v případě doporučovacího systému postaveném na analýze obsahu, bychom skončili v záporných číslech a tudíž taková investice by byla ztrátová. Naopak současná hodnota investice do kolaborativního filtrování bude v budoucnu zisková. Tato metoda výpočtu současné hodnoty investice bývá ještě doplněna indexem současné hodnoty, zvaným též indexem rentability, který vypočteme jako podíl současné hodnoty cash flow a nákladů na investici:
Jelikož jsme zavrhli analýzu obsahu z důvodu její ztrátovosti, tak se podíváme na index rentability pro přístup kolaborativního filtrování. Tento index je na víc v případě, kdy vybíráme z jedné varianty a její hodnota je kladná. V případě, kdy by bylo variant více, vypočetli bychom pro každou z nich index rentability a vybrali bychom takovou variantu, jejíž index je vyšší. Index rentability pro kolaborativní filtrování je:
9. Ukázková aplikace Ukázková aplikace demonstrující možnosti doporučovacích algoritmů nad reálnými daty, které se mění v čase. Tato změna zapříčiňuje mimo jiné i to, že doporučení jsou v různém čase jiná bez nutnosti administrativních zásahů. Jak bylo popsáno výše, tak variabilita doporučení v čase je umožněna na základě interakce uživatele s aplikací. Uživatel, zanechá svou aktivitou v systému drobečky, které jsou vyzobávány a z těchto drobečků je následně vytvořen obrázek uživatelových preferencí. 30
9.1 Proč Twitter Internetová aplikace, která se k implementaci doporučování je velmi vhodná právě díky obrovskému množství dat, které uživatelé každý den produkují, je mikroblogovací služba Twitter. Tato mikroblogovací služba nabízí rovněž veřejné API, které umožňuje získávat aktuální data na jejichž základě lze vytvářet uživateli doporučení. Twitter již má v sobě zakomponovanou funkčnost tvorby doporučení, ale příliš často tato doporučení uživateli nezobrazuje (resp. pouze na několika málo místech v aplikaci). Ukázková aplikace má za cíl doplnit doporučení Twitteru a nabídnout uživateli další zdroj inspirace pro nalezení vhodných uživatelů ke sledování.
9.2 Použité technologie 9.2.1 Platforma Při vývoji praktické ukázky využití doporučovacích algoritmů byla použita jedna ze tří standardizovaných vývojových platforem podporující programovací jazyk Java. Touto platformou je Java EE (Enterprise edition). Jedná se o platformu, která umožňuje mimo jiné vývoj webových aplikací s podporou webových služeb. Vývojový rámec pro vývoj ukázkové aplikace byl zvolen Spring. Tento modulární vývojový rámec je mezi vývojáři velmi populární. Díky své modulárnosti se mohou vývojáři soustředit především na řešení obchodní logiky a nemusejí řešit strukturální funkčnosti kolem. Rámec Spring momentálně integruje zhruba dvacet různých modulů řešících různé strukturální funkčnosti a nebo integraci s rozličnými webovými službami nejrozšířenějších sociálních sítí jako jsou Facebook či Twitter.
9.2.2 Sestavení aplikace Pro sestavení aplikace byl použit nástroj Apache Maven. Maven sjednocuje proces sestavování aplikačních balíčků, které je poté možné nasadit na aplikační server. Zároveň poskytuje rámec pro implementaci nejlepších praktik při vývoji projektu a částečně vynucuje využití těchto praktik. Například, specifikace, provedení a reportování proběhnuvších unit testů je součástí normálního sestavovacího cyklu za využití nástroje Maven. Maven rovněž podporuje praktiky řízení verzí 5 a sledování chyb6. Základní jednotkou pro práci s nástrojem Maven je tzv. POM (Project Object Model). Jedná se o XML soubor, který obsahuje informace o projektu a o konfiguračních detailech používaných nástrojem Maven k sestavení projektu. V konfiguračním souboru POM je možné specifikovat název projektu, závislosti na jiné projekty, projektovou verzi a mnoho dalšího. Tyto informace poté slouží jak pro sestavení výsledného balíčku, tak mají zároveň autodokumentační 5 6
Z anglického názvu „Release Management“, pro podproces řízení aplikačních verzí v průběhu vývoje aplikace. Z anlického názvu „Issue Tracking“, pro podproces sledování a eliminování chyb v průběhu vývoje a provozu aplikace.
31
vlastnost.
9.2.3 Nasazení Aplikace je primárně nasazena, odladěna a otestována na aplikačním serveru JBoss verze 6.3.0.GA. Tento aplikační server byl zvolen z toho důvodu, že za jeho instalaci a provozování se neplatí žádné licenční poplatky. Samotný aplikační server má otevřené zdrojové kódy a je vyvíjen společností Red Hat s přispěním komunity uživatelů a nadšenců. JBoss aplikační server je middleware platforma postavená na otevřených standardech plně kompatibilní se specifikací Java EE verze 6. Následující diagram zachycuje model nasazení aplikace na běhové prostředí. Na server je nasazen EAR (Enterprise Archive) zapouzdřující více modulů do jednoho aplikačního archivu. Mezi moduly, které jsou součástí EARu, je aplikační modul zabalený ve formátu WAR (Web Application Archive), který zapouzdřuje služby komunikující směrem ke klientovi. Tzn. RESTové API využívající v tenkém klientu uživatele. Další modul je modul zabalený ve formátu JAR (Java Archive), který zapouzdřuje obchodní logiku ukázkové aplikace. Tento aplikační modul mimo jiné obsahuje i komponentu, která implementuje otevřené API mikroblogovací sítě Twitter.
Obrázek 3: Diagram nasazení ukázkové aplikace Zdroj: Vlastní tvroba
32
9.3 Zvolená architektura Ukázková aplikace integruje s mikroblogovací službou Twitter®, která poskytuje veřejné RESTové API. Pomocí RESTového7 API je implementován přístup ke zdrojům aplikace, což jsou v tomto případě jednotlivé mikroblogy přes URI8 daných zdrojů. Při psaní ukázkové webové aplikace, nebyla dodržena veškerá architektonická omezení, takže aplikace nemůže být nazývána plnohodnotně RESTová, ale využívá z tohoto architektonického stylu pouze vybraná architektonická omezení. Následuje výčet všech těchto omezení REST a ta omezení, která byla použita, budou odůvodněna. Tato omezení9 jsou [13, s. 76]: REST je možné použít pouze na aplikace, které jsou postaveny na jiném architektonickém stylu a tím je architektonický styl klient-server. Toto první omezení umožňuje oddělení odpovědností v rámci aplikace, kdy je možné oddělit jednotlivé odpovědnosti v rámci aplikace do dvou, či více aplikačních vrstev, kde každá z vrstev má jasně definovanou odpovědnost v rámci aplikace.[13, s. 78] Toto oddělení odpovědností může zvýšit modularizaci aplikace a usnadní tak její údržbu a vývoj. Například je možné oddělit uživatelské rozhraní od obchodní logiky aplikace. Díky takovému oddělení je zvýšena přenositelnost uživatelského rozhraní přes více platforem a rovněž je možné zvýšit škálovatelnost aplikace díky zjednodušení komponent na straně serveru. Toto omezení je ukázkovou aplikací splněno, protože se jedná o webovou aplikaci nasazenou na aplikačním serveru JBoss. Dalším je omezení na beze stavovou interakci klient-server. Veškeré požadavky z klienta na server musejí obsahovat veškeré potřebné informace ke zpracování klientského požadavku a nemůže využívat výhod jakéhokoliv uloženého kontextu na straně serveru. Stav sezení 10 je tedy zcela uchováván na straně klient.[13, s. 78] Tohoto je dosaženo tím, že veškeré požadavky, které přicházejí z klienta na server, jsou co se týče zasílaných dat pro požadavky minimalistické a tudíž není potřeba udržovat žádný stav sezení na straně serveru. Pro zlepšení síťové efektivity je přidána mezipaměť 11. U tohoto omezení je vyžadováno, že data v požadavku musejí být implicitně či explicitně označena jako „cacheable“ nebo „noncacheable“. Pokud například v odpovědi na požadavek jsou vrácená data označena jako „cacheable“, tak mezipaměť na straně klienta má právo znovu použít tato data pro pozdější 7 8 9
REST = Representational State Transfer URI = Uniform Resource Identifier V původním zdroji je pro architektonické principy plně RESTových aplikací použit termín „omezení“ (angl. constraint). 10 Stav sezení je volně přeloženo z anglického „session state“. 11 Volný překlad anglického termínu „cache“.
33
požadavek, který je ekvivalentní původnímu požadavku.[13, s. 79] Výhoda tohoto omezení je, že může částečně či úplně eliminovat některé typy interakce a zvýšit tak efektivitu a škálovatelnost aplikace. Toto omezení je ukázkovou aplikací implementováno, mimo jiné i z toho důvodu jistých omezení veřejného API služby Twitter. Jedná se o omezení na počet požadavků, které je možné v průběhu času zasílat na server. Snížení počtu zasílaných požadavků na server může zrychlit odezvu aplikace tím, že data jsou načtena z mezipaměti a uživatel k nim má okamžitý přístup ze své lokální paměti. Toto omezení se doporučuje používat pouze v případech, kdy je chování volaného zdroje deterministické, tzn. v případech kdy je odpověď na zaslaný požadavek za každých okolností stejná. Toto bohužel není tento případ, ale z důvodu omezení zasílaných požadavků na veřejné API Twitteru je i toto omezení implementováno. Více informací o omezeních, která jsou vynucována při používání API služby Twitter, je k nalezení v dokumentaci, která je odkázána v seznamu použitých zdrojů. Hlavní vlastnost, která odlišuje architektonický styl REST od ostatních síťových architektonických stylů je jeho důraz na jednotné rozhraní používané při komunikaci mezi komponentami. Aplikováním softwarového principu obecnosti, při tvorbě rozhraní komponent, je celková architektura systému zjednodušena a rovněž je zvýšena viditelnost interakce mezi komponentami. Implementace jsou volně svázané od služeb, které poskytují, což podporuje nezávislý vývoj.[Spring, s. 81] Toto omezení je dodrženo i mimo jiné za použití vývojového rámce 12 Spring. Ten poskytuje jednotné rozhraní pro komunikaci klienta s aplikací nasazené na aplikačním serveru. Poslední z vyžadovaných omezeních pro aplikace, které jsou vybudovány na architektonickém stylu REST, je omezení „code-on-demand“. Toto omezení je volitelné a jedná se především o možnosti skriptování na straně klienta. Této možnosti využívá ukázková aplikace minimálně a veškeré výpočty jsou prováděny na straně serveru. Pokud jsou nějaké skripty na straně klienta použity, jedná se výhradně o manipulaci s DOM elementy v rámci HTML a kaskádových stylů.
9.4 Analýza aplikace Aby bylo možné plně prezentovat sílu doporučovacích algoritmů a možnosti jejich využití, tak jako nejvhodnější řešení se zdá být reprezentace této funkčnosti na reálných datech. V případě aplikace, která denně produkuje ohromné množství, dat můžeme vidět různá doporučení v různých časech. Je to dáno mimo jiné i tím, že uživatelé interagují s informačním systémem a tudíž množina 12 Rámec je přeloženo z anglického termínu „framework“, který je v komunitě vývojářů běžně používán na místo českého překladu.
34
porovnávaných dat je v různých časech jiná z čehož plyne, že i výsledná doporučení mohou být jiná. Většinou jsou daná doporučení s přibývajícím časem přesnější, protože uživatelé zanechají v systému více informací, dle kterých můžeme usuzovat na jeho vkus. Aby bylo možné analyzovat data a vytvářet na základě těchto dat algoritmická doporučování je nutné nejprve analyzovat důležité, entity se kterými se bude nadále pracovat. Na následujícím high-level entity diagramu jsou zachyceny pouze entity, které jsou důležité z hlediska vytváření algoritmických doporučení. Tudíž nejsou zachyceny všechny entity, které se vyskytují v rámci mikroblogovací sítě Twitter.
Obrázek 4: Diagram základních entity aplikace Twitter Zdroj: Vlastní tvorba První entitou, která je zachycena v entity diagramu, je entita User (Uživatel). Tato entita zapouzdřuje informace o uživateli. Obsahuje jeho unikátní identifikátor, název, profilovou fotografii, stručný popis, URL odkaz na profilovou stránku uživatele a mnoho dalších informací včetně geografické lokace profilového účtu. Druhá zachycená entita je entita Status. Tato entita zapouzdřuje informace o uživatelově statusu. Jedná se například o unikátní identifikátor statusu, text daného statusu, zda-li je statusem retweetunutým, informaci kolik uživatelů daný status označilo za oblíbený a další užitečné informace. Status je vždy vytvořen nějakým uživatelem a náleží vždy jednomu uživateli, avšak může být retweetnut i jinými uživateli na jejich vlastní profilovou zeď. Uživatel může v průběhu času vytvořit více různých statusů. Veřejné API služby Twitter nabízí možnost získat oblíbené statusy uživatele. Tyto oblíbené statusy jsou využívány pro počítání blízkosti dvou uživatelů. Jediné co je pro výpočet blízkosti potřeba je unikátní identifikátor statusu. V případě, že mají statusy dvou různých uživatelů stejný identifikátor, tak jsou stejné. Tato informace je potřebná pro porovnání dvou množin při výpočtu blízkosti pomocí Jaccardova indexu. Počítání blízkosti dvou statusů jinými indexy se nejeví být vhodné a výsledky by nebyly zcela přesné, protože není možné získat jiné podobné informace o uživatelově preferencích skrz otevřené API služby Twitter. Chybí například škála oblíbenosti, která byla představena v kapitole 6. Popis vybraných algoritmů. Nyní, když je zřejmé s jakými entitami bude ukázková aplikace pracovat, tak následuje znázornění jakým způsobem se bude přistupovat k doporučování uživatelů. Jelikož není možné i 35
z důvodu různých omezení veřejného API dělat komplexní doporučování na základě statistiky veškerých dat, tak pro potřeby ukázky doporučovacích algoritmů je aplikace zaměřena na prezentaci relevance výsledků. Jakým způsobem bude tedy vytvářeno ono doporučení? Twitter umožňuje uživatelům dávat jednotlivým příspěvkům tzv. „Like“. Tato informace říká, že se vybraný status danému uživateli líbí a to je přesně ten typ informace na základě kterého už je možné vytvářet algoritmická doporučení. Následující sekvenční diagram znázorňuje jakým způsobem budou daná doporučení vytvářena.
Obrázek 5: Sekvenční diagram zachycující získávání doporučení Zdroj: Vlastní tvorba 36
Uživatel interagující s informačním systémem klikne z úvodní obrazovky na možnost zobrazit detail uživatele z nabídky. Tento požadavek zaregistruje aplikační servlet, který uživatelův požadavek přesměruje na kontroler UserDetailController. Tento kontroler nejprve načte detail uživatele dle jeho identifikátoru. Detail uživatele je následně přidán do modelu odpovědi požadavku na kontroler. Dále je z kontroleru zavolána metoda getUserFriendsStatistic na rozhraní komponenty Twitter, která nejprve získá z veřejného API Twitteru tzv. Followers (uživatelé, kteří sledují vybraného uživatele) vybraného uživatele a následně pro tyto vybrané uživatele získá jejich oblíbené statusy. Pro získání oblíbených statusů je nutné iterovat přes seznam Followers a pro každého jednoho uživatele (resp. Followera) získat oblíbené statusy zvlášť. Následně je vrácena na komponentu Recommendation mapa objektů, jejichž klíčem jsou uživatelé a jako hodnota je seznam jejich oblíbených statusů. Vrácená mapa je následně iterována a na rozhraní komponenty IDistance je vypočítán Jaccardův index vůči referenčnímu uživateli. Tento index je spočítán porovnáním dvou množin. První množina je seznam oblíbených statusů referenčního uživatele a druhá množina je seznam oblíbených statusů porovnávaného uživatele. Referenční uživatel je takový který je aktuálně přihlášen do aplikace. Jaccardův index je následně uložen v obalovém objektu UserWrapper, který zapouzdřuje informace o doporučovaných uživatelích a jejich blízkosti vůči referenčnímu uživateli. Před výpisem doporučovaných uživatelů jsou seřazeni v seznamu dle jejich Jaccard indexu blízkosti od nejbližšího uživatele k nejvzdálenějšímu. Takto seřazený seznam je uložen do modelu odpovědi požadavku. Výsledek je následně vypsán v uživatelském rozhraní tenkého klienta.
9.5 Praktická implementace 9.5.1 Zdrojový kód Nyní, když je známo jakým způsobem se vytvářejí doporučení, je na řadě praktická ukázka zdrojového kódu, který vytváří doporučování pro uživatele mikroblogovací sítě Twitter. Ze sekvenčního diagramu, který byl představen v minulé kapitole je zřejmé, že k výpočtu blízkosti dvou entit, dochází v komponentě implementující rozhraní IDistance. Jedinou a nejdůležitější metodou zapouzdřenou tímto rozhraním je metoda countDistance mající dva parametry. První je seznam oblíbených statusů referenčního uživatele, vůči kterému jsou vypočtena doporučení a druhým jsou oblíbené statusy uživatele, u něhož chceme zjistit blízkost vůči uživateli referenčnímu. Zdrojový kód implementující algoritmus pro výpočet blízkosti vzdálenosti Jaccardova indexu vypadá následovně:
37
/** * Counts distance between two users for theirs liked statuses. * * @param referenceStatuses List of statuses of reference user. * @param friendsStatuses List of statuses of friends or followers of reference user. */ @Override public double countDistance(ResponseList<Status> referenceStatuses, ResponseList<Status> friendsStatuses) { if (LOG.isTraceEnabled()) { LOG.trace("countDistance(...) - start"); } double intersection = intersection(referenceStatuses, friendsStatuses); double union = union(referenceStatuses, friendsStatuses); BigDecimal bd = new BigDecimal(Double.toString(intersection/union)); bd = bd.setScale(4, BigDecimal.ROUND_HALF_UP); double result = bd.doubleValue(); if (LOG.isInfoEnabled()) { LOG.info(String.format("Result for Jacard index is %f", result)); } return result; } /** * Intersection of two sets of liked posts by different users. * * @param referenceLikes Reference user likes. * @param friendsLikes Supplementary likes of different user. * @return Number of intersect liked posts. */ private double intersection(ResponseList<Status> referenceLikes, ResponseList<Status> friendsLikes) { if (LOG.isTraceEnabled()) { LOG.trace("intersection(...) - start"); } double result = 0; for (Status p1 : referenceLikes) { for (Status p2 : friendsLikes) { final Long id1 = p1.getId(); final Long id2 = p2.getId(); if (id1.equals(id2)) { result++; } } } if (LOG.isInfoEnabled()) { LOG.info(String.format("Intersercion is %f", result)); } return result; }
38
/** * Union of two sets of liked posts by different users. * * @param referenceLikes Reference user likes. * @param friendsLikes Supplementary likes of different user. * @return Number of union liked posts. */ private double union(ResponseList<Status> referenceLikes, ResponseList<Status> friendsLikes) { if (LOG.isTraceEnabled()) { LOG.trace("union(...) - start"); } double result = 0; userLoop : for (Status p1 : referenceLikes) { for (Status p2 : friendsLikes) { final Long id1 = p1.getId(); final Long id2 = p2.getId(); if (id1.equals(id2)) { result++; continue userLoop; } result++; } result++; } if (LOG.isInfoEnabled()) { LOG.info(String.format("Union is %f", result)); } return result; }
Nejprve se získá průnik množin pomocí porovnání jedinečných identifikátorů oblíbených statusů referenčního uživatele vůči jinému uživateli. Poté se zjistí jejich sjednocení opět pomocí iterace a porovnávání jedinečných identifikárorů oblíbených statusů. Poté se vypočte podíl těchto hodnot, zaokrouhlí se na čtyři desetinná místa a vypočtená blízkost dvou uživatelů je vrácena na metodu odkud je metoda pro výpočet blízkosti uživatelů volána a přiřazena k porovnávanému uživateli. Ve chvíli kdy se vypočte blízkost pro všechny sledované uživatele, jsou tito uživatelé seřazeni od nejbližšího k nejméně blízkému a vypsáni na uživatelské rozhraní.
9.5.2 Ukázka Následující obrázek představuje výřez úvodní obrazovky ukázkové aplikace na které je demonstrována ukázka implementace doporučovacího systému. V levém sloupci jsou statusy 39
referenčního (přihlášeného) uživatele a v pravém sloupci aplikace jsou seřazeni uživatelé od nejvíce blízkého s referenčním uživatelem (resp. s autorem zdrojového kódu a této bakalářské práce), k tomu nejméně blízkému. V rámci aplikace se lze prokliknout na detail blízkého uživatele přes název jeho profilu (např. GitHub). Na obrazovce s detailem uživatele je potom timeline (statusy) vybraného uživatele rovněž v levém sloupci a v pravém další doporučení uživatelé, kteří mohli být vybráni k porovnání.
Obrázek 6: Výřez obrazovky z ukázkové aplikace s doporučeními Zdroj: Ukázková aplikace
40
10. Závěr Cílem této bakalářské práce bylo představit problematiku doporučování obsahu na internetu uživatelům. V první části práce byla popsána oblast doporučovacích systémů, které mohou zatraktivnit internetové služby pro uživatele a důvod vzniku doporučovacích systémů. Velmi silný motiv, který přispěl k vývoji těchto systémů a jejich rozšíření, je fenomén Dlouhého ocasu, který zachycuje množství zobrazovaných položek v rámci internetového obchodu a jejich popularitu mezi zákazníky. Zároveň spolu s tím byly představeny nejznámější příklady z praxe, které implementují kvalitní doporučovací systémy v rámci svých služeb a dosahují tak díky tomu konkurenční výhody. Ve třetí kapitole byl vysvětlen a definován termín doporučovací systém a byly představeny procesy, které s tvorbou a provozem doporučovacího systému souvisí. Procesy, které jsou spojeny s tvorbou a provozem doporučovacího systému jsou: 1) poznání uživatele, 2) poskytnutí na základě jeho poznání personalisovaná doporučení a 3) změření dopadu poskytnutých doporučení uživateli. Zároveň byly v této kapitole navrženy a představeny základní kroky, které mohou pomoci při tvorbě doporučovacích systémů v rámci internetových služeb. Tyto kroky vycházejí z poznatků při tvorbě této bakalářské práce a mohou tak poskytnout budoucí rámec pro vytváření kvalitnějších doporučovacích systémů. Čtvrtá kapitola popisuje čtyři základní přístupy ke tvorbě doporučovacích systémů, které jsou dnes známy a používány. Prvním přístupem je přístup „kolaborativního filtrování“, který je založen na analýze interakce uživatele s informačním systémem. Dalším je přístup založený na „analýze obsahu“, který je spojen s uživatelem či doporučovanou položkou. Třetí zmíněný přístup využívá rozšířenosti a popularity sociálních sítí. Díky tomu může doporučovat položky, které jsou spojeny s „přáteli“ uživatele a zlepšit tak vytvářená doporučení. Posledním známým přístupem je hybridní přístup kombinující od každého podle potřeby. V páté kapitole byl definován pojem „Blízkost“ a představen jeho význam v rámci doporučovacích systémů. S tímto pojmem jsou zároveň spojeny čtyři vlastnosti. Jedná se o vlastnosti nezápornosti, totožnosti, symetrie a trojúhelníkové nerovnosti. Blízkost uživatelů, nebo položek nám určuje jak moc jsou dva uživatelé, nebo položky totožné. V šesté kapitole byly představeny vybrané algoritmy a jejich modifikace na vhodně zvoleném příkladu. V rámci tohoto příkladu byli hledáni nejbližší uživatelé k vybranému uživateli a na základě toho bylo následně vytvořeno personalisované doporučení. V rámci tohoto příkladu byla zároveň představena vylepšení, která mohou zpřesnit hledání nejbližších uživatelů. Na základě nalezení nejbližšího uživatele byly následně doporučeny položky vybranému uživateli. Indexy, 41
které byly použity pro nalezení blízkých uživatelů, byly Jaccard index a index Cosinové blízkosti. Po představení vybraných algoritmů byl popsán aktuální stav doporučovacích algoritmů a budoucí možné trendy, které zajisté tuto oblast mohou výrazným způsobem ovlivnit. Jedná se například o větší zapojení sociálních sítí pro proces vytvoření profilu uživatele, na základě kterého jsou vytvářena personalisovaná doporučení. V kapitole číslo osm byla vytvořena finanční analýza pro tvorbu rozhodnutí středně velkého internetového obchodu, zda-li investovat do implementace doporučovacího systému v rámci internetového obchodu či nikoliv. Pro tento výpočet byly použity mimo jiné údaje z vybraného internetového obchodu, který metodou A/B testování ohodnotil přínos jednotlivých přístupů doporučovacích systémů v reálném provozu. Tyto informace pomohli odhalit, že pro náš hypotetický internetový obchod by byla výhodnější varianta implementující doporučovací systém metodou kolaborativního filtrování. V předposlední kapitole je k nalezení technický popis ukázkové aplikace spolu s ukázkou zdrojového kódu. Tato ukázková aplikace je plně funkční a demonstruje možnost využití implementace doporučovacího systému. Díky této funkčnosti se uživatel může dovědět, kteří uživatelé jsou mu „názorově“ bližší a na základě toho se může rozhodnout pro odebírání jejich obsahu na svůj profil. Díky tomu může sledovat pouze takové uživatele, kteří jsou pro přihlášeného uživatele atraktivnější právě díky názorové shodě. Služba Twitter, ze které jsou čerpána data, by mohla na svých stránkách uživatelům zobrazovat více doporučení, tak aby uživatelé mohli rozšiřovat svůj okruh uživatelů, od kterých odebírají novinky. Zároveň by bylo dobré se zamyslet nad lepší prezentací doporučování i na mobilních platfromách, protože na těchto je tato funkčnost zcela neintuitivní. Výstupem této práce je představení přínosnosti doporučovacích systémů v rámci různých typů internetových služeb a demonstrace této přínosnosti na ukázkové aplikaci implementující přístup kolaborativního filtrování na jedné z nejrozšířenějších mikroblogovacích služeb na internetu. V práci je zachycena šíře uplatnění doporučovacích systémů v oblasti e-commerce kde může kvalitní implementace doporučovacího systému přinést nezanedbatelnou konkurenční výhodu.
42
Seznam použitých zdrojů [1] MARMANIS, Haralambos; BALABENKO, Dmitry: Alogithms of the intelligent web. Greenwich: Manning Publications Co., 2009. 345 s. ISBN 978-1-933988-66-5 [2] LESKOVEC, Jure; RAJARAMAN, Anand; ULLMAN, Jeff: Mining of Massive Datasets. Cambridge: Cambridge University Press, 2012. [cit. 2014-08-05]. Dostupné z URL: http://infolab.stanford.edu/~ullman/mmds/book.pdf [3] [cit. 2014-05-11]. Dostupné z URL: http://neoluxor.cz/pobocky/praha/palac-knih-luxor [4] SEGARAN, Toby: Programming Collective Intelligence: Building Smart Web 2.0 Applications. O’Reilly Media, Inc., 2007. 360 s. ISBN 978-0-596-52932-1 [5] LINDEN, Greg; SMITH, Brent; YORK, Jeremy: Amazon.com Recommendations: Item-to-Item collaborative filtering. Internet Computing, IEEE, 2003, 7.1: 76-80. [cit. 2014-07-05]. Dostupné z URL: http://www.cs.umd.edu/~samir/498/Amazon-Recommendations.pdf [6] Amatriain, Xavier; Basilico, Justin: Netflix Recommendations: Beyond the 5 stars, 2012 [cit. 2015-17-05]. Dostupné z URL: http://techblog.netflix.com/2012/04/netflix-recommendationsbeyond-5-stars.html [7] SALAKHUTDINOV, Ruslan; MNIH, Andriy; Hinton., Geoffrey: Restricted Boltrmann Machines for Collaborative Filtering, 2007 [cit. 2015-17-05]. Dostupné z URL: http://www.machinelearning.org/proceedings/icml2007/papers/407.pdf [8] Li, Seth Siyuan, Karahanna, Elena: Online Recommendation Systems in a B2C E-Commerce Context: A Review and Future Directions [9] ADOMAVICIUS, Gediminas; TUZIHILIN, Alexander. Personalization technologies: a processoriented perspective. Communications of the ACM, 2005, 48.10, 83-90. [10] LOPS, Pasquale; DE GEMMIS, Marco; SEMERARO, Giovanni. Content-based recommender systems: State of the art and trends. In: Recommender systems handbook. Springer US, 2011. s. 73105. ISBN 978-0-387-85819-7 [11] CARACIOLO, Marcel: Recommendations and how to measure the ROI with some metrics, 2012 [cit. 2015-07-04]. Dostupné z URL: http://aimotion.blogspot.cz/2012/07/recommendationsand-how-to-measure-roi.html [12] SYNEK, Miloslav. Podniková ekonomika, 5. přepracované a doplněné vydání. Nakladatelství CH Beck, 2010. 498 s. ISBN 978-8-074003-36-3. [13] FIELDING, Roy Thomas: Architectural Styles and the Design of Network-based Software Architectures. Doctoral dissertation, University of California, Irvine, 2000. [cit. 2015-01-11] Dostupné z URL: http://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf [14] LINDEN, Gregory; JACOBI, Jennifer A., Benson, Eric A. Collaborative Recommendations Using Item-to-Item Similarity Mappings, US Patent No 6,266,649 (to Amazon.com), Patent and Trademark Office, Washington, D.C., 2001.
43
Seznam obrázků Obrázek 1: Výřez obrazovky z vyhledaného dotazu „František Běhounek, Google.........................14 Obrázek 2: Tři fáze procesu tvorby doporučení.................................................................................16 Obrázek 3: Diagram nasazení ukázkové aplikace..............................................................................32 Obrázek 4: Diagram základních entity aplikace Twitter....................................................................35 Obrázek 5: Sekvenční diagram zachycující získávání doporučení....................................................36 Obrázek 6: Výřez obrazovky z ukázkové aplikace s doporučeními..................................................40
44
Seznam tabulek Tabulka 1: Matice s hodnocením položek uživateli na škále od 1 do 5.............................................21 Tabulka 2: Normalizace hodnocení pro Jaccardův index...................................................................23 Tabulka 3: Normalizace hodnocení pro index Consinové blízkosti...................................................24 Tabulka 4: Náklady na implementaci doporučovacího systému........................................................28 Tabulka 5: Hodnoty přínosu doporučovacího systému pro internetový obchod................................28
45
Seznam grafů Graf 1: Fenomén „Dlouhého ocasu“...................................................................................................11
46
Seznam příloh Příloha 1: CD-ROM...........................................................................................................................48
47
Příloha 1 – CD-ROM bakalarska_prace/
- obsahuje tuto práci v elektronické podobě
EAR/
- obsahuje zkompilovanou aplikaci, kterou je možno nasadit na aplikační server
recommendation/
- obsahuje moduly aplikace se zdrojovými kódy
| -recommendation-bl/
- obsahuje modul s aplikační logikou pro doporučování
| -recommendation-ear/
- obsahuje EAR projekt pro sestavení aplikačního baličku
| -recommendation-web/
- obsahuje webový modul pro interakci s tenkým klientem
| -pom.xml
- obsahuje konfiguraci pro sestavení aplikace pomocí Mavenu
| -README.txt
- obsahuje pokyny pro konfiguraci aplikace před nasazením na aplikační server
48