Prediksi Active Resign Karyawan

Cara Cepat Analisis Active Resign Karyawan

Saya mendapatkan cara yang cepat untuk melakukan analisis Active Resign Karyawan dengan metode Machine Learning Exploratory Data Analysis (EDA) yaitu Correlation Funnel.

Penjelasan Awal

Pendekatan klasik EDA banyak digunakan pada analisa keluar masuk para pekerja pabrik. Namun para data scientist melakukan kajian yang ternyata bisa bermanfaat untuk memprediksi fitur-fitur mana yang secara signifikan mempengaruhi target (goal) yang ingin diprediksi dengan cara yang mudah dan cepat.

Bersihkan dulu memori pada komputer Anda

rm(list = ls())

Library yang digunakan

library(correlationfunnel)
## == Using correlationfunnel? ====================================================
## You might also be interested in applied data science training for business.
## </> Learn more at - www.business-science.io </>
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Benefit Menggunakan EDA

  • Identifying Key features - Anda mampu mengidentifikasi hanya pada fitur-fitur kunci.
  • Improves Feature Selection - Menggunakan analisa korelasi untuk menentukan tingkat korelasi dan probabilitas dari masing-masing prediktor serta kecepatan proses algoritma pemodelan Machine Learning.
  • Gets You To Business Insights Faster - Memahami bagaimana hubungan antar fitur saling mempengaruhi target yang ingin dianalisia, sehingga akan memudahkan Anda untuk mengembangkan “kisah” yang saling berkaitan dari setiap data-data tersebut untuk mendapatkan BUSINESS INSIGHT.
setwd("D:/2022/talentlytica/breakfast")
predict_to <- read.csv("databank_turnover.csv",header=TRUE,sep=";")
colnames(predict_to)
##  [1] "Usia"                         "Jenis.Kelamin"               
##  [3] "Education"                    "Marriage.Status"             
##  [5] "Child"                        "Number.of.Previous.Job"      
##  [7] "Pinjaman"                     "Grade"                       
##  [9] "Direktorat"                   "Year.of.Service"             
## [11] "Salary.Positioning._Internal" "Promosi"                     
## [13] "Salary._Compared.to.Market"   "Status.Karyawan"

Target: (status.karyawan): Active & Resign

Terdapat 12 variabel/fitur yang ingin kita analisa menggunaka model EDA: Jenis kelamin, Education, Child, Salary.Positioning_Internal, Marriage.Status, Usia, Year.of.Service, Direktorat, Grade, Pinjaman, Salary_Compared.to.Market, Number.of.Previous.Job, Status.Karyawan

head(predict_to,5)
##   Usia Jenis.Kelamin         Education Marriage.Status Child
## 1   53        Female                D3         Married     3
## 2   50        Female                D3   Widow/Widower     1
## 3   53        Female SMA dan setingkat         Married     1
## 4   53        Female                D3         Married     3
## 5   55          Male                D3         Married     1
##   Number.of.Previous.Job Pinjaman    Grade   Direktorat Year.of.Service
## 1  Tidak Teridentifikasi    Tidak Grade 09 Direktorat 1              28
## 2  Tidak Teridentifikasi    Tidak Grade 08 Direktorat 6              28
## 3                      1    Tidak Grade 06 Direktorat 1              27
## 4  Tidak Teridentifikasi    Tidak Grade 08 Direktorat 1              27
## 5  Tidak Teridentifikasi    Tidak Grade 09 Direktorat 1              27
##   Salary.Positioning._Internal Promosi Salary._Compared.to.Market
## 1                            C       2                     17.756
## 2                            B      NA                     11.855
## 3                            C      NA                     20.529
## 4                            B      NA                     13.124
## 5                            A       1                     10.564
##   Status.Karyawan
## 1          Resign
## 2          Resign
## 3          Resign
## 4          Resign
## 5          Resign

Tahap 1 - Siapkan Data sebagai Fitur Biner (Binary Features)

  • Kita harus merubah set data menjadi data biner baik untuk Numerikal maupun Kategorikal.
  • Kemudian seluruh Kategorikal data tersebut di encode untuk menghasilkan kategori frekuensi yang rendah hingga tinggi.
churn_tbl <- predict_to %>%
  select(-Promosi) %>%
    binarize(n_bins = 4, thresh_infreq = 0.01)

