Este repositorio recoge los experimentos realizados en el WP4 para analizar si las keywords utilizadas en campañas publicitarias pueden agruparse según su similitud semántica.
Para ello se han probado distintas técnicas de vectorización y clustering. Los experimentos principales comparan TF-IDF y embeddings contextuales con K-Means y HDBSCAN.
El ROI no se incorpora a los vectores ni se utiliza para calcular la similitud entre keywords. En varios experimentos se emplea como criterio de filtrado y, una vez generados los clústeres, como variable de análisis para comprobar cómo se distribuyen las keywords con rendimiento positivo y negativo dentro de cada grupo.
Los datos utilizados son internos y no forman parte del repositorio.
Los experimentos se han planteado con los siguientes objetivos:
- Identificar grupos de keywords con similitud semántica dentro de cada destino.
- Intentar reconocer patrones de agrupamiento de las keywords.
- Comparar distintas técnicas de representación de texto.
- Evaluar la coherencia de los grupos obtenidos.
- Detectar keywords que no encajan claramente en ningún clúster.
- Analizar la distribución del ROI dentro de los grupos semánticos.
- Localizar términos asociados a rendimientos bajos o negativos.
- Evaluar el comportamiento de los métodos sobre conjuntos de distinto tamaño.
El dataset original se encuentra almacenado en formato Parquet y contiene aproximadamente 35 millones de registros, de los cuales alrededor de 9 millones corresponden a keywords únicas.
Los registros incluyen información mensual y están clasificados por destino. El análisis inicial permite estudiar:
- el número de keywords por destino;
- la distribución mensual;
- las keywords que aparecen en varios periodos;
- la presencia de duplicados;
- la proporción de keywords con ROI igual o distinto de cero;
- la evolución del ROI a lo largo de los meses.
Para los experimentos se seleccionan subconjuntos filtrados por destino. Esto permite trabajar con escenarios de diferente volumen y comparar la eficacia y escalabilidad de las técnicas utilizadas.
Los nombres reales de los destinos y las keywords no se publican en el repositorio.
El trabajo se divide en tres etapas principales:
- Vectorización de las keywords.
- Aplicación de algoritmos de clustering.
- Evaluación e interpretación de los resultados.
Dataset
↓
Análisis y filtrado por destino
↓
Preparación y agregación por keyword
↓
Vectorización
├── TF-IDF
├── Word2Vec
└── Sentence Transformers
↓
Clustering
├── K-Means
├── HDBSCAN
└── BERTopic
↓
Evaluación de los grupos
↓
Análisis del ROI
TF-IDF transforma las keywords en vectores a partir de la frecuencia e importancia de sus términos.
Este método se utiliza como punto de partida porque es rápido, fácil de interpretar y permite detectar coincidencias entre palabras y expresiones.
Su principal limitación es que la proximidad entre dos keywords depende fundamentalmente del vocabulario compartido. Dos expresiones con una intención similar pueden aparecer alejadas si utilizan palabras diferentes.
En el informe esta línea de trabajo se describe como vectorización con BERT. En el código se implementa mediante Sentence Transformers utilizando el modelo:
all-MiniLM-L6-v2
Este modelo genera una representación de la keyword completa y permite comparar expresiones por su proximidad semántica, aunque no compartan exactamente los mismos términos.
Word2Vec se utiliza como prueba complementaria.
El modelo genera un vector para cada palabra y la representación de una keyword se obtiene calculando la media de los vectores de las palabras que la componen.
K-Means divide las keywords en un número fijo de grupos.
El número de clústeres debe establecerse antes del entrenamiento, por lo que se prueban diferentes valores de K y se comparan mediante métricas de validación.
HDBSCAN agrupa las observaciones a partir de zonas de mayor densidad.
A diferencia de K-Means, no obliga a asignar todas las keywords a un grupo. Las observaciones que no pertenecen claramente a ningún clúster reciben la etiqueta -1 y se consideran ruido.
BERTopic se incluye como una prueba exploratoria para comprobar si puede facilitar la identificación y descripción automática de temas.
No forma parte de las conclusiones principales del informe.
Los experimentos utilizan distintas métricas y técnicas de visualización.
Se analiza la evolución de la inercia al aumentar el número de clústeres.
El objetivo es localizar un punto a partir del cual el incremento de K deja de producir una mejora importante.
El coeficiente de silueta permite evaluar la cohesión interna de los grupos y su separación respecto a los demás clústeres.
Un valor más alto indica una mejor separación.
El notebook de validación también calcula:
- Calinski-Harabasz.
- Davies-Bouldin.
Estas métricas se utilizan para complementar el método del codo y el coeficiente de silueta.
PCA y UMAP se utilizan para proyectar las representaciones a dos dimensiones y facilitar la visualización de:
- la distribución de los grupos;
- las zonas de solapamiento;
- las keywords alejadas de los grupos principales;
- las observaciones clasificadas como ruido.
Estas proyecciones se utilizan como apoyo visual y no sustituyen el análisis del contenido de los clústeres.
| Experimento | Tipo | Situación |
|---|---|---|
| TF-IDF + K-Means | Experimento principal | Incluido en el informe |
| Sentence Transformers + K-Means | Experimento principal | Incluido en el informe |
| Sentence Transformers + HDBSCAN | Experimento principal | Incluido en el informe |
| TF-IDF + UMAP + HDBSCAN | Comparación adicional | Incluido en los notebooks |
| Word2Vec + K-Means | Prueba exploratoria | Incluido en los notebooks |
| BERTopic | Prueba exploratoria | Incluido en los notebooks |
| TF-IDF + K-Means con datos sintéticos | Prueba técnica | exploratoria |
En el experimento con TF-IDF y K-Means se seleccionaron seis clústeres.
El método del codo no proporcionó un resultado concluyente sobre el número óptimo de grupos.
En la representación bidimensional los clústeres parecen estar relativamente diferenciados. Sin embargo, al revisar las keywords de cada grupo, la coherencia semántica es limitada.
Los grupos tienden a formarse alrededor de palabras compartidas. Esto permite identificar patrones léxicos, pero no garantiza que todas las keywords tengan la misma intención.
Los embeddings generados con Sentence Transformers producen una representación más rica que TF-IDF.
Los clústeres aparecen más dispersos en la proyección bidimensional, pero la revisión de las keywords muestra agrupamientos semánticamente más coherentes.
Esto indica que la separación visual en dos dimensiones no es suficiente para determinar la calidad de los grupos. La interpretación debe completarse revisando las keywords representativas de cada clúster.
HDBSCAN se utiliza para detectar grupos basados en densidad y separar las keywords que no encajan claramente en ninguno de ellos.
Las observaciones consideradas atípicas se agrupan bajo la etiqueta:
-1
Este grupo se interpreta como ruido o conjunto de keywords sin una pertenencia estable.
Los resultados muestran grupos de menor tamaño y, en determinados casos, con una mayor afinidad semántica entre sus elementos. No obstante, la distribución continúa siendo dispersa y depende de los parámetros utilizados.
Después de generar los clústeres se analiza el ROI de las keywords que forman cada grupo.
Las visualizaciones permiten distinguir keywords con valores positivos y negativos y observar su posición dentro del espacio semántico.
Los resultados muestran que dentro de un mismo clúster pueden aparecer keywords con comportamientos de rendimiento diferentes.
Por tanto, la similitud semántica no implica necesariamente que las keywords presenten un ROI similar.
Los notebooks se encuentran en:
saint-experiments-wp4/notebooks/
notebooks/
├── data_analysis.ipynb
├── data_preparation.ipynb
├── synthetic_tfidf_kmeans_smoke_test.ipynb
├── vectorization_and_kmeans_validation.ipynb
├── sentence_transformers_kmeans.ipynb
├── sentence_transformers_hdbscan.ipynb
├── tfidf_umap_hdbscan.ipynb
├── word2vec_kmeans.ipynb
└── bertopic_exploration.ipynb
Realiza el análisis inicial del dataset.
El notebook:
- carga los archivos Parquet mediante PyArrow;
- calcula el número total de filas y keywords únicas;
- compara las keywords con ROI igual y distinto de cero;
- obtiene el mismo análisis desglosado por destino;
- localiza keywords duplicadas;
- identifica keywords repetidas dentro de un mismo destino;
- recoge los meses y valores de ROI asociados a las keywords repetidas;
- calcula el número de keywords únicas por destino;
- calcula el número de keywords únicas por destino y mes;
- genera visualizaciones de la distribución mensual.
Este notebook se corresponde con el apartado de análisis descriptivo de los datos del informe.
Prepara el conjunto que se utiliza posteriormente en los experimentos de vectorización y clustering.
El notebook:
- carga el dataset Parquet;
- muestra el esquema y el número total de registros;
- filtra los datos por destino;
- selecciona registros con ROI distinto de cero;
- revisa las columnas, tipos y consumo de memoria;
- calcula estadísticas sobre keywords, meses, países y categorías;
- analiza la distribución del ROI;
- obtiene rankings por impresiones, clics y ROI;
- agrega los registros por keyword;
- suma impresiones, clics, costes, conversiones e ingresos;
- calcula CTR, CPC, tasa de conversión, ROI, CPA e ingresos por clic;
- aplica un filtro mínimo de impresiones y clics;
- analiza la longitud y el número de palabras de las keywords;
- guarda el conjunto preparado para el clustering.
El archivo resultante se utiliza como entrada en el notebook de validación de vectorizaciones.
Es una prueba técnica con un conjunto pequeño de keywords sintéticas.
No utiliza datos internos y no forma parte de las conclusiones del informe.
El notebook:
- crea un pequeño dataset de ejemplo;
- limpia el texto y elimina stopwords;
- genera vectores TF-IDF;
- aplica K-Means;
- muestra las keywords asignadas a cada grupo;
- compara diferentes valores de
K; - calcula la inercia y el coeficiente de silueta;
- representa los clústeres mediante PCA;
- ejecuta una prueba adicional con DBSCAN para detectar outliers.
Su finalidad es comprobar que el entorno y el flujo básico de clustering funcionan sin necesidad de acceder al dataset privado.
Compara las distintas técnicas de vectorización y evalúa diferentes configuraciones de K-Means.
El notebook:
- carga el dataset preparado;
- normaliza las keywords;
- genera una representación TF-IDF;
- entrena un modelo Word2Vec;
- obtiene un vector por keyword a partir de la media de sus palabras;
- genera embeddings con
all-MiniLM-L6-v2; - utiliza Sentence Transformers como representación principal cuando está disponible;
- prueba valores de
Kcomprendidos entre 3 y 15; - calcula inercia, Silhouette, Calinski-Harabasz y Davies-Bouldin;
- genera la gráfica comparativa de las métricas.
Este notebook permite comparar los métodos bajo un mismo procedimiento de validación.
Contiene el experimento principal con Sentence Transformers y K-Means.
El notebook:
- carga el dataset;
- filtra los registros por destino y ROI distinto de cero;
- normaliza las keywords;
- genera embeddings por lotes con
all-MiniLM-L6-v2; - prueba diferentes valores de
K; - calcula inercia y coeficiente de silueta;
- selecciona una configuración a partir de las métricas;
- entrena el modelo K-Means final;
- asigna una etiqueta a cada keyword;
- proyecta los embeddings mediante UMAP o PCA;
- representa los grupos en dos dimensiones;
- muestra keywords representativas por clúster;
- incorpora impresiones, clics y ROI a las tablas de análisis.
Evalúa HDBSCAN sobre los embeddings generados con Sentence Transformers.
El notebook:
- carga y filtra el dataset;
- normaliza las keywords;
- genera embeddings con
all-MiniLM-L6-v2; - prueba diferentes valores de
min_cluster_size; - prueba diferentes valores de
min_samples; - calcula el número de clústeres obtenido en cada combinación;
- calcula el número de observaciones clasificadas como ruido;
- calcula el coeficiente de silueta;
- almacena los resultados en una tabla;
- representa la variación del número de clústeres en función de los parámetros.
Este notebook se utiliza para estudiar la sensibilidad de HDBSCAN y seleccionar una configuración adecuada.
Evalúa una combinación alternativa de TF-IDF, UMAP y HDBSCAN.
El flujo aplicado es:
Keywords
↓
TF-IDF
↓
UMAP
↓
HDBSCAN
El notebook:
- carga y filtra el dataset;
- genera vectores TF-IDF con unigramas y bigramas;
- reduce la dimensionalidad con UMAP;
- utiliza una representación de cinco dimensiones para el clustering;
- genera una proyección independiente de dos dimensiones para la visualización;
- aplica HDBSCAN;
- identifica los clústeres y el ruido;
- incorpora las etiquetas al DataFrame;
- genera una visualización interactiva con Plotly;
- permite consultar la keyword, el ROI y el clúster;
- analiza las keywords con ROI positivo dentro de uno de los grupos.
Este experimento sirve como comparación con HDBSCAN aplicado sobre embeddings contextuales.
Contiene una prueba exploratoria con Word2Vec y K-Means.
El notebook:
- filtra el dataset por destino y ROI distinto de cero;
- limita el tamaño de la muestra cuando el volumen supera las 500.000 filas;
- tokeniza las keywords;
- entrena un modelo Word2Vec de 100 dimensiones;
- calcula el vector de cada keyword mediante la media de sus palabras;
- aplica K-Means con cinco clústeres;
- calcula el coeficiente de silueta;
- calcula la distancia de cada keyword a su centroide;
- ordena las keywords según su proximidad al centro del grupo;
- muestra las keywords más representativas junto con ROI, clics e impresiones.
Esta prueba se utiliza como comparación entre TF-IDF y Sentence Transformers.
Contiene una primera prueba con BERTopic.
El notebook:
- carga el dataset Parquet;
- filtra las keywords por destino;
- genera embeddings con
all-MiniLM-L6-v2; - crea un modelo BERTopic configurado para textos en inglés;
- obtiene el tema y la probabilidad asignados a cada keyword;
- añade esta información al DataFrame;
- muestra el resumen de temas generado por el modelo.
Este experimento es exploratorio y no forma parte de las conclusiones principales del informe.
El flujo principal puede ejecutarse en el siguiente orden:
data_analysis.ipynb
↓
data_preparation.ipynb
↓
vectorization_and_kmeans_validation.ipynb
↓
sentence_transformers_kmeans.ipynb
↓
sentence_transformers_hdbscan.ipynb
Los siguientes notebooks son pruebas complementarias o independientes:
synthetic_tfidf_kmeans_smoke_test.ipynb
tfidf_umap_hdbscan.ipynb
word2vec_kmeans.ipynb
bertopic_exploration.ipynb
Los experimentos muestran diferencias claras entre las representaciones utilizadas.
Con TF-IDF y K-Means se obtienen grupos parcialmente diferenciados, pero con una coherencia semántica limitada al revisar las keywords de cada clúster.
Los embeddings contextuales generan agrupamientos más coherentes, aunque su representación en dos dimensiones presenta una mayor dispersión.
HDBSCAN facilita la detección de outliers y permite separar en un grupo de ruido las keywords que no presentan una pertenencia clara.
En conjunto, los resultados indican que los embeddings contextuales son más adecuados que TF-IDF para tareas de segmentación y análisis temático de keywords.
El análisis del ROI aporta información adicional sobre el comportamiento de los grupos, pero no se observa que todas las keywords semánticamente próximas tengan necesariamente un rendimiento similar.
A partir de los resultados obtenidos se plantean las siguientes líneas de continuidad:
- ampliar el análisis con más datos;
- comparar los resultados entre distintos destinos;
- ajustar los parámetros de HDBSCAN;
- evaluar la estabilidad de los clústeres;
- mejorar la interpretación de los grupos;
- generar una segmentación centrada en campañas concretas;
- estudiar con más detalle la relación entre los grupos semánticos y el ROI.
- GPU: NVIDIA A100 PCIe.
- Memoria GPU: 40 GB.
- Driver NVIDIA: 550.54.14.
- CUDA soportada: 12.4.
Los notebooks utilizan principalmente:
- pandas;
- NumPy;
- PyArrow;
- scikit-learn;
- Sentence Transformers;
- PyTorch;
- HDBSCAN;
- UMAP;
- Plotly;
- Gensim;
- NLTK;
- BERTopic;
- Matplotlib;
- Seaborn.
El repositorio no incluye los datos originales.