I. Clasificación Supervisada: Employee-IBM

Se analiza la satisfacción laboral (1 a 4) usando tres métodos de clasificación supervisada: Árboles de decisión, Máquinas de Soporte Vectorial (SVM) y Redes Neuronales Artificiales (ANN).

Carga de datos y preprocesamiento

Para comenzar, se cargaron los datos de empleados de IBM. Se eliminaron filas con datos faltantes y se convirtió la variable ‘Satisfaction’ en un factor para permitir su uso en modelos de clasificación. También se dividieron los datos en entrenamiento y prueba, y se escalaron las variables numéricas para que tuvieran igual peso.

library(tidyverse)
library(caret)
library(rpart)
library(e1071)
library(nnet)
library(rpart.plot)

employee <- read.csv("Employee-IBM.csv")
employee <- na.omit(employee)
employee$Satisfaction <- as.factor(employee$Satisfaction)

set.seed(123)
index <- createDataPartition(employee$Satisfaction, p = 0.7, list = FALSE)
train <- employee[index, ]
test <- employee[-index, ]

# Escalar datos para SVM y ANN
train_scaled <- train
test_scaled <- test
numeric_cols <- sapply(train_scaled, is.numeric)
train_scaled[, numeric_cols] <- scale(train_scaled[, numeric_cols])
test_scaled[, numeric_cols] <- scale(test_scaled[, numeric_cols])

1. Árbol de decisión

Se utilizó un árbol de decisión como uno de los métodos principales de clasificación. Esta técnica es útil porque permite generar reglas claras de predicción a partir de las variables, facilitando la interpretación de los resultados. Se entrenó el modelo y se generó una matriz de confusión para evaluar su rendimiento.

modelo_arbol <- rpart(Satisfaction ~ ., data = train, method = "class")
rpart.plot(modelo_arbol)

pred_arbol <- predict(modelo_arbol, test, type = "class")
confusionMatrix(pred_arbol, test$Satisfaction)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4
##          1  0  0  0  0
##          2  0  0  0  0
##          3 38 37 69 57
##          4 44 53 68 72
## 
## Overall Statistics
##                                           
##                Accuracy : 0.3219          
##                  95% CI : (0.2784, 0.3679)
##     No Information Rate : 0.3128          
##     P-Value [Acc > NIR] : 0.3571          
##                                           
##                   Kappa : 0.0273          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4
## Sensitivity            0.0000   0.0000   0.5036   0.5581
## Specificity            1.0000   1.0000   0.5615   0.4660
## Pos Pred Value            NaN      NaN   0.3433   0.3038
## Neg Pred Value         0.8128   0.7945   0.7131   0.7164
## Prevalence             0.1872   0.2055   0.3128   0.2945
## Detection Rate         0.0000   0.0000   0.1575   0.1644
## Detection Prevalence   0.0000   0.0000   0.4589   0.5411
## Balanced Accuracy      0.5000   0.5000   0.5326   0.5121

2. Máquinas de Soporte Vectorial (SVM)

Se entrenó un modelo de máquinas de soporte vectorial utilizando los datos escalados. Este método es útil para encontrar fronteras óptimas entre clases, especialmente cuando las relaciones entre variables no son lineales. Se generaron predicciones y se evaluó su rendimiento.

modelo_svm <- svm(Satisfaction ~ ., data = train_scaled)
pred_svm <- predict(modelo_svm, test_scaled)
confusionMatrix(pred_svm, test$Satisfaction)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4
##          1  1  0  1  2
##          2  2  1  0  1
##          3 44 48 84 79
##          4 35 41 52 47
## 
## Overall Statistics
##                                           
##                Accuracy : 0.3037          
##                  95% CI : (0.2609, 0.3491)
##     No Information Rate : 0.3128          
##     P-Value [Acc > NIR] : 0.6768          
##                                           
##                   Kappa : 4e-04           
##                                           
##  Mcnemar's Test P-Value : <2e-16          
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4
## Sensitivity          0.012195 0.011111   0.6131   0.3643
## Specificity          0.991573 0.991379   0.4319   0.5858
## Pos Pred Value       0.250000 0.250000   0.3294   0.2686
## Neg Pred Value       0.813364 0.794931   0.7104   0.6882
## Prevalence           0.187215 0.205479   0.3128   0.2945
## Detection Rate       0.002283 0.002283   0.1918   0.1073
## Detection Prevalence 0.009132 0.009132   0.5822   0.3995
## Balanced Accuracy    0.501884 0.501245   0.5225   0.4751

