Ciencia de datos Toolkit: flujo de trabajo del modelo personalizado de Bonsai
En esta página se describe un flujo de trabajo de modelo personalizado de Bonsai típico y se proporcionan ejemplos de código.
Nota:
El flujo de trabajo beta cerrada requiere el uso de la API. Se espera que los clientes beta cerrados hayan completado nuestro proceso de incorporación de API antes de empezar.
Paso 1: Identificar los requisitos
Escribirá el modelo personalizado como árbol de decisión, donde las ramas del árbol expresan condiciones que conducen a salidas específicas (precios de puja en el caso de un modelo de precio de puja y multiplicadores de puja en el caso de un modelo modificador de puja). Las condiciones se escriben en nuestro lenguaje Bonsai y se basan en un conjunto de características y valores de características de Bonsai . Antes de escribir el árbol:
- Eche un vistazo a las características de Bonsai que están disponibles.
- Esboce cómo desea usar las operaciones de árbol para determinar las salidas.
- Asegúrese de aprovechar las ventajas de los datos de informes para identificar las características y los valores adecuados. Para obtener más información, consulte Fuentes de distribución de datos de nivel de registro y "Informes estándar" en la documentación.
Ejemplo: Árbol de decisión para los precios de la oferta
Nota:
Use modelos personalizados para determinar cómo fijar el precio de las impresiones, no cómo dirigirse a ellas. En el caso de las impresiones de destino, debe seguir usando profile service para dirigirse a través de la API.
Paso 2: Create el árbol de decisión
Una vez que sepas las características y los pasos que quieres seguir para fijar o modificar las pujas de una campaña, escríbelas como árbol de decisión en nuestro Idioma Bonsai. Use los ejemplos de esa página, así como el ejemplo sencillo siguiente para empezar a comprender cómo escribir el árbol.
Nota:
Use pestañas para sangría, no espacios.
En Bonsai, la sangría se usa para agrupar expresiones (similares a Python). Asegúrese de usar pestañas para indicar la sangría de línea. Actualmente no se admiten espacios.
Ejemplo: Árbol de Bonsai para precios de pujas
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, and the hour is between 12pm and 14pm there, bid $1.50.
# 2. If the user is in New York, and the hour is between 1am and 3am there, bid $0.10.
# 3. Otherwise, bid $0.50.
if every region = "US:CA", user_hour range (12,14):
1.5
elif every region = "US:NY", user_hour range (1,3):
0.1
else:
0.5
Paso 3: Codificar el árbol de decisión
Codificación base64 del árbol de decisión. Base64 es un algoritmo de codificación que le permite transformar dígitos binarios en un alfabeto que consta de letras latinas, dígitos, signos más y símbolos de barra diagonal. Hay varios convertores basados en web que pueden codificar el contenido en Base64.
Ejemplo: codificado en Base64
IyBUaGlzIHRyZWUgZGV0ZXJtaW5lcyBhIGJpZCBwcmljZSBhcyBmb2xsb3dzOgojIDEuIElmIHRoZSB1c2VyIGlzIGluIENhbGlmb3JuaWEsIGFuZCB0aGUgaG91ciBpcyBiZXR3ZWVuIDEycG0gYW5kIDE0cG0gdGhlcmUsIGJpZCAkMS41MC4KIyAyLiBJZiB0aGUgdXNlciBpcyBpbiBOZXcgWW9yaywgYW5kIHRoZSBob3VyIGlzIGJldHdlZW4gMWFtIGFuZCAzYW0gdGhlcmUsIGJpZCAkMC4xMC4KIyAzLiBPdGhlcndpc2UsIGJpZCAkMC41MC4KCmlmIGV2ZXJ5IHJlZ2lvbiA9ICJVUzpDQSIsIHVzZXJfaG91ciByYW5nZSAoMTIsMTQpOgoJMS41CmVsaWYgZXZlcnkgcmVnaW9uID0gIlVTOk5ZIiwgdXNlcl9ob3VyIHJhbmdlICgxLDMpOgoJMC4xCmVsc2U6CgkwLjU=
Paso 4: Comprobar si hay errores en el árbol de decisión
Use el servicio de analizador de modelos personalizados para comprobar la validez del árbol de decisión.
- En la solicitud JSON, coloque el árbol codificado en base64 en el
model_text
campo como una cadena. - Si hay errores, use el
error
campo en la respuesta para ayudarle a identificar y resolver errores de características o sintaxis de Bonsai. Para obtener instrucciones, consulte Mensajes de error. - Si no hay errores, el
size
campo de la respuesta muestra el tamaño del árbol en Lisp (el formato que usamos para almacenar árboles). Asegúrese de que essize
menor que 3 MB o 3 145 728 bytes.
Nota:
Si el árbol es mayor que 3 MB, no podrá agregarlo.
Ejemplo: archivo JSON que contiene el árbol codificado en base64
$ cat check_tree.json
{
"custom-model-parser": {
"model_text": "IyBUaGlzIHRyZWUgZGV0ZXJtaW5lcyBhIGJpZCBwcmljZSBhcyBmb2xsb3dzOgojIDEuIElmIHRoZSB1c2VyIGlzIGluIENhbGlmb3JuaWEsIGFuZCB0aGUgaG91ciBpcyBiZXR3ZWVuIDEycG0gYW5kIDE0cG0gdGhlcmUsIGJpZCAkMS41MC4KIyAyLiBJZiB0aGUgdXNlciBpcyBpbiBOZXcgWW9yaywgYW5kIHRoZSBob3VyIGlzIGJldHdlZW4gMWFtIGFuZCAzYW0gdGhlcmUsIGJpZCAkMC4xMC4KIyAzLiBPdGhlcndpc2UsIGJpZCAkMC41MC4KCmlmIGV2ZXJ5IHJlZ2lvbiA9ICJVUzpDQSIsIHVzZXJfaG91ciByYW5nZSAoMTIsMTQpOgoJMS41CmVsaWYgZXZlcnkgcmVnaW9uID0gIlVTOk5ZIiwgdXNlcl9ob3VyIHJhbmdlICgxLDMpOgoJMC4xCmVsc2U6CgkwLjU="
}
}
Ejemplo: POST
al servicio custom-model-parser
$ curl -b cookies -c cookies -X POST -d @check_tree.json 'https://api.appnexus.com/custom-model-parser'
{
"response": {
"service": "custom-model-parser",
"method": "post",
"custom-model-parser": {
"model_text": "IyBUaGlzIHRyZWUgZGV0ZXJtaW5lcyBhIGJpZCBwcmljZSBhcyBmb2xsb3dzOgojIDEuIElmIHRoZSB1c2VyIGlzIGluIENhbGlmb3JuaWEsIGFuZCB...",
"size": 111
},
"dbg_info": {
...
}
}
}
Paso 5: Agregar el árbol de decisión como modelo personalizado
Una vez que haya confirmado que el árbol es válido, use custom model service para cargar el árbol de decisión codificado. Asegúrese de:
- Establezca el tipo de modelo personalizado correcto en el
model_output
campo:- Para un modelo de precio de puja, use
"bid"
. - Para un modelo de modificador de puja, use
"bid_modifier"
.
- Para un modelo de precio de puja, use
- Coloque el árbol codificado en base64 en el
model_text
campo como una cadena. - Proporcione un único
name
. Esto es necesario y facilitará la selección del modelo correcto en . - Proporcione al
advertiser_id
que pertenece el modelo personalizado. Solo podrá usar el modelo en campañas de este anunciante.
Ejemplo: archivo JSON que define el modelo personalizado
$ cat custom_model.json
{
"custom_model": {
"name": "Bid by Region/Hour of Day",
"member_id": 958,
"advertiser_id": 39776,
"custom_model_structure": "decision_tree",
"model_output": "bid",
"model_text": "aWYgZXZlcnkgZGV2aWNlX3R5cGUgPSAiT3RoZXJzIChpbmNsdWRpbmcgUEMpIiwgdXNlcl9ob3VyIHJhbmdlICg5LDE4KToKCTEuNQplbGlmIGV2ZXJ5IGRldmljZV90eXBlIGluICgiVGFibGV0IiwgIlBob25lIiksIHVzZXJfaG91ciBpbiAoNSw2LDcsOCwxOSwyMCwyMSwyMik6CgkyCmVsc2U6CgkwLjU="
}
}
Ejemplo: POST
para el custom-model
servicio
$ curl -b cookies -c cookies -X POST -d @custom_model.json 'https://api.appnexus.com/custom-model'
{
"response": {
"status": "OK",
"count": 1,
"id": "329",
"start_element": 0,
"num_elements": 100,
"custom_model": {
"id": 329,
"name": "Bid by Region/Hour of Day",
"member_id": 958,
"advertiser_id": 39776,
"custom_model_structure": "decision_tree",
"model_output": "bid",
"model_text": "aWYgZXZlcnkgcmVnaW9uID0gIlVTOkNBIiwgdXNlcl9ob3VyIHJhbmdlICgxMiwxNCk6CgkxLjUKZWxpZiBldmVyeSByZWdpb24gPSAiVVM6TlkiLCB1c2VyX2hvdXIgcmFuZ2UgKDEsMyk6CgkwLjEKZWxzZToKCTAuNQ=",
"original_text": "if every region = \"US:CA\", user_hour range (12,14):
1.5
elif every region = \"US:NY\", user_hour range (1,3):
0.1
else:
0.5",
"active": true,
"last_modified": "2015-09-22 20:52:53"
},
"dbg_info": {
"instance": "64.bm-hbapi.prod.nym2",
"s1ave_hit": true,
"db": "10.3.129.206",
"awesomesauce_cache_used": false,
"count_cache_used": false,
"warnings": [
],
"time": 39.799213409424,
"start_microtime": 1438028779.7596,
"version": "1.15.572",
"s1ave_lag": 0,
"member_last_modified_age": 21425,
"output_term": "custom_model"
}
}
}
Paso 6: Asignar el modelo personalizado a una campaña
Modelo de precio de puja
Usa el Servicio de campaña para asignar tu modelo personalizado a una campaña. Asegúrese de:
Establezca en
cpm_bid_type
"custom_model"
.Proporcione el
id
del modelo personalizado en elbid_model
objeto .Establezca en
inventory_type
"real_time"
.Archivo JSON que define la campaña
$ cat campaign.json { "campaign": { "name": "Custom Model Campaign - Bid by Region/Hour of Day", "cpm_bid_type": "custom_model", "bid_model": { "id": 329 }, "line_item_id": 34287, "inventory_type": "real_time" } }
Modelo modificador de puja
Usa el Servicio de campaña para asignar tu modelo personalizado a una campaña. Asegúrese de:
Establezca
cpm_bid_type
en una estrategia de compra basada en la optimización ("predicted"
o"margin"
) y en los campos necesarios correspondientes.- En el json siguiente, por ejemplo, establecemos
cpm_bid_type
en"predicted"
ycpc_click_goal
en1.00
para optimizar las pujas de CPM con un objetivo de CPC previsto de 1,00 USD.
- En el json siguiente, por ejemplo, establecemos
En el
bid_modifier_model
objeto , proporcione elid
del modelo personalizado que modificará las pujas de CPM de la campaña.Establezca en
inventory_type
"real_time"
.Archivo JSON que define la campaña
$ cat campaign.json { "campaign": { "name": "Custom Model Campaign - Modify Bid Based on Region/Hour of Day", "cpm_bid_type": “predicted”, “cpc_goal”: 1.00, "bid_modifier_model": { "id": 148 }, "line_item_id": 34287, "inventory_type": "real_time" } }