CursosEmpresasBlogLiveConfPrecios

Evaluación resultados de distintos modelos de clustering

Clase 25 de 27 • Curso de Clustering con Python y scikit-learn

Clase anteriorSiguiente clase

Contenido del curso

Fundamentos de clustering

  • 1
    ¿Qué es el clustering en machine learning?

    ¿Qué es el clustering en machine learning?

    04:01 min
  • 2
    Tu primer clustering con scikit-learn

    Tu primer clustering con scikit-learn

    16:57 min
  • 3
    ¿Cuándo usar clustering?

    ¿Cuándo usar clustering?

    05:00 min
  • 4
    ¿Cómo evaluar modelos de clustering?

    ¿Cómo evaluar modelos de clustering?

    12:00 min

K-means

  • 5
    ¿Qué es el algoritmo de K-means y cómo funciona?

    ¿Qué es el algoritmo de K-means y cómo funciona?

    07:30 min
  • 6
    ¿Cuándo usar K-means?

    ¿Cuándo usar K-means?

    03:24 min
  • 7
    Implementando K-means

    Implementando K-means

    14:08 min
  • 8
    Encontrando K

    Encontrando K

    13:06 min
  • 9
    Evaluando resultados de K-means

    Evaluando resultados de K-means

    04:21 min

Hierarchical clustering

  • 10
    ¿Qué es hierarchical clustering y cómo funciona?

    ¿Qué es hierarchical clustering y cómo funciona?

    04:56 min
  • 11
    ¿Cuándo usar hierarchical clustering?

    ¿Cuándo usar hierarchical clustering?

    02:07 min
  • 12
    Implementando hierarchical clustering

    Implementando hierarchical clustering

    09:40 min
  • 13
    Evaluando resultados de hierarchical clustering

    Evaluando resultados de hierarchical clustering

    06:44 min

DBSCAN

  • 14
    ¿Qué es DBSCAN y cómo funciona?

    ¿Qué es DBSCAN y cómo funciona?

    08:27 min
  • 15
    ¿Cuándo usar DBSCAN?

    ¿Cuándo usar DBSCAN?

    02:28 min
  • 16
    Implementando DBSCAN

    Implementando DBSCAN

    09:11 min
  • 17
    Encontrar híper-parámetros

    Encontrar híper-parámetros

    14:33 min
  • 18
    Evaluando resultados de DBSCAN

    Evaluando resultados de DBSCAN

    07:35 min

Proyecto: resolviendo un problema con clustering

  • 19
    Preparar datos para clusterizar

    Preparar datos para clusterizar

    13:30 min
  • 20
    Aplicando PCA para clustering

    Aplicando PCA para clustering

    12:08 min
  • 21
    Resolviendo con K-means

    Resolviendo con K-means

    09:24 min
  • 22
    Resolviendo con hierarchical clustering

    Resolviendo con hierarchical clustering

    07:12 min
  • 23
    Resolviendo con DBSCAN

    Resolviendo con DBSCAN

    17:25 min
  • 24
    Resolviendo con DBSCAN (sin PCA)

    Resolviendo con DBSCAN (sin PCA)

    05:24 min
  • 25
    Evaluación resultados de distintos modelos de clustering

    Evaluación resultados de distintos modelos de clustering

    Viendo ahora