3. Redes Neuronales Artificiales (ANN)

Se implementó una red neuronal artificial para modelar patrones complejos entre las variables y la satisfacción de los empleados. Se utilizaron los datos escalados y se configuró la red con un número limitado de nodos ocultos para evitar sobreajuste. Luego, se generaron las predicciones y se analizó su precisión.

modelo_ann <- nnet(Satisfaction ~ ., data = train_scaled, size = 5, maxit = 500, trace = FALSE)
pred_ann <- predict(modelo_ann, test_scaled, type = "class")
pred_ann <- factor(pred_ann, levels = levels(test$Satisfaction))
confusionMatrix(pred_ann, test$Satisfaction)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4
##          1  3  6  4  2
##          2 24 17 34 35
##          3 26 22 50 44
##          4 29 45 49 48
## 
## Overall Statistics
##                                           
##                Accuracy : 0.2694          
##                  95% CI : (0.2284, 0.3136)
##     No Information Rate : 0.3128          
##     P-Value [Acc > NIR] : 0.9789          
##                                           
##                   Kappa : -0.0069         
##                                           
##  Mcnemar's Test P-Value : 5.741e-10       
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4
## Sensitivity          0.036585  0.18889   0.3650   0.3721
## Specificity          0.966292  0.73276   0.6944   0.6019
## Pos Pred Value       0.200000  0.15455   0.3521   0.2807
## Neg Pred Value       0.813239  0.77744   0.7061   0.6966
## Prevalence           0.187215  0.20548   0.3128   0.2945
## Detection Rate       0.006849  0.03881   0.1142   0.1096
## Detection Prevalence 0.034247  0.25114   0.3242   0.3904
## Balanced Accuracy    0.501439  0.46082   0.5297   0.4870

II. Clasificación No Supervisada: Size of the Economy

Se agrupan los países según variables económicas como población, ingreso nacional, paridad del poder adquisitivo y PIB.

Carga y preprocesamiento

Para analizar la estructura económica de los países, se cargaron los datos disponibles y se eliminaron los registros con valores faltantes. Luego se estandarizaron las variables numéricas para asegurar que todas tuvieran la misma influencia en los algoritmos de agrupamiento.

economy <- read.csv("Size of the economy.csv")
economy <- na.omit(economy)
datos_cluster <- scale(economy[, 2:7])
rownames(datos_cluster) <- economy$Country

1. Agrupamiento jerárquico

El agrupamiento jerárquico se utilizó para observar cómo se relacionan los países entre sí en base a variables como población, ingreso y producto interno bruto. Este método genera un dendrograma que permite visualizar cómo se van formando los grupos paso a paso.

d <- dist(datos_cluster)
hc <- hclust(d, method = "ward.D2")
# Dendrograma sin etiquetas (más limpio)
plot(hc, labels = FALSE, main = "Dendrograma - Agrupamiento Jerárquico")
rect.hclust(hc, k = 4, border = 2:5)

