Analítica web
Reflexiones desde el mercado español de Analítica Web

Machine Learning y Support Vector Machines: porque el tiempo es dinero

Se lee en 4 minutos

Hace ya algún tiempo encontré una frase que merece la pena compartir:

Las redes neuronales son la segunda mejor forma de hacer cualquier cosa” (John Denker)

Si su autor me lo permite, me gustaría modificarla y extenderla no solo a redes neuronales, sino a machine learning de forma genérica. La mejor forma de resolver un problema es disponer de una gran cantidad de información al respecto (con la consecuente inversión de tiempo para su análisis y solución). Por tanto, es lógico pensar que la segunda mejor opción sea aprender de la experiencia, y, a pesar de que pueda existir cierta posibilidad de error en la solución, este se compense con el ahorro de tiempo conseguido. El tiempo apremia, y no siempre podemos permitirnos la mejor solución.

En el mundo digital publicitario nos encontramos con multitud de situaciones que nos gustaría predecir: ¿cuántas visualizaciones tendrá mi anuncio?, ¿qué tipo de usuario hará clic en este banner?, ¿cuánto dinero he de invertir?, etc. Estas preguntas dependen de multitud de circunstancias o variables, que si conseguimos modelar nos permitirán responder a cuestiones similares en el futuro.

En este ámbito, los algoritmos de machine learning están viviendo su auge en los últimos años. Hace poco vimos cómo el mismo Google presentó su Prediction API. Pero, ¿cómo funciona internamente? Evidentemente, descubrir los secretos de Google no es sencillo, pero en este post nos introduciremos en las bases de machine learning, de la mano de uno de los métodos más exitosos hasta el momento: las Máquinas de Vectores Soporte (Support Vector Machines), hermanas mayores de las ya conocidas redes neuronales.

¿Qué son las SVM?

Las Máquinas de Vectores Soporte (creadas por Vladimir Vapnik) constituyen un método basado en aprendizaje para la resolución de problemas de clasificación y regresión. En ambos casos, esta resolución se basa en una primera fase de entrenamiento (donde se les informa con múltiples ejemplos ya resueltos, en forma de pares {problema, solución}) y una segunda fase de uso para la resolución de problemas. En ella, las SVM se convierten en una “caja negra” que proporciona una respuesta (salida) a un problema dado (entrada).

Jana_1

¿Para qué podemos usar las SVM?

Los conceptos fundamentales son modelado y predicción en dos vertientes: clasificación y regresión.

Clasificación

Imaginemos que buscamos encontrar qué tipo de usuario tiene más probabilidad de hacer clic en un determinado banner. Está claro que esta decisión implica varias variables a tener en cuenta: no solo de las características del propio usuario, sino también podremos considerar su región geográfica, la tecnología empleada, día/hora en que se encuentra con el banner, etc. Si solo dos de estas variables fueran determinantes, podríamos encontrarnos en una situación similar a la de la imagen, donde el círculo negro identifica que el usuario hace clic, y el blanco que no. Con SVM podemos obtener la “superficie óptima” que delimitará el comportamiento clic – noclic de un usuario:

Jana_2

Digo “superficie” porque en un problema bidimensional como el anterior, esta superficie será una recta, si hubiera tres dimensiones sería un plano y, en el caso N-dimensional… un hiperplano de la dimensión correspondiente. Y digo “óptimo”, ya que esta superficie minimiza el posible error de clasificación, maximizando los márgenes entre cada elemento y el hiperplano obtenido. (Si buscáis la demostración matemática de esta afirmación, el enlace anterior de Vladimir Vapnik es la respuesta) 😉

¿Y si el problema no es lineal? No hay problema. SVM permite utilizar las llamadas funciones Kernel (no lineales). Estas funciones resuelven el problema de clasificación trasladando los datos a un espacio donde el hiperplano solución es lineal y, por tanto, más sencillo de obtener. Una vez conseguido, la solución se transforma, de nuevo, al espacio original:

Jana_3

Así, con una serie de datos de prueba tendremos caracterizada nuestra clasificación, es decir, nuestra SVM ha sido entrenada. Y tras este entrenamiento, conseguimos un modelo en base al que podremos clasificar cualquier otro caso existente en el futuro.

Regresión

En el problema previo de clasificación, la solución es categórica, es decir, pasa por determinar una etiqueta para clasificar un elemento de una u otra forma.

¿Y si queremos una solución numérica? Por ejemplo, si queremos determinar qué probabilidad hay de que un usuario vuelva a tu sitio, si queremos predecir el número de clics en el futuro, o qué cantidad de impresiones de un anuncio tendremos. En este caso estamos en un problema de regresión.

Siguiendo los mismos principios que para el caso anterior, la regresión se basa en buscar la curva que modele la tendencia de los datos y, según ella, predecir cualquier otro dato en el futuro.

Por ejemplo, si disponemos de un caso sencillo como el siguiente, donde la probabilidad de hacer clic en un determinado anuncio dependiera únicamente de la edad del usuario, podremos definir (siempre minimizando el error, como las SVM garantizan) una línea de tendencia:

Jana_4

De forma que podamos encontrar la respuesta (en este ejemplo, la probabilidad) para un nuevo caso:

Jana_5

En problemas no lineales siempre será posible utilizar una función tipo kernel que, tras resolver el problema en un espacio donde el mismo sea lineal, obtenga la curva que modele los datos:

Jana_6

¿Así de fácil?

Ya hemos visto los conceptos principales pero, evidentemente, la resolución de un problema con SVM maneja dificultad, teniendo en cuenta los siguientes aspectos:

  • ¿Qué queremos medir? En función de ello, sabremos si debemos resolver un problema de clasificación o regresión.
  • ¿Qué variables tenemos que considerar? Según esto, la dimensionalidad del problema varía. Por ejemplo, podríamos tener en cuenta: día, hora, fecha, web/app, localización del usuario (ciudad, país, etc.), tipo de dispositivo, navegador, etc., a más variables, mayor complejidad del algoritmo.
  • ¿El problema es lineal? ¿necesito kernel? Dependiendo de las variables consideradas, estaremos en uno u otro caso que debemos analizar. La respuesta a estas preguntas necesitaría un proceso de prueba y error hasta encontrar un kernel que satisfaga nuestras necesidades.

Es cierto que el método es complejo, pero también interesantes las soluciones que podremos conseguir con él, ¿verdad?

Escribe tu comentario

diecinueve − cinco =

Navegar