Partager via


Science des données Toolkit - Ressources d’API de modèle de régression logistique

L’objectif de ce document est de servir de ressource d’API temporaire pour les services Science des données Toolkit qui permettent de créer des modèles de régression logistique, des tables de recherche et des prédictions de table hachées.

Liste de descripteurs

Descripteur scalaire

Type:

"scalar_descriptor"

Fonctionnalités :

  • appnexus``_audited
  • cookie_age
  • estimated_average_price
  • estimated_clearing_price
  • predicted_iab_view_rate
  • predicted_video_completion_rate
  • self_audited
  • size
  • creative_size
  • spend_protection
  • uniform
  • user_age

Remarque

Le size descripteur est représenté sous la forme d’une chaîne dans vos modèles (« 300 x 250 », par instance), mais converti en scalaire dans notre soumissionnaire. Toute taille étant techniquement valide dans notre système, cette fonctionnalité est traitée comme une caractéristique scalaire plutôt qu’une caractéristique catégorielle.

Exemple :

{
    "type": "scalar_descriptor",
    "feature_keyword": "cookie_age",
    "default_value": 0,               //Value returned by the descriptor if no match is found
    "initial_range_log": 4,           //Used for log bucketing, initial range
    "bucket_count_log_per_range": 2   //used for log bucketing, # of buckets per range
}

Descripteur de segment

Type:

"segment_descriptor"

Fonctionnalités :

  • segment_value
  • segment_age
  • segment_presence

Exemple :

{
    "type": "segment_descriptor",
    "feature_keyword": "segment_age",
    "segment_id": 2,                  //ID of referenced segment
    "default_value": 0,               //Value returned by the descriptor if no match is found
    "initial_range_log": 4,           //Used for log bucketing, initial range
    "bucket_count_log_per_range": 2   //used for log bucketing, # of buckets per range
}

Descripteur fréquence/récence

Type:

"frequency_recency_descriptor"

Fonctionnalités :

  • frequency_life
  • frequency_daily
  • recency

Types d’objets disponibles pour ce descripteur :

  • advertiser
  • line_item
  • campaign

Exemple :

{
    "type": "frequency_recency_descriptor",
    "feature_keyword": 'frequency_life',
    "object_type": 'advertiser',
    "object_id": 1,                   //ID of the referenced advertiser, 
    "default_value": 0,               //Value returned by the descriptor if no match is found
    "initial_range_log": 4,           //Used for log bucketing, initial range
    "bucket_count_log_per_range": 2   //used for log bucketing, # of buckets per range
}

Descripteur catégoriel

Type:

"categorical_descriptor"

Fonctionnalités :

  • country
  • region
  • city
  • dma
  • postal_code
  • user_day
  • user_hour
  • os_family
  • os_extended
  • browser
  • language
  • user_gender
  • domain
  • ip_address
  • position
  • placement
  • placement_group
  • publisher
  • seller_member_id
  • supply_type
  • device_type
  • device_model
  • carrier
  • mobile_app
  • mobile_app_instance
  • mobile_app_bundle
  • appnexus``_intended_audience
  • seller_intended_audience
  • spend_protection
  • user_group_id
  • advertiser_id
  • brand_category
  • creative
  • inventory_url_id
  • media_type

Exemple :

{
    "type": "categorical_descriptor",
    "feature_keyword": "city"
}

Descripteur de table de hachage

Type:

"hashed"

Exemple :

{
    "type": "hashed",
    "keys": [ array of one to 5 descriptors in this list:
        scalar_descriptor,
        custom_model_descriptor,
        freq_rec_descriptor,
        segment_descriptor,
        categorical_descriptor
    ],
    "hash_seeds": [42, 42, 42, 42, 42, 42],  //Seeds used when passed to Murmurhash3_x64_128 function, only first one is used for now, array is for planned future hash functions that need more than one seed
    "hash_id": <existing hash table ID>,
    "default_value": 0,                      //Value returned by the descriptor if no match is found in your hash table
    "hash_table_size_log": 20                //log of maximum value for a key of your table. Values larger than 2^hash_table_size_log will be rejected. Max for hash_table_size_log is 64 (no bucketing)
}

Tables de hachage

Ce point de terminaison consiste à envoyer une table pré-hachée. bucket_index0 et bucket_index1, de 64 bits chacun, sont là pour prendre en charge les algorithmes de hachage qui produisent des valeurs longues en tant que clés. Actuellement, nous ne prenons en charge qu’un seul algorithme de hachage : MurmurHash3_x64_128, qui créera deux entiers 64 bits, mais nous n’utilisons que les 64 bits inférieurs du hachage.

