Saltar al contenido
BásicoArturo Lorenzo·9 de noviembre de 2026·7 min·1lectura

Correlación no es causalidad: los helados no queman la piel

El sol apunta a las dos cosas. Entre el helado y la quemadura solo hay una línea discontinua y un signo de interrogación.

En un pueblo de playa, los meses en que más helados se venden son también los meses con más quemaduras solares. Alguien con prisa propondría prohibir los helados en la orilla. Antes de eso, una aclaración: el pueblo es inventado y los números también, los he creado yo para este ejemplo. Aun así, lo que vamos a ver es real y es uno de los errores más repetidos al interpretar datos.

## Qué es una correlación

Una correlación es una medida de cuánto se mueven dos columnas de datos a la vez. Se resume en un número entre −1 y 1, el coeficiente de correlación (en los libros, el de Pearson). Cerca de 1, cuando una sube la otra también. Cerca de 0, no hay relación lineal, es decir, los puntos no se alinean en una recta. Cerca de −1, cuando una sube la otra baja.

Cada punto es un mes. Verde: suben juntas. Ámbar: nube sin forma. Cyan: una sube mientras la otra baja.

## Los datos del pueblo (inventados)

Tenemos veinticuatro meses, dos años seguidos, con tres columnas de datos. Cada una es una variable: algo que se mide y cambia de un mes a otro. La primera es la temperatura media del mes en grados. Los helados vendidos en las heladerías del pueblo. Y las quemaduras, los casos de piel quemada por el sol atendidos en el centro de salud. Insisto: son cifras que me he inventado para que se vea el efecto.

Python trae un módulo llamado `statistics` (un módulo es un fichero con herramientas ya hechas) con una función, es decir, una herramienta con nombre a la que le pasas datos y te devuelve un resultado. Se llama `correlation`, existe desde Python 3.10 y calcula ese número entre −1 y 1. La línea `from statistics import correlation` significa «tráeme esa herramienta de ese módulo». Cada columna de datos va en una lista: valores entre corchetes, uno por mes. `round(..., 2)` redondea a dos decimales y `print` escribe el resultado en pantalla.

1from statistics import correlation
2
3temperatura = [11, 12, 16, 19, 23, 27, 29, 30, 27, 20, 15, 12, 11, 12, 17, 20, 22, 28, 29, 32, 27, 22, 17, 13]
4helados = [520, 580, 1010, 1440, 2010, 2680, 3100, 3290, 2600, 1440, 850, 650, 500, 810, 1040, 1400, 1860, 2970, 3090, 3760, 2780, 1790, 980, 640]
5quemaduras = [10, 4, 13, 18, 21, 29, 31, 37, 28, 16, 10, 6, 10, 7, 14, 20, 18, 27, 23, 29, 25, 22, 18, 10]
6
7print("helados y quemaduras:", round(correlation(helados, quemaduras), 2))
8print("temperatura y helados:", round(correlation(temperatura, helados), 2))
9print("temperatura y quemaduras:", round(correlation(temperatura, quemaduras), 2))

Salida: "helados y quemaduras: 0.92", "temperatura y helados: 0.99" y "temperatura y quemaduras: 0.95". Python escribe el decimal con punto.

Helados y quemaduras: 0,92. Casi 1. Los datos dicen que cuando se venden más helados hay más quemaduras, y eso es un hecho: no te has equivocado al calcular. Lo que no dicen es por qué. Y aquí está el error de cabecera: de «suben juntas» a «una provoca la otra» hay un salto que los números no dan.

## La tercera variable: el calor

Mira las otras dos líneas de la salida. La temperatura sube y baja con los helados (0,99) y con las quemaduras (0,95). Cuando hace calor, la gente compra helados. Y cuando hace calor, la gente pasa más horas al sol, y es el sol, no el calor, lo que quema. Los helados y las quemaduras no se hablan entre sí, los dos siguen al calor.

Las flechas salen del calor. La línea entre helados y quemaduras está tachada: ahí no hay causa, solo coincidencia.

Al calor lo llamamos variable de confusión (en inglés, confounder). Es un factor que influye a la vez en las dos cosas que estás comparando y hace que parezcan relacionadas sin estarlo. Y a esa relación aparente, los libros la llaman correlación espuria, es decir, falsa en cuanto a causa. La correlación existe, pero la explicación que se te ocurre a primera vista es la equivocada.

