RS в действии-два — использование данных о поведении пользователей
Кажется, что вторая глава должна стать основным содержанием всей книги, объясняя, как использовать данные о поведении пользователей, «слушая то, что они говорят, и наблюдая, что они делают». Он фокусируется на двух алгоритмах:
- Пользовательский алгоритм совместной фильтрации
UserIF
- Алгоритм совместной фильтрации на основе элементов
ItemIF
Раньше я читал некоторые блоги, которые были очень запутанными, на этот раз я прочитал книгу г-на Сян Ляна, по крайней мере, я знаю теоретическую разницу между двумя алгоритмами, которая все еще очень полезна.
Данные о поведении пользователей
Майнинг пользовательских данных
Мы можем понять интересы и потребности пользователей через слова и поведение, оставленные пользователями.
Поведение пользователей не случайно, а содержит множество шаблонов.Необходимо автоматически обнаруживать данные о поведении пользователей с помощью алгоритмов, делать выводы об интересах пользователей на основе поведения пользователей и рекомендовать пользователям интересующие их элементы.
пиво и подгузники
Сотрудники супермаркета обнаружили, что многие люди покупают пиво и подгузники одновременно, они думают, что женщины хотят заботиться о своих детях дома, поэтому просят своих мужей купить подгузники, и в то же время муж не забывает купи себе пива.
Поэтому сотрудники супермаркета соединили пиво и подгузники. В результате продажи этих двух не связанных друг с другом вещей выросли.
История с пивом и подгузниками усиливается в Интернете: например, при анализе покупательских тележек пользователей можно найти такие вещи, как «пользователи, купившие товар А, также купили товар Б».
Данные о поведении пользователей
Данные существуют на сайте в виде логов. Журналы сеансов обычно хранятся в распределенных хранилищах данных, таких как Hadoop Hive для офлайн-анализа и Google Dremel для онлайн-анализа. Два варианта поведения пользователя:
- Явное поведение обратной связи Явная обратная связь: может отражать явное поведение предпочтения пользователя для элемента.
- Невидимая обратная связь Неявная обратная связь: поведение, которое не может четко отражать пользовательские предпочтения, например наиболее репрезентативныеповедение при просмотре страниц
По четкости обратной связи данные о поведении пользователя делятся на явную обратную связь и неявную обратную связь, а по направлению обратной связи — на положительную и отрицательную обратную связь.
Положительный отзыв: Пользователю нравится товар; Отрицательный отзыв: Пользователю не нравится товар.
Явная обратная связь может четко различать положительную и отрицательную обратную связь, но трудно различить неявную обратную связь.
Конкретный пример:
6 индикаторов поведения пользователей
- пользователь, сгенерировавший поведение
- объект поведения
- вид поведения
- контекст, в котором происходит поведение
- содержание поведения
- Веса
репрезентативный набор данных
Разные наборы данных отражают разное поведение пользователей.
тип | Запись данных | Репрезентативные данные |
---|---|---|
без контекста + неявный | Идентификатор пользователя, идентификатор элемента | |
контекстно-свободный + явный | Идентификатор пользователя, идентификатор элемента, рейтинг пользователя для элемента | |
контекстный + неявный | Идентификатор пользователя, идентификатор элемента, отметка времени действия пользователя над элементом | Lastfm |
контекстный + явный | Идентификатор пользователя, идентификатор элемента, пользовательский рейтинг элемента, временная метка поведения | Netflix Prize |
Анализ поведения пользователей
Закон Ципфа (Закон Ципфа)
Зифф, лингвист из Гарвардского университета, изучал английские слова и обнаружил, что:
Если частота слов отсортирована от высокого к низкому, частота каждого слова обратно пропорциональна постоянной силе его рейтинга в таблице лидеров людей.
Большинство слов в английском языке имеют очень низкую частотность слов, и часто используются только несколько слов.
Распределение с длинным хвостом
Многие распределения данных в Интернете удовлетворяют своего родаPower Law
распространение, также известное какРаспределение с длинным хвостом:
Распределения с длинными хвостами относятся к распределениям с длинными хвостами, и закон Ципфа согласуется с распределениями с длинными хвостами..
Данные о поведении пользователей также удовлетворяют приведенному выше закону Ципфа:
в,Указывает количество пользователей, которые действовали над k элементамиUsers
;Указывает количество элементов, которые были обработаны k пользователями.Items
Популярность товара: общее количество пользователей, воспользовавшихся товаром.
Активность пользователя: общее количество элементов поведения, сгенерированных пользователем.
Кривая распределения популярности товара:
Кривая распределения активности пользователей:
Алгоритм совместной фильтрации
Связь между активностью пользователя и популярностью товара:
Новые пользователи не знакомы с веб-сайтом и, как правило, просматривают популярные элементы; старые пользователи постепенно начинают просматривать непопулярные элементы.
Алгоритм рекомендаций, основанный на анализе поведения пользователей, является важным алгоритмом системы персонализированных рекомендаций, который в академических кругах называют:Алгоритм совместной фильтрации.
Совместная фильтрация: пользователи работают вместе, чтобы постоянно взаимодействовать с веб-сайтом, поэтому их список рекомендаций может постоянно отфильтровывать элементы, которые им не интересны, чтобы все больше и больше удовлетворять их потребности.
Различные исследования алгоритмов совместной фильтрации:
- Метод соседства NB,
neighborhood-based
(самый распространенный) - латентная семантическая модель LFM,
latent factor model
- Алгоритм случайного блуждания на основе графа,
random walk on graph
Методы соседстваОн содержит два наиболее известных и широко используемых алгоритма:
- на основе пользователяАлгоритм совместной фильтрации UserIF: рекомендует пользователямТовары, которые понравились пользователям со схожими интересами
- предмет на основеАлгоритм совместной фильтрации ItemIF: рекомендуем пользователямПредметы, похожие на его предыдущие фавориты
Оценка алгоритма
3 способа
3 способа оценить рекомендательные системы
- Офлайн-эксперимент
- опрос пользователей
- онлайн-эксперимент
набор данных
Используемый случайMovieLens
Набор данных представляет собой рейтинговый набор данных, в котором пользователи могут оценивать фильмы по 5 различным шкалам (от 1 до 5).
Книга посвящена проблеме рекомендации TopN в наборе данных неявной обратной связи:
Проблема рекомендации TopN: предсказать, будет ли пользователь оценивать фильм, вместо того, чтобы предсказывать, сколько баллов пользователь даст фильму, если он готов оценить фильм.
экспериментальная конструкция
Этапы проектирования для офлайн-экспериментов:
- Разделите набор данных о поведении пользователя на M частей в соответствии с равномерным случайным распределением, выберите одну часть в качестве тестового набора, а оставшиеся части M-1 в качестве обучающего набора.
- Построить модель интересов пользователя на обучающем наборе
- На тестовом наборе прогнозируется пользовательская модель и рассчитываются соответствующие показатели оценки.
Чтобы предотвратить переобучение результатов, требуется M испытаний, и каждый раз, когда используется другой набор тестов, среднее значение M испытаний используется в качестве окончательного показателя оценки, а набор данных делится на обучающий набор и тест. установить с помощью Python:
def SplitData(data, M, k, seed):
test = []
train = []
random.seed(seed) # 相同的随机种子
for user, item in data:
if random.randint(0,M) == k: # 每次实验选取不同的k
test.append([user,item])
else:
train.append([user,item])
return train, test
Показатели оценки
Рекомендовать пользователю u N элементов, обозначаемых как R(u), пусть набор элементов, которые нравятся пользователю u в тестовом наборе, равен T(u), успешно召回率
и准确率
Чтобы оценить точность алгоритма:
- Расчет скорости отзыва:
Отзыв описывает, какая доля записей рейтинга пользовательских элементов включена в окончательный список рекомендаций.
- Расчет точности:
Точность описываетКакой процент списка рекомендаций приходится на рейтинговые записи пользовательских элементов
# 召回率和准确率的计算
# 召回率
def Recall(train, test, N):
hit = 0
all = 0
for user in train.keys():
tu = test[user]
rank = GetRecommendation(user, N)
for item, pui in rank:
if item in tu:
hit += 1
all += len(tu)
return hit / (all * 1.0)
# 准确率
def Precision(train, test, N):
hit = 0
all = 0
for user in train.keys():
tu = test[user]
rank = GetRecommendation(user, N)
for item, pui in rank:
if item in tu:
hit += 1
all += N
return hit / (all * 1.0)
покрытие
Коэффициент охвата отражает способность алгоритма рекомендаций обнаруживать элементы с длинным хвостом. Чем выше коэффициент охвата, тем лучше алгоритм рекомендаций может рекомендовать пользователям элементы из длинного хвоста.Расчет покрытия
Покрытие указывает, какая часть элементов включена в окончательный список рекомендаций.
Покрытие составляет 100 %, если все товары рекомендованы хотя бы одному пользователю.
def Coverage(train, test, N):
recommend_items = set()
all_items = set()
for user in train.keys():
for item in train[user].keys():
all_items.add(item)
rank = GetRecommendation(user, N)
for item, pui in rank:
recommend_items.add(item)
return len(recommend_items) / (len(all_items) * 1.0)
новизна
Новизна результатов рекомендаций измеряется средней популярностью всех элементов в списке рекомендаций. Если все товары популярны, это означает, что рекомендуемая новизна низкая, в противном случае эффект рекомендации очень хороший.
def Popularity(train, test, N):
item_popularity = dict()
for user, items in train.items():
for item in items.keys():
if item not in item_popularity:
item_popularity[item] = 0
item_popularity[item] += 1
ret = 0
n=0
for user in train.keys():
rank = GetRecommendation(user, N)
for item, pui in rank:
ret += math.log(1 + item_popularity[item])
n += 1
ret /= n * 1.0
return ret
использованная литература
- Сян Лян - «Практика системы рекомендаций»
- использованная литература