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

С ростом количества покупок в Интернете возросла потребность в уверенности в покупке товаров. Именно поэтому создаются рекомендательные системы. Они используются для прогнозирования рейтинга или предпочтения, которое пользователь дал бы элементу. Почти каждая крупная технологическая компания применяет их в той или иной форме: 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)

Существует три типа фильтрации рекомендаций.

  1. Совместная фильтрация
  2. Контент-базовая фильтрация
  3. Гибридные рекомендательные системы

Мы используем 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 в моем основном я описываю дальнейшую реализацию Я не буду углубляться, потому что это сделало блог более трудоемким и долгим для вас



Мои рекомендации:



Если вам нравится мой блог, пожалуйста, следуйте