“Aprende francés con 15 minutos al día, 21 días gratis”

Asier Dorronsoro
Saturdays.AI
Published in
7 min readJun 22, 2021

Tengo 26 años y no hablo francés. Hace dos semanas que me he movido a Ginebra, tengo 1 app de traducción en mi móvil, realizo unas 50 búsquedas en diccionarios online al día y estoy deseando apuntarme a una academia de idiomas.

He sido expuesto a unos 150 000 anuncios en las últimas dos semanas, pero aún no he visto ninguno de cómo aprender francés.

Es realmente curioso, con los mismos dispositivos (móvil y ordenador) recibo anuncios de aprender inglés en España, pero no de aprender francés en Ginebra.

Por lo tanto, con la misma inocencia de ser un novato en la industria del marketing, pero la pasión, convicción y necesidad de que hay margen para hacer un Marketing más relevante para el consumidor, expongo una versión mejorada de CROSS — X.

¡Cross-X marketing spend optimization!

Cross-X es una herramienta de optimización de presupuesto de marketing digital que maximiza las conversiones al menor coste posible. Además, el proyecto es lo suficientemente flexible como para resolver cualquiera de estas dos preguntas de negocio:

1. Split del presupuesto entre canales diferentes: Facebook, YouTube, TikTok, Publicidad programática, CRM

2. Split del presupuesto entre campañas diferentes de un mismo canal

Para ello, dispone de tres áreas de trabajo completamente dependientes:

1. Preprocesado y reducción de dimensionalidad.

2. Predicción de la variable objetivo.

3. Algoritmo de asignación de presupuesto.

Todas ellas habían sido desarrolladas previamente haciendo uso de un dataset de Kaggle y algoritmos de ML supervisado y no supervisado. No obstante, a través de este proyecto he querido ser más pragmático y realizar una versión más ajustada a la realidad.

PREPROCESADO Y REDUCCIÓN DE DIMENSIONALIDAD

El dataset de origen ha cambiado por completo. El anterior desarrollo partía de un dataset de Kaggle que disponía de 100 variables categóricas y unos benchmark de ML supervisado de 0.86 AUC. Es decir, independientemente del modelo que utilizase los resultados eran prometedores.

Sin embargo, esta vez he desarrollado un dataset que dispone de 2048 variables categóricas, continuas y temporales. Para ello, he hecho uso de la librería faker junto con otras técnicas de Data Augmentation. (¡Realizaré un post en el futuro sobre cómo lo he hecho explicando con un poco más de detalle esta parte!)

Con el dataset de partida completamente cambiado, más ajustado a la realidad, he desarrollado un pipeline que me permite reducir la dimensionalidad de una forma rápida, simple y eficaz. Estas son las tareas que desarrollo a través del script:

El proceso termina con un dataset de 544 variables, 3.76x menos variables, manteniendo prácticamente la misma información que el dataset de inicio.

Todo el código está disponible en GitHub incluyendo el razonamiento, la secuencia lógica de las acciones y los motivos por los que he descartado otras técnicas como el PCA.

PREDICCIÓN DE LA VARIABLE OBJETIVO

Esta es la fase del proyecto en la que se aplican los aprendizajes de los módulos de Machine Learning y Deep Learning. El objetivo consiste en maximizar la predictibilidad de un modelo algorítmico para resolver un problema de clasificación binario con un dataset desbalanceado con una proporción 20–80.

Antes de abordar el desarrollo de los modelos se ha comenzado por la definición del problema y la selección de variables. En este caso, los falsos positivos y falsos negativos son importantes, y por lo tanto la selección del modelo óptimo, y su hiperparametrización será en base a los resultados obtenidos en: Precision, Recall y F1.

Por otra parte, se han desarrollado una serie de variables globales y funciones que permiten comparar modelos de una forma mucho más sencilla y elegante:

Una vez el pipeline está definido se opta por definir unos benchmark, y la premisa establecida será la siguiente:

Los costes computacionales y la falta de explicabilidad que se obtiene a través de Deep Learning se tiene que justificar con unos resultados considerablemente mejores de lo que se puede obtener a través de modelos de Machine Learning supervisado.

Así, se realiza un ejercicio de selección de modelos e hiperparametrización que nos define un Best In Class de 0.46 F1 score. Estos son los modelos que se han testado:

Para cada uno de estos modelos se han testado las técnicas de UnderSampling, OverSampling y asignaciones de pesos sobre dataset desbalanceado.

Lo realmente curioso es que los resultados apenas mejoran entre una LogReg y un LightGBM, y en todos los modelos la técnica del undersampling resulta mucho más efectiva que la del oversampling. Esporádicamente se ha probado por testar la técnica de Data Augmentation vía SMOTE, pero los resultados no mejoran.

