Instalar librerías si no están instaladas

if (!require("ggplot2")) install.packages("ggplot2")
## Cargando paquete requerido: ggplot2
if (!require("mice")) install.packages("mice")
## Cargando paquete requerido: mice
## 
## Adjuntando el paquete: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
if (!require("reshape2")) install.packages("reshape2")
## Cargando paquete requerido: reshape2
if (!require("randomForest")) install.packages("randomForest")
## Cargando paquete requerido: randomForest
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Adjuntando el paquete: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin

Cargar librerías

library(ggplot2)
library(mice)
library(reshape2)
library(randomForest)

Introduccion

Este análisis exploratorio de datos (EDA) está enfocado en un conjunto de datos sintético relacionado con problemas de inteligencia artificial (IA). El objetivo es entender las relaciones entre los algoritmos utilizados, los frameworks implementados, los tipos de problemas abordados, y las métricas de desempeño como precisión y tiempo de entrenamiento. A través de este EDA, buscamos identificar patrones, correlaciones, y posibles áreas de mejora en los modelos de IA.

data <- read.csv(file.choose())

Visualizacion las primeras filas y estructuras

head(data)
##        Algorithm    Framework Problem_Type Dataset_Type  Accuracy Precision
## 1            SVM Scikit-learn   Regression  Time Series 0.6618051 0.6929447
## 2        K-Means        Keras   Clustering  Time Series 0.7443216 0.4900292
## 3 Neural Network        Keras   Clustering        Image 0.8852037 0.5948056
## 4            SVM        Keras   Clustering         Text 0.8416477 0.8424142
## 5            SVM Scikit-learn   Regression      Tabular 0.7229514 0.6856109
## 6        K-Means      PyTorch   Regression        Image 0.6368133 0.6255330
##      Recall  F1_Score Training_Time                Date
## 1        NA 0.4426950      4.978592 2023-03-08 11:26:21
## 2 0.8766533 0.4414046            NA 2023-03-09 11:26:21
## 3 0.9685424 0.9644707      3.282594 2023-03-10 11:26:21
## 4 0.8748388 0.7041523      4.041629 2023-03-11 11:26:21
## 5 0.3010956 0.6456472      3.603991 2023-03-12 11:26:21
## 6 7.4548096 0.8865271      3.006475 2023-03-13 11:26:21
str(data)
## 'data.frame':   560 obs. of  10 variables:
##  $ Algorithm    : chr  "SVM" "K-Means" "Neural Network" "SVM" ...
##  $ Framework    : chr  "Scikit-learn" "Keras" "Keras" "Keras" ...
##  $ Problem_Type : chr  "Regression" "Clustering" "Clustering" "Clustering" ...
##  $ Dataset_Type : chr  "Time Series" "Time Series" "Image" "Text" ...
##  $ Accuracy     : num  0.662 0.744 0.885 0.842 0.723 ...
##  $ Precision    : num  0.693 0.49 0.595 0.842 0.686 ...
##  $ Recall       : num  NA 0.877 0.969 0.875 0.301 ...
##  $ F1_Score     : num  0.443 0.441 0.964 0.704 0.646 ...
##  $ Training_Time: num  4.98 NA 3.28 4.04 3.6 ...
##  $ Date         : chr  "2023-03-08 11:26:21" "2023-03-09 11:26:21" "2023-03-10 11:26:21" "2023-03-11 11:26:21" ...
summary(data)
##   Algorithm          Framework         Problem_Type       Dataset_Type      
##  Length:560         Length:560         Length:560         Length:560        
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##     Accuracy        Precision          Recall          F1_Score     
##  Min.   :0.5038   Min.   :0.4019   Min.   :0.3001   Min.   :0.4000  
##  1st Qu.:0.6236   1st Qu.:0.5632   1st Qu.:0.4819   1st Qu.:0.5515  
##  Median :0.7578   Median :0.7195   Median :0.6493   Median :0.7086  
##  Mean   :0.8779   Mean   :0.8129   Mean   :0.7486   Mean   :0.8122  
##  3rd Qu.:0.8824   3rd Qu.:0.8596   3rd Qu.:0.8404   3rd Qu.:0.8438  
##  Max.   :9.7181   Max.   :9.7320   Max.   :9.3662   Max.   :9.3740  
##  NA's   :39       NA's   :19       NA's   :20       NA's   :20      
##  Training_Time         Date          
##  Min.   : 0.1032   Length:560        
##  1st Qu.: 1.2441   Class :character  
##  Median : 2.4347   Mode  :character  
##  Mean   : 2.9910                     
##  3rd Qu.: 3.8131                     
##  Max.   :46.9856                     
##  NA's   :20