churn_tbl %>% glimpse()
## Rows: 10,918
## Columns: 59
## $ `Usia__-Inf_29`                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Usia__29_34                                         <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Usia__34_42                                         <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Usia__42_Inf                                        <dbl> 1, 1, 1, 1, 1, 1, ~
## $ Jenis.Kelamin__Female                               <dbl> 1, 1, 1, 1, 0, 0, ~
## $ Jenis.Kelamin__Male                                 <dbl> 0, 0, 0, 0, 1, 1, ~
## $ Education__D3                                       <dbl> 1, 1, 0, 1, 1, 0, ~
## $ Education__S1                                       <dbl> 0, 0, 0, 0, 0, 1, ~
## $ Education__S2                                       <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Education__SMA_dan_setingkat                        <dbl> 0, 0, 1, 0, 0, 0, ~
## $ `Education__-OTHER`                                 <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Marriage.Status__Married                            <dbl> 1, 0, 1, 1, 1, 0, ~
## $ Marriage.Status__Single                             <dbl> 0, 0, 0, 0, 0, 1, ~
## $ `Marriage.Status__Widow/Widower`                    <dbl> 0, 1, 0, 0, 0, 0, ~
## $ `Child__-Inf_1`                                     <dbl> 0, 1, 1, 0, 1, 1, ~
## $ Child__1_2                                          <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Child__2_Inf                                        <dbl> 1, 0, 0, 1, 0, 0, ~
## $ Number.of.Previous.Job__0                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Number.of.Previous.Job__1                           <dbl> 0, 0, 1, 0, 0, 0, ~
## $ Number.of.Previous.Job__2                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Number.of.Previous.Job__3                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Number.of.Previous.Job__4                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Number.of.Previous.Job__5                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Number.of.Previous.Job__Tidak_Teridentifikasi       <dbl> 1, 1, 0, 1, 1, 1, ~
## $ `Number.of.Previous.Job__-OTHER`                    <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Pinjaman__Ada                                       <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Pinjaman__Tidak                                     <dbl> 1, 1, 1, 1, 1, 1, ~
## $ Grade__Grade_04                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Grade__Grade_05                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Grade__Grade_06                                     <dbl> 0, 0, 1, 0, 0, 0, ~
## $ Grade__Grade_08                                     <dbl> 0, 1, 0, 1, 0, 0, ~
## $ Grade__Grade_09                                     <dbl> 1, 0, 0, 0, 1, 0, ~
## $ Grade__Grade_11                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Grade__Grade_13                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Grade__Grade_18                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Grade__Grade_19                                     <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Grade__P4                                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ `Grade__-OTHER`                                     <dbl> 0, 0, 0, 0, 0, 1, ~
## $ Direktorat__Direktorat_1                            <dbl> 1, 0, 1, 1, 1, 0, ~
## $ Direktorat__Direktorat_2                            <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Direktorat__Direktorat_3                            <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Direktorat__Direktorat_4                            <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Direktorat__Direktorat_5                            <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Direktorat__Direktorat_6                            <dbl> 0, 1, 0, 0, 0, 0, ~
## $ Direktorat__Direktorat_7                            <dbl> 0, 0, 0, 0, 0, 1, ~
## $ Direktorat__Direktorat_8                            <dbl> 0, 0, 0, 0, 0, 0, ~
## $ `Year.of.Service__-Inf_2`                           <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Year.of.Service__2_5                                <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Year.of.Service__5_12                               <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Year.of.Service__12_Inf                             <dbl> 1, 1, 1, 1, 1, 1, ~
## $ Salary.Positioning._Internal__A                     <dbl> 0, 0, 0, 0, 1, 0, ~
## $ Salary.Positioning._Internal__B                     <dbl> 0, 1, 0, 1, 0, 1, ~
## $ Salary.Positioning._Internal__No_Salary_Positioning <dbl> 0, 0, 0, 0, 0, 0, ~
## $ `Salary.Positioning._Internal__-OTHER`              <dbl> 1, 0, 1, 0, 0, 0, ~
## $ `Salary._Compared.to.Market__#VALUE!`               <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Salary._Compared.to.Market__0.9694                  <dbl> 0, 0, 0, 0, 0, 0, ~
## $ `Salary._Compared.to.Market__-OTHER`                <dbl> 1, 1, 1, 1, 1, 1, ~
## $ Status.Karyawan__Active                             <dbl> 0, 0, 0, 0, 0, 0, ~
## $ Status.Karyawan__Resign                             <dbl> 1, 1, 1, 1, 1, 1, ~

Tahap 2 - Korelasikan terhadap target

Selanjutnya, kita korelasikan fitur-fitur biner tersebut terhadap target (Status.Karyawan).

customer_churn_corr_tbl <- churn_tbl %>%
  correlate(Status.Karyawan__Resign)

customer_churn_corr_tbl
## # A tibble: 59 x 3
##    feature                    bin                   correlation
##    <fct>                      <chr>                       <dbl>
##  1 Status.Karyawan            Active                     -1    
##  2 Status.Karyawan            Resign                      1    
##  3 Number.of.Previous.Job     Tidak_Teridentifikasi       0.487
##  4 Number.of.Previous.Job     0                          -0.406
##  5 Salary._Compared.to.Market #VALUE!                     0.314
##  6 Salary._Compared.to.Market -OTHER                     -0.270
##  7 Pinjaman                   Tidak                       0.230
##  8 Pinjaman                   Ada                        -0.230
##  9 Grade                      Grade_05                    0.228
## 10 Direktorat                 Direktorat_7                0.222
## # ... with 49 more rows
## # i Use `print(n = ...)` to see more rows

Tahap - Plot the Correlation Funnel

Akhirnya, kita visualisasikan hasil korelasinya.

customer_churn_corr_tbl %>%
  plot_correlation_funnel()
## Warning: ggrepel: 23 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

INSIGHTS

Dari grafik diatas kita mendapatkan insights sebagai berikut:

  • Karyawan yang Aktif (Stay), berdasarkan fitur Number.of.Previous.Job = 0 memiliki korelasi 40,6%
  • Karyawan yang memiliki Pinjaman relatif akan stay dibandingkan dengan karyawan yang memiliki Pinjaman
  • Rata-rata Karyawan yang Resign kebanyakan ada pada Grade 5
  • Rata-rata Karyawan yang Resign kebanyakan ada pada Direktorat 7

dan seterusnya…

Semoga bermanfaat.