Ir al contenido principal

Estimación de densidad por kernel: de la teoría a la práctica

La estimación de densidad por kernel es un método no paramétrico para estimar la forma de una distribución sin asumir un modelo fijo. Aprende la fórmula, cómo elegir el ancho de banda y cómo implementarla en Python y R con ejemplos prácticos.
Actualizado 16 jun 2026  · 11 min leer

¿Alguna vez has intentado visualizar una distribución y te ha salido un histograma que cambia de forma cada vez que ajustas el tamaño de los intervalos?

Suele pasar así: eliges 10 intervalos y ves una curva suave. Cambias a 30 y aparecen varios picos. Los datos no han cambiado, pero distintos recuentos de intervalos te dan interpretaciones diferentes. Ese es el mayor problema de los histogramas: no te muestran la distribución, sino una versión de ella. Y esa versión está condicionada por un parámetro que eliges de forma arbitraria.

KDE plantea otro enfoque. En lugar de trocear los datos en intervalos, coloca una pequeña curva suave en cada dato y luego las suma todas. Así obtienes una única estimación continua de la distribución subyacente.

En este artículo verás la intuición detrás de KDE, un repaso a la fórmula, una explicación de cómo la ventana de suavizado (bandwidth) controla la suavidad y ejemplos prácticos en Python y R.

¿Eres nuevo con los histogramas? Aquí tienes una guía completa sobre histogramas de frecuencias para empezar con buen pie.

¿Qué es la estimación de densidad por kernel?

La estimación de densidad por kernel es un método no paramétrico para estimar la función de densidad de probabilidad de un conjunto de datos.

La parte no paramétrica es lo que la hace diferente.

Con los métodos paramétricos asumes que tus datos siguen una distribución concreta —normal, exponencial— y ajustas parámetros para aproximarla. Si esa suposición es errónea, tu modelo también lo será. KDE no hace ese tipo de supuestos. Deja que los datos hablen por sí mismos y construye una estimación de la distribución subyacente directamente a partir de las observaciones.

El resultado es una curva suave que muestra dónde es más probable que caigan los valores y con qué probabilidad. Los puntos altos indican regiones densas. Los bajos, regiones poco pobladas.

¿Por qué usar la estimación de densidad por kernel?

Los histogramas son la herramienta por defecto para visualizar distribuciones, pero tienen un problema: la forma que ves depende del número de intervalos que elijas. Y ese número lo decides tú. Dos personas pueden mirar el mismo conjunto de datos y llegar a conclusiones opuestas solo por elegir recuentos de intervalos distintos.

Con KDE, en lugar de forzar los datos en intervalos, obtienes una curva suave y continua que no cambia en función de un parámetro arbitrario que fijes al principio.

Eso la hace muy útil para varias cosas:

  • Visualizar la forma global de una distribución sin sesgo por el tamaño de los intervalos
  • Detectar patrones como múltiples picos, asimetrías o colas pesadas
  • Comparar distribuciones entre grupos en la misma gráfica
  • Obtener una visión más limpia de tus datos antes de modelizar

Intuición detrás de KDE

Tomas cada dato y colocas encima una pequeña curva suave. Esa curva se llama kernel. Luego, simplemente sumas todas esas curvas individuales en una sola.

Terminas con una única curva suave que muestra la densidad de tus datos. Donde los puntos se agrupan, varios kernels se superponen y apilan, así que la curva sube. Donde hay pocos datos, los kernels apenas se solapan y la curva se mantiene baja. Cada punto aporta por igual a la estimación final.

Imagina que has registrado las notas finales de una clase. En lugar de agruparlas en un histograma, KDE coloca una pequeña curva suave en cada nota. Donde se acumulan —por ejemplo, alrededor de 70-75—, las curvas se apilan y la estimación sube. Una sola persona con un 95 añade solo un pequeño bulto en la cola.

La visualización de abajo muestra exactamente esto. La mayoría obtuvo notas cercanas a la media y una persona sacó mucho más:

KDE visualized

KDE visualizado

Fórmula de la estimación de densidad por kernel

La fórmula de KDE impone más respeto de lo que debería.

Fórmula de KDE

Esto es lo que significa cada parte:

  • n es el número de observaciones

  • x_i son las observaciones individuales de tu conjunto de datos

  • K es la función kernel —la curva suave que colocas en cada punto

  • h es el ancho de banda (bandwidth) —controla lo ancha que es cada kernel

  • x es el punto donde evalúas la densidad

