Datos, modelos y parámetros

Una introducción a los modelos bayesianos

Carlos J. Gil Bellosta

2016-02-13

100% != 100% (a menudo)

ATM vs TPV

  • Un banco quiere predecir si sus clientes van a usar la tarjeta en ATM o TPV en la próxima ocasión
  • Parece un modelo de clasificación simple
  • Una de las variables predictoras es la proporción de veces que el cliente usa la tarjeta en una TPV

Proporción de síes según prop

El modelo: una regresión logística “de libro”

mimodelo <- glm(y ~ x + prop, data = datos, family = binomial)
  • y es 0-1 según dónde use el cliente la tarjeta la próxima vez.
  • x es una variable predictora adicional (pudieran ser más)
  • prop es la proporción de uso de la tarjeta en TPV en el pasado

Tasa de acierto según prop

Zum en el 100%

  • La zona del 100% es un cajón de sastre en el que se pueden identificar dos tipos de sujetos:
    • Quienes usan la tarjeta a menudo pero siempre en TPV
    • Quienes han usado la tarjeta una única vez (y fue en una TPV)
  • ¡La tasa de acierto es un promedio entre las de ambos tipos de poblaciones!
  • La clave es la cantidad de información

Un ejemplo real

(Fuente: Perry, P.O., Fast moment-based estimation for hierarchical models).

Integrando la cantidad de información en el modelo

La idea general: dos fuentes de información

  • Las dos fuentes de infomación son la de la masa y la del invididuo
  • Del individuo podemos tener mucha o poca
  • Nuestro modelo combina ambas: \[\alpha \times \text{masa} + (1-\alpha) \times \text{individuo}\]
  • El parámetro \(\alpha\) depende de la cantidad de información que tengamos del individuo

Una nota sobre proporciones

  • Los amateurs caculan las proporciones así: \[\frac{a}{a+b}\]
  • Los pros las calculan, cuando menos, así: \[\frac{a + 0.5}{a+b+1}\]
  • Eso manda los 0% y 100% espurios al entorno del 50%.
  • En la página de la Wikipedia que trata de la distribución beta se justifica ese procedimiento (y se sugieren variantes).

Inspiración bayesiana

  • Existe un parámetro subyacente, \(\theta\), que es la probabilidad de que el cliente use la TPV.
  • Ese parámetro es desconocido y, a lo más, tenemos una idea difusa de cuál puede ser su tamaño.
  • Esa idea difusa depende de:
    • Datos aprorísticos: qué hace la gente parecida, por ejemplo.
    • Datos de su comportamiento (¡que pueden ser pocos!)

Probabilísticamente

  • \(n_i \sim \text{Binom}(N_i, \theta_i)\) donde
    • \(\theta_i\) es una probabilidad asociada a cada cliente,
    • \(N_i\) es el número de veces que usa la tarjeta
    • \(n_i\) es el número de veces que la usa en una TPV
  • Pero \(\theta_i\) tiene incertidumbre que depende

    • del número de veces que se usa la tarjeta
    • de otras variables predictoras (modelo lineal)

    \[\theta_i \sim \text{Beta}(\lambda p_i, \lambda (1-p_i))\]

Una digresión: la distribución beta

Una digresión: la distribución beta

Una digresión: la distribución beta

Gráficamente

Aunque a veces…

Un modelo bayesiano

stan (pystan, rstan, etc.)

  • Es un ejemplo de lenguaje de programación probabilístico
  • Está inspirado en otros previos: Jags, Bugs, etc.
  • Sirve para definir la estructura probabilística de un problema (en función de parámetros desconocidos)
  • Permite estimar esos parámetros desconocidos usando MCMC
  • Esencialmente, encuentra valores de los parámetros compatibles con la estructura probabilística del problema

El modelo

stanmodelcode <- '
data {
  int<lower=1> N;
  int x0[N];
  int x1[N];
  int x2[N];
  int total[N];
  int tpv[N];
}

parameters {
  real<lower = 0, upper = 1> theta[N];
  real a0;
  real b1;
  real b2;
}

model {
  real a[N];
  real b[N];
  real p[N];

  for (i in 1:N){
    p[i] <- inv_logit(a0 + b1 * x1[i] + b2 * x2[i]);
    a[i] <- 0.25 + 3 * p[i];
    b[i] <- 0.25 + 3 * (1-p[i]);
  }

  theta ~ beta(a, b);
  tpv ~ binomial(total, theta);
}
'
 
fit <- stan(model_code = stanmodelcode, 
            data = list(N = nrow(mis.datos), x0 = mis.datos$x == "a", 
                        x1 = mis.datos$x == "b", x2 = mis.datos$x == "c",
                        total = mis.datos$n.usos, tpv = mis.datos$n.tpv), 
            iter=12000, warmup=2000, 
            chains=4, thin=10)

Resultados: thetas

Resultados: modelo logístico

Colofón

Hay que ser prejuicioso

  • Aunque tengan mala fama, los prejuicios son fundamentales para tomar decisiones
  • Prejuicios: lo que se sabe sin necesidad de ver datos
  • También se llaman aprioris (y tienen mala fama)
  • Pero son fundamentales en contextos como el descrito hoy

Modelos = prejuicios + datos

  • Crear modelos es combinar información apriorística con datos
  • Porque, a menudo, existe mucha información previa
  • La aproximación bayesiana permite combinar datos y prejuicios

Bayes es un grado

  • A menudo, una aproximación 100% bayesiana es inviable (circiter 2016)
  • La nuestra no es siquiera una aproximación 100% bayesiana
  • Pero incluso en la aproximación no bayesiana pueden introducirse toques bayesianos

Modelos conjuntos (“[bayesian] joint models”)

  • Con la aproximación bayesiana hemos combinado dos modelos en uno:

    • Una regresión logística con las variables predictoras
    • Otro que es una especie de logística basada en el comportamiento
  • Es posible construirlos por separado y juntarlos de una manera más o menos limpia