Data Science Toolkit - Modelos de regresión logística

Para respaldar la capacidad de nuestros clientes para predecir la respuesta del usuario a su publicidad digital, Xandr proporciona modelos personalizados basados en árboles de decisión. Desarrollamos un lenguaje de programación fácil de usar llamado Bonsai que permite a los usuarios crear árboles de decisión para completar dinámicamente los parámetros de las líneas de pedido.

Los árboles de decisión funcionan bien para modelos discretos simples que se asignan a formas tradicionales de predicción basadas en la focalización, pero luchan por modelar de manera efectiva lo que equivale a una matriz dispersa de muchas dimensiones y grandes características categóricas. Bonsai es fácil de entender y usar, pero no siempre es suficiente para las máquinas y los científicos de datos, ya que no permite la representación eficiente de las relaciones entre las características. Para estas necesidades más complejas, Xandr utiliza modelos de regresión logística.

La regresión logística es el enfoque básico para predecir la probabilidad de una respuesta binaria (hacer clic o no hacer clic; comprar o no comprar) a partir de una combinación de múltiples señales. Al utilizar datos de regresión logística, los científicos pueden ejecutar modelos más expresivos que producen predicciones más precisas y que se pueden entrenar rápidamente a gran escala. Al crear algoritmos personalizados, los clientes con sofisticadas herramientas de ciencia de datos pueden lograr un mejor rendimiento que la optimización integrada proporcionada por Xandr y pueden ejecutar modelos complejos fuera de línea en tiempo real.

Fórmula para la regresión logística

La regresión logística es un algoritmo de clasificación. Se usa para predecir un resultado binario (por ejemplo, hará clic, no hará clic) en función de un conjunto de variables independientes.

La fórmula para la regresión logística es:

Captura de pantalla que muestra la fórmula para la regresión logística.

Donde la probabilidad (p) que se modela es la de un resultado binario: evento = 1 o evento = 0. Para la publicidad en línea, el evento es un clic, un disparo de píxel u otra acción en línea. La probabilidad es condicional tanto en los predictores x1 a xn como en un conjunto implícito de variables que representan las características de una solicitud de oferta. Los coeficientes beta son las ponderaciones que el modelo asigna a los diferentes predictores.

Convertimos esta probabilidad de que ocurra un evento a un valor esperado multiplicando la probabilidad por el valor del evento (por ejemplo, el objetivo de eCPC para una predicción de clic), agregando una compensación aditiva a la estimación y, a continuación, aplicando límites de valor esperado mínimo/máximo para reducir el impacto de las predicciones erróneas.

La fórmula para derivar un valor esperado para una impresión a partir de la probabilidad de que ocurra un evento es:

Recorte de pantalla que muestra la fórmula para derivar un valor esperado para una impresión a partir de la probabilidad de que ocurra un evento.

El desplazamiento suele ser 0. Sin embargo, un valor negativo puede ser útil como factor de seguridad para garantizar el rendimiento a expensas de la entrega en un inventario de bajo rendimiento. Eso asegurará que el anunciante no puje en lugar de ofertar muy poco y potencialmente incurrir en tarifas fijas.  

Ejemplo de uso de características categóricas de publicidad en línea

La publicidad online tiene muchas características categóricas, es decir, características que pueden tener muchos valores posibles. Algunos ejemplos incluyen explorador, dominio y día de la semana. Estas características generalmente se representan con codificación "one-hot" (usando "variables ficticias"), lo que significa que x1 sería 1 si "navegador = safari" y 0 si no, x2 sería 1 si "navegador = firefox", y así sucesivamente.

Si ponemos esto en la fórmula de regresión logística, obtenemos:

Recorte de pantalla que muestra la fórmula para usar las características categóricas de la publicidad en línea.

Dado que el navegador es una característica categórica, podemos expresar los coeficientes en una tabla:

Explorador Coeficiente
Safari 1.2
Firefox 0.8

