Una de las mil maneras malas de elegir al mejor predictor

El contexto, ayer.

La cosa es que se nos podría ocurrir premiar a los predictores cuando asignan probabilidad alta a los sucesos que ocurrieron y baja a los que no. Por ejemplo, si el evento i ocurre, premiar al predictor con p_i y si no ocurre, con 1 - p_i. Escrito de otra manera, con p_i(X_i) (que quiere decir la probabilidad correspondiente al evento observado).

Como hay varios eventos, cada predictor se llevaría un premio igual a s = \sum_i p_i(X_i) y sería mejor aquél predictor con el mayor valor de s. Estupendo.

Pero aquí comienzan los problemas. Los distintos predictores tratarán de maximizar el valor esperado de su score \sum_i p_i(X_i), es decir, \sum_i E(p_i(X_i)) y si la probabilidad real de X_i es q_i, entonces (omitiendo el subíndice) E(p(X)) = q p + (1-q) (1 - p) = 1 - p - q + 2pq = 1 - q + (2q - 1)p.

Un predictor avispado verá que si q > 0.5 le vendrá bien exagerar y alegar p = 1; y, a la inversa, alegar p=0 cuando q < 0.5.

Si estos predictores fuesen hombres del tiempo, con el anterior criterio de éxito, como la probabilidad de lluvia es relativamente baja (en estos lares), siempre darían sol (con 100% de seguridad).

Y eso es malo.

Si estos predictores fuesen modelos de clasificación que comparamos (usando cosas como caret), nuestro tinglado favorecería modelos que exagerasen las probabilidades (o, si se quiere, descalibrados).

Y eso también es malo.

8 comentarios sobre “Una de las mil maneras malas de elegir al mejor predictor

  1. Santiago 16 enero, 2019 12:50

    Hay un score justo para eso https://en.wikipedia.org/wiki/Brier_score que se saca de la manga un error cuadrático, lo que tiene propiedades deseables: simetría en 0 y 1, convexidad, penalización mayor de los errores mayores, etc. pero poca validez teórica.

    Celebrando que hoy es el día de la entropía (o al menos debería serlo) podemos medirlo en términos de la sorpresa que representa el resultado Q dada la predicción P.

    Ejemplo en R:

    Supongamos que Q son las probabilidades reales de cada suceso. Pongamos una logística para tener menos valores próximos a 1/2.

    Q <- 1/(1 + exp((-50:50)/10))

    # plot(0:100, Q)

    Supongamos que X es el experimento de Bernouilli en booleano.

    X <- runif(length(Q)) < Q

    Supongamos que P es el pronóstico de nuestro experto, que tiene las probabilidades correctas pero algo desordenadas.

    P <- Q[order(0:100 + runif(101, -10, 10))]

    # lines(0:100, P)

    Y definimos la sorpresa de ver X dado P como en https://en.wikipedia.org/wiki/Information_content

    surprisal <- function(X, P) mean(c(-log(P[X]), -log((1 – P[!X]))))

    Vemos que funciona y la sorpresa de nuestra buena estimación …

    surprisal(X, P)

    … es mucho menor que la de una mala

    surprisal(X, rep(0.5, 101))

    Si, además tuviéramos acceso a Q, podríamos conocer …

    surprisal(X, Q)

    … que es la cross-entropía de X y Q, que siempre va a ser mayor que la entropía de Q. De esta manera podríamos definir la eficiencia del estimador como surprisal(X, P)/entropía(Q) en el sentido de mínima cross-entropía añadida.

  2. Daniel 16 enero, 2019 12:58

    Si en vez de el sumatorio de Pi se multiplican los Pi?

  3. Carlos J. Gil Bellosta 16 enero, 2019 17:07

    Entonces no tienes ese problema. De hecho, lo que tienes ahí es la verosimilitud, que tiene una serie de buenas propiedades.

  4. Carlos J. Gil Bellosta 16 enero, 2019 17:17

    Todo bien… menos la definición de la sorpresa, que es un poco rara. ¿No bastaría con mean(-log(P[X]))? De hecho, -log(1 - P[!X])) = -log(P[X]), ¿no?

    El propoósito de mi entrada es ver un scoring impropio en funcionamiento para poder después contrastarlo con uno “propio”. Todo el mundo habla de los propios y se olvida de los pobrecitos impropios… Dicho de otra manera, todo el mundo te cuenta las cosas que funcionan, pero pocos se toman la molestia de contarte por qué no funcionan los que no funcionan. Y creo que merece la pena saberlo.

  5. Daniel2 16 enero, 2019 23:16

    Si la serie de eventos no tiene memoria entonces si p(S) > 0.5 entonces la mejor previsión es que S ocurrirá. Esto puede parecer aburrido o simplón pero es la mejor opción.
    Se podrían penalizar los fallos, en ese caso el problema se modifica, pero si aciertos y fallos tienen la misma importancia o peso entonces la estrategia anterior es óptima ya que maximiza el número esperado de aciertos.

  6. Carlos J. Gil Bellosta 17 enero, 2019 0:42

    Pero tu caso sencillo es el menos interesante de todos. Precisamente porque es sencillo. Interesan los demás.

    Tampoco hay que autoflagelarse por pensar en el caso sencillo donde los premios/pérdidas son simétricas. El problema es que luego hay gente que solo piensa en ese caso y se olvida de que hay otras posibles opciones y casos que exigen un razonamiento más fino.

  7. Santiago 17 enero, 2019 9:58

    La función está escrita un poco regular, pero creo que es correcta. Me preocupaba que fuera la probabilidad asignada al suceso (o “no suceso” cuando no ocurre). Al ser el evento 0 o 1, la primera versión que hice multiplicaba lo no ocurrido por cero y la parcheé dejándola tal cual cuando me pareció que funcionaba.

  8. Carlos J. Gil Bellosta 17 enero, 2019 13:31

    Es correcta pero redundante. Fíjate que -log(1 – P(!X)) es igual a -log(P(X)), por lo que estás concatenando dos vectores que son el mismo.

Comenta

Your email address will not be published.

Puedes usar estas etiquetas y atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.