Una vez definido el benchmark, es hora de adentrarse en el área de Deep Learning. Debido a la falta de experiencia en el área se decide atacar el problema observando las variables críticas para la definición de la arquitectura final: Batch size, Épocas, neuronas por cada layer, y el número de layers.

Al mismo tiempo, se definen aquellas variables de carácter estático debido a la naturaleza del problema:

  • Función de Early Stopping
  • Input shape de la primera capa
  • Numero de neuronas la última capa
  • Función de activación de la última capa
  • Función de perdida
  • Función de activación de las neuronas — Se opta por la ReLU y la Leaky ReLU. Los tiempos de computación y los beneficios que aportan son evidentes.

Con todo esto definido, se empieza el proceso de modelling con una arquitectura que habíamos utilizado para un problema de datos tabulares en uno de los Challenge que vimos en el módulo. Hace uso de redes conv1d, pero la arquitectura de la capa termina siendo demasiado compleja.

Por ello, se opta por seguir un proceso metódico en el que se va incrementando la complejidad de la red hasta encontrar aquella estructura que maximiza la precisión, el recall y el F1. Para poder comparar un modelo con el otro es importante que seamos capaces de reaplicar los resultados de forma que el análisis sea lo más objetivo posible. Se definen el random seed de Numpy, el random seed de TensorFlow y se guardan los pesos de inicialización en Google Drive sobre cada una de las arquitecturas que se desarrollan. Repito, es fundamental guardar los pesos de inicialización de la red para poder reaplicar los resultados de una red neuronal.

El objetivo de este proceso es llegar a tener un good feeling para saber por dónde van los tiros de forma que podamos hiperparametrizar de una forma efectiva.

No obstante, se observa que a mayor complejidad de la red aporta peores resultados, de modo que se llega a la conclusión de que la arquitectura de la red tiene que tener de 1–3 capas con unas dimensiones de 8 a 128 neuronas cada una.

Durante el ejercicio de hiperparametrización se hacen uso de varias técnicas:

Independientemente de que las técnicas de hiperparametrización no dan unos resultados magníficos, he querido desarrollar una librería de funciones y código que me permita hacer uso de cada una de estas técnicas en el futuro.

CONCLUSIÓN

En definitiva, los resultados obtenidos a través de la red no mejoran a los obtenidos a través de ML supervisado. La simpleza de la arquitectura hace ver que los datos que dispone este proyecto no son de buena calidad y por lo tanto habrá que trabajar en el desarrollo de un sistema de información que ayude a las compañías a tener una estrategia de datos para poder maximizar los resultados predictivos de Cross-X.

Por último, me gustaría destacar que ha habido mejoras significativas en todas las técnicas y fases del proyecto:

  • Se han mejorado las funciones de la primera versión de Cross-X.
  • Se ha incluido una técnica de hiperparametrización Bayesiana para ML Supervisado.
  • Se ha desarrollado una metodología para trabajar con redes neuronales.
  • Se han implementado 4 técnicas de hiperparametrización de redes neuronales.
  • Y, sobre todo, se han adquirido muchísimos aprendizajes que se han materializado en funciones que se pueden apreciar en cada uno de los tres Jupyter Notebooks resultantes de este proyecto.

PRÓXIMOS PASOS

El proyecto tiene que seguir enfrentándose a la realidad. Como consecuencia, las áreas de trabajo a futuro son:

- Mejorar la parte explicativa de los modelos de forma que Cross-X pueda influenciar en la estrategia de datos de las compañías que lo utilizan.

- Desarrollar una interfaz web que permita a los profesionales del marketing iterar y jugar con la herramienta.

- Seguir profundizando en técnicas predictivas.

  • Mejorar la parte explicativa de los modelos de forma que Cross-X pueda influenciar en la estrategia de datos de las compañías que lo utilizan.
  • Desarrollar una interfaz web que permita a los profesionales del marketing iterar y jugar con la herramienta.
  • Seguir profundizando en técnicas predictivas.
  • Profundizar y mejorar la parte algorítmica de asignación de presupuesto.

GITHUB

https://github.com/dorronsoro/algorithmicmarketingV1

EQUIPO

Asier Dorronsoro Aldaz

AGRADECIMIENTOS

Me gustaría agradecer al equipo de Saturdays.AI por la formación, clases, gestión e ilusión que han mostrado en todo momento. El módulo de Deep ha sido una pasada, con profesores realmente formados que además de dar clases teóricas ofrecían una perspectiva menos académica pero más humana acompañados, eso sí, de un buen café.

¡Muchas gracias! Mila esker!

--

--