Compartir a través de


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ís
  • region: cadena de región
  • city: cadena de ciudad
  • supply_type: tipo de suministro
  • domain: cadena de dirección URL
  • browser: cadena del explorador
  • carrier: cadena de operador
  • os_family: cadena de familia del sistema operativo
  • placement: identificador de ubicación válido
  • size: cadena de tamaño
  • placement_group: identificador de grupo de selección de ubicación válido
  • publisher: identificador de publicador válido
  • mobile_app: identificador de aplicación móvil válido
  • cookie_age: antigüedad de las cookies en minutos
  • user_hour: la hora del usuario debe estar entre 0 y 23
  • user_day: el día del usuario debe estar comprendido entre 0 y 6
  • OBJECT[ID].lifetime_frequency: aquí el objeto es advertiser, line_itemo campaign (que representa split) y id. es el identificador de objeto. La frecuencia de vida debe ser un entero positivo. En este escenario, el objeto es advertiser.
  • OBJECT[ID].day_freq: aquí el objeto es advertiser, line_itemo campaign (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 es advertiser.
  • advertiser_recency: la recencia del anunciante debe ser un entero positivo o -1.
  • device_type: cadena de tipo de dispositivo
  • estimated_iab_viewthrough_rate: la velocidad de acceso directo de IAB debe ser un número entre 0 y 1.