Dalam dunia bisnis, tingkat attrition atau perputaran karyawan yang tinggi dapat memiliki dampak signifikan bagi perusahaan, seperti meningkatnya biaya rekrutmen dan pelatihan, penurunan produktivitas, serta berkurangnya semangat kerja karyawan. Oleh karena itu, penting bagi perusahaan untuk memahami faktor-faktor yang mendasari attrition dan mengambil langkah-langkah proaktif untuk mengatasinya.
Tujuan dari laporan ini adalah melakukan Analisis Data Eksploratori (EDA) pada dataset HR Analytics Employee Attrition & Performance di IBM. IBM adalah perusahaan teknologi multinasional yang berkantor pusat di Armonk, New York, Amerika Serikat. Dengan melakukan analisis ini, tujuan saya adalah untuk memperoleh wawasan tentang faktor-faktor yang mempengaruhi attrition dan performa karyawan dalam organisasi. Melalui pemeriksaan berbagai fitur dan analisis statistik, saya bertujuan untuk mengidentifikasi pola, tren, dan area potensial yang dapat ditingkatkan guna membantu perusahaan dalam memahami dan mengelola attrition dan performa karyawan.
Penggunaan neural network dan deep learning dalam laporan ini memiliki beberapa pertimbangan. Kedua metode ini sangat cocok digunakan dalam analisis HR Analytics karena kemampuan mereka dalam memodelkan hubungan kompleks antara berbagai fitur dan variabel. Neural network dan deep learning mampu menangkap pola yang lebih kompleks dan non-linear dalam data, sehingga memungkinkan pengenalan pola yang lebih mendalam dan prediksi yang lebih akurat. Dalam konteks analisis attrition, penggunaan neural network dan deep learning dapat membantu mengidentifikasi faktor-faktor yang berkontribusi terhadap attrition karyawan dan memprediksi tingkat attrition di masa depan.
<- read.csv("data_input/HR-Employee-Attrition.csv")
data glimpse(data)
#> Rows: 1,470
#> Columns: 35
#> $ Age <int> 41, 49, 37, 33, 27, 32, 59, 30, 38, 36, 35, 2…
#> $ Attrition <chr> "Yes", "No", "Yes", "No", "No", "No", "No", "…
#> $ BusinessTravel <chr> "Travel_Rarely", "Travel_Frequently", "Travel…
#> $ DailyRate <int> 1102, 279, 1373, 1392, 591, 1005, 1324, 1358,…
#> $ Department <chr> "Sales", "Research & Development", "Research …
#> $ DistanceFromHome <int> 1, 8, 2, 3, 2, 2, 3, 24, 23, 27, 16, 15, 26, …
#> $ Education <int> 2, 1, 2, 4, 1, 2, 3, 1, 3, 3, 3, 2, 1, 2, 3, …
#> $ EducationField <chr> "Life Sciences", "Life Sciences", "Other", "L…
#> $ EmployeeCount <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
#> $ EmployeeNumber <int> 1, 2, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16,…
#> $ EnvironmentSatisfaction <int> 2, 3, 4, 4, 1, 4, 3, 4, 4, 3, 1, 4, 1, 2, 3, …
#> $ Gender <chr> "Female", "Male", "Male", "Female", "Male", "…
#> $ HourlyRate <int> 94, 61, 92, 56, 40, 79, 81, 67, 44, 94, 84, 4…
#> $ JobInvolvement <int> 3, 2, 2, 3, 3, 3, 4, 3, 2, 3, 4, 2, 3, 3, 2, …
#> $ JobLevel <int> 2, 2, 1, 1, 1, 1, 1, 1, 3, 2, 1, 2, 1, 1, 1, …
#> $ JobRole <chr> "Sales Executive", "Research Scientist", "Lab…
#> $ JobSatisfaction <int> 4, 2, 3, 3, 2, 4, 1, 3, 3, 3, 2, 3, 3, 4, 3, …
#> $ MaritalStatus <chr> "Single", "Married", "Single", "Married", "Ma…
#> $ MonthlyIncome <int> 5993, 5130, 2090, 2909, 3468, 3068, 2670, 269…
#> $ MonthlyRate <int> 19479, 24907, 2396, 23159, 16632, 11864, 9964…
#> $ NumCompaniesWorked <int> 8, 1, 6, 1, 9, 0, 4, 1, 0, 6, 0, 0, 1, 0, 5, …
#> $ Over18 <chr> "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "Y", …
#> $ OverTime <chr> "Yes", "No", "Yes", "Yes", "No", "No", "Yes",…
#> $ PercentSalaryHike <int> 11, 23, 15, 11, 12, 13, 20, 22, 21, 13, 13, 1…
#> $ PerformanceRating <int> 3, 4, 3, 3, 3, 3, 4, 4, 4, 3, 3, 3, 3, 3, 3, …
#> $ RelationshipSatisfaction <int> 1, 4, 2, 3, 4, 3, 1, 2, 2, 2, 3, 4, 4, 3, 2, …
#> $ StandardHours <int> 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 8…
#> $ StockOptionLevel <int> 0, 1, 0, 0, 1, 0, 3, 1, 0, 2, 1, 0, 1, 1, 0, …
#> $ TotalWorkingYears <int> 8, 10, 7, 8, 6, 8, 12, 1, 10, 17, 6, 10, 5, 3…
#> $ TrainingTimesLastYear <int> 0, 3, 3, 3, 3, 2, 3, 2, 2, 3, 5, 3, 1, 2, 4, …
#> $ WorkLifeBalance <int> 1, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 2, 3, 3, …
#> $ YearsAtCompany <int> 6, 10, 0, 8, 2, 7, 1, 1, 9, 7, 5, 9, 5, 2, 4,…
#> $ YearsInCurrentRole <int> 4, 7, 0, 7, 2, 7, 0, 0, 7, 7, 4, 5, 2, 2, 2, …
#> $ YearsSinceLastPromotion <int> 0, 1, 0, 3, 2, 3, 0, 0, 1, 7, 0, 0, 4, 1, 0, …
#> $ YearsWithCurrManager <int> 5, 7, 0, 0, 2, 6, 0, 0, 8, 7, 3, 8, 3, 2, 3, …
💡 Dataset kali ini memiliki 1,470 rows dengan total Features/columns 35.
Berikut adalah metadata dari dataset HR Analytics Employee Attrition:
summary(data)
#> Age Attrition BusinessTravel DailyRate
#> Min. :18.00 Length:1470 Length:1470 Min. : 102.0
#> 1st Qu.:30.00 Class :character Class :character 1st Qu.: 465.0
#> Median :36.00 Mode :character Mode :character Median : 802.0
#> Mean :36.92 Mean : 802.5
#> 3rd Qu.:43.00 3rd Qu.:1157.0
#> Max. :60.00 Max. :1499.0
#> Department DistanceFromHome Education EducationField
#> Length:1470 Min. : 1.000 Min. :1.000 Length:1470
#> Class :character 1st Qu.: 2.000 1st Qu.:2.000 Class :character
#> Mode :character Median : 7.000 Median :3.000 Mode :character
#> Mean : 9.193 Mean :2.913
#> 3rd Qu.:14.000 3rd Qu.:4.000
#> Max. :29.000 Max. :5.000
#> EmployeeCount EmployeeNumber EnvironmentSatisfaction Gender
#> Min. :1 Min. : 1.0 Min. :1.000 Length:1470
#> 1st Qu.:1 1st Qu.: 491.2 1st Qu.:2.000 Class :character
#> Median :1 Median :1020.5 Median :3.000 Mode :character
#> Mean :1 Mean :1024.9 Mean :2.722
#> 3rd Qu.:1 3rd Qu.:1555.8 3rd Qu.:4.000
#> Max. :1 Max. :2068.0 Max. :4.000
#> HourlyRate JobInvolvement JobLevel JobRole
#> Min. : 30.00 Min. :1.00 Min. :1.000 Length:1470
#> 1st Qu.: 48.00 1st Qu.:2.00 1st Qu.:1.000 Class :character
#> Median : 66.00 Median :3.00 Median :2.000 Mode :character
#> Mean : 65.89 Mean :2.73 Mean :2.064
#> 3rd Qu.: 83.75 3rd Qu.:3.00 3rd Qu.:3.000
#> Max. :100.00 Max. :4.00 Max. :5.000
#> JobSatisfaction MaritalStatus MonthlyIncome MonthlyRate
#> Min. :1.000 Length:1470 Min. : 1009 Min. : 2094
#> 1st Qu.:2.000 Class :character 1st Qu.: 2911 1st Qu.: 8047
#> Median :3.000 Mode :character Median : 4919 Median :14236
#> Mean :2.729 Mean : 6503 Mean :14313
#> 3rd Qu.:4.000 3rd Qu.: 8379 3rd Qu.:20462
#> Max. :4.000 Max. :19999 Max. :26999
#> NumCompaniesWorked Over18 OverTime PercentSalaryHike
#> Min. :0.000 Length:1470 Length:1470 Min. :11.00
#> 1st Qu.:1.000 Class :character Class :character 1st Qu.:12.00
#> Median :2.000 Mode :character Mode :character Median :14.00
#> Mean :2.693 Mean :15.21
#> 3rd Qu.:4.000 3rd Qu.:18.00
#> Max. :9.000 Max. :25.00
#> PerformanceRating RelationshipSatisfaction StandardHours StockOptionLevel
#> Min. :3.000 Min. :1.000 Min. :80 Min. :0.0000
#> 1st Qu.:3.000 1st Qu.:2.000 1st Qu.:80 1st Qu.:0.0000
#> Median :3.000 Median :3.000 Median :80 Median :1.0000
#> Mean :3.154 Mean :2.712 Mean :80 Mean :0.7939
#> 3rd Qu.:3.000 3rd Qu.:4.000 3rd Qu.:80 3rd Qu.:1.0000
#> Max. :4.000 Max. :4.000 Max. :80 Max. :3.0000
#> TotalWorkingYears TrainingTimesLastYear WorkLifeBalance YearsAtCompany
#> Min. : 0.00 Min. :0.000 Min. :1.000 Min. : 0.000
#> 1st Qu.: 6.00 1st Qu.:2.000 1st Qu.:2.000 1st Qu.: 3.000
#> Median :10.00 Median :3.000 Median :3.000 Median : 5.000
#> Mean :11.28 Mean :2.799 Mean :2.761 Mean : 7.008
#> 3rd Qu.:15.00 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.: 9.000
#> Max. :40.00 Max. :6.000 Max. :4.000 Max. :40.000
#> YearsInCurrentRole YearsSinceLastPromotion YearsWithCurrManager
#> Min. : 0.000 Min. : 0.000 Min. : 0.000
#> 1st Qu.: 2.000 1st Qu.: 0.000 1st Qu.: 2.000
#> Median : 3.000 Median : 1.000 Median : 3.000
#> Mean : 4.229 Mean : 2.188 Mean : 4.123
#> 3rd Qu.: 7.000 3rd Qu.: 3.000 3rd Qu.: 7.000
#> Max. :18.000 Max. :15.000 Max. :17.000
💡 Insight :
Usia Minimum adalah 18, yang menunjukkan bahwa semua karyawan adalah orang dewasa. Oleh karena itu, tidak diperlukan atribut “Over18” dalam analisis kita. Insight ini menyarankan bahwa atribut “Over18” tidak memberikan informasi tambahan yang berguna karena semua karyawan sudah dewasa.
Nilai Standar Deviasi dari atribut “EmployeeCount” dan “StandardHours” adalah 0.00, yang menunjukkan bahwa semua nilai dalam atribut ini adalah sama. Insight ini mengindikasikan bahwa atribut “EmployeeCount” dan “StandardHours” tidak bervariasi dalam dataset dan mungkin tidak memberikan informasi yang berguna dalam analisis.
Atribut “EmployeeNumber” mewakili nilai unik untuk setiap karyawan. Namun, insight ini menyiratkan bahwa atribut ini tidak memberikan wawasan yang bermakna dalam analisis.
💡 Insight Tambahan :
Sebelum masuk tahapan selanjutnya, terdapat beberapa tahapan yang perlu dilakukan dalam pre-processing data
# Menghapus kolom yang tidak diperlukan
<- data[, !(names(data) %in% c('BusinessTravel','DailyRate','EmployeeCount','EmployeeNumber','HourlyRate','MonthlyRate'
data 'NumCompaniesWorked','Over18','StandardHours', 'StockOptionLevel','TrainingTimesLastYear'))]
,
# Menampilkan beberapa baris pertama dari dataset
head(data)
<- data %>%
data mutate(Education = factor(Education, levels = c(1, 2, 3, 4, 5),
labels = c("Below College", "College", "Bachelor", "Master", "Doctor")),
EnvironmentSatisfaction = factor(EnvironmentSatisfaction, levels = c(1, 2, 3, 4),
labels = c("Low", "Medium", "High", "Very High")),
JobInvolvement = factor(JobInvolvement, levels = c(1, 2, 3, 4),
labels = c("Low", "Medium", "High", "Very High")),
JobLevel = factor(JobLevel, levels = c(1, 2, 3, 4, 5),
labels = c("Entry Level", "Junior Level", "Mid Level", "Senior Level", "Executive Level")),
JobSatisfaction = factor(JobSatisfaction, levels = c(1, 2, 3, 4),
labels = c("Low", "Medium", "High", "Very High")),
PerformanceRating = factor(PerformanceRating, levels = c(1, 2, 3, 4),
labels = c("Low", "Good", "Excellent", "Outstanding")),
RelationshipSatisfaction = factor(RelationshipSatisfaction, levels = c(1, 2, 3, 4),
labels = c("Low", "Medium", "High", "Very High")),
WorkLifeBalance = factor(WorkLifeBalance, levels = c(1, 2, 3, 4),
labels = c("Bad", "Good", "Better", "Best")))
head(data)
colSums(is.na(data))
#> Age Attrition Department
#> 0 0 0
#> DistanceFromHome Education EducationField
#> 0 0 0
#> EnvironmentSatisfaction Gender JobInvolvement
#> 0 0 0
#> JobLevel JobRole JobSatisfaction
#> 0 0 0
#> MaritalStatus MonthlyIncome OverTime
#> 0 0 0
#> PercentSalaryHike PerformanceRating RelationshipSatisfaction
#> 0 0 0
#> TotalWorkingYears WorkLifeBalance YearsAtCompany
#> 0 0 0
#> YearsInCurrentRole YearsSinceLastPromotion YearsWithCurrManager
#> 0 0 0
any(duplicated(data))
#> [1] FALSE
💡 Tidak ada data yang duplikat dan missing
Tahapan ini bertujuan untuk mengubah skala atau rentang nilai dari atribut numerik agar setiap atribut memiliki pengaruh yang seimbang saat digunakan dalam model.
# Memilih atribut numerik
<- data %>% select_if(is.numeric)
data_num
# Memilih atribut kategorikal (termasuk kolom "Attrition")
<- data %>% select_if(is.factor)
data_cat
# Normalisasi atribut numerik
<- data_num %>%
data_num_norm preProcess(method = c("center", "scale"))
# Encoding atribut kategorikal
<- dummyVars(~., data = data_cat)
data_cat_enc
# Menggabungkan atribut numerik yang sudah dinormalisasi dengan atribut kategorikal yang sudah diencode
<- cbind(predict(data_num_norm, newdata = data_num),
data_normalized_encoded predict(data_cat_enc, newdata = data_cat))
# Menambahkan kolom "Attrition" ke dataset yang telah dinormalisasi dan diencode
<- cbind(data_normalized_encoded, Attrition = data$Attrition) data_normalized_encoded
Pada tahap ini, saya akan melanjutkan analisis dengan melakukan visualisasi data. Visualisasi data adalah cara yang efektif untuk memahami pola, hubungan, dan distribusi dari atribut-atribut dalam dataset
💡 Plot di atas menunjukkan perbandingan antara karyawan yang tidak
mengalami attrition (No) sebanyak 1233 dan karyawan yang mengalami
attrition (Yes) sebanyak 237. Perbedaan jumlah ini menunjukkan
adanya tingkat attrition yang signifikan di perusahaan tersebut.
💡 Plot diatas menunjukan bahwa jumlah karyawan laki-laki lebih banyak
dibanding karyawan perempuan.
💡 Insight
💡 Insight :
💡 Insight :
💡 Insight :
💡 Insight :
Kali ini saya mengguakan metode holdout unutk membagi data. Proporsi data train ditentukan sebagai 70% dari total data. Metode holdout ini berguna untuk membagi data menjadi dua bagian secara acak, sehingga data train dapat digunakan untuk melatih model, sementara data test digunakan untuk menguji kinerja model yang telah dilatih.
set.seed(123) # Menetapkan seed untuk reproduktibilitas
# Menentukan proporsi data train
<- 0.7
train_prop
# Menentukan jumlah observasi untuk data train
<- round(train_prop * nrow(data_normalized_encoded))
train_size
# Mengacak indeks data secara acak
<- sample(seq_len(nrow(data_normalized_encoded)))
random_indices
# Memilih indeks untuk data train
<- random_indices[1:train_size]
train_indices
# Memilih indeks untuk data test (menggunakan yang tidak ada di data train)
#test_indices <- random_indices[-train_indices]
<- random_indices[(train_size + 1):nrow(data_normalized_encoded)]
test_indices
# Membagi data menjadi data train dan data test
<- data_normalized_encoded[train_indices, ]
train_data <- data_normalized_encoded[test_indices, ] test_data
# Menghitung jumlah observasi pada setiap kelas/target variabel pada data train
prop.table(table(train_data$Attrition))
#>
#> No Yes
#> 0.8425656 0.1574344
💡 Saya memilih mempertahankan ketidakseimbangan yang mencerminkan situasi nyata di perusahaan. Dengan cara ini, saya dapat membangun model yang lebih realistis dan akurat dalam memprediksi karyawan yang berpotensi mengalami attrition.
Pada bagian ini, saya melakukan pemisahan antara prediktor dan target variabel (Attrition).
<- train_data %>%
train_x select(-Attrition) %>%
as.matrix()
<- ifelse(train_data$Attrition == "No", 0, 1)
train_y
<- test_data %>%
test_x select(-Attrition) %>%
as.matrix()
<- ifelse(test_data$Attrition == "No", 0, 1) test_y
Untuk mengubah feature agar dapat diterima oleh keras dan python,
kita harus ubah ke format array. menggunakan fungsi
array_reshape(x,dim)
dari library keras
.
# your code here
<- array_reshape(x=train_x, dim= dim(train_x))
train_x <- array_reshape(x=test_x, dim= dim(test_x)) test_x
Dalam pembuatan model NN, saya menggunakan ketentuan berikut : + Layer Dense : menggunakan 64 neuron dan fungsi aktivasi ReLU digunakan sebagai input layer dengan bentuk input_shape sebesar 43. Layer ini bertugas untuk mengambil fitur-fitur dari dataset. + Layer Dense : dengan masing-masing 32 dan 16 neuron, serta fungsi aktivasi ReLU. Layer ini bertugas untuk mempelajari pola-pola yang kompleks dalam dataset. + Output layer Dense : dengan 1 unit dan fungsi aktivasi sigmoid. Layer ini digunakan untuk menghasilkan probabilitas prediksi yang berkaitan dengan atribut target.
dim(train_x)[2]
#> [1] 43
ncol(train_x)
#> [1] 43
length(unique(test_data$Attrition))
#> [1] 2
n_distinct(test_data$Attrition)
#> [1] 2
Kemudian Model kemudian dicompile dengan menggunakan binary cross-entropy sebagai loss function, optimizer Adam, dan metrik akurasi.
Dengan menggunakan arsitektur ini, kita dapat melatih model untuk mempelajari pola-pola dalam data dan melakukan prediksi terhadap atribut target berdasarkan fitur-fitur yang ada.
library(keras)
# Inisialisasi model
<- keras_model_sequential()
model
# Menambahkan layer
%>%
model layer_dense(units = 64, activation = "relu", input_shape = c(43)) %>%
layer_dense(units = 32, activation = "relu") %>%
layer_dense(units = 16, activation = "relu") %>%
layer_dense(units = 1, activation = "sigmoid")
# Compile model
%>% compile(
model loss = "binary_crossentropy",
optimizer = "adam",
metrics = c("accuracy")
)
# Menampilkan ringkasan model
summary(model)
#> Model: "sequential"
#> ________________________________________________________________________________
#> Layer (type) Output Shape Param #
#> ================================================================================
#> dense_3 (Dense) (None, 64) 2816
#> dense_2 (Dense) (None, 32) 2080
#> dense_1 (Dense) (None, 16) 528
#> dense (Dense) (None, 1) 17
#> ================================================================================
#> Total params: 5,441
#> Trainable params: 5,441
#> Non-trainable params: 0
#> ________________________________________________________________________________
Pada contoh di atas, model neural network menggunakan sequential model dengan beberapa dense layer. Dimensi input layer pertama diatur sesuai dengan jumlah fitur (24 dalam contoh tersebut). Layer-layer lainnya memiliki unit dan fungsi aktivasi yang ditentukan. Model menggunakan binary crossentropy sebagai fungsi loss karena ini adalah masalah klasifikasi biner. Optimizer yang digunakan adalah Adam. Setelah itu, model di-compile dan ringkasan model ditampilkan.
💡 Selanjutnya saya melatih model menggunakan data latih yang dipisahkan sebelumnya. Proses pelatihan dilakukan dengan 15 epoch dan batch size sebesar 32.
<- model %>% fit(
history
train_x, train_y,epochs = 15,
batch_size = 32,
validation_data = list(test_x, test_y)
)
✨ Dari hasil pelatihan model , diperoleh hasil : + Loss : 0.2536 menginidkasikan seberapa baik model dalam menyesuaikan data latih + Akurasi : 0.9009 ,enunjukkan seberapa akurat model dalam memprediksi kelas target. + val_loss : 0.4636, merupakan nilai loss pada data validasi. semakin rendah nilainya menunjukan model memiliki kemampuan yang baik dalam menggeneralisasi pola dari data pelatihan ke data baru. + val_accuracy : 0.8254, merupakan akurasi pada data validasi.
# Evaluasi performa model pada data pelatihan
<- model %>% evaluate(train_x, train_y)
train_loss_accuracy
# Evaluasi performa model pada data pengujian
<- model %>% evaluate(test_x, test_y) test_loss_accuracy
Dari hasil tersebut, dapat diketahui bahwa model memiliki kerugian yang rendah (0.2344) dan akurasi yang tinggi (0.8970) pada data pelatihan. Namun, pada data pengujian, model memiliki kerugian yang sedikit lebih tinggi (0.4636) dan akurasi yang sedikit lebih rendah (0.8254).
# Plot Loss
plot(history$metrics$loss, type = "l", col = "blue", lwd = 2,
xlab = "Epoch", ylab = "Loss", main = "Training and Validation Loss")
lines(history$metrics$val_loss, col = "red", lwd = 2)
legend("topright", legend = c("Train Loss", "Validation Loss"), col = c("blue", "red"), lwd = 2, lty = 1)
# Plot Accuracy
plot(history$metrics$accuracy, type = "l", col = "blue", lwd = 2,
xlab = "Epoch", ylab = "Accuracy", main = "Training and Validation Accuracy")
lines(history$metrics$val_accuracy, col = "red", lwd = 2)
legend("bottomright", legend = c("Train Accuracy", "Validation Accuracy"), col = c("blue", "red"), lwd = 2, lty = 1)
Dari model yang sudah dibuat, saya coba menginterpretasikannya unutk mengetahui fitur-fitur yang yang bepengaruh signifikan pada attrition. saya melakukan analisis bobot dari layer pertama dari model. Fitur-fitur ini dapat menjadi fokus perhatian dalam pemahaman dan manajemen attrition serta performa karyawan di perusahaan.
Namun, perlu diingat bahwa analisis bobot layer hanya memberikan informasi awal tentang kontribusi relatif setiap fitur terhadap prediksi attrition. Untuk pemahaman yang lebih mendalam, penting untuk melibatkan pemahaman domain dan melakukan analisis lebih dalam lagi.
✨ Dari plot diatas, terdapat beberapa fitur yang memiliki pengaruh signifikan terhadap attrition. Berdasarkan bobot weight dengan nilai 1, fitur-fitur tersebut adalah sebagai berikut:
Age: Fitur ini menunjukkan bahwa usia karyawan memiliki pengaruh terhadap tingkat attrition. Kemungkinan adanya hubungan antara usia dan kecenderungan karyawan untuk meninggalkan perusahaan.
TotalWorkingYears: Karyawan dengan total pengalaman kerja yang tinggi mungkin lebih cenderung untuk mempertimbangkan opsi lain di luar perusahaan.
Education.College: Fitur ini menunjukkan bahwa tingkat pendidikan karyawan, khususnya yang memiliki latar belakang perguruan tinggi, dapat berperan dalam attrition. Kemungkinan adanya faktor seperti peluang karier yang lebih menarik di tempat lain.
EnvironmentSatisfaction.VeryHigh: Fitur ini mengindikasikan bahwa tingkat kepuasan karyawan terhadap lingkungan kerja yang sangat tinggi berhubungan dengan attrition. Karyawan yang merasa sangat puas dengan lingkungan kerja mereka mungkin lebih cenderung bertahan di perusahaan.
Job.Level.MidLevel: Fitur ini menunjukkan bahwa tingkat jabatan karyawan, khususnya pada level menengah, dapat berpengaruh terhadap attrition. Kemungkinan adanya keinginan karyawan untuk mencari tantangan dan peluang yang lebih baik di tempat lain.
JobSatisfaction.VeryHigh: Karyawan yang merasa sangat puas dengan pekerjaan mereka mungkin lebih cenderung untuk tetap tinggal di perusahaan.
RelationshipSatisfaction.High: Fitur ini menunjukkan bahwa tingkat kepuasan karyawan terhadap hubungan antar pribadi di tempat kerja yang tinggi berhubungan dengan attrition. Karyawan yang merasa sangat puas dengan hubungan interpersonal di perusahaan mungkin lebih cenderung untuk tetap berada di perusahaan.
Dalam laporan ini, telah dilakukan analisis terhadap faktor-faktor yang berhubungan dengan attrition karyawan di perusahaan. Melalui penggunaan model Neural Network, ditemukan beberapa insight awal yang dapat memberikan pemahaman tentang faktor-faktor yang mempengaruhi attrition. Berikut adalah kesimpulan dan saran berdasarkan insight-insight tersebut.
Berdasarkan hasil analisis fitur pada model, ditemukan beberapa insight awal yang sejalan dengan hasil fitur yang dihasilkan. Berikut adalah insight-insight awal yang dapat diambil :
Usia: Mayoritas karyawan yang mengalami attrition berada dalam rentang usia 30-40 tahun. Terdapat kecenderungan bahwa seiring bertambahnya usia, tingkat attrition cenderung menurun. Namun, perlu diperhatikan bahwa terdapat juga karyawan muda yang memiliki tingkat attrition yang tinggi.
Pendidikan: Mayoritas karyawan yang mengalami attrition memiliki gelar Sarjana atau Magister sebagai kualifikasi pendidikan mereka. Sedangkan karyawan dengan gelar Doktor memiliki tingkat attrition yang rendah. Terdapat kecenderungan penurunan tingkat attrisi seiring dengan meningkatnya kualifikasi pendidikan.
Kepuasan Lingkungan: Meskipun mayoritas karyawan memberi nilai tinggi atau sangat tinggi terhadap kepuasan lingkungan di organisasi, terdapat tingkat attrition yang tinggi di lingkungan tersebut. Tingkat attrition cenderung meningkat seiring dengan peningkatan tingkat kepuasan lingkungan.
Level Pekerjaan: Mayoritas karyawan di organisasi berada pada tingkat Entri atau Tingkat Junior. Tingkat perpindahan pekerjaan tertinggi terjadi pada tingkat Entri. Karyawan yang masih dalam tahap awal karier cenderung memiliki tingkat attrition yang tinggi. Namun, seiring dengan meningkatnya tingkat pekerjaan, tingkat perpindahan pekerjaan cenderung menurun.
Pendapatan Bulanan: Sebagian besar karyawan di organisasi mendapatkan gaji kurang dari 10000. Rata-rata pendapatan bulanan karyawan yang telah keluar cenderung lebih rendah dibandingkan dengan karyawan yang masih bekerja. Terdapat kecenderungan bahwa seiring dengan peningkatan pendapatan bulanan, tingkat perpindahan pekerjaan cenderung menurun.
Berdasarkan insight-insight di atas, beberapa saran yang dapat diberikan untuk mengelola attrition dan meningkatkan performa karyawan adalah sebagai berikut:
Mengembangkan program pengembangan karier yang jelas dan jangka panjang untuk karyawan muda, sehingga dapat memotivasi mereka untuk tetap bertahan dalam organisasi.
Menyediakan peluang pendidikan lanjutan dan pengembangan keterampilan bagi karyawan, terutama dalam hal peningkatan kualifikasi pendidikan.
Meningkatkan kepuasan lingkungan kerja dengan memperhatikan faktor-faktor yang mempengaruhi kepuasan karyawan, seperti lingkungan fisik, komunikasi, dan budaya organisasi.
Memberikan program mentorship dan pembinaan bagi karyawan baru atau pada tingkat Entri, sehingga mereka dapat merasa terbantu dan terarah dalam mengembangkan karier mereka.
Dengan implementasi saran-saran tersebut, diharapkan perusahaan dapat mengurangi tingkat attrition karyawan, meningkatkan performa karyawan, dan menciptakan lingkungan kerja yang produktif dan berkelanjutan.