Подход на най-близкия съсед

Системата за препоръки е навсякъде. Amazon, Facebook, Youtube, Netflix и т.н. използват система за препоръки, за да препоръчват продукти на своите потребители. Тези системи за препоръки предоставят на потребителите приятно изживяване, тъй като помагат на потребителите да намерят продукти, които им подхождат най-добре. Нека научим как работят тези системи за препоръки.

Има три начина за препоръка:

  1. Препоръчване на подобни продукти, които потребителят може да хареса — Филтриране въз основа на съдържание — помага за създаването на персонализирана промоция за потребителя
  2. Препоръчване на продукти, харесани от други подобни потребители — Съвместно филтриране- помага за създаването на персонализирана промоция за потребителя
  3. Препоръчване на допълнителни продукти — Изучаване на правила за асоцииранеg — работи върху условна вероятност. (Намерете вероятността за закупуване на продукт при друг закупен продукт(и)) — помага за създаване на промоция на продукт

Съвместно филтриране:

„Наборът от данни MovieLens“.

Този набор от данни се състои от приблизително 20 милиона потребителски оценки, приложени към 27 000 филма от 138 000 потребители. В допълнение, филмите включват информация за жанр и дата. Ще използваме този набор от данни, за да изградим метода на най-близкия съсед в Collaborative filtering.

Съвместното филтриране препоръчва артикули въз основа на това, което подобни потребители харесват. В набора от данни MovieLens имаме информация за потребителските предпочитания под формата на филмови рейтинги: всеки потребител присвоява на един или повече филми цифрови рейтинги между 1 и 5, показващи колко им е харесал филмът. Сега нека препоръчаме филми на даден потребител, като имаме предвид оценките на потребителя за филми, които е гледал.

Първо, нека да разгледаме данните за рейтингите.

В рейтинговата таблица имаме потребител и неговата оценка за филм. С тази информация трябва да можем да препоръчаме филми на потребителя, които ще представляват интерес за него.

Сега нека премахнем всички филми, които са оценени с не повече от 50 потребители.

По същия начин нека премахнем всички потребители, които са оценили (гледали) филми на не повече от 20 потребители.

Нека създадем матрица за оценка на потребител-филм с помощта на обобщената таблица на Pandas

Следващата стъпка би била да имате функция, която изчислява приликата между двама потребители. Ще използваме разстоянието на Хеминг, за да изчислим разстоянието между потребителите. Разстоянието на Хеминг между 1-D масиви u и v е просто пропорцията на несъгласуваните компоненти в u и v >.

Нека напишем функция за намиране на 10 най-близки съседи за даден потребител, като се има предвид, че можем да намерим разстоянието между двама потребители.

След като открием подобни потребители, ще трябва да изчислим средните оценки на тези подобни оценки и да върнем най-високо оценените филми като препоръчани филми.

Това е всичко . Изградихме система за препоръки.

Нека да разгледаме топ три филма, които се препоръчват от тази система за произволен потребител (да речем потребителски идентификатор 875)

За да разберем дали тези препоръки наистина са най-добрите за потребителя, първо трябва да напишем функция, която да избере топ N любими филма за потребителя.

Нека разберем дали потребителят 875 има препоръчителните жанрове (комедия, драма, романтика) в списъка си с топ 10 любими.

да Комедия, драма, романтика наистина са любимите на потребителя 875 и следователно кодът за препоръки е избрал филми от тези жанрове за този потребител!!

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

Как да подобрим нашата система за препоръчване на филми, за да разрешим този недостатък? Матричната факторизация при съвместното филтриране и вграждането на невронни мрежи в съвместното филтриране са решенията. Нека разгледаме всеки един от тях в друг блог.