Comparing different ML models

HR Analytics: Machine Learning to predict Attrition Rate

Abstracto

Au long de cette analyse, j’ai analysé l’ensemble de données IBM Employee Attrition pour explorer les principales causes de décrochage dans une entreprise. Premièrement, au moyen d’une analyse exploratoire, j’ai verifié que les données soient propres.

EDA

À cette stade, j’ai réalisé que les données avaient un problème de déséquilibre entre les classes de la variable dépendante, pour résoudre ce problème, j’ai élargi l’échantillon de la classe inférieure.

Technique de suréchantillonnage

Une fois les données prêtes, j’ai commencé à modéliser le decision tree, bagging, random forest, gradient boosting machine (GBM) and extreme gradient boosting machine (XGBM). Pour chaque technique, mon flux de travail a été le suivant :

  1. Réglage des hyperparamètres de chaque modèle, avec la fonction train du paquet « caret », en utilisant une boucle lorsque la fonction ne permet pas de contrôler certains paramètres et en utilisant le calcul parallèle sur trois cœurs de processeurs.
library(doParallel)
library(tictoc)
registerDoParallel(makeCluster(3) -> cpu) 

nodesize_ <- c()
sampsize_ <- c()
Accuracy <- c()
Kappa <- c()
Auc <- c()

tic()
for (nodesize in c(20,40,60,80,100)) {
    for (sampsize in c(200,500,800,1200,1570)) {
bg <- train(data=upTrain,
                factor(attrition)~.,
                method="rf", trControl= control,
                #fijar mtry for bagging
                tuneGrid= expand.grid(mtry=c(51)), 
                ntree = 5000, 
                sampsize = sampsize, 
                nodesize = nodesize,
                #muestras con reemplazamiento
                replace = TRUE, 
                linout = FALSE) 

confusionMatrix <- confusionMatrix(
    bg$pred$pred, bg$pred$obs)

roc <- roc(response = bg$pred$obs,
                     predictor = bg$pred$Yes)

Acc_i <- confusionMatrix$overall[1]
Accuracy <- append(Accuracy, Acc_i)

K_i <- confusionMatrix$overall[2]
Kappa <- append(Kappa, K_i)

Auc_i <- roc$auc
Auc <- append(Auc, Auc_i)

nodesize_ <- append(nodesize_, nodesize)
sampsize_ <- append(sampsize_, sampsize)

dput("---------------")
dput(paste0("With nodesize= ", nodesize))
dput(paste0("With sampsize= ", sampsize))
dput(paste0("Accuracy: ", 
     round(confusionMatrix$overall[1], 3)))
print(roc$auc)
    }
}
toc()
stopCluster(cpu)

# Aggregate Metrics ----
bagging_results = cbind(
    data.frame(Accuracy, Kappa, Auc, 
               nodesize = nodesize_, sampsize=sampsize_))

#save(bagging_results, file="bagging_results.RData")

# Clear cache ----
rm(Acc_i, K_i, Auc_i, nodesize, roc, sampsize)
rm(Accuracy, Auc, Kappa, nodesize_, sampsize_)
  1. Comprendre le moment de l’ajustement pour les différents paramètres ajustés au moyen de graphiques.

    • Aussi pour l’ensachage et la forêt aléatoire, j’ai visualisé l’erreur de sortir du sac, pour comprendre la marche à mesure que les interactions des arbres augmentaient. Grâce à ce graphique, j’ai pu réduire la complexité de mon modèle final.

quelques visualisations du projet

Après avoir choisi les meilleurs paramètres, j’ai ajusté le modèle final, visualisant la matrice de confusion et les variables les plus influentes pour chaque modèle.

Variable Importance

Une fois les techniques d’arborescence ajustées, j’ai de nouveau ajusté les modèles avec validation croisée répétée cette fois, pour comparer le taux d’échec et la area sous la courbe ROC, à travers une boîte et un graphique moustache comprenant comme modèle de référence une régression logistique.

Une fois que j’ai trouvé le modèle gagnant, j’ai décidé de créer un graphique à barres empilées pour obtenir les variables les plus influentes selon les différents modèles. À partir de ces éléments, j’ai créé un nouvel ensemble de train/test, qui a ensuite été utilisé pour mettre en œuvre d’autres techniques d’apprentissage machine :

  • Support Vector Machines, con kernel:
    • Lineal
    • Polynomial
    • Radial
  • Bagging del SVM Lineal
  • Boosting
  • Stacking de:
    • Gradient Boosting Machine
    • SVM Radial
    • XGBoost

Comparing models

Alessio Crisafulli Carpani
Étudiant des cycles supérieurs en Sciences Statistiques

Nous avons besoin de la puissance des données et du machine learning pour répondre efficacement aux besoins d’aujourd’hui

Suivant
Précédent