# Mostrar los países agrupados por cada clúster
groups <- cutree(hc, k = 4)
split(names(groups), groups)
## $`1`
##   [1] "Afghanistan"                    "Albania"                       
##   [3] "Algeria"                        "Angola"                        
##   [5] "Antigua and Barbuda"            "Argentina"                     
##   [7] "Armenia"                        "Aruba"                         
##   [9] "Australia"                      "Austria"                       
##  [11] "Azerbaijan"                     "Bahamas, The"                  
##  [13] "Bahrain"                        "Bangladesh"                    
##  [15] "Barbados"                       "Belarus"                       
##  [17] "Belgium"                        "Belize"                        
##  [19] "Benin"                          "Bermuda"                       
##  [21] "Bhutan"                         "Bolivia"                       
##  [23] "Bosnia and Herzegovina"         "Botswana"                      
##  [25] "Brazil"                         "Brunei Darussalam"             
##  [27] "Bulgaria"                       "Burkina Faso"                  
##  [29] "Burundi"                        "Cambodia"                      
##  [31] "Cameroon"                       "Canada"                        
##  [33] "Cabo Verde"                     "Cayman Islands"                
##  [35] "Central African Republic"       "Chad"                          
##  [37] "Chile"                          "Hong Kong SAR, China"          
##  [39] "Colombia"                       "Comoros"                       
##  [41] "Congo, Dem. Rep."               "Congo, Rep."                   
##  [43] "Costa Rica"                     "Cote d'Ivoire"                 
##  [45] "Croatia"                        "Curacao"                       
##  [47] "Cyprus"                         "Czechia"                       
##  [49] "Denmark"                        "Djibouti"                      
##  [51] "Dominica"                       "Dominican Republic"            
##  [53] "Ecuador"                        "Egypt, Arab Rep."              
##  [55] "El Salvador"                    "Equatorial Guinea"             
##  [57] "Estonia"                        "Eswatini"                      
##  [59] "Ethiopia"                       "Fiji"                          
##  [61] "Finland"                        "France"                        
##  [63] "Gabon"                          "Gambia, The"                   
##  [65] "Georgia"                        "Germany"                       
##  [67] "Ghana"                          "Greece"                        
##  [69] "Grenada"                        "Guatemala"                     
##  [71] "Guinea"                         "Guinea-Bissau"                 
##  [73] "Guyana"                         "Haiti"                         
##  [75] "Honduras"                       "Hungary"                       
##  [77] "Iceland"                        "India"                         
##  [79] "Indonesia"                      "Iran, Islamic Rep."            
##  [81] "Iraq"                           "Ireland"                       
##  [83] "Israel"                         "Italy"                         
##  [85] "Jamaica"                        "Japan"                         
##  [87] "Jordan"                         "Kazakhstan"                    
##  [89] "Kenya"                          "Kiribati"                      
##  [91] "Korea, Rep."                    "Kuwait"                        
##  [93] "Kyrgyz Republic"                "Lao PDR"                       
##  [95] "Latvia"                         "Lebanon"                       
##  [97] "Lesotho"                        "Liberia"                       
##  [99] "Libya"                          "Lithuania"                     
## [101] "Luxembourg"                     "Madagascar"                    
## [103] "Malawi"                         "Malaysia"                      
## [105] "Maldives"                       "Mali"                          
## [107] "Malta"                          "Marshall Islands"              
## [109] "Mauritania"                     "Mauritius"                     
## [111] "Mexico"                         "Micronesia, Fed. Sts."         
## [113] "Moldova"                        "Mongolia"                      
## [115] "Montenegro"                     "Morocco"                       
## [117] "Mozambique"                     "Myanmar"                       
## [119] "Namibia"                        "Nauru"                         
## [121] "Nepal"                          "Netherlands"                   
## [123] "New Zealand"                    "Nicaragua"                     
## [125] "Niger"                          "Nigeria"                       
## [127] "North Macedonia"                "Norway"                        
## [129] "Oman"                           "Pakistan"                      
## [131] "Palau"                          "Panama"                        
## [133] "Papua New Guinea"               "Paraguay"                      
## [135] "Peru"                           "Philippines"                   
## [137] "Poland"                         "Portugal"                      
## [139] "Puerto Rico"                    "Qatar"                         
## [141] "Romania"                        "Russian Federation"            
## [143] "Rwanda"                         "Samoa"                         
## [145] "San Marino"                     "Sao Tome and Principe"         
## [147] "Saudi Arabia"                   "Senegal"                       
## [149] "Serbia"                         "Seychelles"                    
## [151] "Sierra Leone"                   "Singapore"                     
## [153] "Slovak Republic"                "Slovenia"                      
## [155] "Solomon Islands"                "Somalia"                       
## [157] "South Africa"                   "Spain"                         
## [159] "Sri Lanka"                      "St. Kitts and Nevis"           
## [161] "St. Lucia"                      "St. Vincent and the Grenadines"
## [163] "Sudan"                          "Suriname"                      
## [165] "Sweden"                         "Switzerland"                   
## [167] "Tajikistan"                     "Tanzania"                      
## [169] "Thailand"                       "Timor-Leste"                   
## [171] "Togo"                           "Tonga"                         
## [173] "Trinidad and Tobago"            "Tunisia"                       
## [175] "Turkiye"                        "Turkmenistan"                  
## [177] "Turks and Caicos Islands"       "Tuvalu"                        
## [179] "Uganda"                         "Ukraine"                       
## [181] "United Arab Emirates"           "United Kingdom"                
## [183] "Uruguay"                        "Uzbekistan"                    
## [185] "Vanuatu"                        "Vietnam"                       
## [187] "West Bank and Gaza"             "Zambia"                        
## [189] "Zimbabwe"                       "Latin America & Caribbean"     
## [191] "Middle East & North Africa"     "South Asia"                    
## [193] "Sub-Saharan Africa"             "Low income"                    
## 
## $`2`
## [1] "China"                 "United States"         "East Asia & Pacific"  
## [4] "Europe & Central Asia" "North America"         "Lower middle income"  
## [7] "Upper middle income"   "High income"          
## 
## $`3`
## [1] "Macao SAR, China"
## 
## $`4`
## [1] "World"

