Kursus
Dulu, fokus utama ada pada ‘tingkat’ seperti tingkat attrition dan tingkat retensi. Manajer HR menghitung tingkat historis dan mencoba memprediksi tingkat di masa depan menggunakan alat data warehousing. Angka-angka ini menunjukkan dampak agregat dari churn, tetapi itu baru separuh gambaran. Pendekatan lain adalah berfokus pada catatan individual selain agregat.
Ada banyak studi kasus tentang customer churn. Dalam customer churn, Anda dapat memprediksi siapa dan kapan seorang pelanggan berhenti membeli. Employee churn mirip dengan customer churn. Fokusnya terutama pada karyawan, bukan pelanggan. Di sini, Anda dapat memprediksi siapa dan kapan seorang karyawan akan mengakhiri masa kerjanya. Employee churn mahal, dan peningkatan kecil sekalipun dapat menghasilkan dampak yang signifikan. Ini akan membantu kita merancang rencana retensi yang lebih baik dan meningkatkan kepuasan karyawan.
Analisis Employee Churn

Employee churn dapat didefinisikan sebagai kebocoran atau keluarnya aset intelektual dari sebuah perusahaan atau organisasi. Atau, secara sederhana, ketika karyawan meninggalkan organisasi disebut churn. Definisi lain: ketika seorang anggota populasi meninggalkan populasi, itu disebut churn.
Dalam penelitian, ditemukan bahwa employee churn dipengaruhi oleh usia, masa kerja, gaji, kepuasan kerja, upah, kondisi kerja, potensi pertumbuhan, dan persepsi karyawan tentang keadilan. Variabel lain seperti usia, jenis kelamin, etnis, pendidikan, dan status pernikahan merupakan faktor penting dalam memprediksi employee churn. Dalam beberapa kasus, karyawan dengan keterampilan khusus lebih sulit digantikan. Hal ini memengaruhi pekerjaan yang sedang berjalan dan produktivitas karyawan yang ada. Merekrut karyawan baru sebagai pengganti memiliki biayanya sendiri seperti biaya perekrutan dan pelatihan. Selain itu, karyawan baru memerlukan waktu untuk mempelajari keterampilan hingga setara dengan tingkat keahlian teknis atau bisnis karyawan lama. Organisasi mengatasi masalah ini dengan menerapkan teknik machine learning untuk memprediksi employee churn, yang membantu mereka mengambil tindakan yang diperlukan.
Poin-poin berikut membantu Anda memahami employee dan customer churn dengan lebih baik:
-
Perusahaan memilih karyawan untuk direkrut, sedangkan dalam pemasaran Anda tidak dapat memilih pelanggan Anda.
-
Karyawan akan menjadi wajah perusahaan Anda, dan secara kolektif, karyawan menghasilkan semua yang dilakukan perusahaan Anda.
-
Kehilangan pelanggan memengaruhi pendapatan dan citra merek. Mendapatkan pelanggan baru lebih sulit dan mahal dibanding mempertahankan pelanggan yang sudah ada. Employee churn juga menyakitkan bagi perusahaan dan organisasi. Dibutuhkan waktu dan upaya untuk menemukan serta melatih pengganti.
Employee churn memiliki dinamika yang unik dibanding customer churn. Ini membantu kita merancang rencana retensi karyawan yang lebih baik dan meningkatkan kepuasan karyawan. Algoritme data science dapat memprediksi churn di masa depan.
Analisis Eksploratori
Exploratory Data Analysis adalah proses awal analisis, di mana Anda dapat merangkum karakteristik data seperti pola, tren, outlier, dan pengujian hipotesis menggunakan statistik deskriptif dan visualisasi.
Mengimpor Modul
#import modules
import pandas # for dataframes
import matplotlib.pyplot as plt # for plotting graphs
import seaborn as sns # for plotting graphs
% matplotlib inline
Memuat Dataset
Mari kita muat dulu dataset HR yang diperlukan menggunakan fungsi read CSV dari pandas. Anda dapat mengunduh datanya dari tautan ini.
data=pandas.read_csv('HR_comma_sep.csv')
data.head()

- Di sini, data asli dipisahkan oleh pembatas koma (“ , “) pada dataset yang diberikan.
- Anda dapat melihat data lebih dekat dengan bantuan fungsi “head()” dari pustaka pandas yang mengembalikan lima observasi pertama.
- Demikian pula “tail()” mengembalikan lima observasi terakhir.
data.tail()