Conclusiones

  • 26
    Proyecto final y cierre

    Proyecto final y cierre

    02:32 min
  • 27

    Comparte tu proyecto de segmentación con clustering y certifícate

    Jorge Andrés Buitrago Romero

    Jorge Andrés Buitrago Romero

    student•
    hace 3 años

    Hice una visualización en un mapa de los clusters que obtuve haciendo el ejercicio por mi cuenta: Además, según la distribución de los grupos (Antes de crear el mapa) decidí asignar los siguientes grupos:

    No necesita ayuda: cluster 3 Necesidad Baja: clusters 2, 5 Necesidad Media: cluster 0 Necesidad alta: clusters 1, 4

    map.png

    Si relacionamos la imagen con la idea que comúnmente se tiene sobre la situación de distintos países, hay bastantes puntos en común como:

    • Los países anglosajones y Europa occidental con poca necesidad
    • La mayoría de Latinoamérica en necesidad media
    • La mayoría de países africanos en necesidad alta
      Alarcon7a

      Alarcon7a

      student•
      hace 3 años

      muy geniaaal!!

      Santiago Ahumada Lozano

      Santiago Ahumada Lozano

      student•
      hace 3 años

      ¡Wow, Increíble! ¿Cómo hiciste ese súper plot?

    Mateo Sánchez Alzate

    Mateo Sánchez Alzate

    student•
    hace 3 años

    Con este script pueden obtener un mapa interactivo para visualizar los resultados!!!.

    !pip install pycountry import pycountry import plotly.express as px def get_alpha_3(location): try: return pycountry.countries.get(name=location).alpha_3 except: return None df_map = df.copy() df_map['Code'] = df['country'].apply(lambda x: get_alpha_3(x)) fig = px.choropleth(df_map, locations='Code', color='kmeans', hover_name='country', color_continuous_scale=px.colors.sequential.Plasma) fig.show()
    • Siendo este el resultado:
    Captura2.JPG
      Rafael Rivera

      Rafael Rivera

      student•
      hace 3 años

      Se ve genial, gracias por el aporte

    Alfonso Andres Zapata Guzman

    Alfonso Andres Zapata Guzman

    student•
    hace 3 años
    newplot (26).png

    Solo se deben instalar las librerias que no tenga y ejecutar el codigo al final del notebook en una celda despues de lo escrito por el profesor ya que copia el dataframe del ultimo creado. Si no le queda tan bonito como el mio, busque la plantilla de plotly que deje en las primeras clases de este curso en lla seccion de aportes.

    import pycountry import plotly.graph_objects as go import plotly.express as px from plotly.subplots import make_subplots def get_alpha_3(location): try: return pycountry.countries.get(name=location).alpha_3 except: return None df_map = df_country.copy() df_map['iso_alpha'] = df_country['country'].apply(lambda x: get_alpha_3(x)) iso3_to_iso2 = {c.alpha_3: c.alpha_2 for c in pycountry.countries} df_map["iso_alpha2"] = df_map["iso_alpha"].map(iso3_to_iso2) # for bar inflation u other df_bar = df_map[['inflation', 'country', 'k_means_pca']].sort_values(by='inflation',ascending=False).head(10) # Initialize figure with subplots fig = make_subplots( rows=2, cols=2, column_widths=[0.5, 0.5], row_heights=[0.6, 0.4], subplot_titles=('life expectancy vs inflation with size by gdpp', '10 countries with higher inflation', 'Countries of the world by k means pca cluster'), specs=[[{"type": "scatter", "colspan": 2}, None], [{"type": "bar"}, {"type": "choropleth"}]]) # Add scattergeo globe map of volcano locations # fig.add_trace( # px.choropleth(df_map, locations='Code', # color='k_means_pca', # hover_name='country', # color_continuous_scale=px.colors.sequential.Plasma).data, # row=1, col=1 # ) ####################### fig1 = px.scatter( df_map, x="life_expec", y="inflation", hover_name="country", hover_data=["life_expec", 'inflation', "gdpp"] ) fig1.update_traces(marker_color="rgba(0,0,0,0)") minDim = df_map[["life_expec", "inflation"]].max().idxmax() maxi = df_map[minDim].max() # fig1.update_layout(height=600, width=1000, plot_bgcolor="#dfdfdf", yaxis_range=[-5e3, 55e3]) trace1 = fig1.data[0] fig.add_trace(trace1, row=1, col=1) for i, row in df_map.iterrows(): country_iso = row["iso_alpha2"] fig.add_layout_image( dict( source=f"https://raw.githubusercontent.com/matahombres/CSS-Country-Flags-Rounded/master/flags/{country_iso}.png", xref="x", yref="y", xanchor="center", yanchor="middle", x=row["life_expec"], y=row["inflation"], sizex=np.sqrt(row["gdpp"] / df_map["gdpp"].max()) * maxi * 0.15 + maxi * 0.03, sizey=np.sqrt(row["gdpp"] / df_map["gdpp"].max()) * maxi * 0.15+ maxi * 0.03, sizing="contain", opacity=0.8, layer="above" ) ) ########################## # Add locations bar chart fig.add_trace( go.Bar(x=df_bar.country, y=df_bar.inflation, marker=dict(color=df_bar.inflation, showscale=True, colorscale=px.colors.diverging.RdBu[::-1], cmax=df_map.inflation.max(), cmin=df_map.inflation.min(), colorbar=dict(len=0.45, x=0.47, y=0.2), colorbar_title = "Inflation",), showlegend=False, ), row=2, col=1 ) fig.add_trace( go.Choropleth( locations=df_map.iso_alpha, z=df_map.k_means_pca, marker_line_color='red', colorbar_title = "Cluster", colorscale=[[0, 'rgb(175, 100, 88)'], [0.25, 'rgb(175, 100, 88)'], [0.25, '#479B55'], [0.5, '#479B55'], [0.5, '#FA0087'], [0.75, '#FA0087'], [0.75, 'rgb(117, 112, 179)'], [1, 'rgb(117, 112, 179)']], marker_opacity=0.5, marker_line_width=0, hoverinfo='location+z', zmin=df_map.k_means_pca.min(), zmax=df_map.k_means_pca.max(), colorbar=dict(len=0.45, y=0.2), ), row=2, col=2 ) ############################################# ################################## # # Add 3d surface of volcano # fig.add_trace( # go.Surface(z=df_v.values.tolist(), showscale=False), # row=2, col=2 # ) # Update geo subplot properties fig.update_geos( countrycolor="red", fitbounds="locations", visible=False, projection_type="natural earth", landcolor="white", # oceancolor="MidnightBlue", showocean=True, # lakecolor="LightBlue", lataxis_showgrid=True, lonaxis_showgrid=True ) # Rotate x-axis labels fig.update_xaxes(tickangle=30, automargin='height') # Set theme, margin, and annotation in layout fig.update_layout( width=1400, height=800, margin=dict(r=5, t=25, b=20, l=60), # annotations=[ # dict( # text="Source: AAZG", # showarrow=False, # xref="paper", # yref="paper", # x=0, # y=-0.1) # ] ) # Update xaxis properties fig.update_xaxes(title_text="Life expectative", row=1, col=1) fig.update_xaxes(title_text="Paises", row=2, col=1) # fig.update_xaxes(title_text="xaxis 4 title", type="log", row=2, col=2) # Update yaxis properties fig.update_yaxes(title_text="Inflation", row=1, col=1) fig.update_yaxes(title_text="Inflation", row=2, col=1) # fig.update_yaxes(title_text="yaxis 4 title", row=2, col=2) fig.show()
      Luis Ernesto Domínguez Velásquez

      Luis Ernesto Domínguez Velásquez

      student•
      hace 2 años

      Implementé tú código solo modifiqué esta parte automargin='height' por automargin=True, felicidades por tu gran aporte. Haré una segmentación de los clientes en la institución financiera donde trabajo. Saludos.

      Alfonso Andres Zapata Guzman

      Alfonso Andres Zapata Guzman

      student•
      hace 2 años

      Si necesitas ayuda contactame, o si hay alguna oportunidad de trabajo tenme en cuenta, por cierto con dash me parece que se obtienen aun mejores resultados. solo que hay que instalar unas cositas mas para poder usar dash y por la facilidad tiendo a usar plotly.

      Contactame o ve mi CV aqui: https://linktr.ee/aazg

    Julián Cárdenas

    Julián Cárdenas

    student•
    hace 2 años

    Yo probé con un PCA de 5 y tampoco obtuve diferencias muy significativas...

    Mauricio Escobar

    Mauricio Escobar

    student•
    hace un mes

    utilizando el k=4 obtenido en clase, se me ocurrió hacer el siguiente proceso:

    #Segmentación por Reglas de Negocio def definir_nivel_necesidad(row): """ Define el nivel de necesidad de un país basándose en (k=4). Escala: 3 (Extrema), 2 (Alta), 1 (Media), 0 (Baja/Nada) """ # 3 EXTREMA (target principal) if ((row['child_mort'] > 140) or (row['gdpp'] < 1000) or (row['life_expec'] < 50)): return 3 # 2: ALTA if ((row['child_mort'] > 100) or (row['gdpp'] < 2500) or (row['life_expec'] < 60) or (row['income'] < 5000)): return 2 # 1: MEDIA if ((row['child_mort'] > 40) or (row['income'] < 10000) or (row['gdpp'] < 10000)): return 1 # 0: BAJA else: return 0 # aplicamos la función al DF df_raw['need'] = df_raw.apply(definir_nivel_necesidad, axis=1)
    Mario Alexander Vargas Celis

    Mario Alexander Vargas Celis

    student•
    hace 4 meses

    Evaluar los resultados de distintos modelos de clustering (K-means, DBSCAN, Hierarchical Clustering, etc.) es esencial para identificar cuál ofrece la mejor segmentación según tus datos. A diferencia de clasificación supervisada, en clustering no tenemos etiquetas verdaderas, por lo que usamos métricas internas o evaluaciones visuales.

    ✅ Evaluación de Modelos de Clustering

    🔹 1. Silhouette Score

    Mide cuán bien están separados los clústeres y cuán compactos son.

    • Rango: -1 a 1
    • Valores cercanos a 1 son mejores.
    • Se puede usar con KMeans, Hierarchical, y DBSCAN (aunque este último puede tener -1 como outliers).

    from sklearn.metrics import silhouette_score

    score = silhouette_score(X_scaled, labels) print(f'Silhouette Score: {score:.3f}')

    Nota: Para DBSCAN, asegúrate de excluir los outliers (labels != -1), si es necesario.

    🔹 2. Davies-Bouldin Index

    Mide la dispersión intra-clúster y separación inter-clúster.

    • Menor es mejor
    • Funciona con cualquier método de clustering.

    from sklearn.metrics import davies_bouldin_score

    dbi = davies_bouldin_score(X_scaled, labels) print(f'Davies-Bouldin Index: {dbi:.3f}')

    🔹 3. Calinski-Harabasz Index

    Cuantifica la varianza entre los clústeres y dentro de los clústeres.

    • Mayor es mejor
    • Bueno para comparar modelos con distintos k.

    from sklearn.metrics import calinski_harabasz_score

    ch_score = calinski_harabasz_score(X_scaled, labels) print(f'Calinski-Harabasz Index: {ch_score:.3f}')

    🔹 4. Comparación visual 2D

    Reduce los datos a 2 dimensiones (por ejemplo, con PCA) y visualiza:

    from sklearn.decomposition import PCA import matplotlib.pyplot as plt import seaborn as sns

    pca = PCA(n_components=2) X_pca = pca.fit_transform(X_scaled)

    plt.figure(figsize=(8, 6)) sns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1], hue=labels, palette='tab10', s=100) plt.title("Clustering Visual") plt.xlabel("PC1") plt.ylabel("PC2") plt.grid(True) plt.show()

    Esto permite comparar visualmente cómo los modelos separan los datos.

    🧪 Comparación entre modelos

    Aquí un resumen de cómo podrías comparar tres modelos:

    ModeloSilhouette ScoreDavies-BouldinCalinski-HarabaszK-means (k=3)0.520.88137.6Hierarchical (ward)0.470.91120.3DBSCAN (eps=1.2)0.600.77150.8

    Puedes construir esta tabla automáticamente si guardas los resultados de cada modelo.

    🧠 Consejo

    • K-means funciona mejor con grupos esféricos bien definidos.
    • Hierarchical es útil si te interesa una estructura jerárquica (como dendrogramas).
    • DBSCAN detecta outliers y clústeres de forma arbitraria (ideal en datos con ruido).
    Angel Martínez

    Angel Martínez

    student•
    hace un año

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads