Введение

Некоторое время назад, когда мы покупали конкретный продукт, его, вероятно, рекомендовали наши друзья или доверенные лица. Но теперь сценарий изменился, и какие рекомендации по продуктам на Amazon или рекомендации фильмов на Netflix мы получаем, что в основном отвечает нашим интересам. Анализируя текущее использование сайта клиентом и его предыдущую историю просмотров, система рекомендаций изучает поведение клиента и его интересы. На основе этой информации он может предоставить рекомендации по релевантным продуктам. Данные собираются в режиме реального времени, поэтому при изменении интереса клиента наша модель рекомендаций также обновляется вместе с данными, и рекомендации для клиента также меняются.

Естественно, что для каждого покупателя вполне реально получить рекомендации по продукту, основанные на его интересах. Потому что это займет меньше времени, чтобы разобраться с несколькими вариантами и купить лучший. Механизм рекомендаций - это наиболее широко используемое приложение машинного обучения, которое способствует повышению производительности компании и росту маркетинга.

Вот несколько преимуществ системы рекомендаций для вашего бизнеса:

  • Привлекайте посещаемость на свой веб-сайт.
  • Предоставлять клиентам релевантный контент.
  • Обеспечьте удовлетворенность клиентов.
  • Получайте доход.
  • Сократите рабочую нагрузку и накладные расходы на персонал и бюджет.

В этой статье мы рассмотрим различные типы алгоритмов механизма рекомендаций и основы их разработки на Python. Мы увидим различные типы систем рекомендаций. Мы создадим нашу собственную систему рекомендаций по фильмам, используя различные подходы и порекомендуя некоторые значимые варианты.

Содержание

  1. Что такое система рекомендаций?
  2. Контентная фильтрация
  3. Совместная фильтрация
  4. Гибридная система рекомендаций
  5. Факторизация матрицы
  6. Модель двигателя рекомендаций
  7. Наблюдения
  8. Вывод

Давайте разберемся в силе рекомендательного механизма,

1. Что такое система рекомендаций?

Механизм рекомендаций используется для предоставления рекомендаций по продуктам, которые клиенты могут пожелать приобрести, на основе поведения, интересов, истории просмотров и сходства с другим вероятным клиентом.

Сначала механизм рекомендаций собирает данные от клиента в форме рейтингов, комментариев, затем сохраняет данные в стандартной базе данных, а затем фильтрует данные для извлечения релевантной значимой информации, необходимой для прогнозирования окончательных рекомендаций.

Существуют разные типы рекомендательных систем, давайте рассмотрим их по порядку.

2. Контентная фильтрация

Контентная фильтрация основана на описании продукта или ключевых словах, используемых для уточнения информации о продукте. Этот метод фильтрации изучает предпочтительные варианты выбора пользователя, а затем предоставляет наиболее актуальные рекомендации. Учтите, что если вам нравится продукт из категории «А», то вы можете получить большинство рекомендаций по продуктам, относящимся только к категории «А». Когда пользователь обычно смотрит романтический фильм, считается, что ему больше всего нравятся романтические фильмы, только тогда система рекомендаций также предложит пользователю самые популярные романтические фильмы.

В основном есть два вектора, то есть вектор профиля, который содержит прошлое поведение пользователя и вектор элемента, который содержит детали каждого фильма, такие как жанр, обзор и т. Д.

Теперь, чтобы предоставить наиболее релевантные рекомендации, метод фильтрации на основе содержимого находит косинус угла между вектором профиля и вектором элемента, известный как косинусное подобие.

Предположим, что A = вектор профиля и B = вектор элемента, тогда сходство между ними можно рассчитать как:

На основе значений косинусного сходства, которые варьируются от -1 до 1, фильмы располагаются в порядке убывания и предоставляют пользователю самые лучшие рекомендации. Главный недостаток этого метода в том, что он рекомендует фильмы только одного жанра. Если нам нужны рекомендации из другого жанра фильма, он может не работать.

3. Совместная фильтрация

В основном методы совместной фильтрации связаны с предпочтениями, действиями и поведением пользователей. Они дают рекомендации пользователю на основе сходства с другими вероятными пользователями. Для методов совместной фильтрации нам не нужна дополнительная информация, она нужна только для сбора и анализа поведения пользователей.

Кроме того, существует несколько типов алгоритмов совместной фильтрации:

Совместная фильтрация пользователей и пользователей

Как следует из названия, этот метод совместной работы определяет сходство между пользователями. На основе оценки сходства он выявляет похожих пользователей, а затем рекомендует им продукты, которые они покупали ранее.

