Partager via


Science des données Toolkit - Bonsai smart leaves

Remarque

Cette page suppose que vous êtes déjà familiarisé avec la langue Bonsai et les fonctionnalités Bonsai.

Vous utilisez le langage Bonsai pour écrire une logique d’arbre de décision pour les modèles prédictifs personnalisés. Chaque branche conduit à un nœud, ou « feuille », qui prend la valeur d’une valeur numérique simple représentant l’enchère. Au lieu d’évaluer une valeur statique unique, les feuilles actives évaluent une valeur d’enchère qui est modifiée dynamiquement en fonction d’une métrique de performances ou de remise publicitaires spécifiée. Les feuilles intelligentes vous permettent également de nommer des feuilles individuelles avec une valeur de chaîne arbitraire. Cela est disponible dans le flux standard pour faciliter le débogage et l’analyse des performances.

Remarque

Les feuilles intelligentes sont définies à l’aide d’un formulaire similaire à YAML, un format de sérialisation des données lisible par l’utilisateur.

syntaxe compute()

Vous pouvez utiliser des feuilles intelligentes pour spécifier une valeur statique ou une enchère calculée à partir d’une métrique publicitaire ou pour spécifier qu’aucune enchère n’est effectuée. Si la valeur est calculée, elle est déterminée par l’expression compute , qui utilise le format suivant :

value: compute(input_field, multiplier, offset, min_value, max_value)

Ceci est évalué comme l’équation suivante :

max(min_value, min(max_value, input_field * multiplier + offset))

Autrement dit, la valeur calculée est le champ d’entrée multiplié par le multiplicateur, plus un décalage. Si le résultat est inférieur à la valeur minimale, la valeur minimale est retournée à la place. Si le résultat est supérieur à la valeur maximale, la valeur maximale est retournée. Pour omettre un calcul (multiplicateur, décalage, valeur minimale ou valeur maximale), utilisez un trait de soulignement (_) pour la valeur omise. Si vous omettez de spécifier la valeur du multiplicateur, la valeur par défaut est 1.

Remarque

Les enchères calculées par le modèle sont toujours exprimées dans la devise définie sur l’annonceur, même si vous avez spécifié une autre devise pour la campagne.

Champs feuilles intelligents

Champ Type de champ Description Par défaut
value text Valeur de l’enchère. Si le modèle d’arborescence est le prix de l’offre, l’offre est exprimée dans la devise définie pour cet annonceur. Si le modèle d’arborescence est un modificateur d’enchère, l’enchère est un float ou un entier. Les valeurs possibles sont les suivantes :
- compute(input_field, multiplier, offset, min_value, max_value)
- no_bid
- une valeur statique (nombre)

compute La spécification calcule une valeur en fonction de l’un des champs d’entrée pour compute() ci-dessous. Pour omettre un calcul (multiplicateur, décalage, valeur minimale ou valeur maximale), utilisez un trait de soulignement (_) pour la valeur omise.

Avertissement: N’utilisez pas d’expressions compute() qui sont évaluées à des nombres négatifs ou à zéro (0). Ces valeurs ne sont pas prises en charge et peuvent fournir des résultats inattendus. Il est préférable de spécifier no_bid explicitement.
leaf_name string(7) Valeur de chaîne facultative qui sera transmise aux journaux et aux rapports pour faciliter le débogage et l’analyse des performances. leaf_name peut contenir jusqu’à sept caractères ASCII (7 bits) et n’est pas obligatoirement unique.

