Přehled systému doporučení a jak jej implementovat od nuly

Tento blog obsahuje přehled systémů doporučení včetně historie, současnosti, budoucnosti, různých kategorií a nakonec kódu pro zpracování doporučení vtipu.

Foto Edo Nugroho na Unsplash

Minulá současnost a budoucnost:

Podíváme-li se na historii systému doporučení, nápad byl v letech 1992–1996 podněcován. Před tím, než byly systémy doporučení představeny ještě předtím, než lidé hovořili o filtrování založené na spolupráci, to bylo známé jako personalizace. Ale všechno to bylo manuální. Například: S cestovní kanceláří A, která ví, že máte zájem o safari, budou mít oči před typem cesty, kterou byste chtěli, nejen něco, co by někdo chtěl udělat. Jako druhý příklad: Osobní zákazníci měli několik jednoduchých databází, kde by mohli procházet profily lidí, když přicházejí nové produkty, a získat představu o tom, koho by mohli chtít zvážit, že by to byl dobrý kandidát na nový produkt. V roce 2007 vyhlásila společnost Netflix soutěž ve výši 1 milionu dolarů a změnila průběh systému doporučení. To přilákalo lidi z mnoha pozadí k účasti v soutěži. Objevily se nové algoritmy a nové matematické vzorce. Mimochodem, knihovna překvapení, kterou budu používat, aby vytvořila systém doporučení vtipů, je zcela vyvinuta, aby sledovala výzkumný příspěvek publikovaný vítězem týmu ceny Netflix. Jak se těšíme, stále existuje mnoho věcí, které nevíme. Problém dočasného doporučení. Jak mohu vyjádřit svá doporučení nejen k věcem, jako je sezóna, na které lidé chvíli pracovali, ale abych sledoval, co jste spotřebovali příští vzhledem k tomu, že jste to už konzumovali. Doporučení pro vzdělávání, které je jednou z oblastí, bylo hodně časových záležitostí.

Široké rozdělení systému doporučení:

Existují hlavně dvě kategorie systému doporučení. 1. Kooperativní filtrování 2. Filtrování podle obsahu

Kooperativní filtrování: Klíčem ke kooperativnímu filtrování je předpoklad, že lidé, kteří se v minulosti dohodli, budou v budoucnu souhlasit a že budou mít rádi podobné druhy zboží, jaké se jim líbilo v minulosti. Tři hlavní kategorie kooperativního filtrování jsou: 1. Podobnost mezi uživatelem a uživatelem 2. Podobnost položky v položce 3. Podle modelu

Podobnost mezi uživatelem a uživatelem

Filtrování podle obsahu: Metody filtrování podle obsahu jsou založeny na popisu položky a profilu preferencí uživatele. Tyto metody jsou nejvhodnější pro situace, kdy existují známá data o položce (jméno, umístění, popis atd.), Ale nikoli o uživateli.

Doporučení založené na spolupráci vs. obsahu

Předpoklad

1.Basic Python 2.Basic pandas 3.Eagerness prozkoumat knihovnu překvapení 4. Keras (volitelné)

Pokud chcete přejít přímo na kódy, přejděte na tento odkaz github a najděte notebook Jupyter.

Vysvětlím vám všechny hlavní kroky, které jsem při řešení problému provedl, ale pevně věřím, že pokud máte zájem o úplné vysvětlení problému a chcete vědět o použití knihovny překvapení, musíte se podívat na git repo poté, co projdete skrz blog.

Pojďme začít. Některé základní informace o datech, která budeme používat.

Popis dat

Nyní vytvořím plán, jak přistupovat k problému a pomalu se posunout k řešení. Každým krokem projdeme úryvky kódu. 1. Sběr dat 2. Rozdělení testů vlaků 3. Jednoduché statistiky 4. Struktura dat do kompatibilního formátu knihovny překvapení 5. Definování metriky chyb 6. Použití základního modelu 7. Vyzkoušejte různé modely 8. Výsledek