Пользователи с более высокой корреляцией будут похожи. Давайте разберемся с этим на примере: представьте, что пользователь1 смотрел фильм1, фильм2, фильм3 и пользователь2 смотрел фильм1, фильм3, фильм4, поэтому, основываясь на сходстве с пользователем1, пользователь2 получает рекомендации смотреть фильм2, а пользователь1 получает рекомендации смотреть фильм4.

Чтобы вычислить сходство для каждого пользователя и прогноз для каждой оценки сходства, требуется много времени на вычисление. когда количество пользователей меньше, то только этот метод может дать рекомендации.

Совместная фильтрация предметов и предметов

Этот метод почти аналогичен методике совместной работы пользователя и пользователя, вместо того, чтобы находить сходства между пользователями, мы находим оценку сходства между элементами.

Итак, в нашем примере с фильмом мы находим сходство между фильмами, а затем рекомендуем их, исходя из интересов и поведения пользователя. Предположим, что movie1 и movie3 имеют лучший показатель сходства, и пользователь смотрел movie3, тогда пользователю определенно будет рекомендовано movie1.

Когда появляется новый пользователь, трудно рекомендовать продукты, потому что у него нет истории просмотров, поэтому мы предлагаем самые популярные продукты, определенные в целом в наборе данных. Когда вводится новый продукт, мы должны ждать действий пользователя, и только тогда мы можем давать рекомендации.

4. Гибридная система рекомендаций

Гибридная система рекомендаций представляет собой комбинацию рекомендаций, основанных на сотрудничестве и содержании. Эта система может быть реализована путем раздельного прогнозирования на основе контента и на основе совместной работы с последующим их объединением и наоборот.

5. Факторизация матрицы

В матрице пользовательских элементов есть два измерения:

  1. Количество пользователей
  2. Количество предметов

Если матрица пользовательских элементов пуста, мы можем улучшить производительность алгоритма, уменьшив размеры матрицы. Для этого можно использовать факторизацию матрицы.

С математической точки зрения факторизация просто известна как разбиение большого числа на произведение его кратных (множителей), например 120 = 12 * 10.

Здесь мы разбиваем матрицу пользовательских элементов на продукт двух небольших матриц, то есть пользовательскую матрицу и матрицу элементов. Если матрица «Пользователь-элемент» имеет размерность a x b, то ее можно уменьшить до произведения двух матриц с размерами a x k и k x m соответственно.

Где k - это набор скрытых функций, которые могут определять, как пользователь оценивает продукты.

Читайте подробнее о факторизации матриц.

Достаточно теории, теперь переходим к части реализации,

6. Модель двигателя рекомендаций

Давайте создадим модель механизма рекомендаций, сначала импортируя все необходимые зависимости в ваш редактор кода,

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
import ast 
from scipy import stats
from ast import literal_eval
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.metrics.pairwise import linear_kernel,cosine_similarity
%matplotlib inline

Теперь, после импорта зависимостей, мы должны импортировать набор данных. Я использую наборы данных MovieLens для построения модели механизма рекомендаций. Вы получите необходимый набор данных здесь.

movies_df = pd.read_csv('movies_metadata.csv')
ratings = pd.read_csv('ratings_small.csv')
movies_df.columns

Теперь вы видите, что у нас есть множество столбцов, которые не нужны для прогнозов. Так что нам будет лучше удалить их из фрейма данных movies_df.

movies_df = movies_df.drop(['belongs_to_collection', 'budget', 'homepage', 'original_language', 'release_date', 'revenue', 'runtime', 'spoken_languages', 'status', 'video', 'poster_path', 'production_companies', 'production_countries'], axis = 1)
movies_df.head()

Здесь вы можете проверить, что все ненужные столбцы удалены, и мы получили фрейм данных, содержащий только необходимые столбцы.

Поскольку столбец «жанры» во фрейме данных содержит словарь с идентификатором и именем ключей, мы должны извлечь имя, которое является жанром фильма, из словаря и отделить столбец только со значениями имени.

