¿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

Cómo medir la equidad de un modelo

Después de esta lección: Puedo medir si un modelo trata por igual a dos grupos con tasas por grupo.

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

¿Cómo se mide la equidad de un modelo?

Medir la equidad de un modelo es comparar cómo trata a dos grupos de personas con la misma información. Sirve para saber si un grupo recibe más oportunidades que otro.

Un banco usa un modelo para aprobar préstamos pequeños. Miras a 20 solicitantes de dos grupos, A y B, y cuentas quién recibió el sí.

Al final de esta lección

Nota

Puedo medir si un modelo trata por igual a dos grupos con tasas por grupo.

Palabras clave

PalabraQué significaEjemplo
Tasala parte de un grupo a la que le pasa algo
Tasa de aprobaciónla parte de un grupo que recibe un sí6 de 10 es 0,6
Verdadero positivoun sí para quien sí devolvería el préstamo
Tasa de verdaderos positivosla parte de quienes devolverían el préstamo que recibe un sí
Paridadla misma tasa en los dos grupos
Umbralla nota mínima para recibir un sí

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

Una tasa por grupo permite comparar

Una cifra global esconde las diferencias. Calcula una tasa para cada grupo. La tasa de aprobación es la parte del grupo que recibe un sí.

Si el grupo A tiene 6 aprobados de 10 y el grupo B también, las tasas son iguales: 0,6 en los dos. A primera vista, el trato es el mismo.

Ejemplo resuelto: veinte solicitantes

GrupoSolicitantesAprobadosTasa de aprobaciónHabrían devueltoAprobados entre ellosTasa de verdaderos positivos
A1060,60650,83
B1060,60840,50

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

Calcula las dos tasas de cada grupo

Código: python
# Cada fila: grupo, aprobado (1 sí, 0 no), devolvió el préstamo (1 sí, 0 no).
loans = [
    ["A", 1, 1], ["A", 1, 1], ["A", 1, 1], ["A", 1, 1], ["A", 1, 1],
    ["A", 1, 0], ["A", 0, 1], ["A", 0, 0], ["A", 0, 0], ["A", 0, 0],
    ["B", 1, 1], ["B", 1, 1], ["B", 1, 1], ["B", 1, 1], ["B", 1, 0],
    ["B", 1, 0], ["B", 0, 1], ["B", 0, 1], ["B", 0, 1], ["B", 0, 1],
]

for group in ["A", "B"]:
    people = 0
    approved = 0
    would_repay = 0
    approved_and_repaid = 0
    for row in loans:
        if row[0] == group:
            people = people + 1
            approved = approved + row[1]
            if row[2] == 1:
                would_repay = would_repay + 1
                approved_and_repaid = approved_and_repaid + row[1]
    print("grupo", group, "aprobación", round(approved / people, 2),
          "oportunidad", round(approved_and_repaid / would_repay, 2))
# Cambia dos filas del grupo B de ["B", 0, 1] a ["B", 1, 1].
# ¿Qué tasa de oportunidad sale ahora?

Dos definiciones de equidad que no coinciden

La paridad de aprobación pide la misma tasa de aprobación en los dos grupos. En la tabla se cumple: 0,6 y 0,6.

La igualdad de oportunidades pide la misma tasa de verdaderos positivos. Entre quienes devolverían el préstamo, un sí debe ser igual de probable en los dos grupos. Aquí no se cumple: 0,83 frente a 0,5.

La misma tabla, dos veredictos

DefiniciónGrupo AGrupo B¿Se cumple?
Paridad de aprobación0,600,60Sí
Igualdad de oportunidades0,830,50No

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

Repite las divisiones de la tabla

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

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

Las mismas tasas en el archivo del laboratorio

El archivo hires.csv no tiene personas, pero sí grupos. Toma como grupos los días de semana y los fines de semana. Cuenta como un «sí» un día con 300 alquileres o más.

El comando de abajo imprime las dos tasas, primero la de los días de semana: 0.28 y 0.55. La cuenta es la misma que con los préstamos.

Tasa de días muy ocupados por grupo

Comando
docker exec jupyter python3 -c "print([round(sum(1 for r in __import__('csv').DictReader(open('hires.csv')) if (r['weekday'] in ('Sat', 'Sun')) == w and int(r['hires']) >= 300) / n, 2) for w, n in ((False, 261), (True, 104))])"

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 si las tasas de aprobación son iguales, el modelo es justo. No siempre: en la tabla las dos son 0,6, pero B tiene una oportunidad de 0,5 frente a 0,83. Mira siempre más de una medida.

Elegir una medida es una decisión

Igualar una medida suele alejar otra. Si los dos grupos devuelven los préstamos en proporciones distintas, un modelo imperfecto no puede igualarlo todo.

Alguien debe decidir qué error cuesta más: negar un préstamo a quien lo devolvería, o aprobarlo a quien no. Esa decisión se escribe con sus razones, y no sale de una fórmula.

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.