¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Precisión y exhaustividad de una búsqueda

Después de esta lección: Puedo calcular la precisión y la exhaustividad de una búsqueda.

Lección de 55 min2 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Cómo saber si una búsqueda es buena

La precisión y la exhaustividad, que en inglés se llama recall, son dos números que miden si una búsqueda es buena. La precisión dice cuántos resultados sirven. La exhaustividad dice cuántos de los que servían se encontraron.

Sin ellas, «este buscador funciona bien» es solo una opinión. Con ellas puedes comparar dos buscadores con la misma consulta y decir cuál gana.

Al final de esta lección

Nota

Puedo calcular la precisión y la exhaustividad de una búsqueda.

Palabras clave

PalabraQué significa
Relevanteun documento que sirve a quien busca, según una persona
Recuperadoun documento que el buscador devolvió
Precisiónlos resultados relevantes entre los resultados devueltos
Exhaustividad (recall)los resultados relevantes devueltos entre todos los relevantes
Precisión en kla precisión mirando solo los k primeros resultados

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cada documento cae en uno de cuatro grupos

Imagina diez documentos. Una persona decide cuáles son relevantes: aquí el 1, el 3, el 4 y el 8. El buscador devuelve cinco, en este orden: 3, 7, 1, 9 y 5. Esos son los recuperados.

Cada documento es relevante o no, y recuperado o no. Eso da cuatro grupos, y las dos medidas salen de contarlos.

Ejemplo resuelto: los cuatro grupos

GrupoQué significaDocumentosCuántos
Aciertorelevante y recuperado1, 32
Perdidorelevante y no recuperado4, 82
Ruidorecuperado y no relevante5, 7, 93
Bien ignoradoni relevante ni recuperado2, 6, 103

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

La precisión y la exhaustividad miran cosas distintas

La precisión divide los aciertos entre los documentos devueltos. Aquí 2 entre 5, o sea 0,4. De cada cinco resultados, dos sirven.

La exhaustividad divide los aciertos entre todos los relevantes. Aquí 2 entre 4, o sea 0,5. Se encontró la mitad de lo que servía.

Calcula las dos medidas

Código: python
# Una búsqueda devolvió estos documentos, en este orden.
devueltos = [3, 7, 1, 9, 5]
# Una persona decidió que solo estos servían.
relevantes = [1, 3, 4, 8]

aciertos = 0
for numero in devueltos:
    if numero in relevantes:
        aciertos = aciertos + 1
print("aciertos:", aciertos)
print("precisión:", aciertos / len(devueltos))
print("exhaustividad:", aciertos / len(relevantes))
# Quita el 9 y el 5 de devueltos y compara las dos cifras.

Comprueba las dos cifras

Comando
docker exec jupyter python3 -c "print(2/5, 2/4)"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: tres formas de buscar

EstrategiaDevueltosAciertosPrecisiónExhaustividad
Devolver los diez1040,41,0
Devolver solo el primero111,00,25
Devolver los cinco de la lista520,40,5

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Quien busca mira primero los de arriba

En la práctica nadie lee cien resultados. Por eso se mide la precisión en k: la precisión contando solo los k primeros. Con k igual a 3 se miran el 3, el 7 y el 1.

Se divide siempre entre k, aunque el buscador devolviera menos de k resultados. Así un buscador que casi no devuelve nada no sale premiado.

Ejemplo resuelto: la precisión en k

kPrimeros resultadosAciertosPrecisión en k
1311,0
23, 710,5
33, 7, 120,67
53, 7, 1, 9, 520,4

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Calcula la precisión en k

Código: python
# La precisión en k mira solo los k primeros resultados.
devueltos = [3, 7, 1, 9, 5]
relevantes = [1, 3, 4, 8]

for k in range(1, 6):
    aciertos = 0
    for numero in devueltos[:k]:
        if numero in relevantes:
            aciertos = aciertos + 1
    print("k =", k, round(aciertos / k, 2))
# Cambia el orden de devueltos para que el 1 vaya primero.

Calcula las cinco precisiones de una vez

Comando
docker exec jupyter python3 -c "r=[3,7,1,9,5]; s=[1,3,4,8]; print([round(sum(1 for d in r[:k] if d in s)/k,2) for k in range(1,6)])"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error muy común

Advertencia

Mucha gente cree que una precisión de 1,0 es una búsqueda perfecta. Un buscador que devuelve un solo documento correcto tiene precisión 1,0 aunque se deje cien sin encontrar. Mira siempre las dos cifras juntas.

Para ir más lejos: juzga tu propia búsqueda

Escribe diez avisos cortos y una consulta. Decide a mano cuáles son relevantes antes de ejecutar nada.

Ordena los avisos con el coseno de la lección anterior y calcula la precisión en 3 y la exhaustividad. Después cambia la consulta y compara.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.