Estadística descriptiva

impacto de outliers

🎯 Objetivo de la clase

Comprender cómo los valores extremos pueden alterar un análisis simple de datos.

Al final de la clase podremos:

  • calcular media y mediana
  • identificar valores extremos
  • comparar qué medida cambia más
  • modificar un dataset agregando outliers
  • interpretar mejor un resumen numérico

Pregunta inicial

Supón que estas son las edades de un grupo:

edades = [18, 19, 18, 20, 19, 18, 21]

Ahora piensa:

  • ¿cuál es la edad típica?
  • ¿qué número representa mejor al grupo?

Recordemos: media

La media es el promedio:

\[ \text{media} = \frac{\text{suma de los datos}}{\text{cantidad de datos}} \]

En Python:

edades = [18, 19, 18, 20, 19, 18, 21]
media = sum(edades) / len(edades)
print(media)

Recordemos: mediana

La mediana es el valor central cuando los datos están ordenados.

edades = [18, 19, 18, 20, 19, 18, 21]
ordenadas = sorted(edades)
print(ordenadas)

Aquí la lista ordenada queda:

[18, 18, 18, 19, 19, 20, 21]

La mediana es:

19

Idea importante

La media usa todos los valores.

La mediana usa sobre todo la posición central.

Eso hace que no reaccionen igual cuando aparece un dato raro.

Ahora dañemos el dataset

Agreguemos un valor extremo:

edades = [18, 19, 18, 20, 19, 18, 21, 80]

Calculemos la media:

media = sum(edades) / len(edades)
print(media)

¿Qué pasó?

Antes, casi todos estaban entre 18 y 21.

Pero apareció un 80.

Entonces el promedio sube bastante, aunque casi nadie tenga esa edad.

👉 El promedio empieza a dar una idea engañosa del grupo.

Calculemos la mediana con outlier

edades = [18, 19, 18, 20, 19, 18, 21, 80]
ordenadas = sorted(edades)
print(ordenadas)

La lista ordenada queda:

[18, 18, 18, 19, 19, 20, 21, 80]

Como hay cantidad par de datos, la mediana es el promedio de los dos del centro:

mediana = (ordenadas[3] + ordenadas[4]) / 2
print(mediana)

Media vs mediana

Con el outlier:

  • la media cambia bastante
  • la mediana casi no cambia

👉 La mediana resiste mejor los valores extremos.

Ejemplo con salarios

salarios = [1200, 1250, 1300, 1200, 1280, 1350, 50000]

Pregunta:

¿el trabajador típico gana realmente cerca del promedio?

Calcular la media

salarios = [1200, 1250, 1300, 1200, 1280, 1350, 50000]
media = sum(salarios) / len(salarios)
print(media)

Ese número sale muy alto.

Pero casi todos ganan entre 1200 y 1350.

Calcular la mediana

salarios = [1200, 1250, 1300, 1200, 1280, 1350, 50000]
ordenados = sorted(salarios)
print(ordenados)

mediana = ordenados[len(ordenados)//2]
print(mediana)

Ahora sí aparece un valor mucho más representativo del grupo.

Entonces, ¿qué es un outlier?

Un outlier es un valor muy alejado del comportamiento general de los datos.

Ejemplos:

  • una edad de 300
  • un salario de 50 millones en un grupo de salarios pequeños
  • una nota de 1000 cuando todas van de 0 a 5

Ojo: no siempre es un error

Un outlier puede ser:

  • un error de digitación
  • un caso extraño pero real
  • un dato importante que no debemos borrar sin pensar

Eso depende del contexto.

Experimento 1

Miremos este dataset:

datos = [10, 11, 12, 10, 13, 11, 12]

Calculemos media y mediana.

datos = [10, 11, 12, 10, 13, 11, 12]

media = sum(datos) / len(datos)

ordenados = sorted(datos)
mediana = ordenados[len(ordenados)//2]

print("Media:", media)
print("Mediana:", mediana)

Experimento 2

Ahora agregamos un valor extremo:

datos = [10, 11, 12, 10, 13, 11, 12, 100]
media = sum(datos) / len(datos)

ordenados = sorted(datos)
mediana = (ordenados[3] + ordenados[4]) / 2

print("Media:", media)
print("Mediana:", mediana)

Comparación

Sin outlier:

  • media y mediana son parecidas

Con outlier:

  • media cambia mucho
  • mediana cambia poco

👉 Esto muestra que no basta con calcular números: hay que interpretarlos

️ Construyamos funciones

Función para la media

def calcular_media(lista):
    return sum(lista) / len(lista)

Función para la mediana

def calcular_mediana(lista):
    ordenados = sorted(lista)
    n = len(ordenados)

    if n % 2 == 1:
        return ordenados[n // 2]
    else:
        return (ordenados[n // 2 - 1] + ordenados[n // 2]) / 2

Probemos las funciones

datos = [10, 11, 12, 10, 13, 11, 12]

print("Media:", calcular_media(datos))
print("Mediana:", calcular_mediana(datos))

Ahora con outlier

datos = [10, 11, 12, 10, 13, 11, 12, 100]

print("Media:", calcular_media(datos))
print("Mediana:", calcular_mediana(datos))

Probar con distintos outliers

datos = [10, 11, 12, 10, 13, 11, 12]

for valor_extremo in [30, 100, 500, 1000]:
    nuevos_datos = datos + [valor_extremo]
    print("Outlier:", valor_extremo)
    print("Media:", calcular_media(nuevos_datos))
    print("Mediana:", calcular_mediana(nuevos_datos))
    print()

Lo que deben notar

A medida que el outlier crece:

  • la media sube muchísimo
  • la mediana se mueve poco o nada

Eso hace que la mediana sea más robusta

Lenguaje estadístico útil

Cuando una variable tiene valores extremos o está muy sesgada:

  • la media puede no representar bien al grupo
  • la mediana suele ser más estable

Mini actividad en clase

Toma este dataset:

notas = [3.8, 4.0, 3.5, 4.2, 3.9, 4.1, 1.0]

Preguntas:

  • calcula media
  • calcula mediana
  • ¿hay un valor extremo?
  • ¿cuál medida representa mejor al grupo?

Otra mini actividad

tiempos = [12, 11, 13, 12, 14, 11, 12]

Luego agrega:

120

y compara:

  • media antes y después
  • mediana antes y después

Error común

Mucha gente cree que “promedio” siempre resume bien.

Eso es falso.

Un solo valor extremo puede distorsionar mucho el resultado.

🌟 Idea clave de la clase

La estadística descriptiva no es solo calcular.

También es preguntarse:

  • ¿los datos tienen valores raros?
  • ¿qué medida conviene usar?
  • ¿la media está diciendo la verdad?