En pocas palabras, la fórmula dice: para cualquier punto x, mira lo cerca que está cada dato x_i de él, pondera esa cercanía con la función kernel K y promedia el resultado en los n puntos. Hazlo para cada x a lo largo del rango y obtendrás la curva de densidad completa.

El ancho de banda h aparece en el denominador de la fracción dentro de K. Un h más pequeño estrecha el kernel, de modo que solo los puntos muy cercanos influyen en la estimación. Un h mayor amplía esa influencia. Más sobre esto un poco más adelante.

¿Qué es una función kernel?

El kernel es la curva suave que colocas en cada observación. Define cómo se propaga la influencia de ese punto a sus vecinos.

Cada kernel está centrado en un dato y asigna pesos en función de la distancia. Los puntos cercanos al centro reciben mucho peso. Los lejanos, poco o ninguno. La forma exacta de esa ponderación depende del kernel que elijas.

Hay tres opciones habituales:

  • Gaussiano: la famosa campana. Asigna peso a todos los puntos del conjunto y la influencia cae con la distancia. Es el valor por defecto en la mayoría de librerías y funciona bien en la práctica
  • Uniforme: un rectángulo plano. Todos los puntos dentro de una distancia fija reciben el mismo peso, y los de fuera ninguno. Es simple, pero produce estimaciones menos suaves
  • Epanechnikov: una forma parabólica óptima en términos de error cuadrático medio. Es más eficiente que el gaussiano, pero rara vez marca diferencia visible en la práctica.

En la mayoría de casos, la elección del kernel importa poco. Dos kernels distintos aplicados al mismo dato y con el mismo ancho de banda producirán curvas casi idénticas. Lo que importa mucho más es el ancho de banda, y eso es lo que veremos ahora.

El papel del ancho de banda en KDE

El ancho de banda es el parámetro que más impacta tu KDE, incluso más que el kernel que elijas.

Controla lo ancha que es cada kernel. Un kernel estrecho solo incorpora influencia de puntos cercanos. Un kernel ancho reparte esa influencia por un rango mayor. El resultado es una curva que sigue de cerca a los datos o una que los suaviza.

Ancho de banda pequeño

Un ancho de banda pequeño hace que cada kernel sea estrecho y ceñido. La estimación reacciona con fuerza a cada punto, por lo que capta estructura real del dato, pero también ruido.

En la práctica, se ve como una curva con picos pequeños y numerosos. Algunos reflejan agrupaciones reales; otros son artefactos por falta de suavizado. Distinguirlos es difícil, y ahí está el problema.

KDE with small bandwidth

KDE con ancho de banda pequeño

Ancho de banda grande

Un ancho de banda grande ensancha cada kernel. Los kernels vecinos se solapan y la curva final sale más suave.

Si te pasas de suavizado, empiezas a perder estructura real. Dos grupos distintos pueden difuminarse en una sola curva. Una distribución con cola pesada puede parecer simétrica. La visualización puede estar ocultándote información.

KDE with large bandwidth

KDE con ancho de banda grande

Cómo dar con el ancho de banda adecuado

No existe un ancho de banda universalmente correcto. El objetivo es encontrar un valor lo bastante suave para filtrar el ruido, pero no tanto como para borrar patrones reales.

La mayoría de librerías usan métodos automáticos de selección. La regla de Silverman es la más común. Elige un ancho de banda en función del tamaño de muestra y la desviación estándar. Funciona bien con distribuciones aproximadamente normales, pero puede sobremitigar las multimodales.

Si tienes dudas, prueba varios valores de ancho de banda y compara las curvas. Las diferencias te dirán mucho sobre tus datos.

KDE vs. histograma

Tanto los histogramas como KDE muestran la distribución de tus datos, pero lo hacen de formas muy distintas.

Histograma

Un histograma divide tus datos en intervalos discretos y cuenta cuántos puntos caen en cada uno. Es rápido, intuitivo y fácil de explicar a una audiencia no técnica.

El problema es la sensibilidad a los intervalos. Si cambias su número, la forma cambia. No hay un número objetivamente correcto, lo que significa que dos personas pueden sacar conclusiones distintas solo por esa elección.

Además, los histogramas generan una forma escalonada y discontinua. Para un vistazo rápido está bien, pero puede ocultar la distribución real.

KDE

KDE te da una curva suave y continua sin intervalos de por medio. Es mejor para revelar la forma real de una distribución: asimetrías, múltiples picos o colas pesadas que un histograma puede pasar por alto o distorsionar según la elección de intervalos.

La contrapartida es que KDE introduce su propio parámetro —el ancho de banda— y requiere más cómputo. También es menos intuitivo de explicar, ya que el eje y muestra densidad de probabilidad, no recuentos, lo que puede confundir a quien no esté familiarizado.

