Ciencia de datos Toolkit: servicio de analizador de modelos personalizados
El servicio Custom Model Parser le permite comprobar la validez de los árboles de decisión escritos en nuestro lenguaje Bonsai. Debe usar este servicio para identificar y resolver los errores de sintaxis o características de Bonsai antes de usar custom model service para cargar árboles para usarlos en campañas.
Esta página le guiará por el proceso de validación. Para obtener información general sobre el propósito de los modelos personalizados, vea Modelos personalizados.
Paso 1. Codificación base64 del árbol de decisión de Bonsai
Una vez que haya escrito el árbol de decisión en nuestro lenguaje Bonsai, codifique base64.
$ cat decision_tree.txt
# 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
$ cat decision_tree.txt |base64
IyBUaGlzIHRyZWUgZGV0ZXJtaW5lcyBhIGJpZCBwcmljZSBhcyBmb2xsb3dzOgojIDEuIElmIHRoZSB1c2VyIGlzIGluIENhbGlmb3JuaWEsIGFuZCB0aGUgaG91ciBpcyBiZXR3ZWVuIDEycG0gYW5kIDE0cG0gdGhlcmUsIGJpZCAkMS41MC4KIyAyLiBJZiB0aGUgdXNlciBpcyBpbiBOZXcgWW9yaywgYW5kIHRoZSBob3VyIGlzIGJldHdlZW4gMWFtIGFuZCAzYW0gdGhlcmUsIGJpZCAkMC4xMC4KIyAzLiBPdGhlcndpc2UsIGJpZCAkMC41MC4KCmlmIGV2ZXJ5IHJlZ2lvbiA9ICJVUzpDQSIsIHVzZXJfaG91ciByYW5nZSAoMTIsMTQpOgoJMS41CmVsaWYgZXZlcnkgcmVnaW9uID0gIlVTOk5ZIiwgdXNlcl9ob3VyIHJhbmdlICgxLDMpOgoJMC4xCmVsc2U6CgkwLjU=
Paso 2. Create un archivo JSON que contiene el árbol codificado
Create un archivo JSON como se muestra a continuación. El objeto principal debe contener un custom-model-parser
objeto con el árbol codificado como una cadena en el model_text
campo.
$ cat check_tree.json
{
"custom-model-parser": {
"model_text": "IyBUaGlzIHRyZWUgZGV0ZXJtaW5lcyBhIGJpZCBwcmljZSBhcyBmb2xsb3dzOgojIDEuIElmIHRoZSB1c2VyIGlzIGluIENhbGlmb3JuaWEsIGFuZCB0aGUgaG91ciBpcyBiZXR3ZWVuIDEycG0gYW5kIDE0cG0gdGhlcmUsIGJpZCAkMS41MC4KIyAyLiBJZiB0aGUgdXNlciBpcyBpbiBOZXcgWW9yaywgYW5kIHRoZSBob3VyIGlzIGJldHdlZW4gMWFtIGFuZCAzYW0gdGhlcmUsIGJpZCAkMC4xMC4KIyAzLiBPdGhlcndpc2UsIGJpZCAkMC41MC4KCmlmIGV2ZXJ5IHJlZ2lvbiA9ICJVUzpDQSIsIHVzZXJfaG91ciByYW5nZSAoMTIsMTQpOgoJMS41CmVsaWYgZXZlcnkgcmVnaW9uID0gIlVTOk5ZIiwgdXNlcl9ob3VyIHJhbmdlICgxLDMpOgoJMC4xCmVsc2U6CgkwLjU"
}
}
Paso 3. POST
el archivo al servicio de analizador de modelos personalizados
Realice una POST
llamada al servicio de analizador de modelos personalizados como se muestra a continuación.
$ curl -b cookies -c cookies -X POST -d @check_tree.json 'https://api.appnexus.com/custom-model-parser'
Paso 4. Comprobación de la respuesta
El árbol es válido
Si el árbol de decisión de Bonsai es válido, el custom-model-parser
objeto de la respuesta contendrá los campos siguientes:
Campo | Description |
---|---|
model_text |
Su árbol de decisión. |
size |
Tamaño del árbol de decisión, en bytes. Límite de tamaño: el árbol debe ser menor que 3 MB o 3 145 728 bytes. Si es mayor que eso, no podrá agregar el árbol mediante el servicio de modelo personalizado. |
Nota:
El punto de conexión custom-model-parser que se usa para devolver el formato de almacenamiento Lisp de un árbol de decisión en el campo "model_text
". Estamos desusando esta representación interna, ya que era solo un paso intermedio y no se usa en ningún lugar de la plataforma. El campo ahora siempre contendrá el valor "<removed>
". El campo "size
" de la respuesta se seguirá rellenando con precisión y debe seguir confiando en él para saber si el modelo es demasiado grande para la carga.
{
"response": {
"service": "custom-model-parser",
"method": "post",
"custom-model-parser": {
"model_text": "(if (and (region = 3922) (user_hour range 12 14)) 1.5 (if (and (region = 3950) (user_hour range 1 3)) 0.1 0.5))",
"size": 111
}
}
}
El árbol no es válido
Si el árbol de decisión de Bonsai no es válido, el error
campo de la respuesta identificará el problema. Un error puede deberse a una sintaxis de Bonsai no válida o a un uso no válido de las características de Bonsai. Consulte Mensajes de error a continuación para obtener más detalles.
{
"response": {
"error_id": "SYNTAX",
"error": "ERROR: User hour expected on line 6 at column 49; user_hour must be between 0 and 23; found 24",
"error_description": null,
"service": "custom-model-parser",
"method": "post",
"error_code": "INVALID_SYNTAX"
}
}
Mensajes de error
Errores de sintaxis
Se encontró un carácter no válido:
ERROR: Illegal character <character> found on line <line> at column <column>
Se encontró el segundo nodo raíz:
ERROR: End of file expected; <token> found.
Operador numérico usado con tipo no numérico:
ERROR: Numeric operator <operator> invalid with non-numeric type <type> at line <line> at column <column>.
Número incorrecto de elementos de una lista (como tener 3 elementos en una expresión de rango):
ERROR: Invalid number of elements in list at line <line> at column <column>. Required number of elements is <required number>, <number> elements found
Errores de características
Hay dos tipos de características: características que se validan en la base de datos y características cuyos valores deben ser determinados valores numéricos. Validando en la base de datos, el mensaje de error que se ve para un valor no válido es:
ERROR: <description> expected on line <line> at column <column>; found <value found>.
Validando valores numéricos, el mensaje de error que se ve para un valor no válido es:
ERROR: <description> expected on line <line> at column <column>; <numeric restriction>
Las características, descripciones y restricciones numéricas son las siguientes:
country
: cadena de paísregion
: cadena de regióncity
: cadena de ciudadsupply_type
: tipo de suministrodomain
: cadena de dirección URLbrowser
: cadena del exploradorcarrier
: cadena de operadoros_family
: cadena de familia del sistema operativoplacement
: identificador de ubicación válidosize
: cadena de tamañoplacement_group
: identificador de grupo de selección de ubicación válidopublisher
: identificador de publicador válidomobile_app
: identificador de aplicación móvil válidocookie_age
: antigüedad de las cookies en minutosuser_hour
: la hora del usuario debe estar entre 0 y 23user_day
: el día del usuario debe estar comprendido entre 0 y 6OBJECT[ID].lifetime_frequency
: aquí el objeto esadvertiser
,line_item
ocampaign
(que representa split) y id. es el identificador de objeto. La frecuencia de vida debe ser un entero positivo. En este escenario, el objeto esadvertiser
.OBJECT[ID].day_freq
: aquí el objeto esadvertiser
,line_item
ocampaign
(que representa split) y id. es el identificador de objeto. La frecuencia del día debe ser un entero positivo. En este escenario, el objeto esadvertiser
.advertiser_recency
: la recencia del anunciante debe ser un entero positivo o -1.device_type
: cadena de tipo de dispositivoestimated_iab_viewthrough_rate
: la velocidad de acceso directo de IAB debe ser un número entre 0 y 1.