Cada fila de esta tabla se convierte en un término de la fórmula de regresión logística, por lo que x1 = 1 si "navegador = safari" y β safari = 1,2 y x2 = 1 si "navegador = firefox" y β firefox = 0,8. Esto hace la ecuación general:

Captura de pantalla que muestra la fórmula de regresión logística después de convertir cada fila de la tabla en un término.

Otras características categóricas también se pueden expresar de esta manera. Supongamos que asignamos los siguientes valores como coeficientes a los siguientes dominios:

Dominio Coeficiente
cnn.com 2.1
nytimes.com 0.8
yahoo.com 0.3

Estos valores se convierten en términos incrementales en la fórmula (x3 es 1 si "dominio = cnn.com" y β 3 es 2,1), lo que hace que la ecuación general:

Captura de pantalla que muestra los valores en términos incrementales en la fórmula.

Cuando se publica la impresión del anuncio, Xandr identifica el explorador como Safari y el dominio como nytimes.com. Las variables correspondientes para navegador = Safari y dominio = nytimes.com se establecen en 1 y las demás variables se establecen en 0, lo que da como resultado la ecuación:

Captura de pantalla que muestra las variables correspondientes para el explorador y el dominio establecido en 1 y otras variables establecidas en 0.

Predictores de orden superior

Xandr admite predictores de orden superior (combinaciones de características), lo que permite que los modelos personalizados manejen interacciones complejas entre predictores. Comienza con el ejemplo anterior calculando un valor basado en los valores categóricos de dominio y navegador. Ahora imagine que el dominio y el navegador no son independientes y que necesita modelar la relación entre ellos. Para ello, puede crear una entidad categórica bidireccional con un coeficiente para cada par de entidades, utilizando los valores especificados en la siguiente tabla:

Explorador Dominio Coeficiente
Safari cnn.com 1.1
Safari nytimes.com 1.3
Safari yahoo.com 1.2
Firefox cnn.com 3.3
Firefox nytimes.com 0.7
Firefox yahoo.com 0,1

Cada uno de estos predictores emparejados se convierte en un término en la ecuación de regresión logística:

Captura de pantalla que muestra cada uno de los predictores emparejados como un término en la ecuación de regresión logística.

Predictores con hash

La combinación de varios predictores categóricos crea tablas extremadamente grandes que no se pueden asignar fácilmente a la memoria para un sistema en tiempo real. En lugar de intentar extraer valores de dichas tablas, puede aplicar hash a las combinaciones de características para crear colisiones, lo que reduce el número de combinaciones que deben asignarse a la memoria en tiempo real.

Ejemplo de predictores con hash

Como ejemplo sencillo, puede aplicar hash a las combinaciones de dominio y explorador del ejemplo anterior mediante una función hash de 2 bits:

Explorador Dominio Coeficiente
Safari cnn.com 0
Safari nytimes.com 1
Safari yahoo.com 3
Firefox cnn.com 2
Firefox nytimes.com 0
Firefox yahoo.com 1

A continuación, calcule un coeficiente para cada valor hash. Tenga en cuenta que hay menos entidades que en el ejemplo anterior, lo que puede capturar parte de la interacción entre entidades sin requerir tanta memoria.

Browser-Domain Hash Coeficiente
0 1.3
1 0.7
2 1,5
3 0.9

Una vez que reemplaza las variables con estos valores, la ecuación de regresión logística se convierte en:

Captura de pantalla que muestra la ecuación de regresión logística después de reemplazar las variables por los valores.

Para predecir la respuesta de una impresión concreta, Xandr aplica un algoritmo hash a las características detectadas (mediante la misma función hash que se aplica durante la ingeniería de características tanto para el entrenamiento de los modelos como para la inferencia en línea). Para algunas características, usamos funciones hash para cifrar los valores de características sin procesar en los que se usan en la fórmula anterior y ejecuta la predicción. Si el explorador es Safari y el dominio es nytimes.com (o cualquier otro par navegador-dominio con hash al mismo valor), los ciframos con hash para encontrar el valor 1 y lo sustituimos en la ecuación de regresión logística:

