Какие знаешь ранжирующие метрики

Ранжирующие метрики используются для оценки качества работы рекомендательных систем, поисковых алгоритмов и других моделей, которые возвращают упорядоченный список элементов. Основная задача таких метрик — определить, насколько хорошо предсказанное упорядочивание соответствует действительным предпочтениям или релевантности элементов для пользователя. Вот несколько основных ранжирующих метрик:

1. Precision at K (P@K): Эта метрика измеряет, какая доля из топ-K рекомендованных элементов действительно релевантна. Это помогает оценить точность рекомендаций на верхней части списка, что часто наиболее важно для пользовательского опыта.

Пример кода для расчета Precision at K в Python:

   ```python
   def precision_at_k(actual, predicted, k):
       act_set = set(actual)
       pred_set = set(predicted[:k])
       result = len(act_set & pred_set) / float(k)
       return result
   ```

2. Recall at K (R@K): Recall измеряет, какая доля релевантных элементов была включена в топ-K рекомендаций. Это показывает, насколько полно модель смогла выявить все релевантные элементы.

3. F1-Score at K: Это гармоническое среднее Precision и Recall. F1-Score помогает сбалансировать между точностью и полнотой, что особенно полезно в случаях, когда обе метрики важны для оценки.

4. Mean Reciprocal Rank (MRR): MRR измеряет среднюю величину взаимной ранговой инверсии первой релевантной рекомендации. Это особенно полезно, когда важно получить релевантный результат как можно выше в списке.

Пример кода:

   ```python
   def mean_reciprocal_rank(rs):
       rs = (np.asarray(r).nonzero()[0] for r in rs)
       return np.mean([1. / (r[0] + 1) if r.size else 0. for r in rs])
   ```

5. Normalized Discounted Cumulative Gain (NDCG): NDCG учитывает позицию каждого релевантного элемента в ранжированном списке, присваивая больший вес более высоким позициям. Эта метрика идеальна для случаев, когда порядок рекомендаций имеет большое значение.Пример кода:

   def dcg_at_k(r, k, method=1):
       r = np.asfarray(r)[:k]
       if r.size:
           if method == 0:
               return r[0] + np.sum(r[1:] / np.log2(np.arange(2, r.size + 1)))
           elif method == 1:
               return np.sum(r / np.log2(np.arange(2, r.size + 2)))
       return 0.

   def ndcg_at_k(r, k, method=1):
       dcg_max = dcg_at_k(sorted(r, reverse=True), k, method)
       if not dcg_max:
           return 0.
       return dcg_at_k(r, k, method) / dcg_max

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

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

May 24, 2024, easyoffer