Les valeurs dans bucket_index0 doivent toujours être inférieures (2 ^ hash_table_size_log) à ou elles seront rejetées.

Actuellement, les valeurs dans bucket_index1 sont ignorées, car elles doivent être utilisées pour une extension ultérieure. Si une valeur est envoyée pour bucket_index1, elle doit être 0. Le paramètre est facultatif.

Clés de table de hachage

Pour chacune de vos clés de table de hachage, vous aurez besoin d’une valeur uint32. Ces valeurs doivent être l’ID de l’objet respectif que vous référencez à partir de notre système , domain_idpour instance, plutôt que la valeur de chaîne de domaine. Ces clés uint32 sont ensuite transformées en tableau d’octets (little-endian) et hachées.

Exemple Python

hash_bucket = (mmh3.hash64(bytes, seed)[0]) % table_size

Logit, fonction

La création et la mise à jour du modèle sont similaires. Le même format de requête doit être utilisé pour les deux.

Méthode Point de terminaison Objectif
GET /custom-model-logit Récupérez une fonction Logit associée aux paramètres fournis.
PUT /custom-model-logit Mettez à jour une fonction Logit existante avec des données dans la charge utile JSON.
POST /custom-model-logit Create une nouvelle fonction Logit à partir des données de la charge utile JSON.
DELETE /custom-model-logit Supprimez une fonction Logit existante correspondant aux paramètres fournis.

Paramètres

Nom Type de données Type de paramètre Obligatoire activé Exemple
id int Requête GET, PUT, DELETE ?id=1
member_id int Requête PUT, POST ?member_id=1

Exemple POST

{"custom-model-logit": {
  "member_id": 1,
  "beta0": 1.2,
  "max": 5,
  "min": 0,  //optional, will be set to 0 if not passed
  "name": "Sample LRE model",
  "offset": 0.3, //optional, will be set to 0 if not passed
  "scale": 1.5, //optional, will be set to 1 if not passed
  "predictors": [
    {
      "coefficient": 0.2,
      "feature_descriptor": {
        "bucket_count_log_per_range": 31,
        "default_value": 0,
        "feature_keyword": "size",
        "initial_range_log": 31,
        "type": "scalar_descriptor"
      },
      "type": "scalar"
    },
    {
      "coefficient": 0.3,
      "feature_descriptor": {
        "bucket_count_log_per_range": 31,
        "custom_model_id": 2,
        "default_value": 0,
        "feature_keyword": "custom_model",
        "initial_range_log": 31,
        "type": "custom_model_descriptor"
      },
      "type": "scalar"
    },
    {
      "coefficient": 0.4,
      "feature_descriptor": {
        "bucket_count_log_per_range": 31,
        "default_value": 0,
        "feature_keyword": "frequency_life",
        "initial_range_log": 31,
        "object_id": 1,
        "object_type": "advertiser",
        "type": "frequency_recency_descriptor"
      },
      "type": "scalar"
    },
    {
      "coefficient": 0.5,
      "feature_descriptor": {
        "bucket_count_log_per_range": 31,
        "default_value": 0,
        "feature_keyword": "segment_age",
        "initial_range_log": 31,
        "segment_id": 2,
        "type": "segment_descriptor"
      },
      "type": "scalar"
    },
    {
        "type": "hashed",
        "keys": [
            {
                "type": "categorical_descriptor",
                "feature_keyword": "advertiser_id"
            },
            {
                "type": "scalar_descriptor",
                "feature_keyword": "user_age",
                "default_value": 0
            }
        ],
        "hash_seeds": [42, 42, 42, 42, 42, 42],
        "default_value": 0,
        "hash_table_size_log": 20,
        "coefficients": [
            {"bucket_index0": 0, "bucket_index1": 0, "weight": 1.3},
            {"bucket_index0": 1, "bucket_index1": 0, "weight": 0.7},
            {"bucket_index0": 2, "bucket_index1": 0, "weight": 1.5},
            {"bucket_index0": 3, "bucket_index1": 0, "weight": 0.9}
        ]
    },
    {
        "type": "lookup",
        "default_value": 0.1,
        "features": [
            {
                "type": "categorical_descriptor",
                "feature_keyword": "advertiser_id"
            },
            {
                "type": "scalar_descriptor",
                "feature_keyword": "user_age",
                "default_value": 0
            }
        ],
        "coefficients": [
            {'weight': 1.1, 'key': [1, 1]},
            {'weight': 1.3, 'key': [2, 2]},
            {'weight': 1.2, 'key': [3, 3]},
        ]
    }
  ]
}}

Service de modèle personnalisé de régression logistique