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