Наиболее эффективная мера сходства для элементов списка

Мы пытаемся найти сходство между элементами (и более поздними пользователями), где элементы ранжируются пользователями в различных списках (вспомните Роба, Барри и Дика в Высокая точность). Более низкий индекс в данном списке подразумевает более высокий рейтинг.

Я полагаю, что стандартным подходом было бы использование корреляции Пирсона, а затем каким-то образом инвертировать индексы.

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

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

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

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


person Tom Martin    schedule 17.10.2012    source источник


Ответы (2)


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

Используя ваш пример (Rob, Barry, Dick) с их рейтингом (3,2,1) соответственно, вы вставляете Rob 3 раза в сумку этого пользователя a.

Rob, Rob, Rob.

Затем для Barry вы делаете это дважды. Текущая сумка выглядит следующим образом:

Rob, Rob, Rob, Barry, Barry.

Наконец-то ты положил Dick в сумку.

Rob, Rob, Rob, Barry, Barry, Dick

Предположим, что у другого пользователя b есть сумка [Dick, Dick, Barry], вы вычисляете сходство Жаккара, как показано ниже:

  • Перекресток между a и b = [Dick, Barry]
  • Союз a и b = [Rob, Rob, Rob, Barry, Barry, Dick, Dick]
  • Сходство Жаккара = 2/7,

то есть количество элементов в пересечении, деленное на количество элементов в объединении.

Эта мера сходства НЕ не влияет на ранжирование, которое сильно отличается друг от друга. Ты это видишь:

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

person greeness    schedule 30.10.2012

Самый известный показатель сходства, основанный только на ранжировании, — это корреляция Спирмена. Он просто присваивает «1» первому элементу, «2» — второму и т. д. и вычисляет коэффициент корреляции (Пирсона). (Вы также можете сделать значения убывающими, что более интуитивно понятно — не будет иметь значения для корреляции Пирсона.)

В проекте реализована корреляция Спирмена, но при этом я не считаю ее очень полезной.

Тау-ранг – более принципиальная мера того, насколько совпадают ранжированные списки, но она не реализована. Это было бы нетрудно.

person Sean Owen    schedule 30.10.2012
comment
Я заинтригован рангом Тау. Это кажется идеальным, но я обеспокоен его сложностью. Поскольку вам нужно сравнить все возможные пары элементов, для каждой пары пользователей нужно выполнить гораздо больше работы. Возможно, это пострадает в более плотных наборах данных? - person Tom Martin; 30.10.2012
comment
Рассмотрение только элементов в верхних рейтингах каждого пользователя или случайная выборка небольшого количества пар должны быстро дать разумное приближение. У меня нет практического опыта работы с этой метрикой, здесь только мои предположения. - person Sean Owen; 31.10.2012