movies_df['genres'] = movies_df['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list) else [])
movies_df['genres'].head()

Вы можете увидеть результат выше. Теперь у нас есть измененные данные, и мы можем давать рекомендации.

Подход 1. По средневзвешенному значению

  • Все, что нам нужно сделать, это отсортировать наши фильмы на основе vote_count и vote_average и отобразить лучшие фильмы в нашем списке.

#vote_count
V = movies_df[movies_df['vote_count'].notnull()]['vote_count'].astype('float')
#vote_average
R = movies_df[movies_df['vote_average'].notnull()]['vote_average'].astype('float')
#vote_average_mean
C = R.mean()
#minimum votes required to get in list
M = V.quantile(0.95)
  • Здесь мы определяем соответствующее значение для M, минимального процента голосов_счетов, необходимого для масштабирования этого фильма в рейтинге weighted_average.
  • Мы используем 95-й процентиль в качестве порогового значения. Другими словами, чтобы фильм попал в рейтинг по шкале, он должен набрать больше голосов, чем не менее 95% фильмов в списке.
df = pd.DataFrame()
df = movies_df[(md['vote_count'] >= m) & (movies_df['vote_average'].notnull())][['title','vote_count','vote_average','popularity','genres','overview']]

Ранее мы определили значение M, поэтому теперь мы берем только те фильмы, у которых значение «vote_count» больше, чем требуется для их масштабирования.

Теперь все готово для расчета средневзвешенного_среднего

df['Weighted_average'] = ((R*V) + (C*M))/(V+M)
recm_movies = df.sort_values('Weighted_average', ascending=False).head(500)
recm_movies.head()

Мы рассчитали Weighted_average для каждого фильма, и после сортировки кадра данных df по Weighted_average значениям в порядке убывания мы сохраняем 500 самых популярных фильмов, чьи значения weighted_average являются самыми высокими в recm_movies фрейм данных.

Исходя из результатов, The Shawshank Redemption имеет наивысшее взвешенное_среднее и так далее… используя визуализацию, мы получим значимые идеи.

Здесь вы получаете самые лучшие рекомендации по фильму, основанные на weighted_average, рассчитанном из голосов_count и vote_average.

Подход 2: по популярности и жанру

Надеюсь, вы получили подход 1 от weighted_average, теперь мы рассмотрим подход 2 по популярности и жанру.

Здесь мы определили фрейм данных популярные, который содержит фильмы, масштабируемые от высокой до низкой.

popular = pd.DataFrame()
popular = recm_movies.copy()
popular['popularity'] = recm_movies[recm_movies['popularity'].notnull()]['popularity'].astype('float')
popular = popular.sort_values('popularity',ascending = False)
popular.head()

Мы получили результат, показывающий, что фильм Чудо-женщина пользуется наибольшей популярностью и так далее. Давайте визуализируем это,

Теперь вы можете лучше анализировать его, и пользователи также получают рекомендации из этих популярных фильмов.

Если вы хотите получить рекомендации по фильму определенного жанра, отсортированные по среднему_взвешенному от к самому низкому.

Сначала вы знаете, что столбец жанры в наборе данных содержит список из нескольких значений, поэтому нам нужно выделить только одно значение жанра в строке.

s = df.apply(lambda x: pd.Series(x['genres']),axis=1).stack().reset_index(level=1, drop=True)
s.name = 'genre'
gen_movies = recm_movies.drop('genres', axis=1).join(s)
gen_movies.head(10)
#gen_movies.columns

Просматривая результат в столбце жанр, вы получите представление о функции, которую мы выполнили выше, чтобы получить одно значение в столбце жанра.

Давайте посмотрим на наш метод в действии, просмотрев 10 лучших боевиков

df_w = gen_movies[ (gen_movies['genre'] == 'Action') & (gen_movies['vote_count'] >= m)]
df_w.sort_values('Weighted_average', ascending = False).head(10)

Мы получаем рекомендации из 10 лучших боевиков, как показано выше. Давайте визуализируем результаты.

df_w = df_w.sort_values('Weighted_average', ascending = False)
plt.figure(figsize=(12,6))
axis1=sns.barplot(x=df_w['Weighted_average'].head(10), y=df_w['title'].head(10), data=df_w)
plt.xlim(4, 10)
plt.title('Best Action Movies by weighted average', weight='bold')
plt.xlabel('Weighted Average Score', weight='bold')
plt.ylabel('Action Movie Title', weight='bold')

Здесь мы получаем 10 лучших рекомендаций по боевикам на основе оценки Weighted_average. Теперь вы также можете попробовать и получить рекомендации фильмов в жанрах драма, мелодрама, криминал и т. Д.

Подход 3. Путем контентной фильтрации

Давайте сначала попробуем создать механизм рекомендаций, используя обзор фильма.

Теперь, когда мы хотим создать механизм рекомендаций, для каждого фильма мы должны создать вектор матрицы. Причина создания вектора заключается в том, что наш механизм рекомендаций зависит от попарного сходства. Чтобы создать это сходство, мы должны разработать векторы для каждого фильма.

Теперь в столбце Обзор в наборе данных есть предложения, то есть набор строк. поэтому нам нужно разработать векторизатор TF-IDF , который используется для создания матрицы документа из этих предложений.

cont_recm = recm_movies.copy()
cont_recm.head()
from sklearn.feature_extraction.text import TfidfVectorizer
tfv = TfidfVectorizer(min_df=3, max_features=None, strip_accents='unicode', analyzer='word',token_pattern=r'\w{1,}',
            ngram_range=(1, 3), stop_words = 'english')
cont_recm['overview'] = cont_recm['overview'].fillna('')

Векторизатор TF-IDF не преобразует исходные данные напрямую в полезные функции. Во-первых, преобразование строк в векторы, и каждое слово имеет свой вектор. Затем мы воспользуемся техникой извлечения такой функции, как «Косинусное сходство», которая работает с векторной матрицей. Как мы понимаем, мы не можем напрямую передать строку в нашу модель рекомендаций. Итак, векторизатор TF-IDF предоставляет нам числовые значения всего столбца обзора.

# Fitting the TF-IDF on the 'overview' text
tfv_matrix = tfv.fit_transform(cont_recm['overview'])
#Finding Cosine_similarity
cos_sim = linear_kernel(tfv_matrix, tfv_matrix)
cont_recm = cont_recm.reset_index()
indices = pd.Series(cont_recm.index, index=cont_recm['title'])
indices.head(20)

Поскольку мы использовали векторизатор TF-IDF, который вычисляет скалярное произведение, мы напрямую получаем показатель косинусного сходства.

У нас есть матрица попарного косинусного сходства для всех фильмов в нашем наборе данных.

Теперь мы пишем функцию, которая возвращает 10 наиболее похожих фильмов на основе оценки cos_sim.

def sugg_recm(title):
    # Get the index corresponding to original_title
    idx = indices[title]    
    # Get the pairwsie similarity scores 
    sim_scores = list(enumerate(cosine_sim[idx]))
    # Sort the movies 
    sim_scores = sorted(sim_scores, key=lambda x: x[1],reverse=True)
    
    sim_scores = sim_scores[1:11]
    movie_indices = [i[0] for i in sim_scores]
    return titles.iloc[movie_indices]

Теперь вызываем функцию с названием фильма,

sugg_recm('Star Wars').head(10)

Да, мы получили лучшие рекомендации по фильму на основе cos_sim оценки, относящейся к фильму Звездные войны. Давайте поищем другой фильм.

sugg_recm('Dilwale Dulhania Le Jayenge').head(10)

Отлично, мы выполнили поставленную задачу. Когда вы реализуете его в своем редакторе кода, вы также можете проверить механизм рекомендаций, взяв один или несколько примеров и проверив результаты. Эти рекомендации по фильмам полностью основаны на оценке косинусного сходства фильмов, как обсуждалось в предыдущей части.

7. Наблюдения

  • Из подхода 1 мы получили, что фильм Шоушенка Redemption имеет наивысший взвешенный_средний балл.
  • Из подхода 2 мы получили, что фильм Чудо Женщина является самым популярным среди всех фильмов в наборе данных. Когда новый пользователь будет представлен в наборе данных, тогда, конечно, этот фильм будет рекомендован ему, так как вначале у него не будет истории просмотров.
  • На основе подхода 2 мы также получили рекомендации по фильмам для определенного жанра, основанные на масштабировании фильмов в соответствии с оценкой Weighted_average от самого высокого до самого низкого.
  • Из подхода 3 мы получили рекомендации, основанные на контентной фильтрации с использованием векторизатора TF-IDF и косинусного подобия.

8. Заключение

Механизм рекомендаций по продуктам в основном работает на данных. Данные представлены в виде оценок пользователей, комментариев, поведения, предпочтений и многого другого. Чтобы привлечь клиентов к вашему бизнесу, необходим механизм рекомендаций. Наряду с этим для получения дохода, удовлетворения потребностей клиентов, выявления новых тенденций в покупках, персонализации индивидуального интереса и более эффективного предоставления отчетов все эти цели достигаются с помощью механизма рекомендаций.

Это все, ребята !!

Увидимся в моем посте !!

Если вам нравится то, что вы читаете, и вы хотите нанять меня для индивидуальной беседы или работы на фрилансе, свяжитесь со мной, используя,

https://www.hiretheauthor.com/amey

или свяжитесь со мной по адресу [email protected]

Рад помочь вам.

Все файлы наборов данных и блокнот на Python доступны в моем репозитории Github.