COMPARACIÓN DE ALGORITMOS DE CLASIFICACIÓN EN MODELOS
INTEGRANTES:
JUAN DAVID SALGADO ROMERO
LUIS DAVID VERGARA SOLANO
ÁREA:
APRENDIZAJE COMPUTACIONAL
UNIVERSIDAD DE CÓRDOBA
CENTRO DE DESARROLLO SAHAGÚN
SEMESTRE VIII – 2024-2
Este dataset de Pokémon contiene 1355 registros y 6 variables principales que describen las
características de combate y rareza de cada Pokémon. A continuación, se presenta el desglose
detallado:
Este conjunto de datos permite analizar y comparar las capacidades de combate y la frecuencia
relativa de los Pokémon según su rareza en el juego.
• Técnicas de Preprocesamiento:
- Eliminación de filas o columnas: Se eliminaron varias columnas porque no utilizan una escala
numérica y no son relevantes para la clasificación, esto con el fin de disminuir los datos
innecesarios y delimitar el dataset.
- Normalización: Utilizando la función MinMaxScaler(), escalamos los datos números del
dataset entre 0 y 1, relevantes para la clasificación y así evitar posibles sesgos, ya que, si los
datos se encuentran en una escala diferente, las variables que contienen entradas con alto
valor numérico llegarán a tener más peso.
- Se utilizó la función dropna(), para eliminar los datos nulos dentro del dataset, luego se utilizó
un método para eliminar los datos nulos de las columnas que eran de tipo float, ya que, nos
dimos cuenta que esta función no las eliminó.
• Variables Predictoras:
base_attack: Atributo base de ataque del Pokémon, que indica su poder de ataque (numérico).
base_defense: Atributo base de defensa, que refleja la capacidad de resistencia frente a
ataques (numérico).
base_stamina: Atributo base de resistencia, que afecta la duración en combate (numérico).
max_cp: Potencial máximo de poder de combate que puede alcanzar el Pokémon (numérico).
attack_probability: Probabilidad de que el Pokémon ejecute un ataque (numérico, con algunos
valores faltantes).
• Variable objetivo:
rarity: Clasificación de rareza del Pokémon, que puede incluir valores como "Standard" o
"Legendary" (texto).
• Estadísticas del dataset:
1. Resumen de las Variables de Combate
base_attack: El ataque base promedio de los Pokémon es de 213, con una variabilidad
moderada (desviación estándar de 66.94). Esto sugiere una diversidad considerable en las
capacidades ofensivas. El valor mínimo de 0 y el máximo de 414 reflejan la amplitud en los
niveles de ataque, desde Pokémon con ataques muy bajos hasta aquellos con ataques altos.
base_defense: La defensa base promedio es de 172.9, con una variabilidad similar (desviación
estándar de 57.5). Al igual que el ataque, hay una amplia gama de defensas, donde el valor
mínimo es 0 y el máximo alcanza 505, indicando que algunos Pokémon pueden tener
capacidades defensivas significativamente superiores.
base_stamina: La resistencia base promedio es de 194.2, con una desviación estándar de 57.7.
Los valores de resistencia varían ampliamente, con un mínimo de 0 y un máximo de 452, lo que
refleja que algunos Pokémon tienen la capacidad de durar mucho más en combate.
max_cp: El poder de combate máximo promedio es de 3240.2, con una variabilidad alta
(desviación estándar de 1176.9). Esto indica que algunos Pokémon tienen un potencial de
combate mucho mayor, con un valor máximo de 9366, mientras que los Pokémon con menos
capacidad tienen valores tan bajos como 16.
2. Probabilidad de Ataque
La probabilidad de ataque (attack_probability) promedio es de 0.123, con la mayoría de los
Pokémon mostrando valores cercanos al percentil 25 y la mediana (ambos de 0.1). Esto
sugiere que, en promedio, los Pokémon tienen una probabilidad de ataque moderada. Aunque
el valor máximo es 0.7, la baja variabilidad (desviación estándar de 0.067) indica que la
mayoría de los Pokémon se encuentran dentro de un rango estrecho de probabilidad de
ataque, en torno a 0.1.
3. Distribución de Rareza
El dataset categoriza a los Pokémon en cuatro tipos de rareza:
Standard: Representa el grupo más grande, con 455 Pokémon. Estos Pokémon son comunes
en el juego y tienen un acceso más fácil.
Legendary, Mythic, y Ultra Beast: Cada uno de estos grupos contiene exactamente 300
Pokémon, lo que sugiere una distribución uniforme de Pokémon de alta rareza. Estos Pokémon
suelen tener atributos de combate superiores y una disponibilidad limitada.
• Algoritmos de clasificación utilizados:
1. Árboles de decisión.
2. Support Virtual Machine (SVM)
3. El vecino más cercano (KNN)
Para los 3 algoritmos de clasificación aplicamos el mismo proceso, utilizamos las técnicas de
preprocesamiento de datos anteriormente descritas, dividimos el dataset entre datos de
entrenamiento y prueba, importamos las librerías necesarias por cada algoritmo y lo
entrenamos.
Librerías utilizadas
- Árboles de decisión:
import pandas as pd
from sklearn.model_selection import train_test_split
from [Link] import MinMaxScaler
from [Link] import DecisionTreeClassifier
import joblib
from [Link] import accuracy_score, classification_report
Después de entrenar el modelo de clasificación, utilizamos la librería joblib para exportar el
modelo en un archivo, el cuál puede ser utilizado en distintos entornos.
- SVM:
import pandas as pd
from sklearn.model_selection import train_test_split
from [Link] import MinMaxScaler
from [Link] import SVC
from [Link] import accuracy_score, classification_report
from sklearn.model_selection import GridSearchCV
import joblib
- KNN:
import pandas as pd
from sklearn.model_selection import train_test_split
from [Link] import MinMaxScaler
from [Link] import KNeighborsClassifier
from [Link] import accuracy_score, classification_report
Aquí se pueden apreciar las pruebas que se realizaron:
1. Testeo hecho con el algoritmo de Árboles de decisión:
Legendary:
Precision: 0.92, Recall: 0.99, F1-score: 0.96, con 87 muestras.
Esto indica que el modelo identifica correctamente el 99% de los Pokémon Legendary, aunque
algunos falsos positivos están presentes (es decir, algunos Pokémon predichos como
"Legendary" en realidad pertenecen a otra clase).
Mythic:
Precision: 0.98, Recall: 1.00, F1-score: 0.99, con 91 muestras.
El modelo es muy preciso para esta clase, con un recall perfecto (100%). Todos los Pokémon
Mythic fueron correctamente identificados, y casi no hay errores al clasificar otros como Mythic.
Standard:
Precision: 1.00, Recall: 0.92, F1-score: 0.96, con 136 muestras.
La precisión es perfecta, pero la sensibilidad es un poco menor (92%), lo que sugiere que
algunos Pokémon de la clase "Standard" no fueron identificados correctamente.
Ultra beast:
Precision: 0.97, Recall: 1.00, F1-score: 0.98, con 93 muestras.
La precisión y el recall son altos, lo que significa que la mayoría de los Pokémon Ultra beast se
identifican correctamente con muy pocos errores.
Promedios generales:
Accuracy: 97%, indicando que el modelo tiene un buen rendimiento general al clasificar
correctamente el 97% de los Pokémon en el conjunto de prueba.
Macro avg y Weighted avg de las métricas:
Macro avg considera el promedio simple de precisión, recall y F1-score entre todas las clases,
sin tener en cuenta el número de muestras de cada clase.
Weighted avg pondera cada métrica según la cantidad de muestras de cada clase, lo que
refleja mejor el rendimiento general cuando las clases están desbalanceadas.
2. Testeo hecho con el algoritmo de Support Vector Machines (SVM)
Legendary:
Precision: 0.97, Recall: 0.44, F1-score: 0.60, con 80 muestras.
Aunque la precisión es alta (97%), el recall es bastante bajo (44%), lo que significa que el modelo está
perdiendo más de la mitad de los Pokémon "Legendary". Esto sugiere que muchos Pokémon de esta
clase no son detectados correctamente.
Mythic:
Precision: 0.52, Recall: 0.93, F1-score: 0.67, con 80 muestras.
La precisión es baja (52%), lo que indica que el modelo tiende a clasificar incorrectamente Pokémon de
otras clases como "Mythic". Sin embargo, el recall es alto (93%), lo que significa que el modelo identifica
la mayoría de los Pokémon Mythic, aunque con algunos falsos positivos.
Standard:
Precision: 0.85, Recall: 0.89, F1-score: 0.87, con 131 muestras.
En esta clase, tanto la precisión como el recall son aceptables, aunque un poco más bajos que en el
reporte anterior. Esto indica que el modelo identifica correctamente a la mayoría de los Pokémon
"Standard", pero todavía presenta algunos errores.
Ultra beast:
Precision: 0.95, Recall: 0.63, F1-score: 0.76, con 90 muestras.
La precisión es alta (95%), pero el recall es bajo (63%), lo que sugiere que algunos Pokémon "Ultra
beast" son clasificados incorrectamente como otras clases.
Promedios generales:
Macro avg y Weighted avg:
La macro avg de las métricas (0.82 precisión, 0.73 recall, 0.73 F1-score) muestra que el rendimiento
medio entre las clases es bajo, especialmente en el recall.
La weighted avg (0.83 precisión, 0.76 recall, 0.78 F1-score) refleja un promedio ponderado que aún
indica un desempeño mejor que el azar, pero claramente necesita mejoras para alcanzar la precisión y
recall altos que tenía en el primer reporte.
3. Testeo hecho con el algoritmo de El vecino más cercano
Legendary:
Precision: 0.85, Recall: 1.00, F1-score: 0.92, con 51 muestras.
La precisión es alta (85%) y el recall perfecto (100%), indicando que el modelo es capaz de identificar
todos los Pokémon "Legendary" en el conjunto de prueba, aunque clasifica algunos Pokémon
incorrectamente como "Legendary" (falsos positivos).
Mythic:
Precision: 0.90, Recall: 0.94, F1-score: 0.92, con 50 muestras.
Esta clase tiene un rendimiento equilibrado con una precisión y recall altos, lo cual indica que el
modelo identifica la mayoría de los Pokémon "Mythic" correctamente.
Standard:
Precision: 1.00, Recall: 0.87, F1-score: 0.93, con 90 muestras.
La precisión es perfecta, lo que significa que el modelo no clasifica erróneamente otros Pokémon
como "Standard", aunque pierde algunos ejemplos de esta clase (recall de 87%).
Ultra beast:
Precision: 0.98, Recall: 1.00, F1-score: 0.99, con 63 muestras.
El modelo presenta un rendimiento excelente para esta clase, con una precisión y recall muy altos,
casi perfectos.
Promedios generales:
Macro avg:
Precisión: 0.93, Recall: 0.95, F1-score: 0.94.
Este promedio no ponderado de las métricas muestra que el modelo tiene un rendimiento general
muy bueno en todas las clases.
Weighted avg:
Precisión: 0.94, Recall: 0.94, F1-score: 0.94.
Este promedio ponderado es consistente con el macro avg, indicando que el modelo maneja bien el
balance entre clases y tiene un rendimiento robusto.
• Matrices de confusión:
- Árboles de decisión:
- SVM:
- KNN:
Conclusiones:
Hemos llegado a las siguientes observaciones, el modelo de árboles de decisión, aunque es menos
preciso en términos de exactitud, muestra un mejor equilibrio entre la sensibilidad y la
especificidad. Esto sugiere que tiene un desempeño más consistente al clasificar las diferentes
clases, evitando favorecer una sobre la otra.
Por otro lado, el modelo creado con Support Vector Machine da como resultado una mayor
precisión global, pero su comportamiento es más inestable. Es decir, aunque alcanza mejores
resultados en términos de exactitud, tiende a sobre ajustarse a los datos de entrenamiento, lo que
provoca una menor generalización y una variabilidad en la clasificación de los datos de prueba. Esta
inestabilidad se refleja en métricas como el recall o el F1-score, donde el modelo puede presentar
caídas significativas para ciertas clases.
El modelo basado en KNeighborsClassifier ha mostrado un rendimiento intermedio en comparación
con los otros dos. Aunque su precisión es similar a la de SVM, su estabilidad es mayor, evitando el
sobreajuste observado en SVM. Sin embargo, sigue siendo menos consistente que el árbol de
decisión en términos de equilibrio entre clases, ya que su sensibilidad y especificidad varían
dependiendo de la cantidad de vecinos elegidos.
En conclusión el modelo basado en árboles de decisión muestra una mejor estabilidad en todos los
aspectos, en su precisión global alcanza un porcentaje mayor a 97%, mostrando un balance bastante
cercano entre la precisión y el recall, no tiene caídas considerables en las demás métricas, esto
gracias a las técnicas de preprocesamiento aplicadas anteriormente, las cuáles fueron aplicadas en
los tres modelos, demostrando que este algoritmo de clasificación es superior a los demás,
limitándonos a este entorno de prueba.