Sbírat data

  1. V datech jsou uvedeny 3 excel listy. Sloučíme je dohromady a vytvoříme kombinovaný python pandas dataFrame. Máme celkem 73421 uživatelů.
Sloučit všechna data

2. Jak je popsáno v informacích o datové sadě, hodnocení 99 znamená, že uživatel tento vtip nehodnotil. Tyto záznamy odstraníme a připravíme data ve formátu ['user_id', 'joke_id', 'rating'].

Příprava dat

Rozdělení testu vlaku

Použijeme scikit-learn train_test_split a data rozdělíme na 70–30. 70% údajů bude k dispozici pro vlak a 30% pro test

Základní statistika

1. Průměrné hodnocení na uživatele a vtip

rozdělení hodnocení všech uživatelůrozdělení hodnocení všech vtipů

Struktura dat do kompatibilního formátu knihovny překvapení

Budeme strukturovat data podle knihovny překvapení. Přijímá data ve formátu jako ['user', 'vtip', 'rating']. Pokud bychom měli problém s doporučením filmu, strukturovali bychom data jako ['user', 'movie', 'rating'].

připravte data ve stylu knihovny překvapení

Definování metriky chyby

jako metriku chyby použijeme Normalizovanou střední absolutní chybu.

Vzorec Normalizovaná střední absolutní chyba (NAME)kód pro výpočet NMAE

Použití základního modelu

Vytvoříme model základní linie pomocí modelu Baseline daný knihovnou překvapení. Základní model dává 0,2033 NMAE, zkusíme různé modely překvapení a zkombinujeme všechny výsledky, abychom získali lepší výsledky.

Vyzkoušejte různé modely

  1. KNN Baseline Model: Používá techniku ​​založenou na podobnosti k predikci hodnocení uživatelů pro nové vtipy. V našem případě je chyba NMAE 0,196

2. XGBoost na userA BeverRating, jokeA BeverRating, výstup Baseline a výstup KNN Baseline: Zkombinovali jsme veškerý výstup předchozího modelu překvapení a spustili jsme regresní model XGB na datech po vyladění hyperparametrů. Zde získáme mírně lepší výsledek 0,1928 NMAE

3. Model SVD: Model SVD používá techniky faktorizace matic k vyřešení problému s dokončením matice a předpovídá hodnocení.

4. XGBoost on userA BeverRating, jokeA BeverRating, výstup Baseline, výstup KNN Baseline a výstup modelu SVD. Tento model dává 0,18 NMAE a je zatím nejlepší.

5. Model s funkcí inženýrství: Odvozuji dvě snadné funkce, abych ověřil jejich účinek na model. Jednou z funkcí je user_average + joke_avg-global_avg. Tento model dává jako obvykle NMAE jako 20,2. Vyzkoušel jsem i jiné techniky inženýrství. Také nepracovali dobře.

6. Depp Learning models using keras: Vzhledem k tomu, že funkce nefungovala dobře, plánuji vyzkoušet některé jednoduché modely neuronových sítí pomocí keras. Vyzkoušel jsem 3 různé modely. Jeden se všemi základními funkcemi, jako je průměr uživatele, průměr žertů, druhý a třetí se všemi funkcemi, ale s odlišnou architekturou. Jeden model měl 14,9% NMAE.

Výsledek

Jak vidíme, model Second_NN funguje nejlépe, protože má nejnižší testovací chybu.

Závěrečné myšlenky

Jak všichni víme, žádný model není dokonalý. V tomto modelu existuje a vždy bude prostor pro zlepšení. Mohou se snažit o jinou techniku ​​inženýrství, některé rady expertů domén a různé architektury neuronových sítí mohou vést k lepším modelům.

Jako druhou poznámku mohu říci, že systémy doporučení nyní rostou už několik dní. Knihovna překvapení usnadňuje vývojářům život tím, že dává všem známým implementacím modelů. Pro vytvoření základního systému doporučení je to opravdu užitečné. Myslím, že jsem splnil svůj účel psaní tohoto blogu a informoval vývojáře o knihovně překvapení s malým úvodním kódováním. Celý kód je k dispozici zde v gitu.