Se eliminaron las etiquetas del dendrograma para mejorar la visualización en el reporte. La tabla siguiente muestra qué países forman parte de cada uno de los 4 grupos definidos.

2. Método de Particionamiento (K-means)

Como segunda técnica de agrupamiento, se aplicó el método de particionamiento K-means para dividir los países en un número específico de clústeres. Este método es útil porque asigna cada país a un grupo específico y permite una clasificación más directa.

library(factoextra)
set.seed(123)
kmeans_result <- kmeans(datos_cluster, centers = 4, nstart = 25)
fviz_cluster(list(data = datos_cluster, cluster = kmeans_result$cluster))

Esta visualización representa los clústeres formados a partir del agrupamiento jerárquico, proyectados en dos dimensiones mediante un análisis de componentes principales (PCA). Aunque no muestra con exactitud todas las distancias entre países, permite observar cómo los grupos tienden a agruparse según sus características económicas. La dispersión desigual también sugiere que ciertos países como “World” o regiones específicas podrían actuar como valores atípicos.

Conclusiones

En este análisis se aplicaron varias técnicas de clasificación tanto supervisada como no supervisada para entender patrones en datos de empleados y economías globales.

Clasificación Supervisada:
Los tres modelos utilizados (árboles de decisión, SVM y redes neuronales) presentaron desafíos para clasificar correctamente la satisfacción de los empleados. Aunque los porcentajes de precisión fueron relativamente bajos en todos los casos, el árbol de decisión destacó por su capacidad de ser interpretado fácilmente. El modelo de SVM tuvo un desempeño ligeramente mejor en la detección de una de las clases principales. Las redes neuronales, a pesar de su potencial para captar patrones complejos, no lograron mejorar los resultados.

Clasificación No Supervisada:
Al agrupar países según sus características económicas, los métodos jerárquico y de particionamiento (K-means) lograron identificar patrones similares. El agrupamiento jerárquico permitió visualizar la estructura de relaciones entre países, mientras que K-means proporcionó una clasificación práctica y útil para análisis futuros. Ambos métodos resultaron coherentes y útiles para entender las diferencias entre economías.

En general, el análisis mostró que la elección del método debe adaptarse a los objetivos: claridad e interpretación cuando se requiere entender el modelo (árboles), y precisión cuando se busca mejorar la clasificación (SVM o ANN). Para análisis exploratorios como el de países, ambos métodos de agrupamiento ofrecieron resultados consistentes y valiosos.