Setelah memuat dataset, Anda mungkin ingin mengetahui sedikit lebih banyak tentangnya. Anda dapat memeriksa nama atribut dan tipe data menggunakan info().
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14,999 entries, 0 to 14,998
Data columns (total 10 columns):
satisfaction_level 14999 non-null float64
last_evaluation 14999 non-null float64
number_project 14999 non-null int64
average_montly_hours 14999 non-null int64
time_spend_company 14999 non-null int64
Work_accident 14999 non-null int64
left 14999 non-null int64
promotion_last_5years 14999 non-null int64
Departments 14999 non-null object
salary 14999 non-null object
dtypes: float64(2), int64(6), object(2)
memory usage: 1.1+ MB
- Dataset ini memiliki 14.999 sampel, dan 10 atribut (6 integer, 2 float, dan 2 objek).
- Tidak ada kolom variabel yang memiliki nilai null/hilang.
Anda dapat menjelaskan 10 atribut secara rinci sebagai berikut:
- satisfaction_level: Poin kepuasan karyawan, berkisar dari 0–1.
- last_evaluation: Evaluasi kinerja oleh pemberi kerja, juga berkisar dari 0–1.
- number_projects: Berapa jumlah proyek yang ditugaskan kepada seorang karyawan?
- average_monthly_hours: Berapa rata-rata jam kerja karyawan dalam sebulan?
- time_spent_company: time_spent_company berarti pengalaman karyawan. Jumlah tahun yang dihabiskan karyawan di perusahaan.
- work_accident: Apakah seorang karyawan pernah mengalami kecelakaan kerja atau tidak.
- promotion_last_5years: Apakah seorang karyawan pernah mendapat promosi dalam 5 tahun terakhir atau tidak.
- Departments: Departemen/divisi tempat karyawan bekerja.
- Salary: Tingkat gaji karyawan seperti rendah, menengah, dan tinggi.
- left: Apakah karyawan telah keluar dari perusahaan atau tidak.
Mari Masuk ke Insight Data
Dalam dataset yang diberikan, ada dua jenis karyawan: yang tetap dan yang keluar dari perusahaan. Jadi, Anda dapat membagi data menjadi dua grup dan membandingkan karakteristiknya. Di sini, Anda dapat mencari rata-rata kedua grup menggunakan fungsi groupby() dan mean().
left = data.groupby('left')
left.mean()

Di sini dapat diinterpretasikan, karyawan yang keluar dari perusahaan memiliki tingkat kepuasan rendah, tingkat promosi rendah, gaji rendah, dan bekerja lebih banyak dibandingkan yang tetap di perusahaan.
Fungsi describe() di pandas sangat praktis untuk mendapatkan berbagai statistik ringkas. Fungsi ini mengembalikan jumlah, mean, standar deviasi, nilai minimum dan maksimum, serta kuantil dari data.
data.describe()

Visualisasi Data
Karyawan yang Keluar
Mari periksa berapa banyak karyawan yang keluar?
Di sini, Anda dapat membuat grafik batang menggunakan Matplotlib. Grafik batang cocok untuk menunjukkan jumlah variabel diskret.
left_count=data.groupby('left').count()
plt.bar(left_count.index.values, left_count['satisfaction_level'])
plt.xlabel('Karyawan Keluar dari Perusahaan')
plt.ylabel('Jumlah Karyawan')
plt.show()

data.left.value_counts()
0 11428
1 3571
Name: left, dtype: int64
Di sini, Anda dapat melihat dari sekitar 15.000, sekitar 3.571 keluar, dan 11.428 tetap. Jumlah karyawan yang keluar adalah 23% dari total karyawan.
Jumlah Proyek
Demikian pula, Anda juga dapat membuat grafik batang untuk menghitung jumlah karyawan yang dikerahkan pada berapa banyak proyek?
num_projects=data.groupby('number_project').count()
plt.bar(num_projects.index.values, num_projects['satisfaction_level'])
plt.xlabel('Jumlah Proyek')
plt.ylabel('Jumlah Karyawan')
plt.show()

- Mayoritas karyawan mengerjakan 3–5 proyek.
Lama Bekerja di Perusahaan
Demikian pula, Anda juga dapat membuat grafik batang untuk menghitung jumlah karyawan berdasarkan berapa lama pengalamannya?
time_spent=data.groupby('time_spend_company').count()
plt.bar(time_spent.index.values, time_spent['satisfaction_level'])
plt.xlabel('Jumlah Tahun Bekerja di Perusahaan')
plt.ylabel('Jumlah Karyawan')
plt.show()

