DatiLab - Laboratorio de datos

Tutorial: Clustering de Clientes con K-means paso a paso

Publicado el 03 de junio de 2026

#Machine Learning,K-means,Clustering,Segmentación de Clientes,Python,Inteligencia Artificial,Ciencia de Datos
Tutorial: Clustering de Clientes con K-means paso a paso

¿Qué es el Clustering de Clientes con K-means?

En el mundo actual de los negocios digitales, entender a tus clientes ya no es un lujo, es una necesidad estratégica. El clustering de clientes con K-means es una de las técnicas de machine learning no supervisado más utilizadas para segmentar bases de datos de usuarios en grupos homogéneos, permitiendo a las empresas personalizar sus estrategias de marketing, mejorar la experiencia del usuario y optimizar recursos.

En Colombia, el ecosistema de startups y empresas de tecnología ha crecido exponencialmente en los últimos años. Ciudades como Bogotá, Medellín y Cali se han convertido en hubs de innovación donde la analítica de datos y la inteligencia artificial están transformando sectores como el retail, las fintech y el e-commerce. Aprender a implementar K-means es una habilidad altamente valorada en este mercado.

¿Cómo Funciona el Algoritmo K-means?

K-means es un algoritmo iterativo que divide un conjunto de datos en K grupos o clusters, donde cada punto de datos pertenece al cluster cuyo centroide (punto central) es el más cercano. El proceso sigue estos pasos fundamentales:

  1. Inicialización: Se seleccionan K centroides de forma aleatoria o mediante métodos como K-means++.
  2. Asignación: Cada punto de datos se asigna al centroide más cercano usando la distancia euclidiana.
  3. Actualización: Se recalcula la posición de cada centroide como el promedio de todos los puntos asignados a ese cluster.
  4. Iteración: Los pasos 2 y 3 se repiten hasta que los centroides no cambian significativamente o se alcanza el número máximo de iteraciones.

La función objetivo que K-means minimiza es la inercia o suma de las distancias cuadradas entre cada punto y su centroide más cercano. Cuanto menor sea la inercia, más compactos y bien definidos son los clusters.

Preparación del Entorno de Desarrollo

Para este tutorial utilizaremos Python, el lenguaje de programación más popular en ciencia de datos. Asegúrate de tener instaladas las siguientes librerías:

pip install numpy pandas scikit-learn matplotlib seaborn

Estas herramientas son el estándar de la industria y son ampliamente utilizadas por los científicos de datos en Colombia y en todo el mundo. Scikit-learn, en particular, ofrece una implementación robusta y optimizada del algoritmo K-means.

Tutorial Paso a Paso: Segmentación de Clientes

Paso 1: Importar Librerías y Cargar los Datos

Comenzaremos importando las librerías necesarias y creando un dataset simulado de clientes de una tienda de e-commerce colombiana, con variables como ingreso anual y puntuación de gasto:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score

# Simulación de datos de clientes
np.random.seed(42)
n_clientes = 300

data = {
    'ingreso_anual': np.concatenate([
        np.random.normal(25000000, 5000000, 100),
        np.random.normal(60000000, 8000000, 100),
        np.random.normal(100000000, 10000000, 100)
    ]),
    'puntuacion_gasto': np.concatenate([
        np.random.normal(20, 5, 100),
        np.random.normal(55, 10, 100),
        np.random.normal(80, 8, 100)
    ]),
    'frecuencia_compra': np.concatenate([
        np.random.normal(2, 1, 100),
        np.random.normal(8, 2, 100),
        np.random.normal(15, 3, 100)
    ])
}

df = pd.DataFrame(data)
print(df.describe())

Paso 2: Preprocesamiento y Normalización

Uno de los errores más comunes al aplicar K-means es no normalizar los datos. Dado que el algoritmo usa distancias euclidianas, las variables con escalas muy diferentes pueden dominar el cálculo. En nuestro ejemplo, el ingreso anual (en pesos colombianos) tiene una escala mucho mayor que la puntuación de gasto:

