Ciencia de datos Toolkit: hojas inteligentes de Bonsai
Nota:
En esta página se supone que ya está familiarizado con las características de Bonsai Language y Bonsai.
El lenguaje Bonsai se usa para escribir lógica de árbol de decisión para modelos predictivos personalizados. Cada rama conduce a un nodo, o "hoja", que se evalúa como un valor numérico simple que representa la oferta. En lugar de evaluar un único valor estático, las hojas inteligentes evalúan un valor de puja que se modifica dinámicamente en función de una métrica de rendimiento o entrega de anuncios especificada. Las hojas inteligentes también permiten asignar un nombre a las hojas individuales con un valor de cadena arbitrario. Esto está disponible en la fuente estándar para ayudar a la depuración y el análisis de rendimiento.
Nota:
Las hojas inteligentes se definen mediante un formulario similar a YAML, un formato de serialización de datos legible por el usuario.
Sintaxis compute()
Puede usar hojas inteligentes para especificar un valor estático o una puja calculada a partir de una métrica publicitaria o para especificar que no se realice ninguna oferta. Si se calcula el valor, viene determinado por la compute
expresión , que usa el formato siguiente:
value: compute(input_field, multiplier, offset, min_value, max_value)
Esto se evalúa como la siguiente ecuación:
max(min_value, min(max_value, input_field * multiplier + offset))
Es decir, el valor calculado es el campo de entrada que multiplica el multiplicador, más un desplazamiento. Si el resultado es menor que el valor mínimo, se devuelve el valor mínimo en su lugar. Si el resultado es mayor que el valor máximo, se devuelve el valor máximo. Para omitir un cálculo (multiplicador, desplazamiento, valor mínimo o valor máximo), use un carácter de subrayado (_) para el valor omitido. Si omite especificar el valor del multiplicador, el valor predeterminado es 1.
Nota:
Las pujas calculadas por el modelo siempre se expresan en la moneda establecida en el anunciante, incluso si ha especificado una moneda diferente para la campaña.
Campos hoja inteligentes
Campo | Tipo de campo | Description | Predeterminada |
---|---|---|---|
value |
text | Valor de la puja. Si el modelo de árbol es el precio de la oferta, la puja se expresa en la moneda establecida para este anunciante. Si el modelo de árbol es un modificador de puja, la puja es un float o un entero. Los posibles valores son: - compute(input_field, multiplier, offset, min_value, max_value) - no_bid - un valor estático (número) compute Al especificar, se calcula un valor basado en uno de los campos de entrada para compute() a continuación. Para omitir un cálculo (multiplicador, desplazamiento, valor mínimo o valor máximo), use un carácter de subrayado (_) para el valor omitido. Advertencia: No use compute() expresiones que se evalúen como números negativos o en cero (0). Estos valores no se admiten y pueden proporcionar resultados inesperados. Es mejor especificar no_bid explícitamente. |
|
leaf_name |
string(7) | Valor de cadena opcional que se pasará a los registros y los informes para ayudar con la depuración y el análisis de rendimiento. leaf_name puede tener hasta siete caracteres ASCII (7 bits) y no es necesario que sea único.Nota: Dado que leaf_name es una cadena, el valor debe ir entre comillas dobles ("). |
Campos de entrada para compute()
Los valores de los campos de entrada vienen determinados por la optimización de Xandr. Para obtener más información, consulte la Guía de optimización para el elemento de línea aumentada en la documentación (se requiere inicio de sesión).
Campo | Tipo | Description |
---|---|---|
estimated_iab_viewthrough_rate |
float, integer | La probabilidad de que esta impresión de visualización web se mida como visible por el estándar de IAB, de 0 a 1 . |
predicted_iab_video_view_rate |
float, integer | La probabilidad de que esta impresión de vídeo se mida como visible por el estándar de IAB, de 0 a 1 . |
predicted_video_completion_rate |
float, integer | Qué probabilidad tiene el usuario de watch esta impresión de vídeo por completo, de 0 a 1 . El inventario que no es de vídeo es 0 . |
estimated_average_price |
float, integer | Precio medio de esta impresión. |
estimated_clearing_price |
float, integer | Precio del percentil 80 para esta impresión. |
uniform |
float, integer | Un número aleatorio uniforme entre 0 y 1 (0 incluido, 1 excluido). |
Uso de segmentos como entrada para compute()
Puede realizar cálculos con el valor o la antigüedad del usuario en un segmento de terceros o de terceros para determinar un valor de puja. Si el usuario no está presente en el segmento, no se realiza ninguna oferta. Use segment service para recuperar identificadores de segmento.
Campo | Tipo | Description |
---|---|---|
segment[ID].value |
float, integer | Valor del usuario en un segmento de terceros o de terceros. Si el usuario no está presente en el segmento, no se realizará ninguna oferta.ID es el identificador de segmento. |
segment[ID].age |
float, integer | La edad de un usuario en un segmento de terceros o de terceros. Si el usuario no está presente en el segmento, no se realizará ninguna oferta.ID es el identificador de segmento. |
Uso de frecuencia o recencia como entradas para compute()
Puede realizar cálculos con frecuencia o recencia para determinar un valor de puja.
Campo | Tipo | Description |
---|---|---|
OBJECT[ID].day_frequency |
float, integer | Número de anuncios vistos por un usuario en el día actual. Esto se puede determinar para un anunciante, un artículo de línea o una campaña. Si no se encuentran datos de frecuencia, la frecuencia se marca como cero (0).OBJECT es advertiser , line_item o campaign , y ID es el identificador de objeto. Use el Servicio de anunciantes, el Servicio de artículos de línea o el Servicio de campaña para recuperar los identificadores. |
OBJECT[ID].lifetime_frequency |
float, integer | Número de anuncios vistos por un usuario a lo largo de la duración de un anunciante, artículo de línea, campaña o creativo. Si no se encuentran datos de frecuencia, la frecuencia se marca como cero (0).OBJECT es advertiser , line_item o campaign , y ID es el identificador de objeto. Use el Servicio de anunciantes, el Servicio de artículos de línea o el Servicio de campaña para recuperar los identificadores. |
OBJECT[ID].recency |
float, integer | Número de minutos desde que el usuario ha visto un anuncio. Esto se puede determinar para todos los anuncios de un anunciante, artículo de línea o campaña, o para una creatividad individual. Si no se encuentra ningún dato de censura, no se realizará ninguna oferta.OBJECT es advertiser , line_item o campaign , o creative , y ID es el identificador de objeto. Use el Servicio de anunciantes, el Servicio de artículos de línea o el Servicio de campaña para recuperar los identificadores. |
Ejemplos
Precio de oferta con precio medio estimado
Una hoja tiene un precio mínimo permitido de la oferta, pero no tiene límite en el máximo.
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
# This tree determines a bid price as follows:
# 1. If the user is in California, bid the estimated average price * 1.05, plus $0.03.
# 2. Otherwise, bid the estimated average price * .75, but don't bid less than $1.00. There is no maximum bound for bids.
if region = "US:CA":
leaf_name: "eap001"
value: compute(estimated_average_price, 1.05, 0.03, _, _)
else:
leaf_name: "eap002"
value: compute(estimated_average_price, 0.75, 0.00, 1.00, _)
Árbol de precios de puja con precio de compensación estimado, sin puja y hojas inteligentes de valor estático
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
# This tree determines a bid price as follows:
# 1. If the user is in California, bid the estimated clearing price * 1.05, plus $0.03.
# 2. If the user is in New York, bid the estimated clearing price * .75, but don't bid less than $0.10 or more than $1.00.
# 3. If the user is in Delaware, do not bid.
# 4. Otherwise, bid $0.50.
if region = "US:CA":
leaf_name: "ecp_ca"
value: compute(estimated_clearing_price, 1.05, 0.03, _, _)
elif region = "US:NY":
leaf_name: "ecp_ny"
value: compute(estimated_clearing_price, 0.75, _, 0.10, 1.00)
elif region = "US:DE":
leaf_name: "no_de"
value: no_bid
else:
leaf_name: "default"
value: 0.50
Árbol de precios de la oferta con hojas inteligentes estimadas de la velocidad de obtención de vistas de IAB
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
# This tree determines a bid modifier as follows:
# 1. If the user is in California, bid the value determined by Xandr optimization multipled by the estimated IAB viewthrough rate and 0.50, plus $0.03.
# 2. If the user is in New York, bid the value determined by Xandr optimization multiplied by the estimated IAB viewthrough rate and 0.75.
# 3. If the user is in Delaware, bid the estimated clearing price, but don't bid less than $0.10 or more than $1.00.
# 4. Otherwise, bid $0.50.
if every region = "US:CA":
leaf_name: "t00001"
value: compute(estimated_iab_viewthrough_rate, 0.50, 0.03, _, _)
elif region = "US:NY":
leaf_name: "t00002"
value: compute(estimated_iab_viewthrough_rate, 0.70, 0.00, _, _)
elif region = "US:DE":
leaf_name: "t00003"
value: compute(estimated_clearing_price, 1.00, _, 0.10, 1.00)
else:
leaf_name: "default"
value: 0.50
Puja basada en el valor del segmento
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
#1. If the user is in California, bid the value of segment 111 times 2.0, plus 1.0.
#2. Otherwise, do not bid.
if region = "US:CA":
leaf_name: "a00001"
value: compute(segment[111].value, 2.0, 1.0, _, _)
else:
value: no_bid
Puja basada en la antigüedad del segmento
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
#1. If the user is in California, bid the segment age times -.2, plus 8.0, as long as the bid is under 8.0.
#2. Otherwise, do not bid.
if region = "US:CA":
leaf_name: "b00001"
value: compute(segment[111].age, -0.2, 8.0, 0.0, 8.0)
else:
value: no_bid
Puja basada en la frecuencia diaria
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
#1. If the user is in California and in segment 111, bid the user's daily frequency for line item 222 times -.2, plus 5, with an upper bound of 4.
#2. Otherwise, do not bid.
if every region="US:CA", segment[111]:
leaf_name: "d0001"
value: compute(line_item[222].day_frequency, -0.2, 5.0, 0.0, 4.0)
else:
leaf_name: "d0000"
value: no_bid
Puja basada en la frecuencia de duración
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
#1. If the user is in California and in segment 111, bid the lifetime frequency for creative 333 times -.2, plus 8, with an upper bound of 6.
#2. Otherwise, do not bid.
if every region="US:CA", segment[111]:
leaf_name: "e0001"
value: compute(creative[333].lifetime_frequency, -0.2, 8.0, 0.0, 6.0)
else:
leaf_name: "e0000"
value: no_bid
Puja basada en la recencia
Nota:
En el ejemplo de código siguiente, las líneas que comienzan por # son comentarios que le ayudarán a comprender la lógica de este árbol.
#1. If the user is in California, bid the recency for creative 333 times -.2, plus 8, with an upper bound of 6.
#2. Otherwise, do not bid.
if region="US:CA":
leaf_name: "f0001"
value: compute(creative[333].recency, -0.2, 8.0, 0.0, 6.0)
else:
leaf_name: "f0000"
value: no_bid