Компании электронной коммерции и розничной торговли используют возможности данных для увеличения продаж с помощью рекомендательных систем, внедренных на их веб-сайтах. Варианты использования этих систем постоянно увеличиваются. Не может быть лучшего времени, чем сейчас, чтобы глубже погрузиться в эту превосходную технику машинного обучения.
С ростом количества покупок в Интернете возросла потребность в уверенности в покупке товаров. Именно поэтому создаются рекомендательные системы. Они используются для прогнозирования рейтинга или предпочтения, которое пользователь дал бы элементу. Почти каждая крупная технологическая компания применяет их в той или иной форме: Amazon использует их, чтобы предлагать продукты клиентам, YouTube использует их, чтобы решить, какое видео воспроизводить следующим при автоматическом воспроизведении, а Facebook использует их, чтобы рекомендовать страницы, которым нужно нравиться, и людям, которым они нравятся. следовать. Более того, такие компании, как Netflix и Spotify, в значительной степени зависят от эффективности своих систем рекомендаций для своего бизнеса и успеха.
Давайте начнем Я использую Jupyter Notbook Вы можете использовать все, что хотите
Вы можете скачать набор данных здесь
Сначала импортируйте некоторую библиотеку
import pandas as pd import numpy as np df1=pd.read_csv('./data/tmdb_5000_credits.csv') df2=pd.read_csv('./data/tmdb_5000_movies.csv') #Join the two dataset on the 'id' column df1.columns = ['id','tittle','cast','crew'] df2= df2.merge(df1,on='id') #Just Peack at the data df2.head(5)
Мы используем формулу IMDB для получения рейтинга фильма.
Формула взвешенного рейтинга: -
(v % (v + m)) * R + (m % (v+m)) * C
Где
- V - количество голосов за фильм
- m - минимальное количество голосов, необходимое для включения в диаграмму.
- R — средний рейтинг фильма.
- C - среднее количество голосов по всему отчету.
#We already have v(vote_count) and R (vote_average) and C can be calculated as C = df2['vote_average'].mean() m = df2['vote_count'].quantile(0.9) # Now we can filter out the movies that qulify for the chart q_movies = df2.copy().loc[df2['vote_count'] >= m] def weighted_rating(x, m = m,C = C): v = x['vote_count'] R = x['vote_average'] #Calculation based on the IMDB formula return (v/(v+m) *R + (m/(m+v)) * C) q_movies['score'] = q_movies.apply(weighted_rating,axis=1)
Наконец, давайте отсортируем DataFrame на основе функции оценки и выведем название, количество голосов, среднее число голосов и взвешенный рейтинг или оценку 10 лучших фильмов.
q_movies = q_movies.sort_values('score',ascending=False)q_movies[['title','vote_count','vote_average','score']].head(10)
Существует три типа фильтрации рекомендаций.
- Совместная фильтрация
- Контент-базовая фильтрация
- Гибридные рекомендательные системы
Мы используем Content-Base (Collaborative и Hybrid для другого блога) Фильтрация, так что это значит
Методы фильтрации на основе содержания основаны на описании продукта и профиле предпочтительных вариантов выбора пользователя. В этой рекомендательной системе продукты описываются с помощью ключевых слов, а профиль пользователя создается для того, чтобы показать, какой товар нравится этому пользователю. Контентная фильтрация
Например, если пользователь любит смотреть такие фильмы, как «Железный человек», система рекомендаций рекомендует фильмы в жанре супергероев или фильмы, описывающие Тони Старка.
Основное предположение фильтрации на основе контента заключается в том, что вам понравится аналогичный элемент, если вам нравится конкретный элемент.
Рекомендатель на основе описания сюжета
Мы будем вычислять попарные оценки сходства для всех фильмов на основе их сюжетных описаний и рекомендовать фильмы на основе этой оценки сходства. Описание графика приведено в функции обзор нашего набора данных. Давайте посмотрим на данные.
df2['overview'].head(5) from sklearn.feature_extraction.text import TfidfVectorizer #Define a TF-IDF Vectorizer object. Remove all english stop words such as 'the','a' tfidf = TfidfVectorizer(stop_words='english') df2['overview'] = df2['overview'].fillna('') #Consturct the required TF-IDF matrix bt fitting and trasforming the data tfidf_matrix = tfidf.fit_transform(df2['overview']) #output The shape of tfidf_matrix tfidf_matrix.shape result (4803, 20978)
Мы видим, что для описания 4800 фильмов в нашем наборе данных использовалось более 20 000 различных слов.
для получения дополнительной информации вы можете обратиться к блокноту ниже
from sklearn.metrics.pairwise import linear_kernel cosine_sim = linear_kernel(tfidf_matrix,tfidf_matrix) indices = pd.Series(df2.index, index=df2['title']).drop_duplicates()
Теперь мы можем определить нашу рекомендательную функцию. Вот следующие шаги, которые мы будем выполнять:
- Получить индекс фильма по его названию.
- Получите список оценок косинусного сходства для этого конкретного фильма со всеми фильмами. Преобразуйте его в список кортежей, где первый элемент — это его позиция, а второй — оценка сходства.
- Отсортируйте вышеупомянутый список кортежей на основе оценок сходства; то есть второй элемент.
- Получите 10 лучших элементов этого списка. Игнорируйте первый элемент, так как он относится к себе (фильм, наиболее похожий на конкретный фильм, — это сам фильм).
- Вернуть заголовки, соответствующие индексам верхних элементов.
# Function that takes in movie title as input and outputs most similar movies def get_recommendations(title, cosine_sim=cosine_sim): # Get the index of the movie that matches the titleidx = indices[title] # Get the pairwsie similarity scores of all movies with that movie sim_scores = list(enumerate(cosine_sim[idx])) # Sort the movies based on the similarity scores sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) # Get the scores of the 10 most similar movies sim_scores = sim_scores[1:11] # Get the movie indices movie_indices = [i[0] for i in sim_scores] # Return the top 10 most similar movies return df2['title'].iloc[movie_indices]
Давайте запустим функцию
get_recommendations('Suicide Squad')
Выход:
3021 Invasion U.S.A. 4759 The Image Revolution 711 RED 3970 AWOL-72 609 Escape Plan 1706 Miracle 282 True Lies 3503 Lake of Fire 3203 Ultramarines: A Warhammer 40,000 Movie 417 Creepshow Name: title, dtype: object
Если вы хотите углубиться, вы можете сослаться на мой GitHub в моем основном я описываю дальнейшую реализацию Я не буду углубляться, потому что это сделало блог более трудоемким и долгим для вас
Мои рекомендации:
Если вам нравится мой блог, пожалуйста, следуйте