Совместная фильтрация Spark ML с неявной обратной связью со счетными данными

Я хочу запустить spark.ml.recommendation als на spark 2.1.0 с pyspark, используя данные о посещении веб-страницы. У меня есть данные википедии, содержащие идентификатор пользователя, идентификатор страницы и счетчики. Данные состоят из 100000 строк. Вот характеристики моих данных:

+-------+------------------+  
|summary|           user-id|
+-------+------------------+  
|  count|            100000|  
|   mean|       24542.75736|  
| stddev|21848.264794583836|  
|    min|                 0|  
|    max|             68488|
+-------+------------------+

+-------+------------------+
|summary|           page-id|
+-------+------------------+
|  count|            100000|
|   mean|         257.55426|
| stddev|265.56649346534084|
|    min|                 0|
|    max|              1317|
+-------+------------------+

+-------+------------------+
|summary|               cnt|
+-------+------------------+
|  count|            100000|
|   mean|          412.4471|
| stddev|4269.7557065972205|
|    min|              11.0|
|    max|          309268.0|
+-------+------------------+

Я разделил свои данные 80/20 для обучения и тестирования соответственно и попытался запустить als на своих данных, но результат оказался с NaN. Затем я нашел обходной путь и заставил его работать. После этого я попытался вычислить rmse по своим данным, результат был около 3000–4000 с некоторой комбинацией параметров.

Я прочитал несколько книг, статей и просмотрел несколько видеоуроков по этому поводу, но многие из них связаны с набором данных для кинообъективов, которые, как я вижу, основаны на рейтингах и не предлагают многого для моей проблемы. Я узнал, что мой случай называется неявная обратная связь и единственный пример, с которым я столкнулся с last.fm в книге. Однако я не мог получить от этого особую помощь.

Итак, мои вопросы:

1) Как обработать рекомендацию als по набору данных, в котором столбец рейтинга имеет гораздо более широкий диапазон, чем столбец в фильмах, который находится в диапазоне от 1 до 5?

Вот мой - от 11 до 309628.

2) Является ли rmse важным показателем в неявной обратной связи при принятии решения о правильности модели или нет?

3) Есть ли другие рекомендации по работе с такими данными при попытке запустить на них Spark-ML als?




Ответы (2)


Является ли rmse важным показателем в неявной обратной связи при принятии решения о том, в порядке ли модель?

Нет. Оценка неявной модели представлена ​​в другой шкале. Как объяснил Данило Асьоне, рекомендуемый подход - https://stackoverflow.com/a/41162688.

person user7757642    schedule 23.03.2017
comment
Спасибо за помощь! - person dattomatto; 27.03.2017

Что касается вашей проблемы с NaN, вы смотрели coldStartStrategy, который был добавлен в Spark не так давно? (см. https://github.com/apache/spark/pull/17102)

Что касается вашей проблемы оценки, RMSE не является хорошим показателем при использовании ALS с неявной обратной связью, как вы выяснили.

В вашем случае более уместны показатели ранжирования. Двумя наиболее распространенными являются:

К сожалению, они не являются частью Spark, поскольку они не подходят для Evaluator API, поэтому вам придется реализовать их самостоятельно.

person BenFradet    schedule 24.03.2017
comment
Спасибо за помощь. Да, я слышал о coldStartStraregy, но мне не удалось использовать его в Spark 2.1.0. Для проблемы оценки я рассмотрю возможность внедрения метрик ранжирования. - person dattomatto; 27.03.2017