Volver a todos los artículos
Análisis de Datos

🤖💥 Explorando Equipos con Embeddings y TensorFlow Projector 🎯🔥

Por Santiago Blanco15 Mar 20255 min de lectura

Los embeddings son una herramienta fundamental en Machine Learning 🧠📊, permitiéndonos transformar texto en representaciones numéricas que capturan patrones semánticos. En este experimento, exploraremos cómo visualizar la estructura de un equipo de trabajo utilizando embeddings generados a partir de nombres, roles y habilidades. Además, lo llevaremos a otro nivel al agregar nuevas dimensiones de análisis y explorar aplicaciones prácticas en entornos empresariales. 🚀🔥


🚀 Paso 1: Generar los Embeddings en Google Colab 💻🔬

Para este experimento, utilizaremos sentence-transformers para convertir información textual en vectores numéricos.

Preparación de Datos y Definición del Equipo

# Instalación de Dependencias
!pip install -q sentence-transformers

# Importar Librerías
from sentence_transformers import SentenceTransformer
import numpy as np
import pandas as pd

# Definir la Estructura del Equipo
equipo = [
  {"nombre": "Carlos Ramírez", "rol": "Desarrollador Backend", "departamento": "Ingeniería", "habilidades": "Python, Django, PostgreSQL"},
  {"nombre": "Laura Sánchez", "rol": "Desarrolladora Frontend", "departamento": "Ingeniería", "habilidades": "React, TypeScript, CSS"},
  {"nombre": "Andrés Torres", "rol": "Ingeniero de Datos", "departamento": "Data Science", "habilidades": "SQL, Spark, AWS"},
  {"nombre": "Mariana López", "rol": "Gerente de Producto", "departamento": "Producto", "habilidades": "Agile, Scrum, UX"},
  {"nombre": "Fernando Gutiérrez", "rol": "Analista de Seguridad", "departamento": "Ciberseguridad", "habilidades": "Pentesting, Firewalls, SIEM"},
  {"nombre": "Daniela Pérez", "rol": "Diseñadora UX/UI", "departamento": "Diseño", "habilidades": "Figma, Adobe XD, Prototipado"},
  {"nombre": "Javier Medina", "rol": "DevOps Engineer", "departamento": "Infraestructura", "habilidades": "Docker, Kubernetes, Terraform"},
  {"nombre": "Camila Vargas", "rol": "Especialista en Marketing", "departamento": "Marketing", "habilidades": "SEO, SEM, Analytics"},
  {"nombre": "Ricardo Estrada", "rol": "Administrador de Base de Datos", "departamento": "IT", "habilidades": "MySQL, MongoDB, Backup"},
  {"nombre": "Sofía Herrera", "rol": "Científica de Datos", "departamento": "Data Science", "habilidades": "Machine Learning, NLP, TensorFlow"},
  {"nombre": "Gustavo Rojas", "rol": "Director de Tecnología", "departamento": "CTO", "habilidades": "Liderazgo, Arquitectura, Innovación"},
  {"nombre": "Marta Castro", "rol": "HR Manager", "departamento": "Recursos Humanos", "habilidades": "Selección, Clima Organizacional, Cultura"},
  {"nombre": "Pedro Jiménez", "rol": "Ingeniero de Software", "departamento": "Ingeniería", "habilidades": "Java, Spring Boot, Microservicios"},
  {"nombre": "Valentina Gómez", "rol": "Especialista en Inteligencia Artificial", "departamento": "AI", "habilidades": "Deep Learning, Computer Vision, Pytorch"},
  {"nombre": "Hugo Sánchez", "rol": "Administrador de Sistemas", "departamento": "Infraestructura", "habilidades": "Linux, Windows Server, AWS"},
  {"nombre": "Manuela Díaz", "rol": "Analista de Negocios", "departamento": "Negocios", "habilidades": "Data Analysis, Power BI, SQL"},
  {"nombre": "Roberto Mendoza", "rol": "QA Engineer", "departamento": "Calidad", "habilidades": "Test Automation, Selenium, JUnit"},
  {"nombre": "Diana Silva", "rol": "Ejecutiva de Ventas", "departamento": "Ventas", "habilidades": "CRM, Negociación, Prospección"},
  {"nombre": "Julio Paredes", "rol": "Gerente de Finanzas", "departamento": "Finanzas", "habilidades": "Contabilidad, Auditoría, Presupuestos"},
  {"nombre": "Paola Restrepo", "rol": "Community Manager", "departamento": "Marketing", "habilidades": "Redes Sociales, Branding, Engagement"},
  {"nombre": "Ernesto Salazar", "rol": "Analista de Datos", "departamento": "Data Science", "habilidades": "Python, Pandas, SQL"},
  {"nombre": "Liliana Vargas", "rol": "Experta en UX Research", "departamento": "Diseño", "habilidades": "User Testing, Encuestas, Entrevistas"},
  {"nombre": "Samuel Ocampo", "rol": "Ingeniero de Redes", "departamento": "Infraestructura", "habilidades": "Cisco, Firewall, VPN"},
  {"nombre": "Isabel Moreno", "rol": "Scrum Master", "departamento": "Producto", "habilidades": "Scrum, Kanban, Facilitación"}
]

