Este es un artículo intermedio dónde se entregarán conceptos fundamentales en Machine Learning (ML).
¿Por qué intermedio?
Por qué se explicarán definiciones fundamentales para evaluar si un modelo de ML es bueno o no.
Y además porque esto es una especie de “break” del hilo conductor del último artículo. Esto último porque no lo continúa en la materia; a pesar de ser la segunda parte. Pero, si lo continua en el sentido de desarrollar la intuición de cómo hacer un buen modelo de ML.
El fin de este artículo es preparar, en definitiva, para el tercero, donde se termina de explicar cómo crear un buen modelo de ML.
En el artículo anterior se presentó los 5 pasos para crear un buen modelo de ML que eran:
- Definir problema (¡Listo!)
- Recoger datos (¡Listo!)
- Transformar los datos (pendiente ☹)
- Entrenar el modelo (pendiente ☹)
- Usar el modelo para predecir (pendiente ☹)
Además, se especificó que estos pasos no eran “tan lineales” como se aprecia a primera vista.
¿Por qué estás definiciones son relevantes?
Hay ciertas definiciones importantes que son necesarias conocer para entender las principales consideraciones a la hora de trabajar con modelos de Machine Learning. Aunque usted nunca cree un modelo de Machine Learning este artículo le será útil de todas formas. Ya que entender estás consideraciones le permitirá evaluar la información que recibe de los datos. Sabrá cuando una interpretación y análisis no esté bien hecho. Y será un crítico del análisis que otros hagan con los o sus datos.
Y si usted quiere crear estos modelos, ¡debería conocer estos conceptos!
Icons made by smalllikeart from www.flaticon.comConceptos y Definiciones de Machine Learning (Básicos-Intermedios)
Lea el siguiente ejemplo y vea que tanto entiende de este (identifique las palabras que no entiende para que posteriormente las lea más abajo):
Caso Ejemplo:
Suponga en una reunión de Data Science ocurre el siguiente dialogo. Evalué hasta qué punto entiende.
“
-Estimados el modelo tiene un nivel de predicción muy alto, específicamente 99% lo cual es inusual. Probablemente tengamos un overfitting. O peor aún, el modelo sufrió un (data) Leakage. Necesitamos verificar que no hayamos incorporados nuestro target value dentro del modelo. O quizás nuestra separación de datos (data entrenamiento, validación y testeo) fue incorrecta y el modelo aprendió de características que no se tengan al momento de producción.
– Concuerdo que el nivel de predicción para el modelo es bastante alto, quizás sea necesario crear un cross-validation, dado que la base de datos no fue lo suficientemente grande…
– … Estimados al revisar la base de datos con la que trabajamos y hacer un simple análisis exploratorio de ellos y del modelo estoy seguro nos equivocamos. La data no está balanceada. El 99% de los registros son negativos y el modelo no tiene poder predictivo ya que a todos los datos los predice como negativos. Es decir, el modelo nunca podrá predecir un caso positivo. Es por eso, que tendremos que realizar un Downsampling y Upweighting para corregir esto.
”
¿Cuántos de estos conceptos entendió sin problemas?
Definiciones
target value: Variable sobre la cual se quiere tomar decisiones. En el ejemplo del banco, la variable sobre la que se quiere accionar es los clientes que se van del banco. Está es la variable que se espera el modelo pueda predecir.
Separación de datos: La gracia de los modelos es que puedan predecir (para luego tomar decisiones informados). Para lograr esto se debe asegurar que el modelo tenga capacidad de pronóstico. Esto se consigue separando la data disponible. La idea es entrenar el modelo con cierta data y luego ver que también predice sobre datos que no ha visto todavía. La separación de data es generalmente así:
Icons made by Freepik from www.flaticon.com- Data de Entrenamiento: La data de entrenamiento es el conjunto de data que el modelo verá para aprender.
- Data de Validación: Este es un subconjunto de la data de entrenamiento. Su diferencia con la data explicada anteriormente es que el modelo no la ve directamente. Lo que se hace es que el modelo ve la data de entrenamiento aprende y luego se mide que tan bien predice sobre la data de validación (qué no ha visto hasta ahora). Los errores en la data de validación se intentan disminuir, mejorando continuamente el modelo (de ahí es la parte que “no los ve directamente”) (en este punto ve la data de validación para calcular el error). Este grupo en la imagen de arriba vendría siendo la amarilla.
- Data de Testeo: Esta data el modelo la ve solo al final, para chequear el poder predictivo global del modelo.
Underfitting: Ocurre cuando el modelo tiene poco poder predictivo ya que usa muy pocos parámetros. O más específicamente, el modelo tiene menos poder predictivo del que puede alcanzar (modelo muy simple).
Overfitting (Sobre-ajuste): Este es el caso contrario al anterior. Es generalmente un modelo más complejo de lo que debería ser. Logrando categorizar bien la data ya vista (data de entrenamiento), pero muy mal la data nueva. Un buena forma de evitar el overfitting es con regularización (explicado al final).
Data Leakage: Estos son errores que ocurre cuando el modelo se entrena con variables y datos que no se tendrán disponible al momento de ejecutar el modelo. Por ejemplo, si entrena un modelo para predecir ventas en un local y usa la variable ingresos esta variable no se tendrá hasta tener las ventas del local.
Icons made by smalllikeart from www.flaticon.com
Note dos cosas del caso anterior. Primero, la variable que se usó no estará disponible nunca al momento de correr el modelo (a menos que se usen los ingresos del mes/semana o día anterior). Segundo, el modelo usando la variable ingreso probablemente tenga un poder predictivo “sospechosamente alto”. Esto se debería a que si se vende más la variable ingreso tiende a subir, por lo que las ventas quedan casi completamente determinadas por los ingresos. Dicho de otra forma, la variable ingreso entrega en bandeja ventas que se quiere predecir.
Otro problema de data leakage es un poco más difícil de entender y ocurre cuando se “separan mal” los grupos de entrenamiento y de testeo. Es decir, esto sucede cuando el grupo de testeo que se supone opera bajo la lógica de medir el modelo creado con datos que este nunca ha visto, por alguna razón los vio antes.
Por ejemplo, imagínese que antes de separar los datos en testeo y entrenamiento. Usted realiza una limpieza de la data. Donde está limpieza consiste en que todos los valores vacíos les asigna el promedio de la base de datos completa. Al realizar el ajuste del modelo en relación a la base de entrenamiento está incorpora información del grupo de testeo, ya que incorporó el promedio global. Dicho de otra forma, al permitir variables que dependan de toda nuestra base de datos, al realizar la separación entre testeo y entrenamiento ambos conjuntos quedan vinculados.
Detectar Data Leakage es un proceso que debe monitorearse de cerca y con cuidado. Pero tome esta máxima: “Si su resultado es demasiado bueno para ser verdad, probablemente lo sea”.
Cross-Validation: Es un método usado principalmente para bases de datos “pequeñas” con el fin de mejorar la “robustez” del análisis. Básicamente, lo que se realiza es crear distintos grupos de entrenamiento y testeo sobre la misma base disponible, para así validar el modelo de más formas; evitando la posibilidad de sobre estimar o sub estimar que tan bueno es o no el modelo.
Esto funciona principalmente calculando el error del modelo, pero usando distintos conjuntos de datos de validación o testeo. Así, si para distintos conjuntos de validación da un MAE similar (u otra métrica de error), el análisis del modelo es más robusto, en el sentido que se está más seguro que el MAE calculado es uno cercano al “real”.
Esto se tiene que hacer (siempre) en bases de datos pequeñas, ya que se podría estar cometiendo el error de afirmar que el modelo es mejor o peor de lo que de verdad es. Esto último puede ocurrir porque, por mala suerte se seleccionó como conjunto de testeo un grupo que tiene un MAE inusualmente alto o bajo.
Data Desbalanceada: Ocurre cuándo existe un grupo mayoritario que domina gran parte de los registros. El ejemplo clásico es de transacciones fraudulentas. La mayoría de las transacciones no son fraudulentas y unas pocas lo son. En este caso la transacciones no fraudulentas son el grupo mayoritario y las fraudulentas el minoritario. Esto crea problemas para entrenar el modelo en los registros minoritarios. Esto principalmente se debe a que el modelo no alcanza a “ver” patrones comunes los registros minoritarios. Los grupos minoritarios se ven como el grupo naranjo de la siguiente imagen. Generalmente esto se combate con dos técnicas usadas en conjunto: Downsampling y Upweighting explicadas más abajo.
Downsampling: “Sample” en inglés es muestra y “down” es bajo. En simple, esto es disminuir las muestras del grupo mayoritario para consumir menos RAM y mejorar el modelo. Esto último se da porque las iteraciones que se realizan en el grupo de entrenamiento (para entrenar al modelo) poseen más muestras del grupo minoritario que las que se extraen al azar para aprender. Por ejemplo, se puede disminuir en un factor de 10 el grupo mayoritario (si la proporción del grupo mayoritario vs el minoritario es 100:1, la nueva proporción será 10:1).
Upweighting: Es agregar más peso (o importancia) al error que comete el modelo sobre ciertos grupos de datos.
¿Cuándo conviene realizarlo?
- Al hacer un downsampling queda desbalanceado el modelo a entrenar. Ya que se entrena en un subconjunto que tiene más muestras del grupo minoritario de lo que encuentra en la “vida real”. La parte específica donde esto crea problemas es en la disminución del error que trata de disminuir el modelo. Esto se debe a que al considerar más veces al grupo minoritario de lo que se ven en la realidad, el modelo le atribuye más importancia a este error de lo que debería.
- Cuándo el costo del error, ya sea de los falsos negativos o positivos, es notoriamente mayor al otro.
Regularización: Es una forma de castigar modelos complejos. Ahora, ¿Qué es un modelo complejo? R: Un modelo que tiene muchos parámetros o bien tiene parámetros con mucho peso sobre el modelo. Hay dos regularizaciones comunes la L2 y la L1. La L2 castiga el peso del parámetro al cuadrado. Esto “tira” todos los pesos a valores cercanos a cero, pero no precisamente a cero. Esta regularización es bastante buena para volver más simple los modelos, sin embargo, si el modelo tiene demasiados parámetros tendremos problemas con el RAM. En este caso la mejor regularización es la L1 que sumas los pesos individuales en valor absoluto. Esto produce que varios parámetros (no útiles se vayan a cero). Básicamente lo que se trata de hacer es:
Minimizar ( Error del modelo + complejidad del modelo)
El primer elemento siempre que se haga el modelo más complejo disminuirá. Pero el segundo elemento se hará más grande. Los tipos de regularización son, en simple, una forma de incorporar la complejidad del modelo en su evaluación.
¡Dicho de otra forma, los buenos modelos de ML tienen bajo error y son simples! (O así deben tratar de ser)
Producción: Es cuando el modelo creado se “lanza al mundo” para empezar a ser usado para la toma de decisiones.
Pipelines: Es una forma de agrupar varios pasos (desde limpieza de datos hasta el mismo modelo) con una sola función. Esto sirva para realizar cross-validation más rápido y de forma más clara (más adelante se harán ejemplos de pipelines).
¿Qué conceptos te gustaría agregar a ti a esta lista?