Trabajo para LiftIgniter, una empresa que utiliza el aprendizaje automático para ayudar a los sitios web a ofrecer recomendaciones personalizadas. Mi función implica una combinación de investigación e implementación de algoritmos de ciencia de datos y aprendizaje automático. Como esta pregunta se refiere específicamente a la parte de aprendizaje automático, escribiré más sobre esa parte. Tengo la intención de escribir una respuesta separada sobre el componente de ciencia de datos / análisis de datos de mi trabajo, y lo enlazaré desde aquí.
Así es como operamos para un cliente típico: nuestro cliente instala nuestra baliza de seguimiento en su sitio web que recopila las actividades del usuario en el sitio web (no recopilamos ninguna información de identificación personal sobre los usuarios). Los sitios web de nuestros clientes también ponen algunos Javascript nuestros para mostrar un widget con nuestras recomendaciones (esto puede reemplazar un widget que ya tenían, o puede ser un nuevo widget). El problema del aprendizaje automático, esencialmente, es utilizar la actividad actual e histórica en el sitio (por ese usuario y otros) para entregar recomendaciones que el usuario encuentre más relevantes (medido por alguna métrica como la tasa de clics, el tiempo total en sitio, conversión).
El objetivo es proporcionar al editor un CTR, tiempo en el sitio y métricas de conversión dramáticamente mejorados. Una mejora en esas métricas significa una mejora en los ingresos del editor.
Este es el principal desafío: la tecnología que hemos desarrollado (y continuamos mejorando) es común en todos nuestros sitios web de clientes, aunque los diferentes sitios web tienen objetivos de optimización específicos diferentes. Queremos que todo nuestro proceso, que va desde la recopilación de la actividad del usuario a través de nuestra baliza de seguimiento, pasando por el procesamiento de todos los datos mediante algoritmos de aprendizaje automático, hasta la presentación de recomendaciones en tiempo real, utilice la misma base de código. En la actualidad, cada vez que agregamos un nuevo cliente, descubrimos algunas mejoras que podríamos hacer en nuestra base de código general que ayudaría a resolver problemas específicos de ese cliente. Intentamos agregar el código a la base de código general, de la manera más generalizable posible, y luego usar la configuración específica del cliente para especificar qué transformaciones queremos para un cliente en particular.
- Buenos algoritmos de optimización para la regresión logística en grandes conjuntos de datos : lo que queremos minimizar es la ingeniería de características específicas del cliente y el análisis de datos en profundidad. Es inevitable cierta cantidad de inmersiones profundas específicas del cliente. Sin embargo, queremos minimizar esto. Entonces, la esperanza es que, en lugar de seleccionar cuidadosamente las 100 o 200 características que serían mejores para hacer nuestra predicción, simplemente arrojemos una gran cantidad de características al modelo (potencialmente, varios millones de características o incluso cientos de millones de características) y luego use nuestro algoritmo de optimización (con opciones de regularización apropiadas) para separar el trigo de la paja (en términos de características) y llegar a buenas predicciones. Por lo tanto, utilizamos algoritmos que garantizan una convergencia rápida en grandes conjuntos de datos. Los algoritmos que utilizamos son esencialmente una mezcla de algoritmos existentes en el dominio público y muchas innovaciones. Usamos lo mejor de lo que existe y luego iteramos y mejoramos constantemente. Un ejemplo de uno de los algoritmos de big data que utilizamos es la respuesta de Vipul Naik a ¿Cuáles son algunos algoritmos de descenso de gradiente rápido? (Esto fue desarrollado por un equipo de Google que incluye a Indraneel Mukherjee, la persona que ahora es el CEO de nuestra empresa). No todo es necesario para todos los clientes, pero solo tener la mezcla completa nos ahorra en la exploración manual de ingeniería de características y hace que nuestro negocio sea realmente escalable.
- Generación de datos de entrenamiento : una vez establecido (1), no tenemos que preocuparnos de si nuestro algoritmo obtiene el mejor modelo para los datos de entrenamiento dados. Pero aún debemos preocuparnos por si los datos de capacitación que generamos describen con precisión la situación del mundo real para la que estamos tratando de optimizar. Estos son algunos desafíos del tipo que enfrenta nuestra empresa: (a) podemos generar ejemplos positivos basados en clics reales, pero ¿cómo generamos ejemplos negativos? (b) ¿cómo generamos datos de capacitación para un sitio web si no han mostrado ninguna recomendación? es decir, ¿cómo “iniciamos en frío” nuestras recomendaciones? (c) si comenzamos a mostrar recomendaciones basadas en algún modelo, la gente seguirá haciendo clic en esas recomendaciones simplemente porque son las únicas disponibles. ¿Cómo salimos de este “óptimo local”? (d) si mostramos múltiples recomendaciones, ¿mostrar las recomendaciones que tienen la máxima probabilidad de que se haga clic en realidad maximiza la probabilidad conjunta de que al menos se haga clic en una de ellas? ¿Qué pasa si todos son muy similares?
- Relacionando métricas fuera de línea y en línea : el aprendizaje automático hace un gran trabajo al hacer predicciones para los datos existentes . Por lo tanto, puede hacer un gran trabajo al responder preguntas como: “¿es más probable que las personas en la página A hagan clic en la página B o la página C?” Pero la pregunta que realmente queremos responder es “¿cómo hacemos que la gente haga clic más?” o “¿Cuál es el CTR óptimo?” Idealmente, responder la primera pregunta puede responder la segunda. Pero la traducción matemática no es del todo sencilla, particularmente debido a la gran flexibilidad que tenemos con respecto a la generación de datos de capacitación.
- Modificación del comportamiento del usuario : a veces, el objetivo es cambiar el comportamiento del usuario de una manera más no trivial que simplemente maximizar el CTR. Por ejemplo, tal vez queremos mostrar más contenido archivado más antiguo. Idealmente, cualquier modificación deseada del comportamiento del usuario puede convertirse en un problema de optimización de aprendizaje automático correspondiente. Pero en algunos casos, el modelo que se ajusta bien a los datos históricos no es el adecuado para la modificación del comportamiento del usuario. Lo que podemos hacer en ese caso es tomar ese modelo y aplicarle algunas correcciones para mover el comportamiento del usuario en una dirección particular.
- Intercambiando la complejidad del modelo (tanto en términos del tamaño del modelo como del tiempo necesario para entrenar) y la precisión del modelo : ¿Elegimos un modelo de 1000 características que se pueda entrenar en cinco minutos, o un modelo de 100000 características que demore media hora en entrenar ? Este último probablemente funciona mejor en las métricas fuera de línea (porque está mucho más cerca de lo óptimo). Si las métricas fuera de línea y las métricas en línea para las que estamos tratando de optimizar (cf. (3) y (4)) están suficientemente entrelazadas, entonces sí, probablemente valga la pena. Si no, probablemente no lo sea. Esto es algo que queremos automatizar cada vez más a medida que nuestro proceso de generación de datos de capacitación (cf. (2)) y nuestra función de costos se acercan cada vez más a lo que realmente estamos tratando de optimizar en línea. (Tenga en cuenta que el tamaño del modelo también afecta la complejidad temporal del servicio del modelo, es decir, la calificación de los candidatos).
- Estrategias de preselección : las recomendaciones que hacemos provienen de un inventario de artículos (artículos, productos que se venden, anuncios, etc.). Si el número de artículos de inventario es muy grande (digamos, más de 10,000), entonces no es realista poder calificar y clasificar todos estos artículos en tiempo real cuando alguien carga una página web. Por lo tanto, utilizamos listas cortas de candidatos previamente calculadas y las clasificamos solo dentro de ellas. La estrategia y el modelo preseleccionados pueden interactuar de manera divertida. Una buena estrategia de preselección a veces puede compensar un mal modelo (porque en primer lugar solo enumera cosas que eran decentes), mientras que una mala estrategia de preselección puede destruir incluso un buen modelo.
- Nuevos paradigmas para la extracción de características : por ejemplo, podríamos introducir algoritmos NLP más sofisticados para extraer características basadas en texto de artículos a los que no teníamos acceso antes. Dicha extracción de características puede ser particularmente útil en casos en los que no hay suficientes datos de flujo de clics, porque podemos usar pesos aprendidos en esas características para hacer predicciones para las páginas a pesar de no tener datos de flujo de clics. Sin embargo, descubrir qué nuevos paradigmas se necesitan es más un problema de ciencia de datos (aunque la implementación real de los paradigmas es un problema de LD), así que lo explicaré en otra parte.
Hacer aprendizaje automático en el mundo real se trata de compromisos y limitaciones constantes. Siempre estoy optimizando para la mejor solución, pero debo tener en cuenta varias limitaciones que uno no puede ver en una situación académica o similar. Desde mi punto de vista, esto es mucho más divertido y útil: la investigación académica es increíblemente útil (y nosotros, como todos los demás, hemos aprendido de los gigantes) pero no siempre es aplicable. Uno debe traducir la investigación al mundo real donde los usuarios reales tocan, sienten y usan nuestras herramientas cada segundo. Para mí, eso es aprendizaje automático en un entorno empresarial y es muy emocionante.
PD: corrí esta respuesta de Adam Spector, mi colega de LiftIgniter que trabaja en ventas y desarrollo de negocios, y he incorporado algunas de sus sugerencias. No obstante, esta respuesta representa mi punto de vista personal y no necesariamente el punto de vista de la empresa o de cualquiera de mis colegas.