BAB 0 — Setup & Instalasi Library

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

BAB 1 — Pengantar Teori & Konsep

1.1 Apa itu Employee Turnover & Attrition?

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).

1.2 Mengapa Survival Analysis?

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

1.3 Konsep Censored Data

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.

1.4 Metrik Evaluasi Survival

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).


BAB 2 — Fungsi Bantu (Helper Functions)

Beberapa fungsi kecil yang dipakai berulang di seluruh analisis: interpolasi survival function, skor risiko, C-Index, serta Brier Score / IBS dengan pembobotan IPCW.


BAB 3 — Data Processing (Strict Cleaning Pipeline)

3.1 Deskripsi Variabel HR

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_companyT (waktu), leftE (event).

3.2 Memuat Dataset

## Dimensi dataset: 14999 baris × 10 kolom
5 baris pertama dataset
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

3.3 Statistik Deskriptif

## 📋 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"
📊 Statistik Deskriptif (Fitur Numerik)
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

3.4 Pemeriksaan Missing Values & Duplikat

## ==================================================
##   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.

3.5 Pemilihan Variabel & Definisi Target

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

3.6 Outlier Handling — Metode IQR Capping

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.

3.7 Multikolinearitas — VIF Iteratif & Heatmap Korelasi

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.


BAB 4 — EDA (Exploratory Data Analysis)

4.1 Faktor-Faktor Penyebab Resign

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.

4.2 Distribusi Target Variabel

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.

4.3 Histogram Distribusi Fitur (Tetap vs Keluar)

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.


BAB 5 — Pemodelan Survival Analysis

5.1 3-Way Split: Train, Validation, Test (60/20/20, stratified)

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

5.2 — Model 1: Conditional Survival Forest (CSF / Extra Survival Trees)

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

5.3 — Model 2: Random Survival Forest (RSF)

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

BAB 6 — Evaluasi Model: C-Index & Brier Score

6.1 C-Index (Concordance Index)

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).

6.2 Brier Score & Integrated Brier Score (IBS)

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)

6.3 Menentukan Model Terbaik

Peringkat gabungan: C-Index (makin tinggi makin baik) + IBS (makin rendah makin baik).

🏆 Hasil Perbandingan Model (C-Index & IBS)
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.


BAB 7 — Evaluasi Prediksi

7.1 Actual vs Predicted — Jumlah Karyawan Keluar

7.1.1 CSF

## 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.

7.1.2 RSF

## 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.

7.2 Prediksi Risiko (Low / Medium / High)

7.2.1 CSF

## Threshold Low (P33) : 18.3683
## Threshold High (P66): 25.4229
## Jumlah Low / Medium / High : 800 / 799 / 800

7.2.2 RSF

## 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.

7.3 Confusion Matrix — CSF & RSF

Label prediksi = high risk bila skor risiko > P66; event 1 = karyawan keluar.

📊 Ringkasan Confusion Matrix
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).

7.4 ROC Curve — CSF & RSF

Referensi: Fawcett (2006); Hanley & McNeil (1982).

📊 Ringkasan ROC-AUC
Model ROC-AUC
CSF 0.9554
RSF 0.9629
🏆 Ringkasan Evaluasi Gabungan
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.

7.5 Kurva Survival Berdasarkan Kelompok Risiko (Model Final)

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.


BAB 8 — Variable Importance (Faktor Pemicu Resign)

Menggunakan permutation importance dari model final (final_model_name).

## Berikut fitur terpenting berdasarkan model final: Random Survival Forest
Top-5 Variable Importance (Permutation)
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.

Interpretasi HR

  • Jika number_projects paling penting → beban kerja & jumlah proyek aktif jadi faktor utama; terlalu banyak proyek memicu burnout, terlalu sedikit menurunkan engagement.
  • Jika satisfaction_level berkontribusi besar → perkuat pulse survey, stay interview, dan perbaikan pengalaman kerja.
  • Jika time_spend_company dominan → susun program retensi berbasis milestone masa kerja.
  • Jika work_accident / promotion_last_5years signifikan → kaji aspek keselamatan kerja, jalur promosi, dan keadilan karier.

BAB 9 — Hasil Temuan & Kesimpulan

1. Kesimpulan Umum

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.

2. Hasil Perbandingan Model

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

3. Faktor-Faktor Utama Pemicu Resign

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.

4. Insight Strategis untuk HR

  • a. Early Warning System — bangun sistem peringatan dini resign berbasis survival analysis.
  • b. Prioritas Retention Program — karyawan high risk diprioritaskan untuk coaching, engagement program, retention bonus, atau pengembangan karier.
  • c. Workforce Planning — prediksi survival membantu memperkirakan potensi kehilangan SDM, kebutuhan rekrutmen, dan kesinambungan operasional.
  • d. Efisiensi Biaya Turnover — deteksi dini mengurangi biaya rekrutmen ulang, training, dan kehilangan produktivitas.

5. Kesimpulan Akhir

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.


Daftar Referensi

  1. Barnett, V. & Lewis, T. (1994). Outliers in Statistical Data (3rd ed.). Wiley.
  2. Breiman, L. (2001). Random forests. Machine Learning, 45(1), 5–32.
  3. Brier, G.W. (1950). Verification of forecasts expressed in terms of probability. Monthly Weather Review, 78(1), 1–3.
  4. Chawla, N.V. et al. (2002). SMOTE: Synthetic Minority Over-sampling Technique. JAIR, 16, 321–357.
  5. Cohen, J. (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.). Erlbaum.
  6. Cox, D.R. (1972). Regression models and life tables. JRSS, Series B, 34(2), 187–220.
  7. Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861–874.
  8. Geurts, P. et al. (2006). Extremely randomized trees. Machine Learning, 63(1), 3–42.
  9. Graf, E. et al. (1999). Assessment and comparison of prognostic classification schemes for survival data. Statistics in Medicine, 18, 2529–2545.
  10. Hair, J.F. et al. (2010). Multivariate Data Analysis (7th ed.). Pearson.
  11. Hanley, J.A. & McNeil, B.J. (1982). The meaning and use of the area under an ROC curve. Radiology, 143(1), 29–36.
  12. Harrell, F.E. et al. (1982). Evaluating the yield of medical tests. JAMA, 247(18), 2543–2546.
  13. Hothorn, T. et al. (2006). Unbiased recursive partitioning: A conditional inference framework. JCGS, 15(3), 651–674.
  14. Ishwaran, H. et al. (2008). Random survival forests. Annals of Applied Statistics, 2(3), 841–860.
  15. Kalbfleisch, J.D. & Prentice, R.L. (2011). The Statistical Analysis of Failure Time Data (2nd ed.). Wiley.
  16. Kaplan, E.L. & Meier, P. (1958). Nonparametric estimation from incomplete observations. JASA, 53(282), 457–481.
  17. Kleinbaum, D.G. & Klein, M. (2012). Survival Analysis: A Self-Learning Text (3rd ed.). Springer.
  18. Kuhn, M. & Johnson, K. (2013). Applied Predictive Modeling. Springer.
  19. Steyerberg, E.W. et al. (2010). Assessing the performance of prediction models. Epidemiology, 21(1), 128–138.
  20. Tukey, J.W. (1977). Exploratory Data Analysis. Addison-Wesley.
  21. Wright, M.N. & Ziegler, A. (2017). ranger: A fast implementation of random forests. Journal of Statistical Software, 77(1), 1–17.
  22. Zwiener, I. et al. (2011). Survival analysis for medical research. Deutsches Ärzteblatt, 108(10), 163–169.