background-image: url(img/portada-flacso.png) background-size: cover class: animated slideInRight fadeOutLeft, middle # Machine Learning en Aplicaciones Espaciales ### Clase 2a. Métricas. Árboles de Decisión --- ## Hoja de Ruta #### Intro teórica * Principios del aprendizaje * Repaso de Métricas (F1 score / AUC Curva / Precision - Recall Curva) * Árboles de decisión (Tunning) -- #### Práctica guiada -- #### Recreo 🍵 -- #### Manos en R! 💻 -- #### Ensembles. Introducción a Random Forest --- class: inverse, center, middle ## Principios del aprendizaje --- ### 1. Navaja de Occam 🔪 .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### El modelo más simple que pueda ser ajustado es el más factible. #### Si tuviéramos para elegir entre un modelo simple y uno complejo con el mismo desempeño, debo preferir **siempre** el modelo más simple ] .footnote[__Learning from data__ Abu-Mostafa, Y.] --- ## Occam y Principio de Parsimonia <img src="img/pedro.png" width="90%" style="display: block; margin: auto;" /> .footnote[Fuente: https://pedromdd.medium.com/ten-myths-about-machine-learning-d888b48334a3] --- ### 2. Bias en el muestreo (sampling bias) .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### Si los datos contienen un sesgo, el algoritmo tendrá ese mismo sesgo. ] .footnote[__Learning from data__ Abu-Mostafa, Y.] --- ### 3. Data snooping 👀 .bg-near-white.b--purple.ba.bw2.br3.shadow-5.ph4.mt5[ ### El set de datos de testeo no debe usarse nunca durante la fase de entrenamiento, ya que esto arrojará resultados más optimistas que los esperados. ] .footnote[__Learning from data__ Abu-Mostafa, Y.] --- class: inverse, center, middle # Repaso de Métricas --- ## MAE (Error absoluto medio) <img src="img/mae-n.jpg" width="70%" style="display: block; margin: auto;" /> **Es la media de la diferencia absoluta entre el valor observado y los valores predichos.** El error absoluto medio o MAE es un puntaje lineal, lo que significa que todas las diferencias individuales se ponderán por igual en el promedio. Por ejemplo, la diferencia entre 0 y 10 es el doble de la diferencia entre 0 y 5. **Es robusto a outliers** --- ## MSE (Error cuadrático medio) <img src="img/mse.jpg" width="60%" style="display: block; margin: auto;" /> **MSE es una función diferenciable** que facilita la realización de operaciones matemáticas en comparación con una función no diferenciable como MAE. Por lo tanto, en muchos modelos, RMSE se utiliza como métrica predeterminada para calcular la función de pérdida a pesar de ser más difícil de interpretar que MAE. --- ## RSME (Raiz del error cuadrático medio) <img src="img/rmse.png" width="40%" style="display: block; margin: auto;" /> * Es la raíz cuadrada del MSE. La raíz cuadrada permite que los errores esten en la misma escala de medida del valor objetivo. .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ * **Cuanto mas bajo sea el valor de MAE, MSE, RMSE, es mejor el modelo de regresión.** ] --- ## Matriz de confusión <img src="img/conf-m.png" width="90%" style="display: block; margin: auto;" /> --- ## Exactitud (accuracy) <img src="img/conf-m2.png" width="90%" style="display: block; margin: auto;" /> --- ## Precision <img src="img/conf-m3.png" width="90%" style="display: block; margin: auto;" /> --- ## Recall (o sensibilidad) <img src="img/conf-m4.png" width="90%" style="display: block; margin: auto;" /> --- ## Resumiendo <img src="img/metrics00.png" width="90%" style="display: block; margin: auto;" /> --- ## Para recordar mejor <img src="img/Error_Types_print.png" width="90%" style="display: block; margin: auto;" /> .footnote[Fuente: *https://chrisalbon.com/*] --- ## Precision vs Recall * Uno podria elegir trabajar con las métricas de Precision o Recall para un problema desbalanceado. Maximinar la precisión minimizará los FALSOS POSITIVOS, mientras que el Recall minimizará los FALSOS NEGATIVOS. * Entonces, podria ser adecuado trabajar con: .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ #### Precisión: Cuando el objetivo es minimizar los falsos positivos. #### Recall: Cuando el objetivo es minimizar los falsos negativos. ] --- ## F score **La medida F equilibra la precisión y el recall.** **En algunos problemas, puede que nos interese en una medida F con más atención puesta en la precisión**, como cuando los falsos positivos son más importante minimizar, pero los falsos negativos siguen siendo importantes. **En otros problemas, podríamos estar interesados en una medida F con más atención puesta en el recall**, como cuando los falsos negativos son más importantes minimizar, pero los falsos positivos siguen siendo importantes. La solución es la medida Fbeta. -- <img src="img/fbeta.png" width="60%" style="display: block; margin: auto;" /> * F0.5-measure (β = 0.5): Mayor peso en la **precisión**, menos peso en el recall. * F1-measure (β = 1): **Balance del peso en la precisión y el recall**. * F2-measure (β = 2): Menor peso en la precisión, mas peso en el **recall**. .footnote[*Imbalanced classification with Python. Jason Brownlee*] --- ## F1 score **Cuando me interesan tanto los FP como los FN, de igual forma**, voy a utilizar el F1-score. <br><br><br> <img src="img/f1.svg" width="80%" style="display: block; margin: auto;" /> .footnote[*https://deepai.org/machine-learning-glossary-and-terms/f-score*] --- ### Entendamos el F1-Score Supongamos que tenemos una máquina recolectora de frutas, siendo que algunas de ellas están maduras y otras no. <img src="img/ripe-apples.png" width="80%" style="display: block; margin: auto;" /> .footnote[*https://deepai.org/machine-learning-glossary-and-terms/f-score*] --- <img src="img/apple-ripe2.png" width="50%" style="display: block; margin: auto;" /> <img src="img/f1-c.png" width="80%" style="display: block; margin: auto;" /> .footnote[*https://deepai.org/machine-learning-glossary-and-terms/f-score*] --- ### Importante 💡 .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ ### La accuracy o exactitud es una métrica apropiada en datasets balanceados. ### En caso de estar lidiando con datasets desbalanceados deberemos usar la métrica apropiada (o balancear nuestros datos). ] .footnote[*https://machinelearningmastery.com/tour-of-evaluation-metrics-for-imbalanced-classification/*] --- ## Repaso Curva AUC .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ **Una curva ROC es apropiada cuando**: - Quiero ver la performance global del modelo. - Quiero comparar diferentes modelos a diferentes thresholds (umbrales). - Los valores más pequeños en el eje x del gráfico indican menos FP y más TN. - Los valores más grandes en el eje y del gráfico indican más TP y menos FN. ] --- <img src="img/matriz-confusion.png" width="80%" style="display: block; margin: auto;" /> * Teniendo en mente el eje X y Y de la curva ROC, nuestro foco está en el TPR, el recall o la sensibilidad, y en el False Positive Rate, o también 1-Especificidad. mientras que en la **curva Precision-Recall**: * Precision * Recall (Sensibilidad) **De cierta forma, me esta interesando una sola clase, la clase positiva.** --- ## Curva Precision - Recall * La curva de Precision-Recall muestra la compensación entre **precisión y recall para diferentes umbrales**. Un área alta debajo de la curva representa tanto una alta recall como una alta precisión, donde la alta precisión se relaciona con una tasa baja de falsos positivos y el alto recall se relaciona con una tasa baja de falsos negativos. Los puntajes altos para ambos muestran que el clasificador está arrojando resultados precisos (alta precisión), así como también arroja la mayoría de todos los resultados positivos (alta recall). * **Un sistema con alta recall** pero baja precisión arroja muchos resultados, pero la mayoría de las etiquetas previstas son incorrectas en comparación con las etiquetas de entrenamiento. * **Un sistema con alta precisión** pero poca recall es todo lo contrario, arrojando muy pocos resultados, pero la mayoría de las etiquetas predichas son correctas en comparación con las etiquetas de entrenamiento. * **Un sistema ideal con alta precisión y alta recall** devolverá muchos resultados, con todos los resultados etiquetados correctamente. .footnote[https://scikit-learn.org/stable/auto_examples/model_selection/plot_precision_recall.html] --- ## Curva Precision - Recall Como podemos ver al aumentar la AUC en clases balanceadas, también aumenta el score en la curva Precision-Recall  .footnote[*https://paulvanderlaken.com/2019/08/16/roc-auc-precision-and-recall-visually-explained/*] --- ## Curvas Precision - Recall Veamos que sucede con el desbalanceo de clase.  **Como se observa la AUC no se ve casi influenciada por el desbalanceo, lo que nos da una idea que no es una métrica apropiada cuando el desbalanceo de las clases es severo.** .footnote[*https://paulvanderlaken.com/2019/08/16/roc-auc-precision-and-recall-visually-explained/*] --- class: inverse, central, middle ## Bias-Variance Tradeoff --- ## Espacio de hipótesis f: la funcion verdadera a estimar g: la mejor función que puedo obtener mediante diferentes modelos g{D1}, g{D2}, g{D3}: son las funciones que obtengo ajustando mediante un dataset <img src="img/bias-variance1.png" width="70%" style="display: block; margin: auto;" /> .footnote[Fuente: https://blog.insightdatascience.com/bias-variance-tradeoff-explained-fa2bc28174c4] --- ## Matemáticamente <img src="img/bias-var.png" width="100%" style="display: block; margin: auto;" /> .footnote[Fuente: https://github.com/AntonMu/BiasVarianceTradeoff/blob/master/Bias_Variance_Tradeoff.pdf] --- class: inverse, center, middle ## ¿Cómo puedo controlar la complejidad de mi modelo? --- class: inverse, center, middle ## Recordar -- ## La complejidad está determinada mediante: -- ## Parámetros -- ## Hiperparámetros --- class: inverse, center, middle ## Pero sólo tengo CONTROL -- ## sobre los -- ## HIPERPARÁMETROS -- ## ¿Cómo? --- ## Tunning de Hiperparámetros Cuando hacemos tunning de hiperparámetros, lo que hacemos es encontrar valores óptimos para un modelo de regresión o clasificación. Esa búsqueda la podemos hacer **en grilla (grid search)** o **random (aleatoria)** -- <img src="img/grid-random-search.png" width="80%" style="display: block; margin: auto;" /> --- class: inverse, center, middle ## ¿Cómo queda nuestro flujo de trabajo? --- ## Flujo de trabajo <img src="img/workflow-final.png" width="100%" style="display: block; margin: auto;" /> --- ## Tunning de hiperparámetros en Árboles de decisión * Vamos a hacer tunning de los hiperparámetros del modelo. Documentación: https://parsnip.tidymodels.org/reference/decision_tree.html Hiperparámetros del modelo: .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ * **cost_complexity**: Un número positivo para el parámetro de costo / complejidad * **tree_depth**: Un número entero para la profundidad máxima del árbol. * **min_n**: Un número entero para el número mínimo de puntos de datos en un nodo que se requieren para que el nodo se divida más. ] --- ### Valores por defecto <img src="img/rpart.png" width="90%" style="display: block; margin: auto;" /> .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ * **Cuando aumenta el tree_depth aumenta la probabilidad de overfitting** * **Cuando disminuye el min_n aumenta la probabilidad de overfitting** * **Cuando se acerca a 0 el cost_complexity, aumenta la probabilidad de overfitting** ] --- class: inverse, center, middle ## Árboles de decisión ### ¿Cómo se deciden los splits? --- ## Elecciones de diseño ### Como dividir los splits * Que medida o criterio como bondad de ajuste. * Splits binarios o multi-categóricos. ### Cuando detenerse * Si un nodo contiene exactamente ejemplos de la misma clase. * Los valores de los features son todos los mismos para las muestras. --- ## ID3 - Iterative Dichotomizer 3 * Descripto por **Quinlan, J. R. (1986). Induction of decision trees. Machine learning, 1 (1), 81-106.** * Uno de los primeros árboles de decisión * Features discretos, no puede manejar features numéricos. * Splits multi-categóricos. * Árboles pequeños y amplios (a diferencia de CART). * Maximiza **la ganancia de información / minimiza la entropía.** * Features discretos, binarios y multi-categóricos. --- ## C4.5 * Descripto por **Quinlan, J. R. (1993). C4. 5: Programming for machine learning. Morgan Kauffmann, 38, 48.** * Features continuos y discretos (los features continuos son costosos de computar ya que exigen todos los posibles rangos). * Criterio de split: **Gain Ratio** * Puede manejar atributos (datos) faltantes (los ignora en el cómputo de la ganancia de información). --- ## CART * Descripto por **Breiman, L. (1984). Classification and regression trees. Belmont, Calif:Wadsworth International Group.** * Maneja features continuos y discretos. * Trabaja estrictamente con splits binarios (lo q resulta en árboles mas altos a diferencia de ID3 o C4.5) * Los splits binarios puede generar mejores árboles que C4.5, pero tienden a ser más grandes y más dificiles de interpretar. * Reducción de varianza en árboles de regresión. * Utiliza la **impureza de Gini** en árboles de clasificación. --- ## Entropía La entropía es una medida de la aleatoriedad de la información que se procesa. **Cuanto mayor sea la entropía, más difícil será sacar conclusiones de esa información.** El concepto de entropía viene del campo de la teoría de la información. <img src="img/entropy-math-eq.png" width="40%" style="display: block; margin: auto;" /> <img src="img/entropy2.png" width="80%" style="display: block; margin: auto;" /> --- ## Entropía <img src="img/shannon.png" width="80%" style="display: block; margin: auto;" /> -- **A partir del gráfico anterior, es bastante evidente que la entropía es cero cuando la probabilidad es 0 o 1.** La entropía es máxima cuando la probabilidad es 0.5 porque proyecta una aleatoriedad perfecta en los datos y no hay posibilidad de determinar perfectamente el resultado. --- ### Ganancia de Información (Information Gain) La ganancia de información es una propiedad estadística que mide qué tan bien un atributo determinado separa los ejemplos de entrenamiento de acuerdo con su clasificación de destino. La construcción de un árbol de decisiones consiste en encontrar un atributo que devuelva la **mayor ganancia de información y la menor entropía.** `\(IG = Entropy(parent) - weighted \hspace{1mm} average [Entropy (children)]\)` -- <img src="img/IG.png" width="80%" style="display: block; margin: auto;" /> --- ### Veamos como funciona en un árbol de decisión Supongamos que tenemos que decidir si entregar o no un préstamo, y tenemos 2 variables para decidir si lo hacemos: * Balance: $$$$ * Residence: lugar de residencia. --- <img src="img/entropy-balance.png" width="70%" style="display: block; margin: auto;" /> --- <img src="img/entrop-balance.png" width="70%" style="display: block; margin: auto;" /> --- <img src="img/entropy-residence.png" width="90%" style="display: block; margin: auto;" /> --- <img src="img/entrop-residenc.png" width="80%" style="display: block; margin: auto;" /> --- ## Conclusión Cuanto más homogeneas son las ramas del árbol que se genera al seleccionar el algoritmo una variable, .bg-near-white.b--dark-blue.ba.bw2.br3.shadow-5.ph4.mt2[ * **hay mayor ganancia de información.** * **hay menos entropía** ] **Eso se traduce en un mejor modelo para la predicción que deseamos realizar** --- ## Relación de Ganancia (Gain Ratio) **La relación de Ganancia (Gain Ratio) es el cociente entre la ganancia de información (Information Gain) y la entropía del nodo raíz (root node).** -- <img src="img/gain.png" width="90%" style="display: block; margin: auto;" /> Recordar que se lo utiliza como criterio de impureza en C4.5 --- ## Impureza de Gini * **Medida de la impureza en CART** como contraposición a la entropía. <img src="img/Gini-i.png" width="50%" style="display: block; margin: auto;" /> * En la práctica, no importa si usamos entropía o impureza de Gini, porque **ambos criterios tienen forma de campana.** * **Es más fácil de computar Gini lo que hace que el cálculo sea más eficiente en términos de rendimiento.** <img src="img/impurity.png" width="50%" style="display: block; margin: auto;" /> --- class: inverse, center, middle ## Manos en R! --- ## Bibliografía * Abu-Mostafa, Y. Learning from data. * Kuhn, M. & Johnson K. Applied Predictive Modeling. * Provost, F & Fawcett T. Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking * Raschka, Sebastian. https://www.youtube.com/watch?v=z2n8kHXkwtM * Raschka, Sebastian. Apuntes de clase.