Captura de pantalla que muestra la ecuación de regresión logística después de aplicar hash a las entidades detectadas.

Conversión de vectores de peso y codificados en caliente a tablas

La codificación de las características categóricas garantiza que, para cada característica categórica, como máximo una variable recibirá el valor 1 y todas las demás recibirán un valor de cero. El producto punto del peso de las características del navegador y las variables del navegador es, por lo tanto, una forma indirecta de activar el peso predeterminado para el navegador en la solicitud de oferta. La API de plataforma digital usa la ecuación siguiente, que es una función sigmoide estándar:

Captura de pantalla que muestra la ecuación, que es una función sigmoide estándar.

Si tuviéramos la siguiente solicitud de anuncio:

Si el tipo de explorador es Firefox, con una codificación en caliente, x_firefox se establecería en 1 y x_safari se establecería en 0. El peso activado para el tipo Firefox sería su peso predeterminado de 0,8 multiplicado por el valor codificado de 1. Entonces x_firefox sería igual a 0,8. El peso activado para el tipo Safari sería 0, es un peso predeterminado, 1,2 multiplicado por el valor x_safari de 0.

Obtendríamos una ecuación con la siguiente ponderación:

Captura de pantalla que muestra la ecuación con la ponderación.

Para definir la asignación de la función categórica a la ponderación, Xandr utiliza llamadas API para crear y actualizar tablas de búsqueda. El modelo de regresión logística en sí mismo se referirá a estas tablas y no a un vector de variables codificadas de un solo calor. El modelo también puede hacer referencia directa a valores cardinales o reales, como la edad del segmento, el valor del segmento y la información de frecuencia o actualidad de un anunciante, una creatividad o una línea de pedido.

Información general del proceso de ejemplo

Usaremos la información anterior para crear un flujo de trabajo de ejemplo.

Supongamos que crea una campaña exploratoria para recopilar datos de aprendizaje con un presupuesto reducido. Deseas optimizar una línea de pedido de resegmentación determinada para minimizar el coste por clic.  Cada impresión ganada genera una fila en las fuentes de datos de nivel de registro con la is_click columna establecida en false. Cuando finalmente se genera un clic, se genera una fila idéntica en la fuente de datos con la is_click columna establecida en true. Para particionar los datos entre los conjuntos de entrenamiento, validación y prueba, observe los últimos fragmentos de user_id_64.  Determina user_id_64 a qué parte se asignarán los datos. Finalmente, determina que las variables clave son:

  • El explorador del usuario (categórico)
  • El país o región y el día de la semana del usuario (categórico de orden superior)
  • La combinación del editor y el país o región del usuario (categoría superior)
  • La cantidad de tiempo transcurrido desde la última vez que un anuncio de ese anunciante se mostró a ese usuario (actualidad del anunciante, un valor cardinal)

Dado que no hay tantos navegadores, es razonable tener un peso para cada navegador en su conjunto de entrenamiento. El producto cruzado, el país o región y el día de la semana también son razonablemente pequeños. Sin embargo, la combinación de editor y país o región tiene una cardinalidad alta, por lo que arbitrariamente decide entrenar eso con una tabla hash de 4096 entradas. Por último, la frecuencia diaria de la línea de pedido es un valor cardinal.

Para cada fila de LLD, primero filtre las filas que no provienen de su campaña de entrenamiento. Ahora que has definido los eventos que te interesan, puedes extraer las variables:

  • Id. de explorador
  • Id. de país o región
  • Día de la semana del usuario (añadiendo el desplazamiento de zona horaria a la marca de tiempo de la impresión y asignándolo a una semana de 7 días)
  • Id. de editor
  • actualidad del anunciante, con un máximo de una hora (si es el primer anuncio que se muestra a este usuario, la actualidad predeterminada es de una hora)