Note: Étant donné que leaf_name est une chaîne, la valeur doit être placée entre guillemets doubles (").

Champs d’entrée pour compute()

Les valeurs des champs d’entrée sont déterminées par l’optimisation Xandr. Pour plus d’informations, consultez le Guide d’optimisation de l’élément de ligne augmentée dans la documentation (connexion requise).

Champ Type Description
estimated_iab_viewthrough_rate float, integer Quelle est la probabilité que cette impression d’affichage web soit mesurée comme visible par la norme IAB, de 0 à 1.
predicted_iab_video_view_rate float, integer Quelle est la probabilité que cette impression vidéo soit mesurée comme visible par la norme IAB, de 0 à 1.
predicted_video_completion_rate float, integer Quelle est la probabilité que l’utilisateur watch entièrement cette impression vidéo, de 0 à 1. L’inventaire non vidéo est 0.
estimated_average_price float, integer Prix médian pour cette impression.
estimated_clearing_price float, integer Prix du 80e centile pour cette impression.
uniform float, integer Nombre aléatoire uniforme entre 0 et 1 (0 inclus, 1 exclus).

Utilisation de segments comme entrée pour compute()

Vous pouvez effectuer des calculs à l’aide de la valeur ou de l’âge de l’utilisateur dans un segment interne ou tiers pour déterminer une valeur d’enchère. Si l’utilisateur n’est pas présent dans le segment, aucune enchère n’est effectuée. Utilisez le service de segment pour récupérer les ID de segment.

Champ Type Description
segment[ID].value
float, integer Valeur de l’utilisateur dans un segment interne ou tiers. Si l’utilisateur n’est pas présent dans le segment, aucune enchère n’est effectuée.
ID est l’ID de segment.
segment[ID].age float, integer Âge d’un utilisateur dans un segment interne ou tiers. Si l’utilisateur n’est pas présent dans le segment, aucune enchère n’est effectuée.
ID est l’ID de segment.

Utilisation de la fréquence ou de la récence comme entrées pour compute()

Vous pouvez effectuer des calculs à l’aide de la fréquence ou de la récence pour déterminer une valeur d’enchère.

Champ Type Description
OBJECT[ID].day_frequency
float, integer Nombre d’annonces vues par un utilisateur le jour actuel. Cela peut être déterminé pour un annonceur, un élément de ligne ou une campagne. Si aucune donnée de fréquence n’est trouvée, la fréquence est marquée comme zéro (0).

OBJECT est advertiser, line_itemou campaign, et ID est l’ID d’objet. Utilisez le service annonceur, le service d’élément de ligne ou le service campagne pour récupérer les ID.
OBJECT[ID].lifetime_frequency float, integer Nombre de publicités vues par un utilisateur au cours de la durée de vie d’un annonceur, d’un élément de ligne, d’une campagne ou d’une création. Si aucune donnée de fréquence n’est trouvée, la fréquence est marquée comme zéro (0).

OBJECT est advertiser, line_itemou campaign, et ID est l’ID d’objet. Utilisez le service annonceur, le service d’élément de ligne ou le service campagne pour récupérer les ID.
OBJECT[ID].recency float, integer Nombre de minutes depuis que l’utilisateur a vu une publicité. Cela peut être déterminé pour toutes les annonces d’un annonceur, d’un élément de ligne ou d’une campagne, ou pour un créateur individuel. Si aucune donnée de récence n’est trouvée, aucune enchère n’est effectuée.

OBJECTest advertiser, line_itemou , ou campaign, et creativeID est l’ID d’objet. Utilisez le service annonceur, le service d’élément de ligne ou le service campagne pour récupérer les ID.

Exemples

Prix de l’offre avec prix moyen estimé

Une feuille a un prix d’enchère minimal autorisé, mais pas de limite sur le maximum.

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

    # 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, _)

Arbre de prix des enchères avec estimation du prix de compensation, pas d’enchère et des feuilles intelligentes de valeur statique

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

# 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

Arbre de prix des enchères avec des feuilles intelligentes de taux d’affichage IAB estimés

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

# 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

Enchère basée sur la valeur du segment

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

#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

Enchère basée sur l’âge du segment

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

#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

Enchère basée sur la fréquence quotidienne

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

#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

Enchère basée sur la fréquence de durée de vie

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

#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

Enchère basée sur la récence

Remarque

Dans l’exemple de code ci-dessous, les lignes commençant par # sont des commentaires pour vous aider à comprendre la logique de cette arborescence.

#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