Hallazgos Detallados

I. Clasificación Supervisada – Satisfacción de Empleados (Employee-IBM)

Se aplicaron tres modelos distintos para predecir el nivel de satisfacción de los empleados, clasificado del 1 al 4.

1. Árbol de Decisión

Este modelo fue útil para visualizar reglas claras sobre cómo ciertas variables predicen la satisfacción. Los resultados mostraron una precisión general de aproximadamente 32%. Las clases 3 y 4 fueron las más detectadas, mientras que las clases 1 y 2 no lograron ser clasificadas correctamente. Esto puede deberse a que hay menos ejemplos de esas clases o a que las variables utilizadas no son suficientes para diferenciarlas bien.

2. Máquinas de Soporte Vectorial (SVM)

El modelo de SVM mostró un desempeño muy similar al del árbol de decisión, con una precisión cercana al 30%. Destacó ligeramente en la clasificación de la clase 3. Las clases 1 y 2 también fueron difíciles de detectar para este modelo. La ventaja de SVM es que crea límites óptimos entre las clases, pero también requiere un buen balance en los datos, lo cual no se cumplió del todo en este caso.

3. Redes Neuronales Artificiales (ANN)

Las redes neuronales fueron el modelo con menor precisión (~27%). Aunque pueden aprender patrones complejos, en este caso no lograron generalizar bien. Esto puede deberse a la configuración del modelo, el número de iteraciones o la cantidad limitada de datos representativos para cada clase.

En general, ningún modelo tuvo un desempeño sobresaliente. La mayoría logró identificar parcialmente la clase 3, pero tuvieron muchas dificultades para detectar la clase 1 (muy baja sensibilidad). Esto sugiere que el conjunto de datos podría estar desbalanceado o que faltan variables más influyentes para explicar la satisfacción laboral.

II. Clasificación No Supervisada – Economías del Mundo

Se analizaron datos económicos de países aplicando dos métodos para agruparlos según similitudes.

1. Agrupamiento Jerárquico

2. K-means (Método de Particionamiento)

Ambos métodos revelaron una estructura clara en los datos. Por ejemplo, es probable que países con grandes poblaciones y altos ingresos formen un grupo, mientras que países pequeños con bajos ingresos pertenezcan a otro.

Conclusión General

El análisis demostró que los modelos de clasificación supervisada enfrentan retos cuando las clases están desbalanceadas o las variables no capturan bien las diferencias entre grupos. En cambio, los métodos no supervisados mostraron agrupaciones coherentes y útiles para entender patrones globales.

Relación con la retención de empleados

Aunque el análisis se centró en predecir el nivel de satisfacción, los resultados pueden ofrecer pistas sobre qué variables están relacionadas con una mayor o menor satisfacción laboral. Por ejemplo, variables como el ingreso mensual (MonthlyIncome), el balance entre vida personal y trabajo (WorkLifeBalance), o los años en la empresa (YearsAtCompany) fueron incluidas en los modelos y podrían estar asociadas con los niveles de satisfacción. Esto sugiere que mejorar factores como el salario, las condiciones laborales o las oportunidades de crecimiento podría ayudar a retener talento dentro de la organización.

Interpretación económica de los grupos

Los grupos formados por los métodos de agrupamiento reflejan cómo se estructura la economía global. Por ejemplo, es probable que países con alta población y grandes ingresos nacionales (como China, Estados Unidos o India) hayan quedado en un mismo clúster, mientras que países pequeños con bajo ingreso nacional y PIB pertenezcan a otros grupos. Esta clasificación ayuda a visualizar los bloques económicos del mundo y a entender cómo las condiciones económicas globales pueden impactar de forma diferente a cada grupo. Los países en clústeres similares podrían compartir desafíos comunes, como dependencia de importaciones, acceso a mercados o capacidad de inversión. Esto es útil para el análisis comparativo entre economías nacionales y la planificación de estrategias de desarrollo.