Se reserva un identificador de característica para la actualidad y un identificador 4096 para el par con hash (editor:país/región) y se generan dinámicamente identificadores de característica para cada par de explorador y (país/región:día de la semana). La función de hash necesita un paso adicional más: toma los dos identificadores (editor y país / región), los escribe en un vector little endian de 8 enteros de 32 bits y encuentra el cubo con MurmurHash3_x86_32(vector, 32, 0xC0FFEE) % 4096 (0xC0FFEE es una semilla arbitraria). Esto le proporciona un vector (disperso) de valores de características para cada fila, por lo que puede contar el número de impresiones y el número de clics de cada uno de esos vectores.

Después de un día de comprar impresiones lentamente, prueba el modelo de regresión logística que entrenó en (un subconjunto de) LLD. El vector disperso de valores de características es una codificación caliente del espacio de características. Debe volver a convertir de esta codificación a las funciones más lógicas de valor categórico a peso (tablas de búsqueda). Para ello, una la tabla de ID de característica a característica y el vector de pesos para obtener lo siguiente:

Característica Índice Peso
Actualidad del anunciante 0 -0.2
publisher:country/region-bucket 0 1 1.4
publisher:country/region-bucket 1 2 -2.1
... ... ...
publisher:country/region-bucket 4095 4096 -0.5
Navegador=Safari 4097 5.2
country/region:day-of-week=US:monday 4098 0.7
... ... ...

Tú determinas las ponderaciones de cada característica:

  • Anunciante: lees el peso directamente del modelo entrenado.
  • La tabla hash: lees las ponderaciones de las características 4096 y las pones en una matriz.
  • Navegador: recorre el mapa dinámico de la entidad al ID, las entidades son las claves y el Id. los valores, y crea una tabla de búsqueda desde el Id. del navegador al peso distinto de cero (con cero como valor predeterminado) para crear una lista de asignaciones de navegador a peso.
  • País o región:día de la semana: recorra el mapa dinámico de la entidad al identificador y cree una tabla de búsqueda desde el identificador del explorador al peso distinto de cero (con cero como valor predeterminado) para crear una lista de asignaciones de explorador a peso.

Estos son todos los datos que necesita para llamar a la API de AppNexus.

Información general sobre el proceso en el momento de la subasta

Una vez que la línea de pedido pasa la segmentación, Xandr usa su modelo de regresión logística para determinar un precio de oferta:

  1. Para cada tabla de búsqueda en su descripción, Xandr extrae los valores del campo (o campos) de la solicitud de oferta y busca una entrada en la tabla. Si hay una entrada, ese valor se agrega al argumento lineal de la función logística. En caso contrario, se usa el valor predeterminado de la tabla, que suele ser 0.
  2. Lo mismo se hace con las tablas con hash, excepto que Xandr aplica un algoritmo hash a los valores para encontrar un cubo y, a continuación, busca ese cubo en la lista de asignaciones de cubos -> valores de la tabla con hash. De nuevo, se utiliza el valor predeterminado si el valor especificado no aparece en la tabla.
  3. Finalmente, Xandr busca características de Bonsai. Realizamos la búsqueda de cada característica, la multiplicamos por el peso y aplicamos límites mínimos y máximos.
  4. Luego, Xandr suma los componentes y Beta0 y los pasa a la función logística para calcular la probabilidad estimada de un clic. La probabilidad estimada se multiplica por el valor objetivo para obtener el valor esperado, que luego se fija entre 1 y 100 CPM para frenar cualquier valoración poco realista.
  5. Xandr luego usa el valor esperado y la cantidad de inventario disponible para calcular una oferta. Los cálculos exactos varían en función de la configuración de la línea de pedido, pero el resultado es que Xandr reducirá automáticamente el valor esperado hasta que las pujas sean lo suficientemente altas como para que la línea de pedido gaste su presupuesto diario al final de cada día. Para obtener más información sobre este escalado, consulte Ritmo adaptable (se requiere iniciar sesión) en la documentación.