Evalml: Para algunos objetivos donde la línea base era 0, "pct mejor que la línea base" es nan

Creado en 20 nov. 2020  ·  9Comentarios  ·  Fuente: alteryx/evalml

{'F1': nan,
 'MCC Binary': nan,
 'Log Loss Binary': 93.29789549298991,
 'AUC': 58.36492736629537,
 'Precision': nan,
 'Balanced Accuracy Binary': 63.46659876071641,
 'Accuracy Binary': 12.876088314169193}

Creé un cuaderno Jupyter que reproduce este problema en evalml y lo adjunté junto con el archivo de datos asociado a un hilo en Slack.

enhancement

Comentario más útil

Me gusta. :-)

Todos 9 comentarios

reproductor

import evalml
import pandas as pd
X = pd.read_csv('~/Downloads/fraud_500_data.csv').drop(['id', 'expiration_date'], axis=1)
y = X.pop('fraud')
automl = evalml.automl.AutoMLSearch(problem_type="binary", objective="f1")
automl.search(X, y)
# note that all percent_better_than_baseline values are nan in the rankings table
print(automl.rankings)
# can also check the scores of any pipeline other than the baseline pipeline, which should have id 0
print(automl.results['pipeline_results'][1]['percent_better_than_baseline_all_objectives'])

El conjunto de datos está aquí

@dsherry @rpeck Este es el comportamiento esperado porque la canalización de referencia obtiene una puntuación de 0 en los objetivos con NaN ( F1 , MCCBinary , Precision ). Ha habido debates acerca de establecer la división por 0 para que sea infinito o Ninguno en este método, pero nunca hemos decidido que sean mejores que NaN porque si la línea de base obtiene la peor puntuación posible en cualquier objetivo, entonces se compara el "porcentaje mejor" en ese El objetivo no sirve de mucho y eso se puede transmitir con Ninguno, NaN o infinito.

Dicho esto, ¡puede haber otras razones para elegir una de estas opciones en lugar de NaN!

@freddyaboulton ¡ Ah, tiene sentido! Cambiaré la prueba para omitir cualquier objetivo donde la línea de base sea 0. ¡Gracias!

¡Gracias @freddyaboulton ! @rpeck , lo siento, no entendí esto cuando me lo preguntaste ayer.

Dejando este tema abierto para discutir: ¿deberíamos cambiar el comportamiento en este caso?

@freddyaboulton , por lo que F1, MCCBinary y Precision son métricas donde cuanto mayor es mejor y están limitadas en el rango [-1, 1] (corr) o [0, 1]. ¿Podríamos alterar el impl de mejora del pct para calcular la diferencia absoluta de 0 y usar eso como la mejora del pct? Y si eso es lo que estamos haciendo actualmente, no esperaría que una línea de base de 0 produzca una mejora porcentual de nan para esas métricas.

@dsherry Propusimos calcular la diferencia absoluta para los objetivos delimitados por [0, 1] en la fase de diseño, pero decidimos que tener dos cálculos diferentes sería confuso. Dicho esto, tal vez deberíamos reconsiderarlo, dado que la tubería de referencia está casi diseñada para obtener una puntuación de 0 en esos objetivos jajaja. Vale la pena señalar que cuando tomamos esa decisión por primera vez, solo estábamos calculando el porcentaje mejor para el objetivo principal (que no es uno de estos objetivos acotados, excepto para la regresión).

Incluso si vamos a calcular la diferencia absoluta, es posible que deseemos considerar cambiar el comportamiento de división por 0 de Nan/None/inf. Un caso interesante a considerar es R2 , ya que en la mayoría de los casos es [0, 1] pero técnicamente es (-inf, 1). Por lo tanto, calcular la diferencia absoluta puede no ser matemáticamente sólido, pero dado que es el objetivo predeterminado para la regresión , deberíamos esperar ver muchas líneas de base con una puntuación de 0.

Entonces, para resumir, hay dos cambios independientes que podemos hacer, lo que lleva a cuatro resultados posibles:

  1. No calcule la diferencia absoluta para los objetivos limitados en [0, 1], la división por 0 es Nan. Comportamiento actual.
  2. No calcule la diferencia absoluta para los objetivos limitados en [0, 1], la división por 0 es inf.
  3. Calcule las diferencias absolutas para los objetivos limitados en [0, 1], la división por 0 es Nan.
  4. Calcule las diferencias absolutas para los objetivos limitados en [0, 1], la división por 0 es inf.

Aunque prefiero devolver NaN cuando dividimos por 0, la reacción visceral de los usuarios cuando ven NaN ha sido suponer que algo se rompió en automl. Creo que devolver inf dejaría más claro que nada se rompió y que la canalización es, de hecho, mejor que la línea de base.

Eso deja las opciones 2 y 4.

Creo que tener dos cálculos diferentes para "porcentaje mejor" hará que sea más difícil comunicar a los usuarios lo que realmente se está calculando para cada canalización. Dicho esto, nuestras canalizaciones de referencia están diseñadas para obtener una puntuación de 0 en muchos objetivos (R2, F1, MCC), especialmente en problemas desequilibrados (solo predecimos el modo). Eso hace que la función de "porcentaje mejor" no sea muy útil para la mayoría de los problemas realistas, ya que todas las canalizaciones serán "infinitamente" mejores que la línea de base.

Creo que me inclino un 55 % por la opción 4 y un 45 % por la opción 2, ¡pero me gustaría escuchar otros puntos de vista antes de hacer ese cambio!

En standup hoy, decidimos que es hora de actualizar el comportamiento "pct mejor que la línea de base". Vamos con las opciones 2 y 4 anteriores:

  • Use la diferencia relativa para objetivos sin límites (MSE, pérdida de registro, etc.)
  • Usar diferencia absoluta para objetivos con límites [0, 1] (AUC, R2, etc.)
  • Tendremos que manejar casos extremos como la correlación de Pearson ([-1, 1])
  • Devuelve inf en lugar de nan si hay un error de división por 0

¿ @freddyaboulton coincide con lo que discutimos?

Me gusta. :-)

Además: estoy de acuerdo con la decisión. En mi opinión, si una métrica es [generalmente, al menos] 0..1, entonces pasar de 0 a 0.2 _se siente_ como una mejora del 20 %, aunque matemáticamente no lo es. En cierto modo, esto me recuerda a todas esas fórmulas que toman el log de una cantidad, pero le agregan 1 primero para que no tomen el log de 0. :slightly_smiling_face:

¿Fue útil esta página
0 / 5 - 0 calificaciones