Generación de Embeddings y Exportación

# Generar los Embeddings
model = SentenceTransformer('all-MiniLM-L6-v2')
nombres = [f"{persona['nombre']} - {persona['rol']} - {persona['departamento']} - {persona['habilidades']}" for persona in equipo]
embeddings = model.encode(nombres)

# Guardar los Vectores para Visualización
np.savetxt("tensor.tsv", embeddings, delimiter="	")

# Crear los Metadatos
with open("metadata.tsv", "w") as f:
  f.write("Nombre	Rol	Departamento	Habilidades
")
  for persona in equipo:
      f.write(f"{persona['nombre']}	{persona['rol']}	{persona['departamento']}	{persona['habilidades']}
")

Visualización interactiva de embeddings de equipo

Explora la distribución de miembros del equipo según sus roles y habilidades

🔍 Paso 2: Visualizar en TensorFlow Projector 📈

Una vez generados los embeddings, podemos visualizarlos en TensorFlow Projector para explorar las relaciones entre los miembros del equipo:

  1. Visita TensorFlow Projector
  2. Carga los archivos tensor.tsv y metadata.tsv generados
  3. Explora las relaciones entre los miembros del equipo basadas en sus roles y habilidades

🧩 Análisis de Resultados 📊

Al visualizar los embeddings, podemos observar patrones interesantes:

  • Agrupaciones por departamento: Personas del mismo departamento tienden a agruparse en el espacio vectorial
  • Proximidad por habilidades: Miembros con habilidades similares aparecen cercanos, incluso si pertenecen a diferentes departamentos
  • Identificación de puentes: Algunos perfiles actúan como "puentes" entre diferentes grupos, sugiriendo roles interdisciplinarios

🚀 Aplicaciones Prácticas 💼

Esta técnica de visualización tiene múltiples aplicaciones en entornos empresariales:

  • Formación de equipos: Identificar combinaciones óptimas de habilidades para proyectos específicos
  • Detección de brechas: Visualizar áreas donde faltan habilidades específicas en la organización
  • Planificación de capacitación: Identificar qué habilidades desarrollar para mejorar la conectividad del equipo
  • Análisis de rotación: Evaluar el impacto potencial de la salida de miembros clave del equipo

🔮 Próximos Pasos 🛣️

Para llevar este análisis al siguiente nivel, podríamos:

  • Incorporar datos de desempeño y satisfacción para enriquecer el análisis
  • Desarrollar un dashboard interactivo para explorar diferentes dimensiones
  • Implementar algoritmos de clustering para identificar automáticamente grupos naturales
  • Crear un sistema de recomendación para sugerir colaboraciones basadas en complementariedad de habilidades

🙏 Agradecimientos

Este proyecto no habría sido posible sin la inspiración y el apoyo de:

  • Fernando Zuluaga por sus valiosas ideas sobre visualización de datos
  • Santiago Castrillon por enseñarme técnicas avanzadas de visualización
  • Esteban y Lucho por su constante apoyo y retroalimentación durante todo el proceso

¿Has utilizado técnicas similares para analizar equipos o tienes ideas para extender este experimento? ¡Comparte tus pensamientos en los comentarios!

Comentarios

Cargando comentarios...