1. KLASIFIKASI DATA ABSENSI KERJA DENGAN MENGGUNAKAN
METODE K-NEAREST NEIGHBOUR, NAÏVE BAYES, DECISION
TREE DAN RANDOM FOREST
OLEH : DIAN VITIANA NINGRUM
(06211540000020)
2. Kesuksesan suatu perusahaan terletak pada ketepatan
waktu dan integritas karyawannya. Absensi kerja perlu
dimonitor agar pekerja dapat mematuhi peraturan yang
ada di perusahaan.
Sistem manajemen kehadiran karyawan yang berfokus
meningkatkan produktivitas kerja dan pengembangan diri
karyawan dengan lebih efektif dan efisien sehingga
perusahaan dapat berkompetisis dengan kompetitor
dengan baik
2
PENDAHULUAN
3. SUMBER DATA
Sumber data yang digunakan
adalah data sekunder, karena
menggunakan data pada
UCI Machine Learning
3
DATA SEKUNDER
Data yang digunakan adalah
Absenteeism atWork
ABSENTEEISM AT WORK
4. VARIABEL PENELITIAN
• Y : Absensi karyawan
• X1 : Alasan sakit
• X2 : Biaya Trasnsportasi
• X3 : Jarak hunian ke tempat kerja
• X4 : Waktu pelayanan
• X5 : Usia
• X6 : Beban kerja rata-ratahari
• X7 : Hit target
• X8 : Kedisplinan
• X9 : Indeks massa tubuh
4
6. 6
Import Packages
##import packages
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import
LabelEncoder
data = pd.read_excel (r'E:data_absen.xlsx', sheet_name='Sheet1')
Loading Data
7. 7
data['Absenteeism time in hours'].replace([0,1,2, 3, 4, 5, 7, 8,16, 24,32, 40, 48, 56, 64, 80, 104, 112,
120 ],['Kurang dari 6 jam','Kurang dari 6 jam','Kurang dari 6 jam','Kurang dari 6 jam','Kurang dari 6
jam','Kurang dari 6 jam', 'Lebih dari 6 jam','Lebih dari 6 jam','Lebih dari 6 jam','Lebih dari 6
jam','Lebih dari 6 jam','Lebih dari 6 jam','Lebih dari 6 jam','Lebih dari 6 jam','Lebih dari 6 jam','Lebih
dari 6 jam','Lebih dari 6 jam','Lebih dari 6 jam','Lebih dari 6 jam'],inplace=True)
FUTURE ENGINEERING
Variabel Y, yaitu data Absenteeism time in hours, data dibagi menjadi 2
kategori, yaitu kurang dari 6 jam dan lebih dari 6 jam, sehingga, data dikode
sebagai berikut
8. 8
## drop data
data = data.drop("ID", axis=1)
data = data.drop("Education", axis=1)
data = data.drop("Son", axis=1)
data = data.drop("Seasons", axis=1)
data = data.drop("Social drinker", axis=1)
data = data.drop("Social smoker", axis=1)
data = data.drop("Pet", axis=1)
data = data.drop("Height", axis=1)
data = data.drop("Month of absence", axis=1)
data = data.drop("Day of the week", axis=1)
data = data.drop("Weight", axis=1)
Drop data dilakukan untuk
menghilangkan data yang
sekiranya tidak diperlukan
dalam analisis
10. 10
##Deteksi MissingValue
for col in data.columns.values:
if data[col].isnull().values.any():
print("Missing values in "+col)
data.isnull().any()
deteksi missing value digunakan
untuk mengetahui apakah
terdapat data yang missing atau
tidak lengkap. hasil deteksi
missing value pada data di
samping adalah False, artinya
tidak ada data yang missing.
12. 12
##Correlation
f,ax = plt.subplots(figsize=(10, 10))
sns.heatmap(correlation, annot=True,
linewidths=.5, fmt= '.1f',ax=ax)
plt.title("Correlation between Columns of
dataFrame",y=1.08)
plt.show()
variabel umur dan variabel waktu
pelayanan memiliki koreasi yang paling
besar, yaitu mendekati 0,7. sedangkan
korelasi terbesar kedua setelah variabel
waktu pelayanan dan umur adalah
varaiabel umur dengan variabel indeks
massa tubuh.Yaitu sebesar 0.5
13. 13
## Scatter Plot
g = sns.PairGrid(data,
hue="Absenteeism time in hours")
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)
g.add_legend()
plt.show()
14. 14
### PAIR PLOT
sns.pairplot(data=data[['Reason
for absence', 'Transportation
expense', 'Distance from
Residence toWork', 'Service time',
'Age', 'Work load Average/day ',
'Hit target', 'Body mass index',
'Absenteeism time in hours']],
hue='Absenteeism time in hours')
plt.show()
15. 15
## Komposisi Variabel Y
f,ax=plt.subplots(1,2,figsize=(18,8))
data['Absenteeism time in
hours'].value_counts().plot.pie(explode=[0
,0.1],autopct='%1.1f%%',ax=ax[0],shadow
=True)
ax[0].set_title('Absenteeism time in hours')
ax[0].set_ylabel('')
sns.countplot('Absenteeism time in
hours',data=data,ax=ax[1])
ax[1].set_title('Absenteeism time in hours')
plt.show()
16. 16
## Diagram batangVariabel HitTarget
sns.catplot(x="Hit target",hue="Absenteeism time in hours",kind="count", data=data)
17. 17
## Diagram BatangVariabel ServiceTime
sns.catplot(x="Service time",hue="Absenteeism time in hours",kind="count", data=data)
23. 23
Pembagian dataTrainingTesting
from sklearn.model_selection import train_test_split
y = data['Absenteeism time in hours']
X = data.drop(['Absenteeism time in hours'], axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20,
random_state = 123)
24. 24
Metode kNN
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
knn.score(X_train, y_train)
knn.score(X_test, y_test)
y_predict=knn.predict(X_test)
y_proba=knn.predict_proba(X_test)
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, auc,
roc_curve
conf_matrix = confusion_matrix(y_test, y_predict)
print(conf_matrix)
Class= data['Absenteeism time in hours'].unique()
conf_matrix_df = pd.DataFrame(data=conf_matrix, columns=Class, index=Class)
conf_matrix_df
sns.heatmap(conf_matrix_df, annot=True, cmap="YlGnBu")
plt.show()
25. 25
Goodness of fit kNN
akurasi=accuracy_score(y_test, y_predict)
presisi=precision_score(y_test, y_predict,pos_label=1, average=None)
recalls=recall_score(y_test,y_predict,pos_label=1, average=None)
print(akurasi)
print(presisi)
print(recalls)
print(akurasi)
print(presisi.mean())
print(recalls.mean())
28. 28
Metode Naive Bayes
Naïve Bayes ScoreTraining =
0.6807432432432
Naïve Bayes ScoreTesting =
0.628378378378
Goodness of Fit
Akurasi = 0.6283783783783784
Presisi = 0.5680592991913747
Recall = 0.5624613481756339
29. 29
Metode Klasifikasi DecisionTree
%pylab inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier, BaggingClassifier,
AdaBoostClassifier,GradientBoostingClassifier
pylab.rcParams['figure.figsize'] = (10, 7)
from sklearn.model_selection import train_test_split
y = data['Absenteeism time in hours']
X = data.drop(['Absenteeism time in hours'], axis=1)
X_train,X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20,
random_state = 123)
DecisionTree = DecisionTreeClassifier(random_state=123)
DecisionTree.fit(X_train, y_train)
DecisionTree.score(X_train, y_train)
30. 30
DecisionTree.score(X_test, y_test)
conf_matrixDecisionTree = confusion_matrix(y_test, ynb_predict)
Class= data['Absenteeism time in hours'].unique()
conf_matrix_df = pd.DataFrame(data=conf_matrixDecisionTree, columns=Class, index=Class)
conf_matrix_df
sns.heatmap(conf_matrix_df, annot=True, cmap="YlGnBu")
plt.show()
Metode Klasifikasi DecisionTree
38. 38
GRADIENT BOOSTING
Best Score = 0.8412162162162162
Best GB ScoreTraining = 0.893581081081081
Best GB ScoreTesting = 0.8040540540540541
ADAPTIVE BOOSTING
Best Score = 0.831081081081081
Best AB ScoreTraining = 0.8445945945945946
Best AB ScoreTesting = 0.8108108108108109
RANDOM FOREST
Best Score = 0.8344594594594594
Best RF ScoreTraining = 0.8665540540540541
Best RF ScoreTesting = 0.8040540540540541