24/12/2023
En el vasto universo del análisis de datos, comprender la forma de una distribución es tan crucial como conocer sus medidas de tendencia central o dispersión. Aquí es donde la curtosis entra en juego, una medida estadística que nos revela el grado de concentración de los datos alrededor de la media y la presencia de valores atípicos. Mientras que la asimetría nos informa sobre la inclinación de una distribución, la curtosis nos habla de su 'verticalidad': la agudeza de su pico y el grosor de sus colas. Afortunadamente, herramientas poderosas como Python, con sus librerías SciPy y pandas, hacen que el cálculo y la interpretación de la curtosis sean accesibles para todos. En este artículo, desglosaremos qué es la curtosis, por qué es importante y, lo más relevante, cómo puedes calcularla de manera efectiva en tus proyectos de Python.

¿Qué es la Curtosis y Por Qué es Tan Importante?
La curtosis es una medida estadística que describe la forma de la distribución de una variable aleatoria. En términos sencillos, nos indica cuán 'puntiaguda' o 'aplanada' es la distribución en comparación con una distribución normal (la clásica campana de Gauss). Nos ayuda a entender si los datos están muy concentrados alrededor de la media (lo que resultaría en un pico alto) o si, por el contrario, están más dispersos y con valores extremos (que se reflejarían en colas más 'pesadas' o más 'ligeras').
Su importancia radica en su capacidad para proporcionar una capa adicional de información que las medidas como la media y la desviación estándar no pueden ofrecer por sí solas. La curtosis nos permite:
- Evaluar la concentración de datos: Una curtosis alta sugiere que la mayoría de los datos se agrupan en un rango estrecho, cerca de la media.
- Detectar valores atípicos: Las distribuciones con colas 'pesadas' (alta curtosis) son más propensas a tener valores atípicos o extremos, que pueden influir significativamente en los análisis.
- Comprender la volatilidad y el riesgo: Especialmente en finanzas, una alta curtosis en los rendimientos de los activos puede indicar un mayor riesgo de eventos extremos (grandes ganancias o pérdidas), lo cual es vital para la gestión de carteras.
- Validar supuestos: Muchos modelos estadísticos asumen una distribución normal. La curtosis, junto con la asimetría, nos ayuda a verificar si nuestros datos se ajustan a esta suposición o si se desvían de ella.
Tipos de Curtosis: Una Mirada a la Forma de tus Datos
Para interpretar el valor de la curtosis, es fundamental conocer sus tres categorías principales, que se definen en relación con la curtosis de una distribución normal. Es importante recordar que, para una distribución normal, la curtosis (específicamente la curtosis de Pearson) es igual a 3. Sin embargo, en la práctica y en muchas librerías de software (incluido Python por defecto), se utiliza la 'curtosis de exceso', que resta 3 a la curtosis de Pearson, haciendo que la curtosis de una distribución normal sea 0.
1. Mesocúrtica (Curtosis = 0 o ~3)
Una distribución se considera mesocúrtica si su curtosis de exceso es cercana a cero (o su curtosis de Pearson es cercana a 3). Esto significa que su forma es muy similar a la de una distribución normal. Tiene un pico y colas moderados, lo que indica una dispersión y concentración de datos que se ajusta a lo esperado en una distribución típica sin una concentración excesiva en el centro ni una prevalencia de valores extremos.
2. Leptocúrtica (Curtosis > 0 o > 3)
Una distribución leptocúrtica presenta una curtosis de exceso positiva (o una curtosis de Pearson mayor a 3). Esto se traduce en un pico más pronunciado y colas más 'pesadas' o 'gruesas' en comparación con la distribución normal. Los valores de los datos están más concentrados alrededor de la media, lo que implica una mayor probabilidad de observar valores extremos o atípicos, a pesar de la concentración central. Es como si la distribución se hubiera 'estirado' verticalmente.
3. Platicúrtica (Curtosis < 0 o < 3)
Por otro lado, una distribución platicúrtica tiene una curtosis de exceso negativa (o una curtosis de Pearson menor a 3). En este caso, la distribución tiene un pico más suave y colas más 'ligeras' o 'delgadas' que la normal. Los datos están menos concentrados alrededor de la media y se distribuyen de manera más uniforme en un rango más amplio, con menos valores extremos. Es como si la distribución se hubiera 'aplanado' verticalmente.
Cálculo de la Curtosis en Python
Python ofrece herramientas robustas para calcular la curtosis de tus conjuntos de datos. Las librerías más comunes para esta tarea son SciPy y pandas. Ambas proporcionan funciones sencillas que nos permiten obtener este valor crucial con solo unas pocas líneas de código.
Usando SciPy para Calcular la Curtosis
La librería scipy.stats es una piedra angular para la estadística en Python. Su función kurtosis() es muy flexible y permite especificar el tipo de curtosis que deseas calcular (Fisher o Pearson).
Por defecto, scipy.stats.kurtosis() calcula la curtosis de exceso (Fisher), lo que significa que a la curtosis de Pearson se le resta 3. Si deseas la curtosis de Pearson, debes especificar el parámetro fisher=False.
A continuación, un ejemplo:
import numpy as np from scipy.stats import kurtosis # Crear un conjunto de datos de ejemplo datos_normales = np.random.normal(loc=0, scale=1, size=1000) datos_leptocurticos = np.concatenate([ np.random.normal(loc=0, scale=0.5, size=900), np.random.normal(loc=0, scale=2, size=100) ]) # Datos con más valores extremos datos_platicurticos = np.random.uniform(low=-3, high=3, size=1000) # Calcular la curtosis de exceso (Fisher) para cada conjunto kurtosis_normal_fisher = kurtosis(datos_normales) kurtosis_leptocurtica_fisher = kurtosis(datos_leptocurticos) kurtosis_platicurtica_fisher = kurtosis(datos_platicurticos) print(f"Curtosis (Fisher) Datos Normales: {kurtosis_normal_fisher:.4f}") print(f"Curtosis (Fisher) Datos Leptocúrticos: {kurtosis_leptocurtica_fisher:.4f}") print(f"Curtosis (Fisher) Datos Platicúrticos: {kurtosis_platicurtica_fisher:.4f}") # Calcular la curtosis de Pearson (sin restar 3) kurtosis_normal_pearson = kurtosis(datos_normales, fisher=False) print(f"Curtosis (Pearson) Datos Normales: {kurtosis_normal_pearson:.4f}") Usando pandas para Calcular la Curtosis
Si tus datos están organizados en un DataFrame de pandas, la tarea es aún más sencilla. Los objetos Series y DataFrame en pandas tienen un método .kurt() incorporado que calcula la curtosis directamente. Al igual que SciPy, por defecto, .kurt() en pandas calcula la curtosis de exceso (Fisher).