# Normalización con StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df)

df_scaled = pd.DataFrame(X_scaled, columns=df.columns)
print("Datos normalizados:")
print(df_scaled.describe())

Paso 3: Determinar el Número Óptimo de Clusters

Una de las preguntas más importantes al usar K-means es: ¿cuántos clusters debo usar? Existen dos métodos principales para responder esta pregunta:

Método del Codo (Elbow Method): Grafica la inercia en función del número de clusters K. El punto donde la reducción de inercia se vuelve marginal (el "codo") sugiere el K óptimo.

# Método del Codo
inertias = []
silhouette_scores = []
K_range = range(2, 11)

for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
    kmeans.fit(X_scaled)
    inertias.append(kmeans.inertia_)
    silhouette_scores.append(silhouette_score(X_scaled, kmeans.labels_))

# Visualización
fig, axes = plt.subplots(1, 2, figsize=(14, 5))

axes[0].plot(K_range, inertias, 'bo-', linewidth=2)
axes[0].set_xlabel('Número de Clusters (K)')
axes[0].set_ylabel('Inercia')
axes[0].set_title('Método del Codo')
axes[0].grid(True, alpha=0.3)

axes[1].plot(K_range, silhouette_scores, 'ro-', linewidth=2)
axes[1].set_xlabel('Número de Clusters (K)')
axes[1].set_ylabel('Silhouette Score')
axes[1].set_title('Análisis de Silueta')
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('kmeans_optimo.png', dpi=150)
plt.show()

Paso 4: Entrenar el Modelo K-means

Una vez identificado el K óptimo (en este caso K=3), entrenamos el modelo final:

# Entrenamiento del modelo final
kmeans_final = KMeans(n_clusters=3, random_state=42, n_init=10, max_iter=300)
df['cluster'] = kmeans_final.fit_predict(X_scaled)

# Análisis de los clusters
print("\nDistribución de clientes por cluster:")
print(df['cluster'].value_counts())

print("\nCaracterísticas promedio por cluster:")
print(df.groupby('cluster').mean().round(2))

Paso 5: Visualización e Interpretación de Resultados

La visualización es clave para comunicar los resultados a stakeholders no técnicos, algo especialmente importante en el contexto empresarial colombiano donde los equipos de marketing y ventas necesitan entender los segmentos:

# Visualización de clusters
colores = ['#FF6B6B', '#4ECDC4', '#45B7D1']
nombres_clusters = ['Clientes Básicos', 'Clientes Intermedios', 'Clientes Premium']

plt.figure(figsize=(10, 7))
for i in range(3):
    mask = df['cluster'] == i
    plt.scatter(
        df[mask]['ingreso_anual'] / 1000000,
        df[mask]['puntuacion_gasto'],
        c=colores[i],
        label=nombres_clusters[i],
        alpha=0.7,
        s=60
    )

plt.xlabel('Ingreso Anual (Millones COP)')
plt.ylabel('Puntuación de Gasto')
plt.title('Segmentación de Clientes con K-means')
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('clusters_clientes.png', dpi=150)
plt.show()

Interpretación de los Segmentos de Clientes

Tras ejecutar el análisis, obtenemos tres segmentos claramente diferenciados que tienen aplicaciones directas en estrategias de negocio:

  • Cluster 0 - Clientes Básicos: Ingresos bajos, baja frecuencia de compra y puntuación de gasto reducida. Estrategia recomendada: programas de fidelización y descuentos para aumentar la frecuencia de compra.
  • Cluster 1 - Clientes Intermedios: Ingresos medios con comportamiento de compra moderado. Estrategia recomendada: upselling y cross-selling con productos de valor medio-alto.
  • Cluster 2 - Clientes Premium: Altos ingresos, alta frecuencia y máxima puntuación de gasto. Estrategia recomendada: programas VIP, acceso anticipado a nuevos productos y atención personalizada.

Aplicaciones Prácticas en el Mercado Colombiano