## Cómo comprobar si hay un tercer factor

Si sospechas que el calor lo explica todo, compáralo en igualdad de condiciones: mira solo los meses con casi la misma temperatura, aquí los que están entre 26 y 28 grados. Si helados y quemaduras estuvieran de verdad unidos, la correlación seguiría alta dentro de ese grupo. Si los unía el calor, debería dejar de salir cerca de 1. En estadística esto se llama controlar por una variable: dejar casi fija la tercera para ver qué queda.

Se quedan los cuatro meses de 27 a 28 grados y se amplían: dentro de ese grupo ya no hay una subida ordenada.

En el código, nos quedamos con los meses de 26 a 28 grados. Un `for` repite un bloque de código una vez por cada mes, y `zip` le da las tres listas a la vez, mes a mes. Un `if` ejecuta lo de dentro solo si se cumple la condición (aquí, que la temperatura esté entre 26 y 28). Y `.append` añade un valor al final de una lista: así llenamos dos listas nuevas con los meses que pasan el filtro. Después calculamos la correlación otra vez.

1from statistics import correlation
2
3temperatura = [11, 12, 16, 19, 23, 27, 29, 30, 27, 20, 15, 12, 11, 12, 17, 20, 22, 28, 29, 32, 27, 22, 17, 13]
4helados = [520, 580, 1010, 1440, 2010, 2680, 3100, 3290, 2600, 1440, 850, 650, 500, 810, 1040, 1400, 1860, 2970, 3090, 3760, 2780, 1790, 980, 640]
5quemaduras = [10, 4, 13, 18, 21, 29, 31, 37, 28, 16, 10, 6, 10, 7, 14, 20, 18, 27, 23, 29, 25, 22, 18, 10]
6
7helados_banda = []
8quemaduras_banda = []
9for t, h, q in zip(temperatura, helados, quemaduras):
10 if 26 <= t <= 28:
11 helados_banda.append(h)
12 quemaduras_banda.append(q)
13
14print("meses entre 26 y 28 grados:", len(helados_banda))
15print("helados y quemaduras:", round(correlation(helados_banda, quemaduras_banda), 2))

Salida: "meses entre 26 y 28 grados: 4" y "helados y quemaduras: -0.44". De 0,92 a −0,44.

Qué comparamosMesesCorrelación
Helados y quemaduraslos 240,92
Temperatura y heladoslos 240,99
Temperatura y quemaduraslos 240,95
Helados y quemaduras4 (26-28 °C)−0,44
Los mismos datos inventados, cuatro cuentas.

Con la temperatura casi igual, vender más helados ya no va con más quemaduras: sale −0,44, no 0,92. Cuatro meses son pocos y el número cambia si mueves la banda, así que tómalo como una ilustración de cómo se razona, no como una medida. Con datos reales usarías muchos más registros, pero la idea es la que se usa de verdad.

Si no mides el tercer factor, no puedes controlarlo. La forma más sólida de demostrar una causa es un experimento donde el azar decida quién recibe qué (en el pueblo, repartir helados gratis a unos turistas elegidos a suertes y contar sus quemaduras).

## Qué hacer cuando veas una correlación

Cada vez que dos gráficos suban juntos, pregúntate dos cosas. ¿Podría ser al revés? ¿Hay un tercer factor que mueva a los dos, como el calor? La segunda es la que más se olvida. Y sé exigente cuando alguien te cuente «A provoca B» solo con una correlación: lo normal es que falte el experimento o el tercer factor.

En resumen: helados y quemaduras correlacionan (0,92) porque el calor mueve a las dos, no porque una cause la otra. Una variable de confusión es ese factor oculto, y se busca comparando solo casos parecidos en lo que sospechas. Mi consejo: la próxima vez que calcules un `correlation`, antes de enseñarlo escribe al lado una frase con el posible tercer factor, y mide ese factor si puedes. Esto lo practicamos en la plataforma en la lección «Correlación no es causalidad: el error más caro», con datos y ejercicios.

$ whoami

Regístrate gratis para dar like, guardar posts en carpetas y recibir nuevos artículos por email.

Leer está bien. Ejecutar está mejor.

## comentarios

¿Te ha servido? ¿Añadirías algo? ¿Lo has vivido de otra forma en tu trabajo? Cuéntalo.

Inicia sesión para comentar y responder.

cargando comentarios...