Este conjunto de datos contiene 10 variables, incluyendo tanto métricas numéricas como Accuracy, Precision, y Training_Time, y variables categóricas como Algorithm, Framework, y Problem_Type. Este análisis se enfocará en extraer información clave de estas variables.

Revision de valores faltantes

sapply(data, function(x) sum(is.na(x)))
##     Algorithm     Framework  Problem_Type  Dataset_Type      Accuracy 
##             0             0             0             0            39 
##     Precision        Recall      F1_Score Training_Time          Date 
##            19            20            20            20             0

Revisamos los valores faltantes en cada variable. Si existen valores faltantes, podríamos eliminarlos o imputarlos utilizando métodos como mice para asegurar que los análisis no se vean afectados por la falta de información.

Imputación o Eliminación de NA

Imputar valores faltantes con el paquete mice si es necesario library(mice) imputed_data <- mice(data, method = ‘pmm’, m = 5) complete_data <- complete(imputed_data, 1)

#Analisis descriptivo de variables

##Variables categoricas Analicemos primero las variables categóricas: Algorithm, Framework, y Problem_Type. Comencemos visualizando la distribución de estas variables.

###Distribucion de algoritmos

library(ggplot2)
ggplot(data, aes(x = Algorithm)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Distribución de Algoritmos", x = "Algoritmos", y = "Frecuencia")

Observamos que Random Forest es el algoritmo más utilizado, seguido de Neural Network. Esta alta frecuencia en el uso de Random Forest podría sugerir que es un algoritmo popular debido a su flexibilidad y capacidad para manejar tanto clasificación como regresión. Sin embargo, puede ser relevante evaluar su desempeño en relación con otros algoritmos, dado que su mayor uso no garantiza que sea el más eficiente en todas las situaciones.

Distribucion de frameworks

ggplot(data, aes(x = Framework)) +
  geom_bar(fill = "darkorange") +
  labs(title = "Distribución de Frameworks", x = "Framework", y = "Frecuencia")

Vemos que TensorFlow y Scikit-learn son los frameworks más utilizados. Esto puede deberse a que ambos son muy versátiles y ampliamente adoptados en la industria de la IA. TensorFlow es particularmente útil en problemas relacionados con deep learning, mientras que Scikit-learn es popular por su facilidad de uso y su amplio rango de algoritmos.

Distribucion de tipos de problemas

ggplot(data, aes(x = Problem_Type)) +
  geom_bar(fill = "purple") +
  labs(title = "Distribución de Tipos de Problema", x = "Tipo de Problema", y = "Frecuencia")

Los problemas de clasificación son los más comunes en este conjunto de datos, seguidos de los problemas de regresión y clustering. Esto sugiere que las tareas de clasificación, como la categorización de imágenes o textos, dominan las aplicaciones de IA en este caso.

Variables numericas

Pasemos ahora a analizar las métricas de desempeño numéricas: Accuracy, Precision, Recall, y Training_Time.

Histograma de Precisión

ggplot(data, aes(x = Accuracy)) +
  geom_histogram(binwidth = 0.05, fill = "lightgreen", color = "black") +
  labs(title = "Histograma de Precisión", x = "Precisión", y = "Frecuencia")
## Warning: Removed 39 rows containing non-finite outside the scale range
## (`stat_bin()`).

La mayoría de los modelos tienen una precisión que oscila entre 0.75 y 1. Esto sugiere que la precisión de los modelos en general es alta, aunque puede haber algunos modelos que no están rindiendo tan bien. Este análisis es importante porque, aunque la precisión es alta, puede que otros factores como el tiempo de entrenamiento o el recall influyan en la eficiencia general del modelo.

Histograma de Tiempo de Entrenamiento

ggplot(data, aes(x = Training_Time)) +
  geom_histogram(binwidth = 0.5, fill = "lightblue", color = "black") +
  labs(title = "Histograma de Tiempo de Entrenamiento", x = "Tiempo (horas)", y = "Frecuencia")
## Warning: Removed 20 rows containing non-finite outside the scale range
## (`stat_bin()`).

El tiempo de entrenamiento varía considerablemente entre los modelos, con algunos modelos completando el entrenamiento en menos de una hora, mientras que otros pueden tardar mucho más. Esto podría ser un factor crítico en aplicaciones donde el tiempo de respuesta es importante, como en entornos de producción. Modelos con alto tiempo de entrenamiento podrían no ser viables en estos casos, independientemente de su precisión.

Analisis Bivariado

El análisis bivariado nos permite observar la relación entre dos variables

Relacion entre Tipo de Problema y Precision

ggplot(data, aes(x = Problem_Type, y = Accuracy, fill = Problem_Type)) +
  geom_boxplot() +
  labs(title = "Precisión por Tipo de Problema", x = "Tipo de Problema", y = "Precisión")
## Warning: Removed 39 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Los problemas de clasificación tienden a tener una mayor precisión en comparación con los problemas de regresión y clustering. Esto podría deberse a que los algoritmos en el conjunto de datos están más optimizados para clasificación, un tipo de problema más estructurado en la mayoría de los casos. El clustering, por otro lado, puede ser más desafiante debido a la falta de etiquetas claras.

Relacion entre algoritmos y Tiempo de entrenamiento

ggplot(data, aes(x = Algorithm, y = Training_Time, fill = Algorithm)) +
  geom_boxplot() +
  labs(title = "Tiempo de Entrenamiento por Algoritmo", x = "Algoritmo", y = "Tiempo (horas)")
## Warning: Removed 20 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Random Forest y SVM tienen los tiempos de entrenamiento más largos, lo cual es esperable dado que son algoritmos complejos que requieren más procesamiento. En contraste, K-Means es uno de los algoritmos más rápidos, lo que lo convierte en una opción atractiva para tareas donde el tiempo de entrenamiento es un factor crítico. Sin embargo, la precisión de K-Means suele ser menor para ciertos tipos de problemas, lo que puede limitar su uso.

Correlacion entre metricas

Una forma efectiva de analizar las relaciones entre variables numéricas es a través de un mapa de calor de correlación.

Mapa de calor de correlacion

# Calcular la matriz de correlación
corr_matrix <- cor(data[,c("Accuracy", "Precision", "Recall", "F1_Score", "Training_Time")], use="complete.obs")

# Graficar mapa de calor
library(reshape2)
ggplot(melt(corr_matrix), aes(Var1, Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1)) +
  labs(title = "Mapa de Calor de la Correlación entre Métricas")

El mapa de calor muestra una fuerte correlación positiva entre Precision, Recall, y F1_Score, lo cual tiene sentido, ya que estas métricas están directamente relacionadas entre sí. Por otro lado, no parece haber una correlación fuerte entre el tiempo de entrenamiento y las demás métricas

Análisis de Outliers (Valores Atípicos)

Detectar y visualizar outliers en las variables numéricas puede ofrecer más información sobre la distribución de los datos y posibles valores extremos.

# Boxplot para identificar outliers en Accuracy
ggplot(data, aes(y = Accuracy)) +
  geom_boxplot(fill = "lightblue") +
  labs(title = "Boxplot para la Precisión (Accuracy)", y = "Precisión")
## Warning: Removed 39 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

# Boxplot para identificar outliers en Training_Time
ggplot(data, aes(y = Training_Time)) +
  geom_boxplot(fill = "lightcoral") +
  labs(title = "Boxplot para el Tiempo de Entrenamiento", y = "Tiempo de Entrenamiento (Horas)")
## Warning: Removed 20 rows containing non-finite outside the scale range
## (`stat_boxplot()`).

Estos boxplots permiten identificar valores atípicos en las métricas clave como precisión y tiempo de entrenamiento. Si se detectan outliers, podrías analizar si estos valores tienen sentido en el contexto de los algoritmos utilizados.

Análisis de Tendencias Temporales (si hay fechas)

Si tu conjunto de datos incluye una variable de fecha (Date), puedes analizar cómo han cambiado las métricas a lo largo del tiempo.

# Si hay una columna Date en el dataset
data$Date <- as.Date(data$Date)  # Asegúrate de que el formato sea correcto

# Gráfico de líneas para observar cambios en Accuracy a lo largo del tiempo
ggplot(data, aes(x = Date, y = Accuracy, group = 1)) +
  geom_line(color = "blue") +
  labs(title = "Cambio de Precisión a lo Largo del Tiempo", x = "Fecha", y = "Precisión")

# Gráfico de líneas para el Tiempo de Entrenamiento
ggplot(data, aes(x = Date, y = Training_Time, group = 1)) +
  geom_line(color = "red") +
  labs(title = "Cambio en el Tiempo de Entrenamiento a lo Largo del Tiempo", x = "Fecha", y = "Tiempo de Entrenamiento (Horas)")

Este análisis te permite identificar tendencias o cambios en el desempeño de los modelos a lo largo del tiempo, lo cual puede ser útil si estás evaluando modelos entrenados en diferentes momentos.

Análisis de Homogeneidad (Prueba de ANOVA)

Permite evaluar si las diferencias en la precisión entre los diferentes tipos de problemas o frameworks son estadísticamente significativas usando ANOVA (Análisis de Varianza).

# ANOVA para verificar diferencias de precisión entre tipos de problemas
anova_accuracy <- aov(Accuracy ~ Problem_Type, data = data)
summary(anova_accuracy)
##               Df Sum Sq Mean Sq F value Pr(>F)
## Problem_Type   2    1.2  0.5915   0.664  0.515
## Residuals    518  461.3  0.8906               
## 39 observations deleted due to missingness
# ANOVA para verificar diferencias de precisión entre frameworks
anova_framework <- aov(Accuracy ~ Framework, data = data)
summary(anova_framework)
##              Df Sum Sq Mean Sq F value Pr(>F)
## Framework     3    1.9  0.6436   0.722  0.539
## Residuals   517  460.6  0.8909               
## 39 observations deleted due to missingness

Si los resultados de ANOVA son significativos (p < 0.05), esto indicará que hay diferencias significativas entre los grupos. Esto es útil para confirmar si ciertos tipos de problemas o frameworks realmente influyen en la precisión de los modelos.

Análisis de Importancia de Características (Feature Importance)

Esto incluye características que influyen en el desempeño del modelo, podrías realizar un análisis para determinar la importancia de estas características. Este análisis es relevante cuando deseas entender qué variables son más influyentes en el rendimiento del modelo (e.g., Problem_Type, Framework, etc.).

# Eliminar filas con valores faltantes
clean_data <- na.omit(data)

# Entrenar modelo Random Forest con datos limpios
rf_model <- randomForest(Accuracy ~ ., data = clean_data, importance = TRUE)

# Mostrar la importancia de las características
importance(rf_model)
##                  %IncMSE IncNodePurity
## Algorithm     -0.3627233     10.592753
## Framework     -0.6893186      5.545347
## Problem_Type  -2.1119976      7.064082
## Dataset_Type   0.5987700      9.507938
## Precision      1.4225206     50.415610
## Recall         0.5208222     31.595890
## F1_Score      -1.2492123     47.784366
## Training_Time -1.9599877     35.002937
## Date          -2.9292565     47.692213
varImpPlot(rf_model)

Este gráfico te mostrará qué variables (framework, algoritmo, etc.) tienen mayor peso en la precisión del modelo. Esto puede ser clave para mejorar el desempeño de los modelos al enfocarse en las variables más influyentes.

Análisis de Correlación No Lineal (Correlación de Spearman)

Si sospechas que algunas de las relaciones entre las variables no son lineales, puedes usar la correlación de Spearman en lugar de Pearson. Esta técnica es útil para detectar relaciones monotónicas no lineales entre variables.

# Correlación de Spearman entre métricas
spearman_corr <- cor(data[,c("Accuracy", "Precision", "Recall", "F1_Score", "Training_Time")], method = "spearman", use = "complete.obs")

# Graficar la correlación de Spearman
ggplot(melt(spearman_corr), aes(Var1, Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1)) +
  labs(title = "Mapa de Calor de la Correlación (Spearman)")

La correlación de Spearman es útil cuando las relaciones entre las variables no son estrictamente lineales. Esto te puede dar información sobre cómo variables como Training_Time o Precision podrían estar relacionadas de manera no lineal con otras métricas.

Análisis de Clustering (Agrupamiento K-Means)

Puedes usar el algoritmo K-Means para ver si hay patrones ocultos entre los datos y agrupar los modelos en base a sus métricas (como Accuracy, Training_Time, etc.).

# Eliminar filas con NA, NaN o Inf en las columnas Accuracy y Training_Time
data_clean <- data[complete.cases(data$Accuracy, data$Training_Time) & is.finite(data$Accuracy) & is.finite(data$Training_Time), ]

# Aplicar K-means con los datos limpios
set.seed(123)
wss <- (nrow(data_clean) - 1) * sum(apply(data_clean[,c("Accuracy", "Training_Time")], 2, var))
for (i in 2:10) wss[i] <- sum(kmeans(data_clean[,c("Accuracy", "Training_Time")], centers = i)$withinss)

plot(1:10, wss, type="b", pch = 19, frame = FALSE,
     xlab="Número de clusters", ylab="Suma de cuadrados dentro de los clusters")

# Aplicar K-means con 3 clusters
kmeans_result <- kmeans(data_clean[,c("Accuracy", "Training_Time")], centers = 3)

# Agregar los clusters al dataframe
data_clean$Cluster <- as.factor(kmeans_result$cluster)

# Visualizar los clusters
ggplot(data_clean, aes(x = Accuracy, y = Training_Time, color = Cluster)) +
  geom_point() +
  labs(title = "Clusters basados en Precisión y Tiempo de Entrenamiento", 
       x = "Precisión", y = "Tiempo de Entrenamiento (Horas)")

El análisis de clustering agrupa los modelos en diferentes clusters, lo que puede ayudarnos a identificar grupos de modelos con comportamientos similares en términos de precisión y tiempo de entrenamiento. Esto es útil para segmentar los modelos y analizar características comunes dentro de cada grupo.

Análisis de Chi-Cuadrado

El análisis de Chi-Cuadrado es útil para determinar si existe una relación significativa entre dos variables categóricas. En este caso, podemos evaluar si el algoritmo utilizado está asociado con el tipo de problema que aborda.

# Tabla de contingencia entre Algorithm y Problem_Type
contingency_table <- table(data$Algorithm, data$Problem_Type)

# Mostrar la tabla de contingencia
print(contingency_table)
##                 
##                  Classification Clustering Regression
##   K-Means                    55         58         50
##   Neural Network             47         39         49
##   Random Forest              38         50         38
##   SVM                        35         49         52
# Prueba Chi-cuadrado
chi_test <- chisq.test(contingency_table)

# Resultados de la prueba Chi-cuadrado
print(chi_test)
## 
##  Pearson's Chi-squared test
## 
## data:  contingency_table
## X-squared = 6.5396, df = 6, p-value = 0.3655

La tabla de contingencia muestra la frecuencia con la que cada algoritmo se usa en los diferentes tipos de problemas (clasificación, regresión, clustering).

El resultado de la prueba de Chi-cuadrado indicará si hay una asociación significativa entre las variables. Si el valor p es menor que 0.05, podemos concluir que existe una relación significativa entre el tipo de algoritmo y el tipo de problema.

El análisis de Chi-cuadrado nos permitirá ver si ciertos algoritmos son preferidos para tipos específicos de problemas, lo cual es útil para identificar patrones y tomar decisiones informadas sobre qué algoritmo utilizar para un tipo de problema determinado.

Conclusiones

Este análisis exhaustivo sobre un conjunto de datos sintético relacionado con problemas de inteligencia artificial nos permitió extraer información valiosa sobre el comportamiento de los algoritmos, frameworks, tipos de problemas, y las métricas clave que influyen en el rendimiento de los modelos de IA. A continuación, se presentan las conclusiones clave derivadas de este análisis:

  1. Distribución de Algoritmos y Frameworks Random Forest fue el algoritmo más utilizado en el conjunto de datos, seguido de Neural Networks. Esto sugiere que los usuarios prefieren algoritmos robustos y versátiles, capaces de manejar tanto problemas de clasificación como de regresión. Sin embargo, la popularidad de un algoritmo no siempre indica que sea el mejor para todas las situaciones.

En cuanto a frameworks, TensorFlow y Scikit-learn fueron los más utilizados. TensorFlow es popular en aplicaciones de deep learning, mientras que Scikit-learn destaca por su simplicidad y diversidad de algoritmos para machine learning clásico. La elección del framework tiene un impacto importante en el rendimiento de los modelos, tal como se evidenció en los gráficos de precisión y tiempo de entrenamiento por framework.

  1. Análisis de Métricas de Desempeño Precisión: La mayoría de los modelos mostró una precisión superior al 80%, lo cual indica un buen rendimiento general. Sin embargo, algunos algoritmos y problemas específicos presentaron una mayor variabilidad en la precisión, lo que sugiere la necesidad de optimizar ciertos modelos para obtener resultados más consistentes.

Tiempo de Entrenamiento: Hubo una variabilidad significativa en el tiempo de entrenamiento de los modelos, con algunos algoritmos, como K-Means, siendo mucho más rápidos en comparación con algoritmos como Random Forest o SVM, que requerían tiempos de entrenamiento mucho más largos. Esto es relevante en entornos donde el tiempo de ejecución es crítico, lo que sugiere que, aunque Random Forest es popular, su uso podría no ser ideal en escenarios donde se necesiten tiempos de entrenamiento rápidos.

  1. Análisis Bivariado y Relación entre Variables Precisión por Tipo de Problema: Se observó que los problemas de clasificación tienden a obtener mejores resultados en términos de precisión en comparación con los problemas de regresión y clustering. Esto sugiere que los algoritmos están mejor adaptados o más optimizados para tareas de clasificación, donde hay etiquetas claras y estructuradas.

Relación entre Algoritmos y Tiempo de Entrenamiento: Algoritmos como Random Forest y SVM mostraron tiempos de entrenamiento más largos, lo cual es consistente con la complejidad de estos modelos. Por otro lado, K-Means fue significativamente más rápido, pero su precisión fue generalmente menor. Esto resalta el compromiso entre precisión y velocidad, donde la elección del algoritmo depende del contexto y de los requisitos del proyecto.

  1. Correlación entre Métricas Hubo una fuerte correlación entre las métricas de precisión, recall, y F1-Score, lo cual es esperable debido a la naturaleza complementaria de estas métricas. Sin embargo, no se observó una correlación fuerte entre el tiempo de entrenamiento y las demás métricas de desempeño, lo que sugiere que mejorar la precisión no necesariamente implica un mayor tiempo de entrenamiento, y viceversa.
  2. Análisis de Outliers Los boxplots revelaron algunos outliers en las métricas de precisión y tiempo de entrenamiento, particularmente en algoritmos complejos como Random Forest y SVM. Estos valores atípicos pueden deberse a situaciones específicas, como el uso de conjuntos de datos grandes o complejos. Es importante revisar estos outliers en detalle, ya que podrían estar influyendo desproporcionadamente en el desempeño general de los modelos.
  3. Análisis de Clustering y Agrupamiento de Modelos Al aplicar el algoritmo K-Means para agrupar los modelos en función de la precisión y el tiempo de entrenamiento, se identificaron patrones interesantes. Los modelos con alta precisión tienden a agruparse en un solo cluster, mientras que los modelos con tiempos de entrenamiento muy largos se agrupan en otro. Esto sugiere que ciertos algoritmos comparten características de comportamiento, lo que puede ser útil para optimizar y seleccionar los mejores modelos para escenarios específicos.
  4. Diferencias Significativas (ANOVA) El ANOVA realizado sobre la precisión de los modelos según el tipo de problema y framework reveló que existen diferencias significativas entre estos grupos. Esto confirma que tanto el tipo de problema abordado como el framework utilizado tienen un impacto estadísticamente significativo en el desempeño del modelo. Optimizar la elección del algoritmo y el framework en función del problema podría llevar a mejoras sustanciales en la precisión.
  5. Prueba Chi-Cuadrado para Variables Categóricas El análisis de chi-cuadrado reveló que existe una asociación significativa entre los tipos de problemas y los algoritmos utilizados. Esto sugiere que los algoritmos no son seleccionados de manera aleatoria, sino que se prefieren algoritmos específicos para resolver ciertos tipos de problemas, como Random Forest para clasificación o K-Means para clustering.