Recomendaciones Documentación
Visión general
Cross-sell, upsell, bundles, canasta de compras, precios y recomendación híbrida.
Esta referencia cubre 11 engines. Cada endpoint trae ruta, permiso, parámetros, respuesta y los errores posibles.
Score de bundles
Propósito
Puntúa pares candidatos de bundle de productos por lift de coocurrencia, soporte y precio sugerido de descuento.
Calcula la coocurrencia de productos por pares entre transacciones (soporte, confianza, lift), precia el descuento del bundle escalado por el lift y rankea los candidatos con un score compuesto 0-100 (40% lift, 35% soporte, 25% descuento).
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
min_support | number | no | 0.01 | Fracción mínima de transacciones en que un par de productos debe coocurrir para ser considerado. |
min_lift | number | no | 1.2 | Lift mínimo para que un par califique como candidato a bundle. |
base_discount_pct | number | no | 5 | Porcentaje base de descuento del bundle antes del bono por lift. |
max_lift_bonus_pct | number | no | 10 | Porcentaje máximo de descuento extra otorgado a pares de alto lift. |
top_n | integer | no | 20 | Cantidad de bundles con mejor score devueltos. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
transaction_id | string | sí | Identificador único que agrupa filas en una misma compra/transacción. |
product_id | string | sí | Identificador del producto comprado en la transacción. |
price | number | sí | Precio unitario del producto al momento de la compra, usado para preciar el bundle. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/bundle_scoring/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Cross-sell
Propósito
Matriz de coocurrencia de productos: soporte, confianza y lift para pares de cross-sell.
¿Por qué? Descubre qué productos se compran juntos con frecuencia, al estilo market basket analysis, y entrega una matriz de pares ordenados por lift, con soporte y confianza direccional para cada par. En la práctica, alimenta recomendaciones de producto, layout de tienda, armado de bundles y campañas de cross-sell y upsell.
¿Cómo? Cada transacción forma un conjunto de productos, y el engine cuenta las frecuencias individuales y de pares para calcular soporte, confianza (en ambas direcciones, A hacia B y B hacia A) y lift, donde un lift mayor que 1 indica asociación positiva. Los pares se filtran por soporte y confianza mínimos y se ordenan por lift descendente hasta el top N.
Origen Las métricas de reglas de asociación tienen su origen en el trabajo de Agrawal y Srikant (1994), "Fast Algorithms for Mining Association Rules", presentado en la 20.ª conferencia VLDB.
Literatura de referencia
- Agrawal, R. & Srikant, R. (1994). "Fast Algorithms for Mining Association Rules." Proceedings of the 20th VLDB Conference.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
min_support | number | no | 0.01 | Fracción mínima de transacciones en que un par debe coocurrir para mantenerse. |
top_n | integer | no | 100 | Cantidad de pares en el tope (por lift) devueltos. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
transaction_id | string | sí | Identificador único que agrupa filas en una misma transacción. |
product_id | string | sí | Identificador del producto comprado en la transacción. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/cross_sell/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Precios dinámicos
Propósito
Recomendación de precio óptimo a partir de regresión log-log de elasticidad-precio.
¿Por qué? Calcula el precio óptimo por producto a partir de la elasticidad de la demanda, sustentando una fijación de precios dinámica basada en datos. Entrega el punto de precio que maximiza ingreso o ganancia, además de una clasificación de elasticidad por producto, en lugar de ajustes por intuición.
¿Cómo? Ajusta una regresión log-log, ln(Q) = α + β·ln(P), donde β representa la elasticidad-precio de la demanda. Luego predice la demanda para una grilla de precios candidatos y optimiza el ingreso R = P × Q(P) o la ganancia π = (P - C) × Q(P) sobre esos escenarios.
Origen La fundamentación proviene de la literatura de estrategia de precios consolidada por Nagle y Müller (2017) en "The Strategy and Tactics of Pricing" (Routledge).
Literatura de referencia
- Nagle, T. T. & Müller, G. (2017). "The Strategy and Tactics of Pricing." Routledge.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
candidate_prices | array | sí | Lista de precios candidatos (todos positivos) a evaluar en demanda/ingresos/ganancia esperados. | |
optimize_for | string | no | "revenue" | Objetivo a optimizar: 'revenue' o 'profit'. |
cost | number | no | Costo unitario usado en el cálculo de ganancia cuando optimize_for es 'profit'. Obligatorio cuando optimize_for es 'profit' y los datos no tienen columna cost; ignorado cuando es 'revenue'. | |
min_data_points | integer | no | 10 | Mínimo de observaciones históricas de precio/cantidad exigidas; >= 3. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
price | number | sí | Precio histórico al que se vendieron las unidades. |
quantity_sold | number | sí | Unidades vendidas al precio histórico correspondiente. |
cost | number | no | Costo unitario opcional por fila; el promedio se usa en la optimización de ganancia cuando optimize_for es 'profit' y no hay param cost. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/dynamic_pricing/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Monitor de precios
Propósito
Monitoreo competitivo de precios: PPI, tendencia, volatilidad, detección de guerra de precios y alertas de variación entre sitios.
Agrupa observaciones de precio por producto y sitio en orden cronológico, calcula el Índice de Posición de Precio de cada sitio contra el promedio del mercado, clasifica la tendencia de precio (declining/rising/stable), señala guerras de precios a partir de caídas alternadas entre sitios y levanta alertas cuando la variación de precio de un sitio excede el umbral.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
reference_site | string | no | Etiqueta informativa de un sitio de interés; no cambia el cálculo del promedio de mercado. | |
alert_threshold_pct | number | no | 10 | Porcentaje absoluto de variación de precio que dispara una alerta. |
min_observations | integer | no | 2 | Mínimo de registros de precio por combinación producto-sitio para ser incluida; las combinaciones más dispersas se filtran y cuentan en filtered_combinations. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
product_id | string | sí | Identificador del producto. product_title también se acepta como alias cuando product_id está ausente. |
site_name | string | sí | Nombre del sitio/tienda competidor donde se observó el precio. |
price | number | sí | Precio observado del producto en el sitio. |
recorded_at | string | sí | Timestamp/fecha del registro del precio; usado para ordenar las observaciones cronológicamente. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/price_monitor/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Sensibilidad al precio
Propósito
Correlación precio-demanda por producto y proxy de dirección de elasticidad.
¿Por qué? Mide la sensibilidad al precio de cada producto a partir de la relación entre precio y cantidad vendida, clasificándolo como highly_elastic, moderately_elastic o inelastic. Sirve para identificar qué productos toleran ajustes de precio y cuáles exigen cautela, orientando estrategias de precios y promociones.
¿Cómo? Para cada producto, calcula la correlación de Pearson entre precio y cantidad y el coeficiente de variación del precio, estimando la elasticidad vía aproximación log-lineal (elasticity = r * (CV_qty / CV_price)). La clasificación usa el valor absoluto de la correlación: highly_elastic si |r| > 0.7, moderately_elastic si |r| > 0.4, inelastic en caso contrario, y los productos con una única observación reciben r = 0.0 y clasificación inelastic.
Origen El concepto de elasticidad de la demanda se remonta a Marshall (1890) en "Principles of Economics", y su aplicación a la estrategia de precios sigue a Nagle y Müller (2017) en "The Strategy and Tactics of Pricing" (Routledge).
Literatura de referencia
- Marshall, A. (1890). "Principles of Economics."
- Nagle, T. T. & Muller, G. (2017). "The Strategy and Tactics of Pricing." Routledge.
Parámetros (params)
Esta engine no recibe params: envía solo data[].
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
product_id | string | sí | Identificador del producto. |
price | number | sí | Precio al que se registró la observación. |
quantity_sold | number | sí | Unidades vendidas al precio correspondiente. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/price_sensitivity/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Canasta de productos
Propósito
Análisis de canasta de compras: itemsets frecuentes Apriori y reglas de asociación (soporte/confianza/lift).
¿Por qué? Identifica combinaciones de productos comprados juntos con frecuencia, yendo más allá de pares aislados mediante la minería de itemsets frecuentes. Es fundamental para decisiones de layout de tienda, promociones conjuntas y recomendaciones de producto.
¿Cómo? Un algoritmo al estilo Apriori realiza una búsqueda por niveles para encontrar itemsets frecuentes por encima del soporte mínimo. A partir de ellos genera reglas de asociación evaluadas por soporte, confianza y lift para medir la relevancia de cada regla.
Origen El método deriva del algoritmo Apriori de Agrawal y Srikant (1994), descrito en "Fast Algorithms for Mining Association Rules", presentado en la conferencia VLDB.
Literatura de referencia
- Agrawal, R. & Srikant, R. (1994). "Fast Algorithms for Mining Association Rules." VLDB.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
min_support | number | no | 0.01 | Fracción mínima de transacciones en que un itemset debe aparecer (0 < valor < 1). |
min_confidence | number | no | 0.2 | Confianza mínima para mantener una regla de asociación (0 < valor <= 1). |
max_itemset_size | integer | no | 3 | Tamaño máximo de itemset explorado por la búsqueda nivel a nivel (>= 2). |
top_k | integer | no | 50 | Cantidad de reglas/itemsets/pares en el tope devueltos. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
transaction_id | string | sí | Identificador único que agrupa filas en una misma transacción/canasta. |
item_id | string | sí | Identificador del producto/ítem comprado en la transacción. product se acepta como alias. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/product_basket/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Recomendación híbrida
Propósito
Engine híbrida de recomendación: filtrado colaborativo SVD con aceleración dedicada y fallbacks por contenido y popularidad.
¿Por qué? Sistema de recomendación híbrido que combina personalización y diversidad, ofreciendo lo mejor de ambos mundos entre collaborative filtering y filtrado basado en contenido. Soporta recomendaciones user-to-items e item-to-items, evitando listas repetitivas y ampliando el descubrimiento de productos.
¿Cómo? La factorización matricial por TruncatedSVD cubre el lado colaborativo, mientras que TF-IDF con similitud de coseno cubre el lado de contenido, todo con aceleración dedicada. Los scores de ambos enfoques se combinan con pesos configurables y un re-ranking por Maximal Marginal Relevance (MMR) garantiza diversidad en la lista final.
Origen El método une la factorización matricial para sistemas de recomendación descrita por Koren, Bell y Volinsky (2009) en "Matrix Factorization Techniques for Recommender Systems" con el re-ranking por diversidad MMR propuesto por Carbonell y Goldstein (1998) en "The Use of MMR, Diversity-Based Reranking for Reordering Documents" (SIGIR).
Literatura de referencia
- Koren, Y., Bell, R. & Volinsky, C. (2009). "Matrix Factorization Techniques for Recommender Systems."
- Carbonell, J. & Goldstein, J. (1998). "The Use of MMR, Diversity-Based Reranking for Reordering Documents." SIGIR.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
mode | string | no | "user_items" | Modo de recomendación: 'user_items' o 'similar_items'. |
target_user | string | sí | ID del usuario para quien generar recomendaciones. Obligatorio cuando mode es 'user_items' (el por defecto). | |
target_item | string | no | ID del ítem para el cual buscar similares. Obligatorio cuando mode es 'similar_items'. | |
top_n | integer | no | 10 | Cantidad de recomendaciones devueltas (1-1000). |
svd_ranks | array | no | [20,50,100] | Ranks de SVD probados vía RMSE en holdout; el mejor se usa en el modelo final. |
min_interactions | integer | no | 5 | Mínimo de interacciones del usuario objetivo para intentar filtrado colaborativo; por debajo la engine cae al ranking de popularidad. |
item_descriptions | object | no | Mapa opcional de item_id a texto de descripción, que habilita similitud por contenido TF-IDF en modo 'similar_items'. | |
random_state | integer | no | 42 | Semilla aleatoria del ajuste SVD y del muestreo de holdout. |
diversity | number | no | 0.3 | Factor de diversidad MMR de 0.0 (pura relevancia) a 1.0 (máxima diversidad). |
relevance_threshold | number | no | 4 | Nota mínima (0.0-5.0) para que un ítem de holdout cuente como relevante en las métricas de ranking. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
user_id | string | sí | Identificador del usuario. |
item_id | string | sí | Identificador del ítem/producto. |
rating | number | sí | Score de interacción: monto de compra, nota, clics o similar. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/recommend/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Recomendación de ítems
Propósito
Recomendaciones por filtrado colaborativo vía factorización de matriz SVD (usuario-ítem o ítem-ítem).
¿Por qué? Genera recomendaciones de ítems por collaborative filtering, descubriendo patrones latentes de preferencia que no son observables directamente en el historial de interacciones. Soporta recomendaciones user-based e item-based, sirviendo para personalizar vitrinas y listas de sugerencias.
¿Cómo? La matriz de interacciones usuario-ítem se descompone por TruncatedSVD en factores latentes de baja dimensionalidad. La similitud de coseno entre los vectores de factores encuentra ítems o usuarios semejantes, y la reconstrucción parcial de la matriz genera los scores de predicción.
Origen La técnica sigue la factorización matricial para sistemas de recomendación descrita por Koren, Bell y Volinsky (2009) en "Matrix Factorization Techniques for Recommender Systems", publicado en la revista Computer, 42(8).
Literatura de referencia
- Koren, Y., Bell, R. & Volinsky, C. (2009). "Matrix Factorization Techniques for Recommender Systems." Computer, 42(8), 30-37.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
mode | string | no | "user_items" | Modo de recomendación: 'user_items' (ítems para cada usuario) o 'similar_items' (ítems similares a cada ítem). |
n_recommendations | integer | no | 10 | Cantidad de recomendaciones devueltas por usuario o ítem. |
n_factors | integer | no | 50 | Número de factores latentes del SVD usados en la factorización. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
user_id | string | sí | Identificador del usuario. |
item_id | string | sí | Identificador del ítem/producto. |
rating | number | sí | Fuerza de la interacción: nota explícita o señal implícita (ej.: conteo de compras). |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/recommend_items/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Ítems similares
Propósito
Recomendaciones ítem a ítem: colaborativa (SVD+coseno) o por contenido, con aceleración dedicada opcional.
¿Por qué? Recomendación item-to-item de alto desempeño, ideal para secciones del tipo "clientes que compraron X también compraron Y" incluso en catálogos grandes. Entrega un ranking top-N de ítems similares para cada ítem del catálogo.
¿Cómo? La factorización matricial por TruncatedSVD, con aceleración dedicada, proyecta los ítems en un espacio latente. La similitud de coseno entre los vectores de features en ese espacio genera el ranking de los ítems más cercanos.
Origen La técnica sigue la factorización matricial para sistemas de recomendación descrita por Koren, Bell y Volinsky (2009) en "Matrix Factorization Techniques for Recommender Systems", publicado en la revista Computer, 42(8).
Literatura de referencia
- Koren, Y., Bell, R. & Volinsky, C. (2009). "Matrix Factorization Techniques for Recommender Systems." Computer, 42(8), 30-37.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
n_recommendations | integer | no | 10 | Cantidad de ítems similares devueltos por ítem. El alias top_n también se acepta. |
n_factors | integer | no | 50 | Número de factores latentes del SVD del filtrado colaborativo. |
target_items | array | no | Lista opcional de item_ids para restringir la salida. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
item_id | string | sí | Identificador del ítem/producto. |
user_id | string | no | Identificador del usuario. Junto con rating, habilita el filtrado colaborativo; omite ambos para usar similitud por contenido. |
rating | number | no | Fuerza de la interacción para el filtrado colaborativo. Obligatoria junto con user_id. |
category | string | no | Categoría del ítem, usada como feature de contenido cuando user_id/rating están ausentes. |
price | number | no | Precio del ítem, usado como feature de contenido cuando user_id/rating están ausentes. |
brand | string | no | Marca del ítem, usada como feature de contenido cuando user_id/rating están ausentes. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/recommend_similar_items/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Modelo de uplift
Propósito
Modelado de uplift T-Learner: efecto individual de tratamiento, segmentación de Radcliffe y Qini/AUUC.
¿Por qué? Mide el impacto incremental real de campañas e intervenciones sobre el comportamiento del cliente, respondiendo quién solo convierte si es impactado. Entrega el efecto individual del tratamiento (ITE) por cliente y una clasificación en segmentos de uplift: persuadibles, sleeping dogs, lost causes y sure things, dirigiendo la inversión hacia donde realmente cambia el resultado.
¿Cómo? Sigue el enfoque T-Learner: entrena modelos Random Forest separados para los grupos de tratamiento y control y calcula ITE = P(Y=1|X, T=1) - P(Y=1|X, T=0). La calidad del modelo se evalúa con la curva Qini y el AUUC (Area Under Uplift Curve).
Origen El enfoque se basa en los metalearners para la estimación de efectos heterogéneos de tratamiento propuestos por Künzel y coautores (2019) en "Metalearners for Estimating Heterogeneous Treatment Effects using Machine Learning", publicado en PNAS.
Literatura de referencia
- Künzel, S. R. et al. (2019). "Metalearners for Estimating Heterogeneous Treatment Effects using Machine Learning." PNAS, 116(10), 4156-4165.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
treatment_column | string | sí | Nombre de la columna binaria (0/1) indicadora de tratamiento en data. | |
outcome_column | string | sí | Nombre de la columna binaria (0/1) de desenlace en data. | |
method | string | no | "two_model" | Método de estimación de uplift. Solo 'two_model' (T-Learner) está soportado por ahora. |
random_state | integer | no | 42 | Semilla aleatoria de los modelos RandomForest y del cross-fitting. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
treated | integer | sí | Columna de tratamiento de ejemplo (binaria 0/1). El nombre real es el que especifique treatment_column. |
converted | integer | sí | Columna de desenlace de ejemplo (binaria 0/1). El nombre real es el que especifique outcome_column. |
age | number | no | Feature numérica de ejemplo, detectada como entrada del modelo (cualquier columna numérica no usada como id/tratamiento/desenlace). |
income | number | no | Feature numérica de ejemplo, detectada como entrada del modelo (cualquier columna numérica no usada como id/tratamiento/desenlace). |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/uplift_model/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"Sugerencias de upsell
Propósito
Sugerencias de upsell rankeadas por lift de reglas de asociación, confianza o margen.
¿Por qué? Genera sugerencias de upsell identificando los productos de mayor valor que suelen acompañar compras existentes. Aumenta el ticket promedio con ofertas que tienen sentido para el cliente, ordenadas por lift, confianza o margen.
¿Cómo? Reglas de asociación al estilo Apriori calculan la frecuencia de co-compra entre pares de productos. El ranking es multi-criterio, combinando lift, confianza y margen adicional, y un filtro de relevancia garantiza que el producto sugerido tenga precio o margen superior.
Origen Las reglas de asociación tienen su origen en el trabajo de Agrawal, Imielinski y Swami (1993), "Mining Association Rules Between Sets of Items in Large Databases", presentado en la conferencia SIGMOD.
Literatura de referencia
- Agrawal, R., Imielinski, T. & Swami, A. (1993). "Mining Association Rules Between Sets of Items in Large Databases." SIGMOD.
Parámetros (params)
| Campo | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
min_support | number | no | 0.01 | Fracción mínima de transacciones en que un par de compra conjunta debe aparecer (0 < valor < 1). |
min_confidence | number | no | 0.3 | Confianza mínima para mantener una sugerencia (0 < valor <= 1). |
top_k | integer | no | 10 | Cantidad de sugerencias rankeadas devueltas por ítem de origen. |
optimize_for | string | no | "lift" | Métrica de ranking de las sugerencias: 'lift', 'confidence' o 'margin'. |
Columnas de data[]
| Columna | Tipo | Obligatoria | Descripción |
|---|---|---|---|
transaction_id | string | sí | Identificador único que agrupa filas en una transacción. customer_id se usa como columna de origen alternativa si está ausente. |
item_id | string | sí | Identificador del producto/ítem comprado. product_id se acepta como alias. |
price | number | sí | Precio del ítem. amount se acepta como alias. |
margin | number | no | Margen/ganancia opcional del ítem, usada para rankear cuando optimize_for es 'margin'. |
Respuesta
En modo asíncrono (por defecto), 202 Accepted con {"process_uuid", "result_url"}; el resultado sale en GET /api/v1/results/{process_uuid}. Con ?sync=true o ?dry_run=true la respuesta es 200 con el resultado inline (y 504 con el process_uuid si el worker no responde a tiempo).
Errores
403- la engine no está enallowed_enginesde tu suscripción.413- subida por encima demax_upload_mb.422- engine desconocida o inactiva en el catálogo.429- cuota diaria (max_jobs_per_day) o por minuto excedida.
La validación es fail-fast: un envío rechazado no tiene ningún efecto secundario.
curl -X POST "https://intelligence.echosistema.live/api/v1/upsell_suggestions/process?dry_run=true&playground=true" \
-H "X-TENANT-KEY: $TENANT_KEY"