Sebagian besar karyawan memiliki pengalaman antara 2–4 tahun. Selain itu, ada kesenjangan besar antara karyawan berpengalaman 3 tahun dan 4 tahun.
Subplot menggunakan Seaborn
Begini cara Anda menganalisis fitur satu per satu, tetapi ini akan memakan waktu. Opsi yang lebih baik adalah menggunakan pustaka Seaborn dan memplot semua grafik dalam sekali jalan menggunakan subplot.
features=['number_project','time_spend_company','Work_accident','left', 'promotion_last_5years','Departments ','salary']
fig=plt.subplots(figsize=(10,15))
for i, j in enumerate(features):
plt.subplot(4, 2, i+1)
plt.subplots_adjust(hspace = 1.0)
sns.countplot(x=j,data = data)
plt.xticks(rotation=90)
plt.title("No. of employee")

Anda dapat mengamati poin-poin berikut pada visualisasi di atas:
- Mayoritas karyawan mengerjakan 3–5 proyek.
- Terjadi penurunan besar antara karyawan berpengalaman 3 tahun dan 4 tahun.
- Jumlah karyawan yang keluar adalah 23% dari total karyawan.
- Sangat sedikit karyawan yang mendapat promosi dalam 5 tahun terakhir.
- Departemen penjualan memiliki jumlah karyawan maksimum, diikuti oleh teknis dan dukungan.
- Kebanyakan karyawan mendapatkan gaji menengah atau rendah.
fig=plt.subplots(figsize=(10,15))
for i, j in enumerate(features):
plt.subplot(4, 2, i+1)
plt.subplots_adjust(hspace = 1.0)
sns.countplot(x=j,data = data, hue='left')
plt.xticks(rotation=90)
plt.title("No. of employee")

Anda dapat mengamati poin-poin berikut pada visualisasi di atas:
- Karyawan yang memiliki jumlah proyek lebih dari 5 cenderung keluar dari perusahaan.
- Karyawan yang mengerjakan 6 dan 7 proyek keluar dari perusahaan; tampaknya mereka kelebihan beban kerja.
- Karyawan dengan pengalaman lima tahun lebih banyak keluar karena tidak ada promosi dalam 5 tahun terakhir, dan yang berpengalaman lebih dari 6 tahun tidak keluar karena sudah terikat dengan perusahaan.
- Mereka yang mendapat promosi dalam 5 tahun terakhir tidak keluar, yaitu semua yang keluar tidak mendapat promosi dalam 5 tahun sebelumnya.
Ringkasan Analisis dan Visualisasi Data:
Fitur-fitur berikut paling memengaruhi seseorang untuk keluar dari perusahaan:
- Promosi: Karyawan jauh lebih mungkin berhenti jika tidak menerima promosi dalam 5 tahun terakhir.
- Lama Bekerja: Di sini, titik tiga tahun tampak menjadi titik krusial dalam karier karyawan. Sebagian besar berhenti sekitar tahun ketiga. Poin penting lainnya adalah titik 6 tahun, di mana karyawan sangat kecil kemungkinannya untuk keluar.
- Jumlah Proyek: Keterlibatan karyawan adalah faktor penting lain yang memengaruhi keputusan untuk keluar. Karyawan dengan 3–5 proyek lebih kecil kemungkinannya untuk keluar. Karyawan dengan jumlah proyek yang lebih sedikit atau lebih banyak cenderung keluar.
- Gaji: Sebagian besar karyawan yang keluar berada pada kelompok gaji menengah atau rendah.
Analisis Klaster:
Mari cari tahu kelompok karyawan yang keluar. Anda dapat mengamati bahwa faktor terpenting bagi karyawan untuk tetap atau keluar adalah kepuasan dan kinerja di perusahaan. Jadi mari kita kelompokkan mereka menggunakan analisis klaster.
#import module
from sklearn.cluster import KMeans
# Filter data
left_emp = data[['satisfaction_level', 'last_evaluation']][data.left == 1]
# Create groups using K-means clustering.
kmeans = KMeans(n_clusters = 3, random_state = 0).fit(left_emp)
# Add new column "label" annd assign cluster labels.
left_emp['label'] = kmeans.labels_
# Draw scatter plot
plt.scatter(left_emp['satisfaction_level'], left_emp['last_evaluation'], c=left_emp['label'],cmap='Accent')
plt.xlabel('Satisfaction Level')
plt.ylabel('Last Evaluation')
plt.title('3 Clusters of employees who left')
plt.show()