Cuándo usar cada uno

Usa un histograma cuando necesites un resumen rápido e interpretable o cuando tu audiencia no conozca las estimaciones de densidad. Usa KDE cuando te importe la forma de la distribución: por ejemplo, al comparar grupos o al buscar múltiples modas en tus datos.

Histogram compared to KDE

Histograma comparado con KDE

En la práctica, a menudo se usan juntos: el histograma para los recuentos y la curva KDE superpuesta para la forma.

Estimación de densidad por kernel en Python

Python te ofrece varias formas de calcular y representar KDE, según necesites un gráfico rápido o más control sobre la estimación.

Visualizar KDE con seaborn

La forma más rápida de obtener una gráfica KDE es seaborn.kdeplot(). Esto es todo lo que necesitas:

import seaborn as sns
import numpy as np

np.random.seed(42)
scores = np.concatenate([
    np.random.normal(65, 4, 60),
    np.random.normal(80, 3, 40)
])

sns.kdeplot(scores, bw_adjust=1)

KDE with seaborn

KDE con seaborn

El parámetro bw_adjust escala el ancho de banda seleccionado automáticamente. Valores por debajo de 1 ajustan más la curva; por encima de 1 la suavizan. Es un multiplicador sobre el ancho de banda que seaborn elige internamente, así que no necesitas indicar un valor bruto.

El eje y muestra densidad de probabilidad, no recuentos. La curva te dice cuán probable es un valor en relación con el resto de la distribución. Cuanto más alto, más concentración de datos.

Calcular KDE con scipy

Si necesitas los valores de densidad —no solo la gráfica— usa scipy.stats.gaussian_kde. Te devuelve un objeto invocable que puedes evaluar en cualquier punto.

from scipy.stats import gaussian_kde
import numpy as np
import matplotlib.pyplot as plt

kde = gaussian_kde(scores, bw_method="scott")
x = np.linspace(45, 100, 500)
density = kde(x)

plt.plot(x, density)

bw_method="scott" utiliza la regla de Scott para elegir automáticamente el ancho de banda. Es un buen valor por defecto en la mayoría de casos. También puedes pasar un escalar para fijarlo manualmente.

KDE with scipy and matplotlib

KDE con scipy y matplotlib

Estimación de densidad por kernel en R

En R, KDE viene incluido en el propio lenguaje. No necesitas paquetes adicionales.

Calcular KDE con density()

La función density() recibe un vector numérico y devuelve un objeto KDE.

set.seed(42)
scores <- c(rnorm(60, mean = 65, sd = 4),
            rnorm(40, mean = 80, sd = 3))

kde <- density(scores, bw = "SJ")

El argumento bw controla la selección del ancho de banda. "SJ" usa el método de Sheather-Jones, que maneja mejor las distribuciones multimodales que el valor por defecto. También puedes pasar un valor numérico para fijar el ancho de banda manualmente.

El resultado es un objeto lista con dos componentes clave:

  • kde$x: la secuencia de puntos donde se evaluó la densidad
  • kde$y: los valores de densidad correspondientes

Representar la curva

Pasa el resultado directamente a plot().

plot(kde,
     main = "Exam Score Distribution",
     xlab = "Score",
     ylab = "Density")

KDE representado en R

Para superponer la KDE sobre un histograma, usa primero hist() con freq = FALSE y luego añade la curva con lines().

hist(scores, freq = FALSE, main = "Histogram + KDE", xlab = "Score")
lines(kde, col = "blue", lwd = 2)

Histograma con KDE en R

freq = FALSE escala el histograma a densidad para que barras y curva compartan el mismo eje y.

Ventajas y limitaciones de KDE

KDE es realmente útil, pero como todo, tiene contrapartidas que conviene conocer antes de usarla en lugar de histogramas.

Ventajas

Su mayor atractivo es que KDE no hace suposiciones sobre la distribución de tus datos. No necesitas decidir de antemano si son normales, exponenciales o lo que sea. La forma viene de los propios datos, lo que hace a KDE lo bastante flexible para manejar distribuciones multimodales y otras que no encajan en formas paramétricas estándar.

El resultado además es una curva suave y continua, no una aproximación escalonada. Eso facilita detectar patrones —múltiples picos o colas largas— que un histograma podría ocultar según la elección de intervalos.

Y como KDE trabaja con datos en crudo, sin necesidad de ajustar un modelo antes, es un buen primer paso en cualquier análisis exploratorio.

Limitaciones

