Как проверить правильность алгоритма совместной фильтрации на основе моих позиций?
Я только что создал алгоритм для совместной фильтрации на основе элементов, который может принимать массив данных в виде [username]=>[item]=>[rating]
и рекомендовать другие предметы на основе текущих предметов, которые пользователь оценил / купил, рассчитав прогноз рейтинга, который пользователь даст этому предмету, если он будет использовать его, и оценит его.
У меня вопрос, как я могу проверить точность моей системы рекомендаций?
4 ответа
Выберите количество случайных пользователей и предметов, для которых у вас есть рейтинг, и попытайтесь предсказать рейтинг, используя ваш алгоритм. Рассчитайте RMSE между вашим прогнозом и фактическим рейтингом. Чем ниже значение, тем лучше.
В зависимости от вашего алгоритма, тот факт, что у вас есть рейтинг для этого предмета, может привести к серьезному смещению в вашей RMSE. В этом случае выполняйте расчеты, как если бы вы не знали рейтинг (например: переместите все в отдельную базу данных и отбросьте записи, которые вы пытаетесь "предсказать").
Интересное чтение: Приз Netflix
Библиотека, подобная Apache Mahout, предоставляет платформу для автоматического выполнения этой работы.
Но позвольте мне предположить, что вы хотите написать собственное решение.
Как правило, вы проверяете точность с помощью перекрестной проверки. Итак, возьмите набор данных рейтингов. Разделите его на два набора, один набор - обучающий набор, а другой набор - "тестовый набор". Обычно это делается путем случайного выбора, скажем, 80% пользователей и включения их в тренировочный тест и использования оставшихся 20% для набора тестов.
Один за другим выберите пользователей в тестовом наборе. Чтобы проверить свою точность, вы можете использовать метрику "все, кроме одного": скрыть один рейтинг от этого одного использования и попытаться предсказать его. (Некоторые авторы называют это " оставь один раз" вместо "все, кроме одного".) Используйте только обучающий набор и данные этого одного пользователя (за исключением, конечно, скрытого рейтинга). Каждый раз, когда вы делаете это, вы получаете ошибку, вы можете просто суммировать их и делить на количество сделанных вами прогнозов. Это средняя средняя ошибка.
Конечно, есть и другие способы сделать это.
Мне нравится Root Mean Square Error, но еще одна, которая может помочь, называется 'Mean Average Precision @ K' AKA 'MAPK'.
Часть "Средняя точность" MAPK - это просто соответствие топ-рекомендаций K. В общем, посмотрите, что ваша модель предсказывает в отношении рекомендаций, и посмотрите, сколько из них являются "попаданиями" в фактический результирующий набор (в данном случае реальный результирующий набор = набор элементов, за которые пользователи поставили оценку)
Этот пример дает хороший пример того, о чем я говорю: http://makarandtapaswi.wordpress.com/2012/07/02/intuition-behind-average-precision-and-map/
Просто протестируйте в этой простой форме:
USER A - ITEM 1 - 10.0
USER A - ITEM 2 - 10.0
USER A - ITEM 3 - 10.0
USER B - ITEM 1 - 10.0
USER B - ITEM 2 - 10.0
USER B - ITEM 3 - 10.0
USER C - ITEM 1 - 10.0
USER C - ITEM 2 - 10.0
Теперь пользователь C должен получить рекомендацию 10.0 для пункта 3