tanh_saturación_de_referencia#

pymc_marketing.mmm.transformers.tanh_saturation_baselined(x, x0, gain=0.5, r=0.5)[fuente]#

Saturación Tanh de referencia.

Esta parametrización es más fácil de usar que tanh_saturation() para aplicaciones industriales donde el conocimiento del dominio es esencial.

En resumen, se presenta una parametrización alternativa de la función de alcance dada por:

\[\begin{split}\begin{align} c_0 &= \frac{r}{g \cdot \arctan(r)} \\ \beta &= \frac{g \cdot x_0}{r} \\ \operatorname{saturation}(x, \beta, c_0) &= \beta \cdot \tanh \left( \frac{x}{c_0 \cdot \beta} \right) \end{align}\end{split}\]

donde:

  • \(x_0\) es el «punto de referencia». Este es un punto elegido por el usuario (no se proporciona un previo) donde espera que la mayor parte de sus datos se encuentre. Por ejemplo, si está gastando entre 50 y 150 dólares en un canal particular, podría elegir \(x_0 = 100\). El valor sugerido es el gasto mediano del canal: np.median(spend).

  • \(g\) es la «ganancia», que es el valor del CAC (\(c_0\)) en el punto de referencia. Debe establecer un previo sobre lo que piensa que es el CAC cuando gasta \(x_0 = 100\). Imagine que tiene cuatro canales de publicidad y adquirió 1000 nuevos usuarios. Si cada canal tuvo un rendimiento igualmente bueno, y la publicidad impulsó todas las ventas, podría esperar que ganó 250 usuarios de cada canal. Aquí, su «ganancia» sería \(250 / 100 = 2.5\). El previo sugerido es pm.Exponential.

  • \(r\), la fracción de gasto excesivo te está indicando dónde se encuentra el punto de referencia.

    • \(0\) - podemos aumentar nuestro presupuesto considerablemente para alcanzar la región saturada, los rendimientos decrecientes aún no son visibles.

    • \(1\) - el punto de referencia ya se encuentra en la región de saturación y el gasto adicional en dólares no conducirá a nuevos usuarios.

    • \(0.8\), aún puedes aumentar los usuarios adquiridos en \(50\%\) tanto como obtienes en el punto de referencia al aumentar el presupuesto. El efecto de \(x_0\) está a un 20% del punto de saturación.

    Sugerido anterior es pm.Beta

Nota

El punto de referencia \(x_0\) debe establecerse dentro del rango de los gastos reales. Es decir, si compras anuncios tres veces y gastas \(5\), \(6\) y \(7\) dólares, \(x_0\) debe establecerse dentro de \([5, 7]\), por lo que no puede ser \(4\) ni \(8\). De lo contrario, la posterior de r y la ganancia se convierte en una línea diagonal delgada. Podría ser muy relevante si hay muy pocas observaciones de gasto para un canal particular.

La función original de alcance o saturación utilizada en un MMM se formula como

\[\operatorname{saturation}(x, \beta, c_0) = \beta \cdot \tanh \left( \frac{x}{c_0 \cdot \beta} \right)\]

donde:

  • \(\beta\) es la saturación, o el límite del número total de nuevos usuarios obtenidos cuando se gastan una cantidad infinita de dólares en ese canal.

  • \(c_0\) es el costo por adquisición (CAC0), por lo que el costo inicial por nuevo usuario.

  • \(\frac{1}{c_0}\) es el inverso del CAC0, por lo que es el número de nuevos usuarios que podríamos esperar después de gastar nuestro primer dólar.

(Source code)

Parámetros:
xtensor

Tensor de entrada.

x0: tensor

Línea base para la saturación.

ganancia : tensor, por defecto 0.5tensor, por defecto 0.5

ROAS en el punto base, matemáticamente como \(ganancia = f(x0) / x0\).

r : tensor, por defecto 0.5tensor, por defecto 0.5

La fracción de gasto excesivo, matemáticamente como \(r = f(x0) / \text{saturation}\).

Devoluciones:
tensor

Tensor transformado.

Referencias

Desarrollado por Max Kochurov y Aziz Al-Maeeni, realizando un trabajo innovador en PyMC Labs.

Ejemplos

import pymc as pm
import numpy as np

x_in = np.exp(3+np.random.randn(100))
true_cac = 1
true_saturation = 100
y_out = abs(np.random.normal(tanh_saturation(x_in, true_saturation, true_cac).eval(), 0.1))

with pm.Model() as model_reparam:
    r = pm.Uniform("r")
    gain = pm.Exponential("gain", 1)
    input = pm.ConstantData("spent", x_in)
    response = pm.ConstantData("response", y_out)
    sigma = pm.HalfNormal("n")
    output = tanh_saturation_baselined(input, np.median(x_in), gain, r)
    pm.Normal("output", output, sigma, observed=response)
    trace = pm.sample()