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