Aquí tienes un ejemplo práctico:
import pandas as pd import numpy as np # Crear un DataFrame de ejemplo data = { 'Columna_A': np.random.normal(loc=0, scale=1, size=500), 'Columna_B': np.random.exponential(scale=1, size=500), 'Columna_C': np.random.uniform(low=-2, high=2, size=500) } df = pd.DataFrame(data) # Calcular la curtosis para una columna específica kurtosis_columna_a = df['Columna_A'].kurt() print(f"Curtosis de Columna_A: {kurtosis_columna_a:.4f}") # Calcular la curtosis para todas las columnas numéricas del DataFrame kurtosis_df = df.kurt() print("\nCurtosis de todas las columnas del DataFrame:") print(kurtosis_df.round(4)) # Calcular la curtosis de Pearson en pandas (mediante scipy) # pandas.kurt() no tiene un parámetro fisher, pero puedes pasar a numpy y usar scipy kurtosis_columna_a_pearson = kurtosis(df['Columna_A'], fisher=False) print(f"\nCurtosis (Pearson) de Columna_A (usando scipy): {kurtosis_columna_a_pearson:.4f}") El método .kurt() de pandas también acepta parámetros como skipna (para ignorar valores NaN, por defecto es True) y axis (para calcular la curtosis por filas o por columnas en un DataFrame, por defecto es 0 o 'index' para columnas).
SciPy vs. pandas: ¿Cuál Usar?
Aunque ambas librerías te permiten calcular la curtosis, la elección depende a menudo del contexto de tu análisis y de la estructura de tus datos.
| Característica | SciPy (scipy.stats.kurtosis) | pandas (DataFrame.kurt() / Series.kurt()) |
|---|---|---|
| Tipo de Entrada | Array o lista de números (NumPy array recomendado). | Series o DataFrame de pandas. |
| Facilidad de Uso | Requiere importar kurtosis explícitamente. | Método directo en objetos pandas, muy intuitivo para DataFrames. |
| Curtosis por Defecto | Curtosis de exceso (Fisher, resta 3). | Curtosis de exceso (Fisher, resta 3). |
| Parámetros Adicionales | fisher (True/False), bias (True/False para corrección de sesgo). | axis, skipna, level, numeric_only. |
| Casos de Uso Típicos | Análisis estadístico general, cuando los datos no están en un DataFrame o se necesita control preciso sobre el cálculo. | Análisis exploratorio de datos (EDA) con DataFrames, cálculos rápidos por columna o fila. |
En general, si ya estás trabajando con DataFrames de pandas, usar .kurt() es la opción más conveniente y "pythonica". Si trabajas con arrays de NumPy o necesitas un control más granular sobre los parámetros estadísticos (como el sesgo en el cálculo), scipy.stats.kurtosis puede ser más apropiado.
Curtosis vs. Asimetría: Comprendiendo las Distorsiones
Es común confundir la curtosis con la asimetría (skewness), pero ambas miden aspectos diferentes de la forma de una distribución:
- Asimetría (Skewness): Mide la 'cola' horizontal de la distribución. Si la cola es más larga hacia la izquierda, es asimétrica negativa; si es más larga hacia la derecha, es asimétrica positiva. Nos indica si los datos están más concentrados en un lado de la media o si la distribución es simétrica.
- Curtosis (Kurtosis): Mide la 'verticalidad' o el 'pico' de la distribución y el peso de sus colas. Nos dice si hay una alta concentración de datos alrededor de la media y si existen valores extremos con mayor frecuencia de lo esperado en una distribución normal.
En resumen, la asimetría captura la distorsión horizontal de una curva de distribución normal, mientras que la curtosis captura la distorsión vertical.
Preguntas Frecuentes sobre la Curtosis
¿Qué significa una curtosis alta o baja?
Una curtosis alta (leptocúrtica) indica un pico más agudo y colas más pesadas, lo que sugiere una mayor probabilidad de valores extremos. Una curtosis baja (platicúrtica) indica un pico más plano y colas más ligeras, lo que sugiere una distribución de datos más uniforme y menos valores extremos.
¿Por qué se usa la curtosis en finanzas?
En finanzas, la curtosis es crucial para evaluar el riesgo. Una curtosis alta en los rendimientos de los activos financieros puede indicar que los eventos extremos (grandes ganancias o pérdidas) son más probables de lo que predeciría un modelo basado en la distribución normal. Esto ayuda a los inversores a comprender mejor la volatilidad y a gestionar sus carteras de manera más informada.
¿La curtosis siempre es un número positivo?
No. Si usamos la curtosis de exceso (Fisher), que es la que se calcula por defecto en SciPy y pandas, puede ser positiva, negativa o cero. Es positiva para distribuciones leptocúrticas, negativa para platicúrticas y cero para mesocúrticas (como la distribución normal).
¿Es mejor usar scipy o pandas para calcular la curtosis?
Depende de la estructura de tus datos y tus preferencias. Si tus datos ya están en un DataFrame de pandas, el método .kurt() de pandas es generalmente más conveniente y directo. Si trabajas con arrays de NumPy o necesitas un control más explícito sobre los parámetros del cálculo estadístico, scipy.stats.kurtosis es una excelente opción.
¿La curtosis es afectada por los valores atípicos?
Sí, la curtosis es muy sensible a los valores atípicos. La presencia de valores extremos puede inflar significativamente el valor de la curtosis, llevándola hacia una clasificación leptocúrtica, incluso si la mayor parte de los datos están relativamente bien agrupados. Esto se debe a que la curtosis se basa en el cuarto momento de la distribución, que otorga un gran peso a las desviaciones más grandes de la media.
Conclusión
La curtosis es una medida estadística invaluable que enriquece nuestra comprensión de la forma de las distribuciones de datos, y su cálculo en Python es sorprendentemente sencillo gracias a librerías como SciPy y pandas. Al dominar su interpretación y aplicación, puedes ir más allá de las medidas básicas y obtener una visión más profunda sobre la concentración de tus datos, la probabilidad de valores extremos y la adecuación de tus distribuciones a modelos teóricos. Ya sea para análisis financiero, investigación científica o cualquier campo que involucre datos, la capacidad de calcular y entender la curtosis en Python es una habilidad esencial para cualquier analista o científico de datos. ¡Empieza a explorar la 'verticalidad' de tus datos y desbloquea nuevas perspectivas en tu análisis!
Si quieres conocer otros artículos parecidos a ¿Cómo Calcular la Curtosis en Python? puedes visitar la categoría Estadística.
