Saltar al contenido principal

Capítulo 1: Métricas de Evaluación en RAG

Dos Áreas de Evaluación​

ÁreaQué MideMétricas Clave
RecuperaciónCalidad de los documentos recuperadosPrecisión, Recall, MRR
GeneraciónCalidad de la respuesta del LLMFidelidad, Relevancia

Métricas de Recuperación​

Precisión@K​

def precision_at_k(retrieved_ids, relevant_ids, k):
"""¿Qué % de los documentos recuperados son relevantes?"""
retrieved_k = set(retrieved_ids[:k])
relevant = set(relevant_ids)
return len(retrieved_k & relevant) / k

# Recuperados: [A, B, C, D, E], Relevantes: [A, C, F]
# Precisión@5 = 2/5 = 0.4

Recall@K​

def recall_at_k(retrieved_ids, relevant_ids, k):
"""¿Qué % de los documentos relevantes fueron recuperados?"""
retrieved_k = set(retrieved_ids[:k])
relevant = set(relevant_ids)
return len(retrieved_k & relevant) / len(relevant)

# Recuperados: [A, B, C, D, E], Relevantes: [A, C, F]
# Recall@5 = 2/3 = 0.67

MRR (Mean Reciprocal Rank)​

def reciprocal_rank(retrieved_ids, relevant_ids):
"""¿Qué tan alto está el primer documento relevante?"""
for i, doc_id in enumerate(retrieved_ids):
if doc_id in relevant_ids:
return 1 / (i + 1)
return 0

# Si el primer relevante está en la posición 3: RR = 1/3 = 0.33

Métricas de Generación​

Fidelidad​

¿La respuesta utiliza SOLO información del contexto?

# Alta fidelidad:
# Contexto: "La política permite devoluciones en 30 días"
# Respuesta: "Puede devolver artículos dentro de los 30 días"

# Baja fidelidad (alucinación):
# Contexto: "La política permite devoluciones en 30 días"
# Respuesta: "Puede devolver artículos dentro de los 60 días para un reembolso completo"

Relevancia de la Respuesta​

¿La respuesta realmente responde a la pregunta?

Relevancia del Contexto​

¿Los fragmentos recuperados son relevantes para la pregunta?

Resumen de Métricas​

MétricaQué MideObjetivo
Precisión@KRelevancia de lo recuperado>0.8
Recall@KCobertura>0.9
MRRCalidad del ranking>0.7
FidelidadSin alucinaciones>0.9
RelevanciaCalidad de la respuesta>0.8