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).
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])
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
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
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
Se agrupan los países según variables económicas como población, ingreso nacional, paridad del poder adquisitivo y PIB.
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
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.
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.
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.
Se aplicaron tres modelos distintos para predecir el nivel de satisfacción de los empleados, clasificado del 1 al 4.
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.
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.
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.
Se analizaron datos económicos de países aplicando dos métodos para agruparlos según similitudes.
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.
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.
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.
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.