¿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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Sesgo | una desviación repetida en la misma dirección | |
| Población | todas las personas sobre las que quieres decidir | |
| Muestra | las personas que sí están en tus datos | |
| Etiqueta | la respuesta que alguien puso a cada fila | buen pagador |
| Datos históricos | datos de decisiones tomadas en el pasado | |
| Infrarrepresentado | con 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
| Grupo | En la población | En la muestra de 200 | Parte en la población | Parte en la muestra |
|---|---|---|---|---|
| A, estudia en el campus | 600 | 170 | 60 % | 85 % |
| B, estudia a distancia | 400 | 30 | 40 % | 15 % |
| Total | 1.000 | 200 | 100 % | 100 % |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Calcula las partes de cada grupo
# 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
| Puerta | Qué pasa | Pregunta que debes hacer |
|---|---|---|
| La muestra | Un grupo casi no aparece | ¿Quién falta en mis datos? |
| La etiqueta | Quien etiqueta tenía prejuicios | ¿Quién decidió cada respuesta? |
| La historia | El 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
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
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
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.