Преглед на системата за препоръки и как да я приложим от нулата

Този блог включва преглед на препоръчителни системи, включително история, настояще, бъдеще, различни категории от него и накрая код за обработка на шега препоръка.

Снимка на Edo Nugroho на Unsplash

Минало настояще и бъдеще:

Ако погледнем историята на системата от препоръки, идеята се възпламени между 1992-1996 г. Преди системите за препоръки са се представяли още преди хората да говорят за съвместно филтриране, това е било известно като персонализация. Но всичко беше ръчно. Например: С туристическият агент A, който знае, че се интересувате от сафари, ще държи очите му за вида на пътуването, който бихте искали, а не само за нещо, което някой би искал да прави. Като втори пример: Личните купувачи имаха няколко прости бази данни, в които можеха да пускат профили на хората, когато се появят нови продукти и да получат представа за кого биха искали да считат, че би бил добър кандидат за нов продукт. През 2007 г. Netflix обяви конкурс от 1 милион долара и промени схемата на препоръчителната система. Той привлече хора от много произход да участват в състезанието. Появиха се нови алгоритми заедно с нови математически формули. Между другото библиотеката с изненади, която ще използвам, за да направя шега препоръчителна система, е напълно разработена, като следи изследователската книга, публикувана от екипа победител в наградата Netflix. Докато чакаме с нетърпение, все още има много неща, които не знаем. Проблемът с временната препоръка. Как да насоча моите препоръки не само към неща, като сезон, над който хората са работили известно време, но и за последователност, какво консумирате след това, като сте консумирали това вече. Препоръка за образование, която е една от областите, беше много времеви въпроси.

Широко разделение на препоръчителната система:

Съществуват основно две категории препоръчителни системи. 1. Съвместно филтриране 2. Съдържателно филтриране

Съвместно филтриране: Ключът към съвместното филтриране се основава на предположението, че хората, които са се съгласили в миналото, ще се съгласят в бъдеще и че ще харесват подобни видове предмети, каквито са харесвали в миналото. Трите основни категории съвместно филтриране са: 1. Сходство между потребителя и потребителя 2. Сходство на предмета сходство 3. На базата на модел

Сходство между потребител и потребител и артикул

Съдържателно филтриране: Съдържателните методи за филтриране се основават на описание на елемента и профил на предпочитанията на потребителя. Тези методи са най-подходящи за ситуации, при които са известни данни за даден артикул (име, местоположение, описание и т.н.), но не и за потребителя.

Препоръка на базата на съвместни спрямо съдържанието

предпоставка

1.Basic Python 2.Basic pandas 3.Eagerness to explore изненада библиотека 4. Keras (незадължително)

Ако искате да прескочите директно към кодовете, моля, отидете на тази връзка github и намерете тетрадката за юпитер.

Ще обясня всички основни стъпки, които съм следвал, докато решавам проблема, но силно вярвам, ако се интересувате от пълно обяснение на проблема и се интересувате да знаете за използването на библиотека изненада, тогава трябва да погледнете git repo, след като преминете през блог.

Нека да започнем. Основна информация за данните, които ще използваме.

Описание на данните

Сега ще направя план за подход към разглеждания проблем и бавно ще премина към решение. Ще преминем през всяка стъпка с кодови фрагменти. 1. Събиране на данни 2. Разделяне на тест за влак 3. Проста статистика 4. Структуриране на данни към съвместим формат на библиотеката с изненади 5. Определяне на показател за грешка 6. Използване на базовия модел 7. Опитайте различни модели 8. Резултат

Събиране на данни

  1. Има 3 ексклузивни листа, предоставени в данните. Ние ще ги обединим заедно и ще формираме комбинирана питонна панда данниFrame. Имаме общо 73421 потребители.
Обединяване на всички данни

2. Както е описано в информацията за набора от данни, оценките 99 означават, че потребителят не е оценил тази шега. Ще премахнем тези записи и ще подготвим данни във формат ['user_id', 'joke_id', 'rating'].

Подготовка на данни

Тест за влак сплит

Ще използваме scikit-learn train_test_split и ще разделим данните като 70–30. 70% данни ще бъдат налични за влак и 30% за тест

Основна статистика

1. Средна оценка на потребител и на шега

разпределение на рейтинг на всички потребителиразпределение на рейтинг на всички вицове

Структуриране на данни в съвместим формат на библиотека с изненади

Ще структурираме данните според библиотеката на изненадите. Той приема данните във формат като ['потребител', 'шега', 'рейтинг']. Ако имахме проблем с препоръката за филм, ние щяхме да структурираме данните като ['потребител', 'филм', 'рейтинг'].

подгответе данни в изненадващ библиотечен стил

Определяне на показател за грешка

ще използваме нормализираната средна абсолютна грешка като показател за грешка.

Формула за нормализирана средна абсолютна грешка (NAME)код за изчисляване на NMAE

Използване на базовия модел

Ще създадем модел на базова линия, използвайки модела Baseline, даден от библиотеката с изненади. Базовият модел дава 0.2033 NMAE, Ще изпробваме различни модели на изненада и ще комбинираме всички резултати, за да постигнем по-добри резултати.

Опитайте различни модели

  1. Основен модел на KNN: Той използва базирана на сходство техника, за да прогнозира рейтинга на потребителите за нови шеги. В нашия случай грешката в NMAE е 0,196

2. XGBoost на userAverageRating, jokeAverageRating, изход на Baseline и изход на KNN Baseline: Комбинирахме целия изход от предишния модел на изненада и пуснахме XGB регресионен модел върху данните след хипер параметриране. Тук получаваме малко по-добър резултат от 0,1928 NMAE

3. SVD модел: SVD моделът използва техники за матрично факториране, за да реши проблема с попълването на матрицата и прогнозира оценката.

4. XGBoost на потребителAverageRating, jokeAverageRating, изход на Baseline, изход на KNN Baseline и изход на SVD модел. Този модел дава 0.18 NMAE и е най-добрият до момента.

5. Модел с конструкторски характеристики: Имам две лесни функции, за да проверя ефекта им върху модела. Една от характеристиките е user_average + joke_avg-global_avg. Този модел дава както обикновено NMAE като 20.2. Бях пробвал и други техники за игрални функции. Те също не се справиха добре.

6. Моделите на Depp Learning с помощта на кераси: Тъй като характеристиката на техниката не работи добре, планирам да изпробвам някои прости модели на невронни мрежи, използващи кераси. Опитах 3 различни модела. Една с всички основни функции като средната стойност на потребителя, средната шега - втора и третата с всички функции, но с различни архитектури. Един модел имаше 14,9% NMAE.

Резултати

Както можем да видим, моделът Second_NN работи най-добре, тъй като има най-ниската грешка в теста.

Заключителни мисли

Както всички знаем, че никой модел не е перфектен. В този модел има и винаги ще има възможност за подобрение. Може да се опита различна техника на техниката, някои експертни съвети за домейни и различни архитектури на невронни мрежи могат да доведат до по-добри модели.

Като втора забележка мога да кажа, че системите за препоръки нарастват сега с дни. Изненадата библиотека прави живота на разработчиците много по-лесен, като дава на всички известни модели реализация. За създаването на основна система препоръки е наистина полезно. Мисля, че изпълних целта си да напиша този блог и накарах разработчиците да знаят за библиотеката на изненадите с малко кодиране. Целият код е достъпен тук в git.