El clustering con K-means tiene aplicaciones concretas y de alto impacto en diversos sectores de la economía colombiana:

  • Fintech y Banca Digital: Empresas como Nequi o Bancolombia pueden segmentar usuarios según sus patrones de transacción para ofrecer productos financieros personalizados.
  • E-commerce: Plataformas de comercio electrónico pueden personalizar recomendaciones de productos y estrategias de precios según el segmento del cliente.
  • Telecomunicaciones: Operadores como Claro, Movistar o Tigo pueden identificar segmentos de usuarios para diseñar planes más atractivos y reducir la tasa de churn.
  • Retail: Cadenas de supermercados pueden optimizar su inventario y promociones basándose en los patrones de compra de cada segmento.

Limitaciones y Consideraciones del Algoritmo

Como toda técnica, K-means tiene limitaciones importantes que debes considerar:

  • Sensibilidad a outliers: Los valores atípicos pueden distorsionar los centroides. Se recomienda realizar una limpieza de datos previa.
  • Asume clusters esféricos: K-means no funciona bien con clusters de formas irregulares. En esos casos, considera DBSCAN o clustering jerárquico.
  • Requiere especificar K: A diferencia de otros algoritmos, debes definir el número de clusters de antemano.
  • Mínimos locales: El resultado puede variar según la inicialización. Usar K-means++ y múltiples inicializaciones (n_init) mitiga este problema.

Preguntas Frecuentes (FAQ)

¿Cuántos clusters debo usar en K-means?

No existe una respuesta única. Debes combinar el método del codo, el análisis de silueta y el conocimiento del negocio. En segmentación de clientes, entre 3 y 6 clusters suele ser un rango razonable para la mayoría de los casos de uso empresarial.

¿K-means funciona con datos categóricos?

No directamente. K-means está diseñado para datos numéricos continuos. Para datos categóricos, debes usar técnicas de codificación (como one-hot encoding) o considerar algoritmos alternativos como K-modes o K-prototypes.

¿Qué tan grande debe ser mi dataset para usar K-means?

K-means es escalable y puede manejar desde cientos hasta millones de registros. Para datasets muy grandes, scikit-learn ofrece MiniBatchKMeans, que es significativamente más rápido al procesar mini-lotes de datos.

¿Cómo evalúo la calidad de mis clusters?

Las métricas más utilizadas son: el Silhouette Score (valores cercanos a 1 indican clusters bien definidos), el Davies-Bouldin Index (valores más bajos son mejores) y la interpretabilidad de negocio de los segmentos resultantes.

¿Necesito ser experto en matemáticas para usar K-means?

No necesariamente. Con Python y scikit-learn puedes implementar K-means con pocas líneas de código. Sin embargo, entender los fundamentos matemáticos te ayudará a interpretar mejor los resultados y tomar decisiones más informadas sobre preprocesamiento y evaluación.

Conclusión

El clustering de clientes con K-means es una herramienta poderosa y accesible que todo profesional de datos, desarrollador o analista en Colombia debería dominar. A lo largo de este tutorial hemos visto cómo preparar los datos, determinar el número óptimo de clusters, entrenar el modelo y, lo más importante, interpretar los resultados para generar valor de negocio real. En un ecosistema tecnológico en pleno crecimiento como el colombiano, la capacidad de extraer insights accionables de los datos de clientes es una ventaja competitiva diferencial. Te invitamos a aplicar este tutorial con tus propios datos y compartir tus resultados en los comentarios. ¿Qué segmentos descubriste? ¿Qué estrategias implementarías para cada grupo? ¡La conversación apenas comienza!

📩 Contacto

Hablemos de tu próximo proyecto

¿Listo para llevar tu negocio al siguiente nivel?. Completa el formulario y te contactaremos en unas horas.

Teléfono

+57 321 557 7073

Ubicación

Bogotá, Colombia

Envíanos un mensaje

Al enviar este formulario, aceptas nuestra política de privacidad.