Volver al inicio

Evaluación de promociones sin A/B: Diff-in-Diff y PSM

El artículo describe métodos para evaluar el efecto de promociones abiertas sin pruebas A/B: Diff-in-Diff con usuarios LFL y Propensity Score Matching. Se proporcionan ejemplos de cálculos, código y verificaciones de calidad de grupos.

Diff-in-Diff y PSM: evaluación de promociones sin pruebas
Advertisement 728x90

Medir el Impacto de Promociones sin Pruebas A/B: Diferencias en Diferencias y Emparejamiento por Puntuación de Propensión

Las promociones abiertas sin aleatorización requieren métodos alternativos de evaluación. Los enfoques principales son las Diferencias en Diferencias (Diff-in-Diff) para comparar tendencias y el Emparejamiento por Puntuación de Propensión (PSM) para construir grupos de control similares. Estas técnicas ayudan a aislar el efecto real de la promoción frente a la estacionalidad y las tendencias del mercado naturales.

Un grupo de control es esencial para distinguir el impacto de la promoción de factores externos. Sin él, cualquier aumento en métricas durante la temporada festiva podría atribuirse erróneamente a la promoción—cuando en realidad se debe simplemente al impulso estacional.

Diferencias en Diferencias: El Enfoque Básico con Control Común

La técnica de Diferencias en Diferencias calcula la diferencia en las tendencias de métricas entre el grupo objetivo (participantes de la promoción) y el grupo de control (todos los usuarios). Comparar simplemente los periodos previos y posteriores a la promoción ignora las diferencias iniciales: los participantes suelen tener mayor lealtad y un valor promedio de pedido más alto desde el inicio.

Google AdInline article slot

Este método aplica a usuarios Like-for-Like (LFL)—aquellos activos tanto antes como durante la promoción. Excluye así la influencia de la adquisición de nuevos usuarios.

Pasos para el cálculo:

  • Para todos los usuarios LFL: tendencia del periodo previo al periodo de promoción.
  • Para los usuarios LFL que participaron: misma tendencia.
  • La diferencia representa el efecto de la promoción.

Ejemplo usando el valor promedio de pedido:

Google AdInline article slot

| Periodo | Grupo Objetivo | Todos los Usuarios |

|--------------|----------------|--------------------|

| Antes de la promoción | ₽2.500 | ₽1.350 |

Google AdInline article slot

| Durante la promoción | ₽3.000 | ₽1.500 |

| Delta | +20% | +11% |

Efecto de la promoción: 20% - 11% = +9%. Valor incremental: ₽3.000 / 1.09 ≈ ₽2.752 (base), ganancia incremental de ₽248.

Limitación: Los participantes de la promoción pueden mostrar dinámicas diferentes a la población general—por ejemplo, patrones estacionales únicos.

Diferencias en Diferencias Mejoradas: Control Temático

Para promociones offline (como descuentos en pasteles), el grupo de control está compuesto por clientes que compran productos similares en las mismas tiendas (otros productos horneados). Los grupos son conceptualmente cercanos: productos horneados vendidos en ubicaciones idénticas, uno con la promoción y otro sin ella.

Esto reduce el sesgo, pero no lo elimina por completo: los amantes de pasteles podrían comportarse diferente a los entusiastas de la pizza (por ejemplo, frugalidad frente al consumo por volumen).

Emparejamiento por Puntuación de Propensión: Simular un Grupo de Control

El PSM imita la aleatorización de una prueba A/B. Usando características previas a la promoción (LTV, días activos, valor promedio de pedido, antigüedad de cuenta), un modelo predice la probabilidad de participación (puntuación de propensión entre 0 y 1).

El modelo se entrena con datos sin la marca de participación, luego se emparejan pares por puntuación usando k-NN. La base de control debe ser significativamente más grande que el grupo objetivo para un emparejamiento preciso.

Ejemplo de código usando XGBoost:

# Definir hiperparámetros del modelo (pueden optimizarse con Optuna)
model_params = {
    'objective': 'binary:logistic',
    'eval_metric': 'logloss',
    'learning_rate': 0.4,
    'max_depth': 3,
    'min_child_weight': 10,
    'subsample': 0.8,
    'colsample_bytree': 0.8,
    'lambda': 1.0,
    'alpha': 0.1,
    'random_state': seed,
    'n_estimators': 100
}

# Entrenar modelo de boosting
pm = GradientBoostedPropensityModel(early_stop=False, **model_params)
ps = pm.fit_predict(all_data[features], all_data['test'])

# Emparejar pares
matcher = NearestNeighborMatch(replace=False, ratio=1, random_state=seed)
all_data['score'] = ps
matched = matcher.match(all_data, 'test', ['score'])

# Grupos finales
matched[(matched['test'] == 0)].describe()
matched[(matched['test'] == 1)].describe()

Verificaciones de calidad:

  • Similitud en métricas entre grupos.
  • Calibración: al puntaje = 0.5, aproximadamente el 50% debería ser participante de la promoción.
  • Distribución idéntica de características entre grupos.

Una vez emparejados, se aplica Diferencias en Diferencias. Limitaciones:

  • Supone que las dinámicas futuras permanecen similares.
  • Efectos estacionales regionales.
  • Sesgo por pool de control limitado—solo se empareja con no participantes, incluyendo aquellos físicamente incapaces de unirse.

Conclusiones Clave

  • El grupo de control es obligatorio: sin él, el efecto de la promoción se confunde con tendencias generales.
  • Diferencias en Diferencias es sencillo y rápido: usa usuarios LFL o controles temáticos.
  • PSM es más preciso: requiere datos y cálculo, pero aproxima muy bien una prueba A/B.
  • Valida siempre tus grupos: verifica métricas, calibración y distribuciones de características.
  • Prefiere pruebas A/B cuando sea posible: evita evaluaciones post-hoc si puedes.

— Editorial Team

Advertisement 728x90

Leer después