Sel ini akan otomatis memasang paket yang belum tersedia, lalu memuatnya. Cukup jalankan sekali.
## ✓ Semua library berhasil dimuat!
## R : R version 4.5.2 (2025-10-31 ucrt)
## ranger : 0.18.0
## survival : 3.8.6
## ggplot2 : 4.0.1
Employee Turnover adalah fenomena ketika karyawan meninggalkan perusahaan — baik secara sukarela (resign, pensiun) maupun tidak sukarela (PHK). Ini berbeda dengan Attrition yang merujuk lebih spesifik pada pengurangan karyawan secara alami tanpa penggantian.
| Istilah | Definisi | Contoh |
|---|---|---|
| Turnover | Karyawan keluar dan digantikan | Resign lalu rekrut baru |
| Attrition | Karyawan keluar, posisi tidak diisi | Pensiun alami |
| Retention | Kemampuan mempertahankan karyawan | Program benefit, karir |
| Event (left=1) | Karyawan terbukti resign dalam periode observasi | Data berlabel |
| Censored (left=0) | Karyawan masih aktif saat data diambil | Data tidak lengkap |
💡 Biaya Turnover: Penelitian menunjukkan biaya penggantian karyawan berkisar 33%–200% dari gaji tahunan (rekrutmen + pelatihan + hilangnya produktivitas).
Metode klasifikasi biasa hanya menjawab “Apakah karyawan ini akan resign?” → Ya/Tidak. Survival Analysis menjawab pertanyaan yang jauh lebih berguna: “Kapan karyawan ini berisiko resign, dan seberapa besar risikonya dari waktu ke waktu?”
| Aspek | Klasifikasi Biasa | Survival Analysis |
|---|---|---|
| Output | Label (Ya/Tidak) | Probabilitas per waktu |
| Informasi waktu | ❌ Tidak ada | ✅ Ada (time-to-event) |
| Censored data | ❌ Dibuang/bias | ✅ Ditangani dengan benar |
| Nilai bagi HR | Terbatas | Proaktif & actionable |
Censored data terjadi ketika karyawan belum
mengalami event (resign) saat periode observasi berakhir. Ini
bukan “data hilang” — ini informasi berharga bahwa karyawan tersebut
setidaknya bertahan selama t waktu.
Membuang data censored akan menyebabkan bias.
C-Index (Concordance Index) mengukur kemampuan model
membedakan karyawan berisiko tinggi vs rendah:
0.5 = acak, ≥0.70 = baik, ≥0.80 =
sangat baik.
Brier Score & IBS mengukur
kalibrasi model: IBS < 0.15 Sangat
Baik, < 0.25 Baik, ≥ 0.25 perlu
perbaikan.
🎯 Model yang baik harus tinggi C-Index (diskriminasi) DAN rendah IBS (kalibrasi).
Beberapa fungsi kecil yang dipakai berulang di seluruh analisis: interpolasi survival function, skor risiko, C-Index, serta Brier Score / IBS dengan pembobotan IPCW.
| Variabel | Tipe | Deskripsi | Peran dalam Analisis |
|---|---|---|---|
satisfaction_level |
Numerik [0-1] | Skor kepuasan kerja | Prediktor utama resign |
last_evaluation |
Numerik [0-1] | Skor evaluasi kinerja | Indikator performa |
number_projects |
Integer | Jumlah proyek | Proxy beban kerja |
average_montly_hours |
Integer | Rata-rata jam kerja/bulan | Work-life balance |
time_spend_company |
Integer (tahun) | Lama bekerja | Variabel waktu (T) |
work_accident |
Biner | Pernah kecelakaan kerja | Faktor lingkungan |
promotion_last_5years |
Biner | Promosi 5 tahun terakhir | Faktor karir |
department, salary |
Kategorikal | Konteks kerja & kompensasi | Tidak dipakai |
left |
Biner | Resign (1) / Bertahan (0) | Event Target (E) |
⚠️ Untuk survival analysis:
time_spend_company→ T (waktu),left→ E (event).
## Dimensi dataset: 14999 baris × 10 kolom
| satisfaction_level | last_evaluation | number_projects | average_montly_hours | time_spend_company | work_accident | left | promotion_last_5years | department | salary |
|---|---|---|---|---|---|---|---|---|---|
| 0.38 | 0.53 | 2 | 157 | 3 | 0 | 1 | 0 | sales | low |
| 0.80 | 0.86 | 5 | 262 | 6 | 0 | 1 | 0 | sales | medium |
| 0.11 | 0.88 | 7 | 272 | 4 | 0 | 1 | 0 | sales | medium |
| 0.72 | 0.87 | 5 | 223 | 5 | 0 | 1 | 0 | sales | low |
| 0.37 | 0.52 | 2 | 159 | 3 | 0 | 1 | 0 | sales | low |
## 📋 TIPE DATA SETIAP KOLOM:
## satisfaction_level last_evaluation number_projects
## "numeric" "numeric" "integer"
## average_montly_hours time_spend_company work_accident
## "integer" "integer" "integer"
## left promotion_last_5years department
## "integer" "integer" "character"
## salary
## "character"
| Variabel | Min | Q1 | Median | Mean | Q3 | Max | SD |
|---|---|---|---|---|---|---|---|
| satisfaction_level | 0.09 | 0.44 | 0.64 | 0.6128 | 0.82 | 1 | 0.2486 |
| last_evaluation | 0.36 | 0.56 | 0.72 | 0.7161 | 0.87 | 1 | 0.1712 |
| number_projects | 2.00 | 3.00 | 4.00 | 3.8031 | 5.00 | 7 | 1.2326 |
| average_montly_hours | 96.00 | 156.00 | 200.00 | 201.0503 | 245.00 | 310 | 49.9431 |
| time_spend_company | 2.00 | 3.00 | 3.00 | 3.4982 | 4.00 | 10 | 1.4601 |
| work_accident | 0.00 | 0.00 | 0.00 | 0.1446 | 0.00 | 1 | 0.3517 |
| left | 0.00 | 0.00 | 0.00 | 0.2381 | 0.00 | 1 | 0.4259 |
| promotion_last_5years | 0.00 | 0.00 | 0.00 | 0.0213 | 0.00 | 1 | 0.1443 |
## ==================================================
## LAPORAN MISSING VALUES
## ==================================================
## Jumlah Missing Persen (%) Tipe Data
## satisfaction_level 0 0 numeric
## last_evaluation 0 0 numeric
## number_projects 0 0 integer
## average_montly_hours 0 0 integer
## time_spend_company 0 0 integer
## work_accident 0 0 integer
## left 0 0 integer
## promotion_last_5years 0 0 integer
## department 0 0 character
## salary 0 0 character
##
## ✓ Dataset BERSIH — tidak ada missing values.
##
## Baris duplikat : 3008
## Dimensi final : 11991 × 10
##
## ✓ Cleaning selesai.
Catatan: kita hanya fokus pada fitur numerik. Fitur kategorikal (
department,salary) tidak digunakan. Variabel waktu (time_spend_company) tidak dipakai sebagai prediktor agar tidak terjadi leakage.
## =======================================================
## 🎯 KOLOM YANG DIGUNAKAN
## =======================================================
## ⏱️ Kolom Waktu : time_spend_company
## 🔔 Kolom Event : left
## 📌 Fitur Prediktor:
## satisfaction_level, last_evaluation, number_projects, average_montly_hours, work_accident, promotion_last_5years
##
## ✅ Shape dataset kerja: 11991 × 8
Capping (bukan drop) menjaga jumlah data tetap
utuh. Diterapkan pada fitur kontinu; variabel waktu
(time_spend_company) tidak di-cap agar
informasi survival tetap terjaga.
## Outlier Handling — IQR Capping (Q1−1.5×IQR ↔ Q3+1.5×IQR):
## ------------------------------------------------------------
## satisfaction_level : 0 outlier → cap [-0.03, 1.33] ✓ bersih
## last_evaluation : 0 outlier → cap [0.13, 1.29] ✓ bersih
## number_projects : 0 outlier → cap [0.00, 8.00] ✓ bersih
## average_montly_hours : 0 outlier → cap [28.00, 372.00] ✓ bersih
##
## ✓ Outlier handling selesai. Semua data dipertahankan (capping).
Interpretasi 3.6. Visualisasi ini memahami karakteristik awal data sebelum modeling: pola umum karyawan, keberadaan outlier, ketidakseimbangan data, serta kecenderungan variabel terhadap turnover. Distribusi yang tidak seimbang dapat memengaruhi performa model, sehingga HR perlu memperhatikan fairness kebijakan dan menganalisis kasus turnover ekstrem lebih lanjut.
VIF iteratif menghapus fitur dengan VIF tertinggi sampai semua VIF ≤ 10 (tidak ada multikolinearitas signifikan).
## Proses VIF Iteratif — Threshold VIF ≤ 10
## =======================================================
##
## Iterasi #1:
## number_projects average_montly_hours last_evaluation
## 1.2027 1.1672 1.1405
## satisfaction_level work_accident promotion_last_5years
## 1.0400 1.0027 1.0014
##
## ✓ Semua VIF ≤ 10 — selesai di iterasi #1!
##
## Fitur dihapus : Tidak ada
## Fitur digunakan : satisfaction_level, last_evaluation, number_projects, average_montly_hours, work_accident, promotion_last_5years
Interpretasi 3.7. Heatmap mengevaluasi hubungan antar fitur sebelum modeling. Pada dataset ini umumnya: Satisfaction Level memiliki korelasi negatif terkuat terhadap
left(makin puas, makin kecil peluang resign), sedangkan Time Spent at Company cenderung positif (risiko resign meningkat seiring masa kerja). Tidak ditemukan multikolinearitas tinggi, sehingga fitur layak dipakai untuk survival modeling.Insight HR: fokus utama pada employee satisfaction (engagement, work-life balance, budaya kerja), perhatikan risiko turnover senior employee (career path, succession planning), dan jadikan keputusan retensi berbasis data, bukan asumsi.
Berdasarkan literatur HR Analytics, faktor utama turnover: (1) kepuasan kerja rendah, (2) beban proyek berlebih, (3) jam kerja tidak wajar, (4) tidak ada promosi, (5) kecelakaan kerja, (6) masa kerja pada titik kritis evaluasi karir.
Interpretasi 4.2. Mayoritas karyawan berstatus Stay (~83%) dan ~17% resign — turnover tidak terlalu tinggi namun cukup signifikan untuk dianalisis. Mayoritas masa kerja berkisar ~3 tahun (fase mid-tenure), sehingga periode ini menjadi titik penting untuk retention program dan evaluasi engagement.
Interpretasi 4.3. Perbandingan distribusi antar kelompok menunjukkan fitur mana yang paling “memisahkan” karyawan tetap vs keluar. Selisih rata-rata yang besar (mis. pada satisfaction level) menandakan fitur tersebut berpengaruh kuat terhadap keputusan resign.
Split distratifikasi berdasarkan left agar proporsi
event terjaga di tiap subset.
## ✓ Data terbagi menjadi Train / Validation / Test:
## Train : 7194 baris (event rate 16.6%)
## Val : 2398 baris (event rate 16.6%)
## Test : 2399 baris (event rate 16.6%)
## Surv(time_spend_company, left) ~ satisfaction_level + last_evaluation +
## number_projects + average_montly_hours + work_accident +
## promotion_last_5years
Referensi: Hothorn et al. (2006) & Geurts et al. (2006). Mengikuti notebook asli (
ExtraSurvivalTrees), CSF di sini diimplementasikan sebagai extremely randomized survival forest — titik split dipilih secara acak sehingga varian model lebih rendah.
## =======================================================
## 🌲 MODEL 1: CONDITIONAL SURVIVAL FOREST (Extra Trees)
## =======================================================
## Sedang melatih model...
##
## ✅ Model CSF berhasil dilatih!
##
## 📋 HYPERPARAMETER:
## num.trees : 200
## mtry (√p) : 2
## max.depth : 5
## min.node.size : 30
## splitrule : extratrees
Referensi: Ishwaran et al. (2008). RSF menggunakan uji log-rank pada setiap split.
## =======================================================
## 🌳 MODEL 2: RANDOM SURVIVAL FOREST (RSF)
## =======================================================
## Sedang melatih model...
##
## ✅ Model RSF berhasil dilatih!
##
## 📝 PERBEDAAN CSF vs RSF:
## • RSF: split optimal berbasis uji log-rank
## • CSF: split acak (extra-trees) → varian lebih rendah
## • Keduanya non-parametric ensemble survival models
Referensi: Harrell et al. (1982).
## =======================================================
## 📊 EVALUASI C-INDEX
## =======================================================
## Conditional Survival Forest : C-index = 0.9181
## Random Survival Forest : C-index = 0.9274
##
## 🏆 C-Index tertinggi: Random Survival Forest (0.9274)
##
## 📝 INTERPRETASI: C-index = 0.5 (acak), 0.7–0.8 (baik), >0.8 (sangat baik).
Referensi: Brier (1950); Graf et al. (1999). Dihitung dengan pembobotan IPCW.
## 🔹 CSF: IBS = 0.0721
## 🔹 RSF: IBS = 0.0449
##
## 📋 RINGKASAN IBS
## CSF : 0.0721 (Sangat Baik)
## RSF : 0.0449 (Sangat Baik)
Peringkat gabungan: C-Index (makin tinggi makin baik) + IBS (makin rendah makin baik).
| Model | C-Index | IBS | C-Index Rank | IBS Rank | Final Score |
|---|---|---|---|---|---|
| Random Survival Forest | 0.9274 | 0.0449 | 1 | 1 | 2 |
| Conditional Survival Forest | 0.9181 | 0.0721 | 2 | 2 | 4 |
##
## 🥇 MODEL TERBAIK (sementara): Random Survival Forest | C-Index = 0.9274 | IBS = 0.0449
Interpretasi Evaluasi Model. C-Index mengukur kemampuan model mengurutkan risiko resign antar karyawan, sedangkan IBS mengukur akurasi probabilitas survival (kalibrasi). Model yang baik harus tinggi C-Index sekaligus rendah IBS.
## Membandingkan prediksi vs aktual (CSF)...
## RMSE = 150.033 | MAE = 83.131
Interpretasi (CSF). Actual menunjukkan jumlah resign nyata; Predicted (CSF) adalah estimasi kumulatif keluar dari model. Semakin dekat kedua kurva, semakin akurat model dalam menangkap dinamika turnover dari waktu ke waktu.
## Membandingkan prediksi vs aktual (RSF)...
## RMSE = 81.212 | MAE = 63.623
Interpretasi (RSF). RSF mengevaluasi kemampuan model berbasis ensemble log-rank dalam memprediksi jumlah keluar dibanding data aktual. Pita (CI) menggambarkan ketidakpastian antar individu di sekitar estimasi rata-rata.
## Threshold Low (P33) : 18.3683
## Threshold High (P66): 25.4229
## Jumlah Low / Medium / High : 800 / 799 / 800
## Threshold Low (P33) : 7.3822
## Threshold High (P66): 17.0354
## Jumlah Low / Medium / High : 800 / 799 / 800
Interpretasi Risk Group. Karyawan dibagi tiga kelompok risiko berdasarkan persentil skor (P33, P66). Kelompok High Risk adalah prioritas utama intervensi retensi.
Label prediksi = high risk bila skor risiko > P66; event 1 = karyawan keluar.
| Model | Threshold P66 | Accuracy | Precision | Recall | F1-Score | TN | FP | FN | TP |
|---|---|---|---|---|---|---|---|---|---|
| CSF | 25.4229 | 0.8128 | 0.4688 | 0.9398 | 0.6255 | 1575 | 425 | 24 | 375 |
| RSF | 17.0354 | 0.8137 | 0.4700 | 0.9424 | 0.6272 | 1576 | 424 | 23 | 376 |
Interpretasi Confusion Matrix. Matriks ini menilai kemampuan model mengklasifikasikan karyawan resign vs bertahan. Recall yang tinggi penting karena HR ingin menangkap sebanyak mungkin karyawan berisiko keluar (meminimalkan false negative).
Referensi: Fawcett (2006); Hanley & McNeil (1982).
| Model | ROC-AUC |
|---|---|
| CSF | 0.9554 |
| RSF | 0.9629 |
| Model | C-Index | IBS | ROC-AUC | Precision | Recall | F1-Score | Comprehensive Score |
|---|---|---|---|---|---|---|---|
| Random Survival Forest | 0.9274 | 0.0449 | 0.9629 | 0.4700 | 0.9424 | 0.6272 | 4 |
| Conditional Survival Forest | 0.9181 | 0.0721 | 0.9554 | 0.4688 | 0.9398 | 0.6255 | 8 |
##
## 🥇 MODEL FINAL BERDASARKAN EVALUASI GABUNGAN: Random Survival Forest
Interpretasi ROC. Kurva ROC menggambarkan kemampuan model membedakan karyawan resign vs bertahan pada berbagai threshold. AUC mendekati 1 = diskriminasi sangat baik; 0.5 = setara tebakan acak.
Menggunakan rata-rata kelompok (mean survival per kelompok risiko) dari model final.
Interpretasi Survival per Kelompok. Semakin tinggi kurva survival, semakin besar probabilitas karyawan bertahan. Kelompok high risk turun paling cepat — mengindikasikan peluang resign lebih awal dan lebih besar, sehingga butuh intervensi paling segera.
Menggunakan permutation importance dari model final (final_model_name).
## Berikut fitur terpenting berdasarkan model final: Random Survival Forest
| fitur | pentingnya | persentase_pentingnya |
|---|---|---|
| satisfaction_level | 0.1479 | 0.3852 |
| number_projects | 0.0963 | 0.2509 |
| last_evaluation | 0.0750 | 0.1955 |
| average_montly_hours | 0.0626 | 0.1631 |
| work_accident | 0.0019 | 0.0050 |
Berdasarkan analisis permutation importance pada model final, tabel di atas menunjukkan variabel mana yang paling berpengaruh terhadap prediksi risiko resign. Variabel dengan nilai kepentingan tertinggi perlu menjadi prioritas utama dalam penyusunan kebijakan retensi.
number_projects paling penting → beban kerja &
jumlah proyek aktif jadi faktor utama; terlalu banyak proyek memicu
burnout, terlalu sedikit menurunkan engagement.satisfaction_level berkontribusi besar → perkuat
pulse survey, stay interview, dan perbaikan pengalaman
kerja.time_spend_company dominan → susun program retensi
berbasis milestone masa kerja.work_accident / promotion_last_5years
signifikan → kaji aspek keselamatan kerja, jalur promosi, dan keadilan
karier.Penelitian ini berhasil menerapkan pendekatan Survival Analysis untuk memprediksi risiko turnover karyawan menggunakan dua model utama, yaitu Conditional Survival Forest (CSF) dan Random Survival Forest (RSF). Pendekatan survival analysis terbukti lebih relevan dibanding klasifikasi biasa karena mampu mempertimbangkan dimensi waktu resign karyawan.
Berdasarkan evaluasi menggunakan C-Index, Integrated Brier Score, Actual vs Predicted, Confusion Matrix, serta ROC Curve, model yang terpilih secara otomatis sebagai model final terbaik pada eksekusi ini adalah final_model_name. Model final mampu menghasilkan error prediksi yang rendah, kemampuan diskriminasi yang baik, serta efektif memisahkan kelompok risiko resign.
## MODEL FINAL : Random Survival Forest
## C-Index : 0.9274
## IBS : 0.0449
## ROC-AUC : 0.9629
## F1-Score : 0.6272
Berdasarkan analisis variable importance, faktor yang paling berpengaruh terhadap turnover umumnya meliputi tingkat kepuasan kerja, beban kerja (jumlah proyek), evaluasi performa, rata-rata jam kerja bulanan, dan lama masa kerja.
Pendekatan survival forest terbukti optimal dalam memprediksi turnover karyawan pada penelitian ini. Model tidak hanya memberikan akurasi yang baik, tetapi juga menghasilkan insight strategis yang dapat digunakan perusahaan untuk meningkatkan retensi SDM secara proaktif dan berbasis data.