La selección del ancho de banda es su punto débil. Si te equivocas, la estimación persigue el ruido o suaviza en exceso los patrones reales. Los métodos automáticos, como la regla de Silverman, funcionan bien con datos aproximadamente normales, pero pueden inducir a error con distribuciones complejas. A menudo conviene probar manualmente un par de valores antes de fiarte del resultado.

El rendimiento puede ser un problema a gran escala. KDE evalúa una función kernel para cada dato en cada punto de evaluación, por lo que el cómputo crece rápido a medida que aumentan los datos. Para exploración suele ser asumible, pero puede volverse lento con cientos de miles de observaciones.

Los efectos de borde son un problema más sutil. KDE estándar asume que los datos pueden extenderse infinitamente en ambas direcciones. Cuando tu variable tiene un límite duro —por ejemplo, valores que no pueden ser negativos—, la estimación fuga masa de probabilidad más allá de ese límite, lo que produce una curva artificialmente baja cerca del borde. Existen versiones con corrección de borde, pero son menos habituales en las librerías estándar.

Conclusión

KDE te ofrece una forma más limpia de ver la distribución de tus datos que los histogramas. No hay que elegir intervalos ni hacer supuestos paramétricos: solo una curva suave que muestra lo que realmente hay en tu conjunto.

El ancho de banda es el único parámetro que de verdad importa. Prueba varios valores, compara curvas, usa opciones automáticas y asegúrate de que la estimación encaja con lo que sabes de tus datos antes de sacar conclusiones.

La mejor forma de interiorizar KDE es aplicarla a datos reales. Elige un conjunto que ya conozcas, aplica KDE y compárala con un histograma para ver qué te estabas perdiendo.

¿Te interesa la visualización de datos? Echa un vistazo a nuestro curso de Data Visualization with Seaborn si usas Python, o Data Visualization with ggplot2 si usas R.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Científico de Datos Senior con base en Croacia. Top Tech Writer con más de 700 artículos publicados, generando más de 10M de visitas. Autor del libro Automatización del aprendizaje automático con TPOT.

FAQs

¿Para qué se utiliza la estimación de densidad por kernel?

KDE se usa para estimar la distribución de probabilidad de un conjunto de datos sin asumir que sigue una forma específica como la normal o la exponencial. Es habitual en el análisis exploratorio, cuando quieres visualizar cómo se distribuyen tus datos antes de modelizar. También se emplea en detección de anomalías, comparación de distribuciones entre grupos y como paso de suavizado en flujos estadísticos.

¿En qué se diferencia KDE de un histograma?

Un histograma divide los datos en intervalos discretos y cuenta cuántos puntos caen en cada uno. La forma que obtienes depende de cuántos intervalos elijas, así que es sensible a un parámetro arbitrario. KDE evita esto colocando una curva suave en cada dato y sumándolas, lo que te da una estimación continua que no cambia en función del número de intervalos.

¿Necesitas un conjunto de datos grande para usar KDE?

KDE funciona con conjuntos de datos pequeños, pero las estimaciones son menos fiables cuando tienes muy pocos puntos. Con datos limitados, las observaciones individuales influyen mucho en la curva final, lo que dificulta separar la estructura real del ruido. A medida que crece el conjunto de datos, la estimación se estabiliza y refleja mejor la distribución verdadera.

¿Qué pasa si eliges mal el ancho de banda?

Un ancho de banda demasiado pequeño produce una curva con picos que reacciona a cada punto individual, y cuesta ver la forma global. Un ancho de banda demasiado grande sobremitiga la estimación y puede fusionar picos distintos en una sola joroba, ocultando estructura real. La mayoría de librerías ofrecen métodos automáticos como la regla de Silverman para empezar, pero es buena práctica probar un par de valores manualmente antes de sacar conclusiones.

¿Funciona bien KDE cerca de los límites de tus datos?

KDE estándar asume que los datos pueden extenderse infinitamente en ambas direcciones, lo que da problemas cuando tu variable tiene un límite inferior o superior —como edad, ingresos o cualquier recuento que no pueda ser negativo—. Cerca de esos límites, la estimación fuga masa de probabilidad fuera del rango válido, haciendo la curva artificialmente baja en los bordes. Existen métodos de KDE con corrección de borde, pero no están en todas las librerías y requieren configuración adicional.

Temas

Aprende con DataCamp

Curso

Máquinas de Vectores de Soporte en R

4 h
11K
Este curso presentará la máquina de vectores de soporte (SVM) utilizando un enfoque intuitivo y visual.
Ver detallesRight Arrow
Iniciar curso
Ver másRight Arrow