Почему ALS.trainImplicit дает лучшие прогнозы для явных рейтингов?

Изменить: я попробовал отдельное приложение Spark (вместо PredictionIO), и мои наблюдения остались прежними. Так что это не проблема PredictionIO, но все же сбивает с толку.


Я использую PredictionIO 0.9.6 и шаблон Recommendation для совместной фильтрации. Рейтинги в моем наборе данных — это числа от 1 до 10. Когда я впервые обучил модель со значениями по умолчанию из шаблона (используя ALS.train), прогнозы были ужасными, по крайней мере, субъективно. Оценки варьировались до 60,0 или около того, но рекомендации казались совершенно случайными.

Кто-то предположил, что ALS.trainImplicit работает лучше, поэтому я соответственно изменил src/main/scala/ALSAlgorithm.scala:

val m = ALS.trainImplicit(  // instead of ALS.train
  ratings = mllibRatings,
  rank = ap.rank,
  iterations = ap.numIterations,
  lambda = ap.lambda,
  blocks = -1,
  alpha = 1.0,  // also added this line
  seed = seed)

Сейчас оценки намного ниже (ниже 1,0), но рекомендации соответствуют личным оценкам. Намного лучше, но тоже запутанно. PredictionIO определяет разницу между явным и неявным следующим образом:

явное предпочтение (также называемое «явной обратной связью»), такое как «рейтинг», присвоенный элементу пользователями. неявные предпочтения (также называемые «неявными отзывами»), такие как «просмотр» и «покупка» истории.

а также:

По умолчанию в шаблоне рекомендаций используется ALS.train(), что предполагает явные значения рейтинга, которые пользователь оценил элементу.

источник

Документация неверна? Я по-прежнему считаю, что явная обратная связь подходит для моего варианта использования. Может быть, мне нужно адаптировать шаблон с ALS.train, чтобы получить полезные рекомендации? Или я просто что-то не так понял?


comment
Откуда вы берете свои оценки? Рассчитываются ли они, или вы прямо просите пользователей ставить баллы от 1 до 10? Если это так, то вы действительно используете явную обратную связь.   -  person alex9311    schedule 27.06.2016
comment
@ alex9311 действительно, пользователи оценили элементы по шкале от 1 до 10. У меня несколько миллионов оценок.   -  person stholzm    schedule 27.06.2016


Ответы (1)


Многое зависит от того, как вы собрали данные. Часто рейтинги, которые кажутся явными, на самом деле могут быть неявными. Например, предположим, что вы даете пользователям возможность оценивать предметы, которые они приобрели/использовали ранее. Это означает, что сам факт того, что они потратили свое время на оценку этого конкретного предмета, означает, что предмет имеет высокое качество. Таким образом, предметы низкого качества вообще не оцениваются, потому что люди даже не удосуживаются их использовать. Таким образом, даже несмотря на то, что набор данных должен быть явным, вы можете получить лучшие результаты, потому что считаете результаты неявными. Опять же, это значительно варьируется в зависимости от того, как данные получены.

person Skylion    schedule 14.12.2016
comment
в реальной жизни у плохих продуктов больше отзывов, чем у хороших. Потому что с хорошим продуктом можно жить, а с плохим нельзя. - person Andrey Nikishaev; 04.05.2018