Compartir a través de


Ciencia de datos Toolkit: recursos de API del modelo de regresión logística

El propósito de este documento es servir como un recurso de API temporal para los servicios Ciencia de datos Toolkit que permiten la creación de modelos de regresión logística, tablas de búsqueda y predictores de tabla hash.

Lista de descriptores

Descriptor escalar

Tipo:

"scalar_descriptor"

Características:

  • 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

Nota:

El size descriptor se representa como una cadena en los modelos ("300x250", por ejemplo), aunque se convierte en un escalar en el licitador. Cualquier tamaño es técnicamente válido en nuestro sistema, por lo que esta característica se trata como una característica escalar en lugar de una característica categórica.

Ejemplo:

{
    "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
}

Descriptor de segmento

Tipo:

"segment_descriptor"

Características:

  • segment_value
  • segment_age
  • segment_presence

Ejemplo:

{
    "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
}

Descriptor de frecuencia/recencia

Tipo:

"frequency_recency_descriptor"

Características:

  • frequency_life
  • frequency_daily
  • recency

Tipos de objeto disponibles para este descriptor:

  • advertiser
  • line_item
  • campaign

Ejemplo:

{
    "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
}

Descriptor categórico

Tipo:

"categorical_descriptor"

Características:

  • 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

Ejemplo:

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

Descriptor de tabla hash

Tipo:

"hashed"

Ejemplo:

{
    "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)
}

Tablas hash

Este punto de conexión es para enviar una tabla con hash previo. bucket_index0 y bucket_index1, cada 64 bits de largo, están ahí para admitir algoritmos hash que generan valores largos como claves. Actualmente, solo se admite un algoritmo hash: MurmurHash3_x64_128, que creará dos enteros de 64 bits, pero solo usamos los 64 bits inferiores del hash.

Los valores de bucket_index0 deben ser siempre más pequeños que (2 ^ hash_table_size_log) o se rechazarán.

Actualmente, los valores de bucket_index1 se omiten, ya que se usarán para la expansión futura. Si se envía un valor para bucket_index1, debe ser 0. El parámetro es opcional.

Claves de tabla hash

Para cada una de las claves de tabla hash, necesitará un valor uint32. Estos valores deben ser el identificador del objeto respectivo al que se hace referencia desde nuestro sistema: domain_id, por ejemplo, en lugar del valor de cadena de dominio. A continuación, estas claves uint32 se transforman en una matriz de bytes (little-endian) y se aplica un hash.

Ejemplo de Python

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

Función Logit

La creación y actualización del modelo son similares y se va a usar el mismo formato de solicitud para ambos.

Método Punto de conexión Objetivo
GET /custom-model-logit Recupere una función Logit asociada a los parámetros proporcionados.
PUT /custom-model-logit Actualice una función Logit existente con datos en la carga json.
POST /custom-model-logit Create una nueva función Logit a partir de datos de la carga json.
DELETE /custom-model-logit Elimine una función Logit existente que coincida con los parámetros proporcionados.

Parámetros

Nombre Tipo de datos Tipo de parámetro Obligatorio activado Ejemplo
id Entero Consulta GET, PUT, DELETE ?id=1
member_id Entero Consulta PUT, POST ?member_id=1

Ejemplo 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]},
        ]
    }
  ]
}}

Servicio de modelo personalizado de regresión logística