Понимание точности @K, AP @ K, MAP @K

#machine-learning #recommender-systems

#машинное обучение #рекомендательные системы

Вопрос:

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

Точность @k имеет то преимущество, что не требует какой-либо оценки размера набора соответствующих документов, но недостатки заключаются в том, что она является наименее стабильной из обычно используемых мер оценки и что она плохо усредняется, поскольку общее количество соответствующих документов для запроса оказывает сильное влияние на точность приk

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

Мне было интересно; скажем, если я запускаю функцию вычисления, которая возвращает следующий массив:

Массив Numpy, содержащий оценки точности @ k для каждого пользователя.

И теперь у меня есть массив для всех значений точности @ 3 в моем наборе данных.

Если я возьму среднее значение этого массива и усредню, скажем, 20 разных баллов: эквивалентно ли это средней точности @ K или MAP @ K или я понимаю это слишком буквально?

Я пишу диссертацию с разделом оценки, поэтому точность определений для меня очень важна.

Комментарии:

1. Посмотрим, поможет ли это — kaggle.com/nandeshwar /…

Ответ №1:

Задействованы два средних значения, которые делают концепции как-то неясными, но они довольно просты — по крайней мере, в контексте recsys — позвольте мне прояснить их:

P @ K

Сколько релевантных элементов присутствует в рекомендациях top-k вашей системы

Например, чтобы вычислить P @ 3: возьмите 3 лучших рекомендации для данного пользователя и проверьте, сколько из них являются хорошими. Это число, разделенное на 3, дает вам P @ 3

AP @ K

Среднее значение P @i для i = 1, …, K.

Например, чтобы вычислить AP @ 3: суммируйте P @ 1, P @ 2 и P @ 3 и разделите это значение на 3

AP @K обычно вычисляется для одного пользователя.

MAP @K

Среднее значение точки доступа @ K для всех пользователей.

Например, чтобы вычислить MAP @ 3: просуммируйте AP @ 3 для всех пользователей и разделите это значение на количество пользователей

Если вы программист, вы можете проверить этот код, который является реализацией функций apk и mapk ml_metrics библиотеки, поддерживаемой техническим директором Kaggle.

Надеюсь, это помогло!

Комментарии:

1. Стоит отметить, что обычно при вычислении AP @ K усредняется только по значениям k, при которых делается соответствующая рекомендация. Это то, что делается в связанном коде, это также разъясняется здесь .

2. «Например, чтобы вычислить P @ 3: возьмите 3 лучших рекомендации для данного пользователя и проверьте, сколько из них являются хорошими». — Неоднозначный ответ. Как вы определяете, что такое «хорошие»?

3. @Alex Насколько я знал, мы найдем наилучшее значение K, используя любые / многие методы настройки гиперпараметров. Например: ALS, SGD, SVD и т.д. Пожалуйста, исправьте, если я ошибаюсь.

4. @alex «хорошие» — это те, которые имеют отношение к делу. Есть несколько способов решить, является ли элемент релевантным или нет. Например, если шкала оценок равна 1-5, возможно, соответствующий порог может быть установлен как <3, поэтому любые элементы, набравшие <3, считаются «неактуальными», поскольку они, вероятно, будут элементами, которые пользователю «не нравятся» . Однако такой постоянный порог является предвзятым, поскольку некоторые пользователи могут быть более склонны постоянно давать более высокие или более низкие оценки. Поэтому альтернативой является получение среднего значения для каждого пользователя и использование его в качестве порогового значения. Элементы, которые>= этому среднему порогу, являются «релевантными».

5. Утверждение, что AP @ K = среднее (P @ 1 P @ 2 … P @K) равно false. Вот контрпример .