Prediksi 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.
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.
rm(list = ls())
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
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
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, ~
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
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
Dari grafik diatas kita mendapatkan insights sebagai berikut:
dan seterusnya…
Semoga bermanfaat.