¿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

Qué es el sesgo en los datos

Después de esta lección: Puedo encontrar por dónde entra el sesgo en un conjunto de datos.

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

¿Qué es el sesgo en los datos?

El sesgo en los datos es una desviación que se repite siempre en la misma dirección y falsea lo que aprende un modelo. Si no lo detectas a tiempo, el modelo lo copia y lo repite con personas reales.

Imagina una app universitaria que recoge opiniones para decidir dónde poner más ayuda. Casi todas las respuestas llegan de quien estudia en el campus. Quien estudia a distancia casi no aparece, y el modelo no sabrá que existe.

Al final de esta lección

Nota

Puedo encontrar por dónde entra el sesgo en un conjunto de datos.

Palabras clave

PalabraQué significaEjemplo
Sesgouna desviación repetida en la misma dirección
Poblacióntodas las personas sobre las que quieres decidir
Muestralas personas que sí están en tus datos
Etiquetala respuesta que alguien puso a cada filabuen pagador
Datos históricosdatos de decisiones tomadas en el pasado
Infrarrepresentadocon menos peso en la muestra que en la población

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

Un grupo con pocas filas queda fuera

Una muestra sirve si se parece a la población. Si un grupo pesa el 40 % de la población y solo el 15 % de la muestra, queda infrarrepresentado.

El modelo aprende de lo que ve. De un grupo que casi no ve, aprende muy poco, y se equivoca más con esas personas.

Ejemplo resuelto: comparar muestra y población

GrupoEn la poblaciónEn la muestra de 200Parte en la poblaciónParte en la muestra
A, estudia en el campus60017060 %85 %
B, estudia a distancia4003040 %15 %
Total1.000200100 %100 %

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

Calcula las partes de cada grupo

Código: python
# Población y muestra de la encuesta de la universidad.
population = {"A": 600, "B": 400}
sample = {"A": 170, "B": 30}

total_population = 0
total_sample = 0
for group in population:
    total_population = total_population + population[group]
    total_sample = total_sample + sample[group]

for group in population:
    in_population = population[group] * 100 / total_population
    in_sample = sample[group] * 100 / total_sample
    print("grupo", group, "población", in_population, "% muestra", in_sample, "%")
# Cambia sample a {"A": 120, "B": 80} y vuelve a ejecutar.
# ¿Qué grupo queda mejor representado?

La etiqueta guarda la opinión de alguien

Muchos modelos aprenden de etiquetas: una persona decidió cada respuesta. Por ejemplo, un jefe puntuó a los empleados de su equipo.

Si esa persona puntuaba peor a un grupo sin motivo, la etiqueta ya trae ese prejuicio. El modelo no lo ve como un error. Lo ve como la verdad que debe imitar.

Los datos del pasado traen decisiones del pasado

Los datos históricos cuentan lo que se decidió, no lo que habría sido justo. Un banco que concedió pocos préstamos a un barrio durante diez años deja pocos ejemplos buenos de ese barrio.

Un modelo entrenado con esos datos concluye que ese barrio no merece préstamos, y el ciclo sigue.

Tres puertas por las que entra el sesgo

PuertaQué pasaPregunta que debes hacer
La muestraUn grupo casi no aparece¿Quién falta en mis datos?
La etiquetaQuien etiqueta tenía prejuicios¿Quién decidió cada respuesta?
La historiaEl pasado ya era desigual¿Qué se decidió antes y por qué?

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

Cuenta las filas del archivo del laboratorio

Comando
docker exec jupyter python3 -c "print(len(open('hires.csv').readlines()) - 1)"

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

Comprueba quién está en el archivo del laboratorio

El archivo hires.csv tiene un día de 2025 por fila: 365 filas, sin ningún día que falte. El comando de abajo cuenta los sábados y domingos.

Sale 104. Son 104 de 365 días, cerca del 28 %. Un año completo no deja a ningún tipo de día fuera, y por eso este archivo sirve para practicar.

Cuenta los días de fin de semana

Comando
docker exec jupyter python3 -c "print(sum(1 for r in __import__('csv').DictReader(open('hires.csv')) if r['weekday'] in ('Sat', 'Sun')))"

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

Cuenta los días de sol, nubes y lluvia

Comando
docker exec jupyter python3 -c "print([sum(1 for r in __import__('csv').DictReader(open('hires.csv')) if r['weather'] == w) for w in ('sunny', 'cloudy', 'rainy')])"

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 con más datos desaparece el sesgo. No es así si los recoges de la misma manera: el hueco sigue y el modelo lo copia con más seguridad. Cambia cómo recoges los datos, no solo cuántos recoges.

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.