Di sini, karyawan yang keluar dari perusahaan dapat dikelompokkan menjadi 3 tipe karyawan:
- Kepuasan Tinggi dan Evaluasi Tinggi (diarsir warna hijau pada grafik), Anda juga dapat menyebutnya Pemenang.
- Kepuasan Rendah dan Evaluasi Tinggi (diarsir warna biru (diarsir warna hijau pada grafik), Anda juga dapat menyebutnya Frustrated).
- Kepuasan Sedang dan Evaluasi Sedang (diarsir warna abu-abu pada grafik), Anda juga dapat menyebutnya 'Tidak cocok'.
Membangun Model Prediksi
Pra-pemrosesan Data
Banyak algoritme machine learning memerlukan data masukan numerik, jadi Anda perlu merepresentasikan kolom kategorikal dalam kolom numerik.
Untuk melakukan encoding data ini, Anda dapat memetakan setiap nilai ke sebuah angka. Misalnya, nilai kolom Salary dapat direpresentasikan sebagai low:0, medium:1, dan high:2.
Proses ini dikenal sebagai label encoding, dan sklearn dengan mudah melakukannya untuk Anda menggunakan LabelEncoder.
# Import LabelEncoder
from sklearn import preprocessing
#creating labelEncoder
le = preprocessing.LabelEncoder()
# Converting string labels into numbers.
data['salary']=le.fit_transform(data['salary'])
data['Departments ']=le.fit_transform(data['Departments '])
Di sini, Anda mengimpor modul preprocessing dan membuat objek Label Encoder. Menggunakan objek LabelEncoder ini Anda melakukan fit dan transform kolom "salary" dan "Departments " menjadi kolom numerik.
Membagi Train dan Test Set
Untuk memahami kinerja model, membagi dataset menjadi training set dan test set adalah strategi yang baik.
Mari bagi dataset menggunakan fungsi train_test_split(). Anda perlu memberikan 3 parameter: fitur, target, dan ukuran test_set. Selain itu, Anda dapat menggunakan random_state untuk memilih rekaman secara acak.
#Spliting data into Feature and
X=data[['satisfaction_level', 'last_evaluation', 'number_project',
'average_montly_hours', 'time_spend_company', 'Work_accident',
'promotion_last_5years', 'Departments ', 'salary']]
y=data['left']
# Import train_test_split function
from sklearn.model_selection import train_test_split
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 70% training and 30% test
Di sini, dataset dipecah menjadi dua bagian dengan rasio 70:30. Artinya 70% data digunakan untuk pelatihan model dan 30% untuk pengujian model.
Pembangunan Model
Mari bangun model prediksi employee churn.
Di sini, Anda akan memprediksi churn menggunakan Gradient Boosting Classifier.
Pertama, impor modul GradientBoostingClassifier dan buat objek classifier Gradient Boosting menggunakan fungsi GradientBoostingClassifier().
Lalu, latih model Anda pada train set menggunakan fit() dan lakukan prediksi pada test set menggunakan predict().
#Import Gradient Boosting Classifier model
from sklearn.ensemble import GradientBoostingClassifier
#Create Gradient Boosting Classifier
gb = GradientBoostingClassifier()
#Train the model using the training sets
gb.fit(X_train, y_train)
#Predict the response for test dataset
y_pred = gb.predict(X_test)
Mengevaluasi Kinerja Model
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
# Model Precision
print("Precision:",metrics.precision_score(y_test, y_pred))
# Model Recall
print("Recall:",metrics.recall_score(y_test, y_pred))
Accuracy: 0.971555555556
Precision: 0.958252427184
Recall: 0.920708955224
Anda mendapatkan tingkat klasifikasi 97%, yang dianggap akurat.
Precision: Precision berkaitan dengan ketepatan, yaitu seberapa tepat model Anda. Dengan kata lain, ketika model membuat prediksi, seberapa sering prediksi itu benar. Dalam kasus prediksi Anda, ketika model Gradient Boosting memprediksi seorang karyawan akan keluar, karyawan tersebut benar-benar keluar 95% dari waktu.
Recall: Jika ada karyawan yang keluar pada test set dan model Gradient Boosting Anda dapat mengidentifikasinya 92% dari waktu.
Kesimpulan
Selamat, Anda telah mencapai akhir tutorial ini!
Dalam tutorial ini, Anda telah mempelajari apa itu Employee Churn, bagaimana bedanya dengan customer churn, analisis data eksploratori dan visualisasi dataset employee churn menggunakan matplotlib dan seaborn, pembangunan model dan evaluasinya menggunakan paket scikit-learn di Python.
Saya menantikan masukan atau pertanyaan dari Anda. Anda dapat mengajukan pertanyaan dengan meninggalkan komentar, dan saya akan berusaha sebaik mungkin untuk menjawabnya.
Jika Anda tertarik untuk mempelajari lebih lanjut tentang Python, lihat kursus Intermediate Python for Data Science dari DataCamp.
