Ciencia de datos Toolkit: modelo personalizado sin valoración
Los modelos personalizados que no son de valoración no afectan a la valoración de la oferta. Se usan para insertar macros creativas personalizadas en llamadas de seguimiento de impresiones y, finalmente, se usarán para otras funciones, como afectar al estado de Learn.
Una macro creativa es un marcador de posición de texto que se reemplaza por una parte útil de información de nivel de impresión cuando se proporciona una creatividad. Las macros creativas se usan para transmitir información de nivel de impresión a sistemas fuera de Xandr, que luego puede usar para informes, optimización y muchos otros fines. Por ejemplo, si usa hospedaje creativo de terceros, podría usar una macro para rellenar un identificador de segmento en la ubicación, que el servidor creativo usaría para decidir qué creatividad servir.
Nota:
Esta funcionalidad solo está disponible para el elemento de línea aumentada.
Sintaxis de hoja de macro creativa
Para que una macro se comunique con el servidor de anuncios y pase la información que se debe rellenar, debe ir precedida de una clave. La sintaxis de las hojas de macro creativas es:
leaf_name: "name"
creative_macros["MACRO1"]: "value1"
creative_macros["MACRO2"]: "value2
Dado que se trata de un modelo que no es de valoración, no se requiere un valor. Es posible tener una hoja que consta simplemente de .leaf_name
Consulte el ejemplo siguiente para obtener más información.
Nota:
Las restricciones son las siguientes:
- Las macros distinguen mayúsculas de minúsculas.
- Las claves y los valores pueden contener texto Unicode que no debe ser mayor que 100 bytes codificados utf-8 en total.
- El analizador aplica la transformación Unicode NFC y puede cambiar los puntos de código Unicode y el resultado codificado utf-8 resultante. La mejor manera de evitar un comportamiento imprevisible es usar siempre texto normalizado con NFC tanto en la clave como en el valor.
- No puede haber más de dos macros por hoja.
No duplique los nombres de las macros creativas de Xandr existentes. Esto puede provocar un comportamiento imprevisible.
Flujo de trabajo de API
Paso 1. Create un elemento de línea aumentada
En este ejemplo, se crea un elemento de línea aumentada.
$cat ali
{
"line-item": {
"name": "ALI Custom Macro Test",
"code": "ali-cm-test",
"state": "inactive",
"line_item_type": "standard_v2",
"revenue_type": "cpm"
}
}
$curl -b cookies -X POST -s -d @ali "https://api.appnexus.com/line-item?advertiser_id=ADVERTISER_ID"
{
"response" : {
"num_elements" : 100,
"count" : 1,
"line-item" : {
"lifetime_pacing" : null,
"daily_budget_imps" : null,
"total_days" : null,
"budget_intervals" : null,
"creative_distribution_type" : null,
"remaining_days" : null,
"line_item_type" : "standard_v2",
"delivery_goal" : null,
"goal_pixels" : null,
"name" : "ALI Custom Macro Test",
"revenue_value" : 0,
"campaigns" : null,
"discrepancy_pct" : 0,
"code" : "ali-cm-test",
"pixels" : null,
"manage_creative" : false,
"flat_fee" : null,
"comments" : null,
"inventory_discovery_budget" : null,
"goal_value" : null,
"require_cookie_for_tracking" : true,
"insertion_orders" : null,
"clicktrackers" : null,
"enable_pacing" : null,
"flat_fee_type" : null,
"imptrackers" : null,
"profile_id" : null,
"broker_fees" : null,
"inventory_type" : "both",
"creatives" : null,
"valuation" : {
"bid_price_pacing_lever" : 0,
"max_avg_cpm" : null,
"goal_threshold" : null,
"performance_mkt_managed" : false,
"goal_target" : null,
"goal_confidence_threshold" : null,
"min_margin_pct" : null,
"campaign_group_valuation_strategy" : null,
"min_avg_cpm" : null,
"bid_price_pacing_enabled" : false,
"no_revenue_log" : false
},
"publishers_allowed" : "all",
"lifetime_budget" : null,
"custom_optimization_note" : null,
"currency" : "USD",
"daily_budget" : null,
"auction_event" : null,
"member_id" : 958,
"priority" : "5",
"advertiser_id" : 354236,
"inventory_discovery" : null,
"payout_margin" : null,
"lifetime_pacing_pct" : null,
"id" : 3925282,
"state" : "inactive",
"allow_safety_pacing" : null,
"custom_models" : null,
"timezone" : "EST5EDT",
"end_date" : null,
"incrementality" : null,
"expected_value_model" : null,
"goal_type" : "none",
"start_date" : null,
"last_modified" : "2017-03-20 16:00:21",
"lifetime_budget_imps" : null,
"click_url" : null,
"revenue_type" : "cpm",
"lifetime_pacing_span" : null,
"prefer_delivery_over_performance" : false,
"advertiser" : {
"name" : "MCG Test Advertiser",
"id" : 354236
},
"labels" : null
},
"status" : "OK",
"start_element" : 0,
"dbg_info" : {...},
"id" : 3925282
}
}
Para obtener más información, vea Flujo de trabajo de ALI con modelos personalizados.
Paso 2. Create un árbol de modelos personalizado
En este ejemplo, creamos un modelo personalizado que insertará las macros creativas.
$cat custom-macro-tree
if user_hour = 1:
leaf_name: "cm_1"
creative_macros["ProductViewed"]: "15436"
creative_macros["LandingPage"]: "k2344"
else:
leaf_name: "cm_2"
creative_macros["TestMacro"]: "yourvaluegoeshere"
Paso 3. Carga del modelo personalizado
En este ejemplo, cargamos el modelo personalizado.
$ cat custom_model
{
"custom_model": {
"name": "Custom Macro Test Model",
"member_id": 958,
"advertiser_id": ADVERTISER_ID,
"custom_model_structure": "decision_tree",
"model_output": "bid",
"model_text": "aWYgdXNlcl9ob3VyID0gMToNCiAgICBsZWFmX25hbWU6ICJjbV8xIg0KICAgIGNyZWF0aXZlX21hY3Jvc1siUHJvZHVjdFZpZXdlZCJdOiAiMTU0MzYiDQogICAgY3JlYXRpdmVfbWFjcm9zWyJMYW5kaW5nUGFnZSJdOiAiazIzNDQiDQplbHNlOg0KICAgIGxlYWZfbmFtZTogImNtXzIiDQogICAgY3JlYXRpdmVfbWFjcm9zWyJUZXN0TWFjcm8iXTogInlvdXJ2YWx1ZWdvZXNoZXJlIiMgY3JhZnQgeW91ciB0cmVlIGhlcmUhDQoNCg0KDQoJCQk="
}
}
$ curl -b cookies -X POST -d @custom-model "https://api.appnexus.com/custom-model?advertiser_id=ADVERTISER_ID"
{
"response" : {
"id" : "82495",
"num_elements" : 100,
"start_element" : 0,
"count" : 1,
"custom_model" : {
"code" : null,
"name" : "Custom Macro Test Model",
"model_text" : "<removed>",
"model_output" : "bid",
"active" : true,
"last_modified" : "2017-03-20 15:57:03",
"advertiser_id" : 354236,
"member_id" : 958,
"original_text" : "<removed>",
"compiled_text" : "<removed>",
"custom_model_structure" : "decision_tree",
"id" : 82495
},
"dbg_info" : {... },
"status" : "OK"
}
}
Para obtener más información, vea Servicio de modelos personalizados.
Paso 4. Asociar el modelo personalizado con el elemento de línea
En este ejemplo, asociamos el modelo personalizado al elemento de línea estableciendo el type
campo de la matriz del elemento de custom_models
línea en "no valoración".
$cat update-ali
{
"line-item": {
"id": 11111,
"custom_models": [
{
"id": 82495,
"type": "nonvaluation"
}
]
}
}
$curl -b cookies -X PUT -d '@update-ali' "https://api.appnexus.com/line-item?id=11111&advertiser_id=ADVERTISER_ID"
{
"response" : {
"start_element" : 0,
"status" : "OK",
"count" : 1,
"num_elements" : 100,
"line-item" : {
"code" : "ali-cm-test",
"inventory_discovery_budget" : null,
"inventory_discovery" : null,
"daily_budget_imps" : null,
"clicktrackers" : null,
"advertiser_id" : 354236,
"id" : 3925282,
"goal_type" : "none",
"profile_id" : null,
"prefer_delivery_over_performance" : false,
"lifetime_pacing_pct" : null,
"manage_creative" : false,
"last_modified" : "2017-03-20 16:04:49",
"payout_margin" : null,
"flat_fee_type" : null,
"daily_budget" : null,
"click_model" : null,
"lifetime_pacing" : null,
"publishers_allowed" : "all",
"insertion_orders" : null,
"advertiser" : {
"id" : 354236,
"name" : "MCG Test Advertiser"
},
"enable_pacing" : null,
"end_date" : null,
"budget_intervals" : null,
"click_url" : null,
"priority" : "5",
"pixels" : null,
"valuation" : {
"max_avg_cpm" : null,
"min_margin_pct" : null,
"goal_confidence_threshold" : null,
"bid_price_pacing_enabled" : false,
"goal_threshold" : null,
"campaign_group_valuation_strategy" : null,
"performance_mkt_managed" : false,
"no_revenue_log" : false,
"bid_price_pacing_lever" : 0,
"goal_target" : null,
"min_avg_cpm" : null
},
"member_id" : 958,
"start_date" : null,
"imptrackers" : null,
"flat_fee" : null,
"custom_models" : [
{
"active" : "1",
"type" : "non_valuation",
"name" : "Custom Macro Test Model",
"id" : 82495
}
],
"delivery_goal" : null,
"currency" : "USD",
"expected_value_model" : null,
"timezone" : "EST5EDT",
"lifetime_pacing_span" : null,
"campaigns" : null,
"lifetime_budget" : null,
"incrementality" : null,
"custom_optimization_note" : null,
"name" : "ALI Custom Macro Test",
"creatives" : null,
"comments" : null,
"revenue_value" : 0,
"inventory_type" : "both",
"broker_fees" : null,
"line_item_type" : "standard_v2",
"require_cookie_for_tracking" : true,
"lifetime_budget_imps" : null,
"remaining_days" : null,
"goal_pixels" : null,
"state" : "inactive",
"total_days" : null,
"discrepancy_pct" : 0,
"goal_value" : null,
"labels" : null,
"revenue_type" : "cpm",
"allow_safety_pacing" : null,
"auction_event" : null,
"creative_distribution_type" : null
},
"dbg_info" : {...},
"id" : "3925282"
}
}
Ejemplo
Modelo personalizado de macro creativa sin valoración
#1. If the user hour is between 1am and 2am, insert the macro MyCustomMacro1 with a value of "testvalue1" and the macro MyCustomMacro2 with a value of "testvalue2".
#2. Otherwise, do nothing. (Since this is a non-valuation custom model, a value is not required for the second leaf.)
if user_hour = 1:
leaf_name: "cm_1"
creative_macros["MyCustomMacro1"]: "testvalue1"
creative_macros["MyCustomMacro2"]: "testvalue2"
else:
leaf_name: "cm_2"