まとめ
- Clasificar las métricas de ranking y explicar su papel en recomendación, búsqueda y publicidad.
- Comparar NDCG, MAP, Recall@k y Hit Rate mediante un ejemplo práctico.
- Indicar cómo elegir un conjunto de métricas alineado con los KPI del negocio y cómo reportar mejoras.
Panorama de la evaluación de rankings #
Los modelos de ranking asignan puntuaciones para que los elementos “mejores” aparezcan primero. En recomendadores y buscadores, la calidad de los primeros resultados impulsa la interacción y los ingresos, por lo que la evaluación debe concentrarse en esas primeras posiciones. Este capítulo presenta las familias de métricas más comunes y muestra cómo se complementan.
Categorías de métricas #
1. Métricas list-wise #
- NDCG / DCG (NDCG): aplica un descuento logarítmico, dando más peso a los primeros puestos.
- MAP (Mean Average Precision) (MAP): promedia la precisión de cada ítem relevante; ideal cuando hay múltiples aciertos por consulta.
2. Métricas top-k #
- Recall@k (Recall@k): fracción de elementos relevantes capturados en el top k.
- Hit Rate / Hit@k (Hit Rate): indica si al menos un elemento relevante aparece en el top k.
- Top-k Accuracy (Top-k Accuracy): útil cuando se reutiliza un clasificador como recomendador top-k.
3. Métricas pair-wise #
- AUC (versión ranking): probabilidad de que un ítem relevante quede por encima de uno irrelevante.
- Tau de Kendall / Correlación de Spearman: comparan el ordenamiento completo.
Comparar métricas de ranking #
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import average_precision_score, ndcg_score
y_true = np.array(
[
[1, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 1, 0, 0, 0],
]
)
y_score = np.array(
[
[0.9, 0.3, 0.2, 0.1, 0.6, 0.05, 0.03, 0.02, 0.01, 0.005],
[0.4, 0.8, 0.2, 0.1, 0.05, 0.6, 0.03, 0.02, 0.01, 0.005],
[0.2, 0.1, 0.85, 0.05, 0.03, 0.02, 0.7, 0.01, 0.005, 0.003],
]
)
def recall_at_k(y_true_row: np.ndarray, y_score_row: np.ndarray, k: int) -> float:
top_k_idx = np.argsort(y_score_row)[::-1][:k]
positives = y_true_row.sum()
if positives == 0:
return 0.0
return y_true_row[top_k_idx].sum() / positives
def hit_rate_at_k(y_true_row: np.ndarray, y_score_row: np.ndarray, k: int) -> float:
top_k_idx = np.argsort(y_score_row)[::-1][:k]
return float(y_true_row[top_k_idx].sum() > 0)
ks = [3, 5]
ndcg5 = ndcg_score(y_true, y_score, k=5)
map_score = np.mean(
[average_precision_score(t, s) for t, s in zip(y_true, y_score)]
)
recalls = [np.mean([recall_at_k(t, s, k) for t, s in zip(y_true, y_score)]) for k in ks]
hits = [np.mean([hit_rate_at_k(t, s, k) for t, s in zip(y_true, y_score)]) for k in ks]
metrics = {
"NDCG@5": ndcg5,
"MAP": map_score,
"Recall@3": recalls[0],
"Recall@5": recalls[1],
"Hit@3": hits[0],
"Hit@5": hits[1],
}
fig, ax = plt.subplots(figsize=(6.5, 3.8))
ax.bar(metrics.keys(), metrics.values(), color="#f97316", alpha=0.85)
ax.set_ylim(0, 1.05)
ax.set_ylabel("Puntuación")
ax.set_title("Métricas de ranking en un ejemplo de recomendaciones")
ax.grid(axis="y", alpha=0.3)
plt.xticks(rotation=25)
plt.tight_layout()

Cada métrica destaca una faceta distinta: Recall/Hit miden cobertura, mientras que MAP y NDCG valoran el orden. Combina ambas familias para evaluar mejoras.
Cómo elegir métricas #
- Define la unidad de evaluación
Determina si evaluarás por consulta, usuario o sesión. - Aclara qué se considera relevante
Clics, compras, “me gusta”: cada señal cambia la interpretación. - Alinea k con la interfaz
Usa un corte que coincida con cuántos elementos se muestran realmente. - Considera el valor de negocio
Pondera ítems de alto valor si algunos resultados importan más. - Conecta métricas offline y KPI online
Valida las mejoras offline con test A/B y monitoriza la correlación.
Referencia rápida #
| Categoría | Métrica | Páginas relacionadas | Notas |
|---|---|---|---|
| List-wise | NDCG / DCG | NDCG | Premia colocar ítems valiosos al inicio |
| List-wise | MAP | MAP | Útil cuando hay varios ítems relevantes |
| Top-k | Recall@k / Hit@k | Recall@k / Hit Rate | Se centra en la cobertura del top mostrado |
| Top-k | Top-k Accuracy | Top-k Accuracy | Conecta clasificación y ranking |
| Pair-wise | AUC | ROC-AUC | Probabilidad de que un positivo supere a un negativo |
Lista de verificación #
- ¿Se definió qué es relevante y la unidad de evaluación?
- ¿Se eligió el valor de k acorde a la interfaz o superficie de negocio?
- ¿Se reportaron métricas de cobertura (Recall/Hit) y de orden (NDCG/MAP)?
- ¿Se comparó contra baselines y se siguió el impacto online?
- ¿Se comprobó que los datos de evaluación reflejan las tendencias actuales?