296 lines
9.4 KiB
Org Mode
296 lines
9.4 KiB
Org Mode
#+TITLE: Práctica 2
|
|
#+SUBTITLE: Inteligencia de Negocio
|
|
#+AUTHOR: Amin Kasrou Aouam
|
|
#+DATE: 2020-12-13
|
|
#+PANDOC_OPTIONS: template:~/.pandoc/templates/eisvogel.latex
|
|
#+PANDOC_OPTIONS: listings:t
|
|
#+PANDOC_OPTIONS: toc:t
|
|
#+PANDOC_METADATA: lang=es
|
|
#+PANDOC_METADATA: titlepage:t
|
|
#+PANDOC_METADATA: listings-no-page-break:t
|
|
#+PANDOC_METADATA: toc-own-page:t
|
|
#+PANDOC_METADATA: table-use-row-colors:t
|
|
#+PANDOC_METADATA: logo:/home/coolneng/Photos/Logos/UGR.png
|
|
* Práctica 2
|
|
** Apartado 1
|
|
*** Introducción
|
|
|
|
En este apartado, visualizaremos los resultados de la práctica anterior y los interpretaremos.
|
|
*** Procesamiento de datos
|
|
|
|
Mantenemos el mismo preprocesamiento de datos que en la práctica anterior, lo cual supone que para haremos una gráfica para cada tipo de preprocesamiento (eliminación de valores nulos e imputación con la media).
|
|
*** Ejecución
|
|
|
|
Para obtener las gráficas ejecutamos el siguiente comando, desde la raíz del proyecto:
|
|
|
|
#+begin_src shell
|
|
python src/P1/processing.py drop
|
|
#+end_src
|
|
|
|
En el caso de que queramos los resultados al aplicar la imputación de la media, ejecutamos el siguiente comando:
|
|
|
|
#+begin_src shell
|
|
python src/P1/processing.py fill
|
|
#+end_src
|
|
|
|
El conjunto de las gráficas se encontrará en el directorio *docs/assets*.
|
|
|
|
*** Gráfica de curva ROC
|
|
|
|
Una curva ROC nos permite medir el rendimiento de un clasificador según el umbral de discriminación en un problema de clasificación, i.e. nos permite saber como de bueno es nuestro modelo distinguiendo las diferentes clases.
|
|
|
|
Procedemos a mostrar cada uno de los modelos con un color distinto, además del /AUC/, dado que este parámetro nos permite asignar un valor numérico al rendimiento de cada modelo.
|
|
|
|
**** Eliminación de valores
|
|
|
|
#+CAPTION: Curva ROC AUC con eliminación de valores
|
|
[[./assets/drop/roc_auc_curve.png]]
|
|
|
|
Observamos que el algoritmo /Naive Bayes/ es el que obtiene una mejor puntuación, aunque no hay una gran diferencia de valores en el /AUC/ entre los demás modelos.
|
|
|
|
**** Imputación de valores
|
|
|
|
#+CAPTION: Curva ROC AUC con imputación de valores
|
|
[[./assets/roc_auc_curve.png]]
|
|
|
|
Observamos que el algoritmo /Naive Bayes/ sigue obteniendo la mejor puntuación, aunque vemos que las curvas han sido alteradas debido al proceso de imputación.
|
|
|
|
En la práctica anterior llegamos a la conclusión de que no era un buen método de preprocesamiento en nuestro caso particular.
|
|
*** Matriz de confusión
|
|
|
|
Una matriz de confusión nos permite visualizar el rendimiento de un algoritmo, al incluir el número de:
|
|
- Verdaderos positivos
|
|
- Falsos positivos
|
|
- Verdaderos negativos
|
|
- Falsos negativos
|
|
|
|
Procedemos a generar un /heatmap/ por cada algoritmo, para comparar su rendimiento.
|
|
|
|
**** Eliminación de valores
|
|
|
|
#+CAPTION: Matriz de confusión con eliminación de valores
|
|
[[./assets/drop/confusion_matrix.png]]
|
|
|
|
Observamos que el algoritmo /Linear SVC/ es el que obtiene una mejor puntuación, dado que nos presenta el menos número de falsos negativos y falsos positivos.
|
|
|
|
**** Imputación de valores
|
|
|
|
#+CAPTION: Matriz de confusión con imputación de valores
|
|
[[./assets/confusion_matrix.png]]
|
|
|
|
Observamos que el rendimiento de ciertos algoritmos se degrada en la detección de falsos positivo o falsos negativos. El /Linear SVC/ se ve afectado en la detección de falsos positivos, y en este apartado lo supera el /K-NN/.
|
|
*** Correlación entre atributos
|
|
|
|
Vamos a tratar de observar qué atributos están más relacionados con el resultado del diagnóstico, para determinar cual de ellos es más discriminativo.
|
|
|
|
Procedemos a generar un histograma para cada uno de los atributos, para ello discretizamos el atributo de la edad.
|
|
|
|
**** Eliminación de valores
|
|
|
|
#+CAPTION: Correlación de atributos con eliminación de valores
|
|
[[./assets/drop/attribute's_correlation.png]]
|
|
|
|
Observamos que los atributos que más peso tienen son:
|
|
|
|
- /Margin/
|
|
- /Shape/
|
|
- /Age/
|
|
|
|
**** Imputación de valores
|
|
|
|
#+CAPTION: Correlación de atributos con imputación de valores
|
|
[[./assets/attribute's_correlation.png]]
|
|
|
|
Observamos que los atributos son menos discriminativos al realizar la imputación, lo cual nos confirma que esta técnica de preprocesamiento es nociva para nuestro caso de estudio.
|
|
|
|
\clearpage
|
|
|
|
** Apartado 2
|
|
*** Introducción
|
|
|
|
En este apartado, usaremos distintos algoritmos de /clustering/ para resolver un problema de agrupación.
|
|
|
|
El problema en cuestión trata de agrupar los accidentes que ocurrieron en el año 2013 según la DGT, evaluando variables similares y relaciones de causalidad para determinar la gravedad y el tipo del accidente.
|
|
|
|
Estudiaremos el rendimiento de los siguientes algoritmos:
|
|
|
|
- K-means
|
|
- Birch
|
|
- Spectral clustering
|
|
- Mean shift clustering
|
|
- DBSCAN
|
|
|
|
En el caso del /K-means/ y de /Birch/, estudiaremos el rendimiento según un diferente número de clusters.
|
|
|
|
*** Casos de estudio
|
|
**** Caso de estudio 1: Accidentes ocurridos por la noche
|
|
|
|
La visibilidad es un factor importante en la conducción, por lo tanto vamos a agrupar los distintos accidentes ocurridos de noche.
|
|
|
|
***** 5 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case1 5
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 1 con 5 clusters
|
|
[[./assets/cases/C1-5.png]]
|
|
|
|
Como podemos observar, según las diferentes métricas ciertos algoritmos tienen mejor o peor rendimiento:
|
|
|
|
- /Silhouette Coefficient/: Mean Shift clustering
|
|
- /Calinski-Harabasz/: K-means
|
|
- /Time/: K-means
|
|
***** 10 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case1 10
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 1 con 10 clusters
|
|
[[./assets/cases/C1-10.png]]
|
|
|
|
Debido a la variación del número de clusters, vemos como el rendimiento de /Birch/ se degrada de forma considerable, mientras que el /k-means/ obtiene una mejor puntuación
|
|
|
|
**** Caso de estudio 2: Accidentes en islas con lluvia
|
|
|
|
Estudiamos los accidentes que han ocurrido en el territorio español no peninsular, en condiciones lluviosas.
|
|
|
|
***** 5 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case2 5
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 2 con 5 clusters
|
|
[[./assets/cases/C2-5.png]]
|
|
|
|
Como podemos observar, según las diferentes métricas ciertos algoritmos tienen mejor o peor rendimiento:
|
|
|
|
- /Silhouette Coefficient/: Mean Shift clustering
|
|
- /Calinski-Harabasz/: Spectral clustering
|
|
- /Time/: DBSCAN
|
|
|
|
***** 10 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case2 10
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 2 con 10 clusters
|
|
[[./assets/cases/C2-10.png]]
|
|
|
|
Debido a la variación del número de clusters, vemos como el rendimiento del /k-means/ supera a todos los demás algoritmos, excepto en la métrica del tiempo de ejecución.
|
|
|
|
**** Caso de estudio 3: Accidentes en autopista después de las 19
|
|
|
|
Estudiamos los accidentes que han ocurrido en autopistas, después de las 19:00.
|
|
|
|
***** 5 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case3 5
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 3 con 5 clusters
|
|
[[./assets/cases/C3-5.png]]
|
|
|
|
Observamos como el /K-means/ es el que obtiene mejores resultados, con un tiempo de ejecución marginalmente superior al del /DBSCAN/.
|
|
|
|
***** 10 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case3 10
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 3 con 10 clusters
|
|
[[./assets/cases/C3-10.png]]
|
|
|
|
Debido a la variación del número de clusters, vemos como el rendimiento del /K-means/ y de /Birch/ mejora considerablemente.
|
|
|
|
**** Caso de estudio 4: Accidentes en Andalucía sin iluminación
|
|
|
|
Estudiamos los accidentes que han ocurrido en la comunidad autónoma de Andalucía, en particular, cuando no había iluminación.
|
|
|
|
***** 5 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case4 5
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 4 con 5 clusters
|
|
[[./assets/cases/C4-5.png]]
|
|
|
|
Como podemos observar, según las diferentes métricas ciertos algoritmos tienen mejor o peor rendimiento:
|
|
|
|
- /Silhouette Coefficient/: DBSCAN
|
|
- /Calinski-Harabasz/: K-means
|
|
- /Time/: DBSCAN
|
|
|
|
Observamos como el algoritmo con mejor rendimiento es el /DBSCAN/, excepto en la métrica del /Calinski-Harabasz/ donde predomina el /K-means/.
|
|
|
|
***** 10 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case4 10
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 4 con 10 clusters
|
|
[[./assets/cases/C4-10.png]]
|
|
|
|
Debido a la variación del número de clusters, vemos como el rendimiento del /K-means/ y de /Birch/ mejora considerablemente.
|
|
En el caso particular del /K-means/, éste supera al /DBSCAN/ en todas las métricas, excepto la del tiempo de ejecución.
|
|
|
|
**** Caso de estudio 5: Accidentes ocurridos un domingo en Madrid
|
|
|
|
Estudiamos los accidentes que han ocurrido en domingo, en la comunidad de Madrid.
|
|
|
|
***** 5 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case5 5
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 5 con 5 clusters
|
|
[[./assets/cases/C5-5.png]]
|
|
|
|
Como podemos observar, según las diferentes métricas ciertos algoritmos tienen mejor o peor rendimiento:
|
|
|
|
- /Silhouette Coefficient/: Mean Shift
|
|
- /Calinski-Harabasz/: K-means
|
|
- /Time/: DBSCAN
|
|
|
|
Observamos como el algoritmo /Mean Shift/ consigue un /Silhouette Coefficient/ cerca de 1.
|
|
|
|
***** 10 clusters
|
|
|
|
Ejecutamos el siguiente comando:
|
|
|
|
#+begin_src bash
|
|
python src/P2/processing.py case5 10
|
|
#+end_src
|
|
|
|
#+CAPTION: Caso 5 con 10 clusters
|
|
[[./assets/cases/C5-10.png]]
|
|
|
|
Debido a la variación del número de clusters, vemos como el rendimiento del /K-means/ mejora considerablemente y /Birch/ mejora de forma marginal.
|
|
En el caso particular del /K-means/, el valor de su /Silhouette Coefficient/ se acerca mucho al valor del /Mean Shift/.
|