Практика системы рекомендаций-2-Использование данных о поведении пользователей

машинное обучение

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: предсказать, будет ли пользователь оценивать фильм, вместо того, чтобы предсказывать, сколько баллов пользователь даст фильму, если он готов оценить фильм.

экспериментальная конструкция

Этапы проектирования для офлайн-экспериментов:

  1. Разделите набор данных о поведении пользователя на M частей в соответствии с равномерным случайным распределением, выберите одну часть в качестве тестового набора, а оставшиеся части M-1 в качестве обучающего набора.
  2. Построить модель интересов пользователя на обучающем наборе
  3. На тестовом наборе прогнозируется пользовательская модель и рассчитываются соответствующие показатели оценки.

Чтобы предотвратить переобучение результатов, требуется 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

использованная литература

  1. Сян Лян - «Практика системы рекомендаций»
  2. использованная литература