You are on page 1of 18

BAB 4

HASIL DAN DISKUSI

4.1 Implementasi Sistem Model

Bab ini berisikan tentang hasil penelitian yang dicapai beserta dengan
penjabaran diskusi analisis terkait hasil penelitian yang disajikan dengan Python
3.9. dalam membangun model KNN.

4.1.1 Potongan Kode

Berikut potongan kode dari hasil implementasi sistem model menggunakan


KNN dengan bahasa pemrograman Python 3.9
1 # d a t a m a n i p u l a t i o n and v i s u a l i s a t i o n l i b r a r i e s
2 i m p o r t numpy a s np # l i n e a r a l g e b r a
3 i m p o r t p a n d a s a s pd # d a t a p r o c e s s i n g , CSV f i l e I / O ( e . g . pd .
read csv )
4 import m a t p l o t l i b . pyplot as p l t
5 import seaborn as sns
6

7 # import i n t e r a c t i v e l i b r a r y
8 from i p y w i d g e t s i m p o r t i n t e r a c t
9

10 # balancing the t a r g e t variable


11 from i m b l e a r n . o v e r s a m p l i n g i m p o r t RandomOverSampler
12

13 # variable scaling libraries


14 from s k l e a r n . p r e p r o c e s s i n g i m p o r t S t a n d a r d S c a l e r
15

16 # variable preprocessing
17 from s k l e a r n i m p o r t p r e p r o c e s s i n g
18

19 # sklearn libraries
20 from s k l e a r n . m o d e l s e l e c t i o n i m p o r t t r a i n t e s t s p l i t
21 from s k l e a r n . n e i g h b o r s i m p o r t K N e i g h b o r s C l a s s i f i e r
22 from s k l e a r n . m o d e l s e l e c t i o n i m p o r t c r o s s v a l s c o r e
23

24 # feature selection libraries


25 from s k l e a r n . f e a t u r e s e l e c t i o n i m p o r t f c l a s s i f
26 from s k l e a r n . f e a t u r e s e l e c t i o n i m p o r t S e l e c t K B e s t

14
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
27 from s k l e a r n . f e a t u r e s e l e c t i o n i m p o r t c h i 2
28

29 # evaluation metrics
30 from s k l e a r n import metrics
31 from s k l e a r n . metrics import confusion matrix
32 from s k l e a r n . metrics import accuracy score
33 from s k l e a r n . metrics import recall score
34 from s k l e a r n . metrics import precision score
35 from s k l e a r n . metrics import f1 score
36 from s k l e a r n . metrics import classification report
37 from s k l e a r n . metrics import roc curve
38 from s k l e a r n . metrics import roc auc score
39

40 # import hyperparameter tuning l i b r a r y


41 from s k l e a r n . m o d e l s e l e c t i o n i m p o r t GridSearchCV
42

43 # other l i b r a r i e s
44 i m p o r t math
45 from c o l l e c t i o n s i m p o r t C o u n t e r
Kode 4.1: Import Libraries Usage

Pada Kode 4.1 merupakan gambaran potongan kode untuk mengimpor


berbagai pustaka untuk memanipulasi dan memvisualisasikan data, serta melakukan
tugas-tugas penting dalam analisis data dan pemodelan di proyek pembelajaran
mesin. Pustaka-pustaka tersebut termasuk numpy untuk operasi linier pada array,
pandas untuk pemrosesan data dan membaca file CSV, matplotlib dan seaborn
untuk visualisasi data, ipywidgets untuk interaksi yang interaktif, imblearn untuk
oversampling data, sklearn untuk pra-pemrosesan data, pemodelan, evaluasi, seleksi
fitur, tuning hyperparameter, dan metrik evaluasi. Selain itu, pustaka lainnya
seperti math dan collections juga diimpor. Semua pustaka ini sangat penting untuk
mengelola dan menganalisis data, membangun model, dan mengevaluasi performa
dalam proyek pembelajaran mesin.
1 # Read g o f o o d d a t a s e t . c s v
2 d a t a = pd . r e a d c s v ( ' g o f o o d d a t a s e t . c s v ' )
Kode 4.2: Import Dataset

Pada Kode 4.2 merupakan gambaran potongan kode untuk membaca file
dan menyimpan datanya ke dalam sebuah DataFrame pandas yang bernama data.
Langkah ini penting untuk memuat dataset GoFood dan mempersiapkannya untuk
tugas analisis data dan pemodelan selanjutnya.

15
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
1 # P r e v i e w 5 o f d a t a s e t rows
2 d a t a . head ( )
3 # View d i m e n s i o n s o f d a t a s e t
4 data . shape
5 # P r e v i e w d a t a s e t column names
6 d a t a . columns
Kode 4.3: Exploratory Data Analysis

Pada Kode 4.3 di atas digunakan untuk melakukan beberapa tugas


pengenalan dataset. Kode data.head() digunakan untuk melihat 5 baris pertama
dari dataset. Kode data.shape digunakan untuk melihat dimensi atau ukuran dataset,
yaitu jumlah baris dan kolom. Sedangkan, kode data.columns digunakan untuk
melihat daftar nama kolom dalam dataset. Tiga kode tersebut berguna dalam
mengenali dataset secara awal sebelum melakukan analisis dan pemodelan data
lebih lanjut.
1 # d a t a t y p e s of a l l p r e s e n t a t t r i b u t e s in the d a t a s e t
2 data . info ()
3

4 # s t a t i s t i c metrics for continuous variables without s c i e n t i f i c


notation
5 d a t a . d e s c r i b e ( ) . a p p l y ( lambda s : s . a p p l y ( lambda x : f o r m a t ( x , ' f ' ) ) )
Kode 4.4: View Summary of Datatypes

Pada Kode 4.4 di atas digunakan untuk menganalisis tipe data dan metrik
statistik dari atribut-atribut yang ada dalam dataset. Kode data.info() digunakan
untuk melihat informasi mengenai tipe data dari setiap atribut dalam dataset.
Sedangkan, kode data.describe().apply(lambda s: s.apply(lambda x: format(x,
’f’))) digunakan untuk menghasilkan metrik statistik untuk variabel kontinu dalam
dataset tanpa menggunakan notasi ilmiah. Kedua kode ini membantu dalam
pemahaman awal tentang tipe data atribut dan informasi statistik dari dataset yang
sedang dianalisis.
1 # remove t h e some u n n e c e s s a r y f e a t u r e s
2 del data [ ' description ' ]
3

4 d a t a . i s n u l l ( ) . sum ( )
Kode 4.5: Check Missing Values

Pada Kode 4.5 di atas digunakan untuk menghapus fitur yang tidak
diperlukan dari dataset dan menghitung jumlah nilai null (kosong) pada setiap
atribut dalam dataset. Kode del data[’description’] menghapus fitur ”description”

16
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
dari dataset. Selanjutnya, kode data.isnull().sum() menghitung jumlah nilai null
pada setiap atribut dalam dataset. Tindakan ini berguna untuk membersihkan
dataset dari fitur yang tidak diperlukan dan memeriksa apakah ada nilai null yang
perlu ditangani.
1 l a b e l e n c o d e r = p r e p r o c e s s i n g . LabelEncoder ( )
2

3 d a t a [ ' merchant name ' ] = l a b e l e n c o d e r . f i t t r a n s f o r m ( d a t a [ '


merchant name ' ] )
4 data [ ' merchant area ' ] = label encoder . f i t t r a n s f o r m ( data [ '
merchant area ' ])
5 data [ ' category ' ] = label encoder . f i t t r a n s f o r m ( data [ ' category ' ])
6 data [ ' display ' ] = label encoder . f i t t r a n s f o r m ( data [ ' display ' ])
7 data [ ' product ' ] = label encoder . f i t t r a n s f o r m ( data [ ' product ' ])
8 data [ ' price ' ] = label encoder . f i t t r a n s f o r m ( data [ ' price ' ])
9 data [ ' discount price ' ] = label encoder . f i t t r a n s f o r m ( data [ '
discount price ' ])
10 data [ ' isDiscount ' ] = label encoder . f i t t r a n s f o r m ( data [ ' isDiscount '
])
Kode 4.6: Label Encoder

Pada Kode 4.6 di atas digunakan untuk melakukan proses encoding label
pada beberapa atribut dalam dataset menggunakan objek LabelEncoder dari pustaka
preprocessing. Kode ini menunjukkan pemrosesan encoding label pada atribut-
atribut seperti merchant name, merchant area, category, display, product, price,
discount price, dan isDiscount. Proses encoding label ini berguna untuk mengubah
nilai-nilai kategorikal menjadi representasi numerik agar dapat digunakan dalam
analisis atau pemodelan yang melibatkan algoritma pembelajaran mesin.
1 # c r e a t e a l i s t o f n u m e r i c a l f e a t u r e s and p l o t them
2 l i s t o f n u m f e a t u r e s = d a t a . l o c [ : , d a t a . columns != ' i s D i s c o u n t ' ]
3 p a l e t t e f e a t u r e s = [ ' # E68753 ' , ' #409996 ' ]
4 s n s . s e t ( r c ={ ' a x e s . f a c e c o l o r ' : ' #ECECEC ' } ) # b a c k g r o u n d c o l o r o f a l l
plots
5

6 for feature in l i s t o f n u m f e a t u r e s :
7 p l t . f i g u r e ( f i g s i z e =(15 , 6 . 5 ) )
8 p l t . t i t l e ( f e a t u r e , f o n t s i z e =15 , f o n t w e i g h t = ' b o l d ' , f o n t n a m e = '
H e l v e t i c a ' , ha = ' c e n t e r ' )
9 ax = s n s . b o x p l o t ( x= d a t a [ ' i s D i s c o u n t ' ] , y= l i s t o f n u m f e a t u r e s [
f e a t u r e ] , data =data , p a l e t t e = p a l e t t e f e a t u r e s )
10

11 # add l a b e l s t o e a c h b a r

17
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
12 f o r c o n t a i n e r i n ax . c o n t a i n e r s :
13 ax . b a r l a b e l ( c o n t a i n e r , f m t = ' %.2 f ' , l a b e l t y p e = ' e d g e ' )
14

15 # a d j u s t t h e x− a x i s l a b e l
16 ax . s e t x l a b e l ( ' i s D i s c o u n t ' , f o n t s i z e =12 , f o n t w e i g h t = ' b o l d ' ,
fontname= ' H e l v e t i c a ' )
17

18 # a d j u s t t h e y− a x i s l a b e l
19 ax . s e t y l a b e l ( f e a t u r e , f o n t s i z e =12 , f o n t w e i g h t = ' b o l d ' ,
fontname= ' H e l v e t i c a ' )
20

21 p l t . show ( )
Kode 4.7: Numerical features

Pada Kode 4.7 di atas digunakan untuk membuat daftar fitur numerik
dan melakukan plot untuk setiap fitur tersebut. Kode list of num features
menciptakan daftar fitur numerik dengan mengambil semua kolom dalam dataset
kecuali ’isDiscount’. Selanjutnya, loop for digunakan untuk melakukan plotting
pada setiap fitur numerik.
Dalam setiap iterasi loop, sebuah plot boxplot dibuat dengan menggunakan
seaborn. Setiap plot memiliki judul yang sesuai dengan fitur yang sedang diproses.
Plot boxplot ini menunjukkan distribusi nilai fitur numerik berdasarkan variabel
isDiscount, dengan warna plot yang ditentukan oleh palette features.
Selain itu, kode juga menambahkan label pada setiap bar pada plot boxplot
menggunakan ax.bar label. Sumbu x dan y pada plot disesuaikan dengan nama fitur
numerik dan variabel ’isDiscount’ dengan menggunakan ax.set xlabel dan ax.set
ylabel.
Setelah itu, plot ditampilkan menggunakan plt.show().
1 # plot target variable
2 s n s . s e t ( r c ={ ' a x e s . f a c e c o l o r ' : ' #ECECEC ' } ) # b a c k g r o u n d c o l o r o f p l o t
3 p l t . figure ( f i g s i z e =(12 ,6) )
4 p l t . t i t l e ( ” I m b a l a n c e d t a r g e t v a r i a b l e ” , f o n t s i z e =15 , f o n t w e i g h t = '
b o l d ' , f o n t n a m e = ' H e l v e t i c a ' , ha = ' c e n t e r ' )
5 ax = s n s . c o u n t p l o t ( x= d a t a [ ' i s D i s c o u n t ' ] , d a t a = d a t a , p a l e t t e =
palette features )
6

7 # add l a b e l s t o e a c h b a r
8 abs values = data [ ' isDiscount ' ] . value counts ( ascending=False ) .
values
9 ax . b a r l a b e l ( c o n t a i n e r = ax . c o n t a i n e r s [ 0 ] , l a b e l s = a b s v a l u e s )

18
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
10

11 # show t h e p l o t
12 p l t . show ( )
Kode 4.8: Plot Imbalanced Target Variable

Pada Kode 4.8 di atas digunakan untuk melakukan plot terhadap variabel
target. Kode sns.set(rc=’axes.facecolor’:’ECECEC’) digunakan untuk mengatur
warna latar belakang plot. Selanjutnya, menggunakan plt.figure(figsize=(12,6)),
kita mengatur ukuran plot dengan hasil seperti di bawah ini:

Gambar 4.1. Imbalanced Target

1 # balance the t a r g e t variable


2 columns = d a t a . columns
3 columns = [ c f o r c i n columns i f c not i n [ ' i s D i s c o u n t ' ] ]
4 y = data [ ' isDiscount ' ] # prior target variable
5 X = d a t a [ columns ] # p r i o r f e a t u r e s
6

7 r o s = RandomOverSampler ( s a m p l i n g s t r a t e g y = ' m i n o r i t y ' )


8 X, y = r o s . f i t r e s a m p l e (X, y ) # y t r a i n a s b a l a n c e d t a r g e t v a r i a b l e
9 p r i n t ( f ” I m b a l a n c e d t a r g e t c l a s s : { ( y ) }\ n \ n B a l a n c e d t a r g e t c l a s s : {
C o u n t e r ( y ) }\ n ” )
10 p r i n t (X . s h a p e [ 0 ] − d a t a . s h a p e [ 0 ] , ' new random p i c k e d p o i n t s ' )
Kode 4.9: Balanced Target Variable Random Sampling

Pada Kode 4.9 di atas digunakan untuk melakukan penyeimbangan variabel


target. Kode columns = data.columns dan columns = [c for c in columns if c
not in [’isDiscount’]] digunakan untuk mendefinisikan kolom-kolom yang akan
digunakan sebagai fitur dalam model.
Variabel target ’isDiscount’ disimpan dalam y dan fitur-fitur lainnya
disimpan dalam X. Kemudian, menggunakan RandomOverSampler dari pustaka

19
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
imblearn, kita melakukan penyeimbangan target variable dengan mengatur
sampling strategy=’minority’. Proses penyeimbangan dilakukan dengan
menggunakan X dan y yang diberikan ke ros.fit resample(X, y).
1 # plot the balanced t a r g e t variable
2 s n s . s e t ( r c ={ ' a x e s . f a c e c o l o r ' : ' #ECECEC ' } ) # b a c k g r o u n d c o l o r o f p l o t
3 p l t . figure ( f i g s i z e =(12 ,6) )
4 p l t . t i t l e ( ” B a l a n c e d t a r g e t v a r i a b l e ” , f o n t s i z e =15 , f o n t w e i g h t = '
b o l d ' , f o n t n a m e = ' H e l v e t i c a ' , ha = ' c e n t e r ' )
5 ax = s n s . c o u n t p l o t ( x=y , d a t a = d a t a , p a l e t t e = p a l e t t e f e a t u r e s )
6 p l t . show ( )
Kode 4.10: Plot Balanced Target Variable Random Sampling

Pada Kode 4.10 di atas digunakan untuk melakukan plot terhadap


variabel target yang telah seimbang setelah proses penyeimbangan. Kode
sns.set(rc=’axes.facecolor’:’ECECEC’) digunakan untuk mengatur warna latar
belakang plot. Selanjutnya, menggunakan plt.figure(figsize=(12,6)), kita mengatur
ukuran plot dengan hasil seperti di bawah ini:

Gambar 4.2. Balanced Target

1 s n s . p a i r p l o t ( d a t a , hue = ' i s D i s c o u n t ' )


Kode 4.11: Pairplot Data Visualization

Pada Kode 4.11 di atas digunakan untuk membuat pairplot dengan


menggunakan seaborn. Kode sns.pairplot(data, hue=’isDiscount’) menghasilkan
plot yang menampilkan hubungan antara semua pasangan variabel dalam dataset
data. Setiap titik data pada plot diberi warna berdasarkan nilai variabel target
’isDiscount’.
1 # p l o t histograms of the v a r i a b l e s

20
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
2

3 p l t . rcParams [ ' f i g u r e . f i g s i z e ' ]=(30 ,25)


4 d a t a . p l o t ( k i n d = ' h i s t ' , b i n s =10 , s u b p l o t s = True , l a y o u t = ( 5 , 2 ) ,
sharex=False , sharey= False )
5 p l t . show ( )
Kode 4.12: Plot Histogram Visualization

Pada Kode 4.12 di atas digunakan untuk membuat histogram dari variabel-
variabel dalam dataset. Kode plt.rcParams[’figure.figsize’]=(30,25) digunakan
untuk mengatur ukuran plot dengan hasil seperti di bawah ini:

Gambar 4.3. Histogram Data Visualization

1 # isDiscount distribution
2 p l t . figure ( f i g s i z e =(10 ,5) )
3

4 t o t a l = f l o a t ( len ( data [ ' price ' ]) )


5

6 a = sns . countplot ( x = ' isDiscount ' , data = data )


7

8 for f in a . patches :
9 height = f . get height ()
10 a . t e x t ( f . g e t x ( ) + f . g e t w i d t h ( ) / 2 . , h e i g h t +3 , ' { : 1 . 2 f } ' .
f o r m a t ( ( h e i g h t / t o t a l ) * 1 0 0 ) , ha =” c e n t e r ” )
11 p l t . show ( )
Kode 4.13: discount Distribution

Pada Kode 4.13 di atas digunakan untuk membuat distribusi variabel


’isDiscount’ menggunakan seaborn. Kode plt.figure(figsize=(10,5)) digunakan
untuk mengatur ukuran plot dengan hasil seperti di bawah ini:

21
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
Gambar 4.4. Discount Distribution

1 # merchant a r e a s d i s t r i b u t i o n
2 p l t . figure ( f i g s i z e =(10 ,5) )
3

4 a = f l o a t ( len ([ ' price ' ]) )


5

6 a = s n s . c o u n t p l o t ( x= ' m e r c h a n t a r e a ' , d a t a = d a t a )
7 for s in a . patches :
8 height = s . get height ()
9 a . t e x t ( s . g e t x ( ) + s . g e t w i d t h ( ) / 2 . , h e i g h t +3 , ' { : 1 . 2 f } ' . f o r m a t ( (
h e i g h t / t o t a l ) * 1 0 0 ) , ha = ' c e n t e r ' )
10 p l t . show ( )
Kode 4.14: Merchant Area Distribution

Pada Kode 4.14 di atas digunakan untuk membuat distribusi variabel


merchant area menggunakan seaborn. Kode plt.figure(figsize=(10,5)) digunakan
untuk mengatur ukuran plot dengan hasil seperti di bawah ini:

Gambar 4.5. Merchant Area Distribution

22
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
1 # # p l o t t i n g c o r r e l a t i o n matrix
2 # f i g , ax = p l t . s u b p l o t s ( f i g s i z e = ( 8 , 6 ) )
3 # s n s . h e a t m a p ( d a t a . c o r r ( ) , a n n o t = True , l i n e w i d t h s = . 5 , f m t =
' . 1 f ' , ax = ax , cmap = ' B l u e s ' )
4 # p l t . show ( )
5

6 # p l o t t i n g c o r r e l a t i o n matrix to n o t i c e r e l a t i o n s h i p s or lack of
i t between v a r i a b l e s
7 corr = data . corr ()
8

9 p l t . f i g u r e ( f i g s i z e = (20 , 12) )
10 s n s . h e a t m a p ( c o r r , x t i c k l a b e l s = c o r r . columns , y t i c k l a b e l s = c o r r .
columns , l i n e w i d t h s = 4 , a n n o t = True , f m t = ” . 2 f ” , cmap=”BrBG”
)
11 p l t . show ( )
Kode 4.15: Plot Correlation Matrix

Pada Kode 4.15 di atas digunakan untuk membuat matriks korelasi


menggunakan seaborn.
Pada potongan kode pertama yang dijadikan komentar, kita menggunakan
sns.heatmap untuk membuat plot matriks korelasi. Kode tersebut memanfaatkan
data.corr() untuk menghitung korelasi antar variabel dalam dataset. Plot ini
menampilkan koefisien korelasi antar variabel dalam bentuk heatmap, dengan
angka-angka di setiap sel yang menunjukkan nilai korelasi. Warna dalam heatmap
mengindikasikan kekuatan dan arah korelasi antar variabel dengan hasil seperti di
bawah ini:

Gambar 4.6. Correlation Matrix

23
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
1 # p r e p a r a t i o n of t r a i n and t e s t d a t a f o r ML m o d e l s
2 X train , X test , y t r a i n , y t e s t = t r a i n t e s t s p l i t (X, y , t e s t s i z e
=0.3 , random s t a t e = 0 ) # 70 % o f t r a i n d a t a , 30 % o f t e s t d a t a
3 X t r a i n . shape , X t e s t . shape , y t r a i n . shape , y t e s t . shape
Kode 4.16: Data test and training

Pada Kode 4.16 di atas digunakan untuk membagi data menjadi data
pelatihan (train) dan data uji (test) dalam persiapan untuk model pembelajaran
mesin (ML).
1 # Rescale data
2 sc = StandardScaler ( )
3

4 sc . f i t ( X t r a i n )
5

6 X t r a i n s t d = sc . transform ( X t r a i n )
7 X t e s t s t d = sc . transform ( X t e s t )
8

9 p r i n t ( ' A f t e r s t a n d a r d i z i n g o u r f e a t u r e s , t h e f i r s t 5 rows o f o u r
d a t a now l o o k l i k e t h i s : \ n ' )
10 p r i n t ( pd . DataFrame ( X t r a i n s t d ) . h e a d ( ) )
Kode 4.17: Rescale Data

Pada Kode 4.17 di atas digunakan untuk melakukan penskalaan data


menggunakan metode StandardScaler.
Pada potongan kode tersebut, kita menggunakan objek StandardScaler dari
modul sklearn.preprocessing untuk melakukan penskalaan data. Pertama, objek
StandardScaler dipanggil dan dilatih menggunakan metode fit dengan input data
pelatihan, X train. Kemudian, data pelatihan dan data uji, X train dan X test,
diubah menggunakan metode transform dari objek StandardScaler yang telah dilatih
sebelumnya.
1 # find best scored 7 features
2 select f e a t u r e = S e l e c t K B e s t ( f c l a s s i f , k =7) . f i t ( X t r a i n , y t r a i n )
3 print ( ' Score l i s t : ' , s e l e c t f e a t u r e . s c o r e s )
4 print ( ' F e a t u r e l i s t : ' , X t r a i n . columns )
Kode 4.18: Select KBest

Pada Kode 4.18 Potongan kode di atas digunakan untuk memilih 7 fitur
terbaik berdasarkan skor.
Pada potongan kode tersebut, kita menggunakan objek SelectKBest dari
modul sklearn.feature selection untuk memilih 7 fitur terbaik berdasarkan metode f

24
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
classif (ANOVA F-value). Pertama, objek SelectKBest dipanggil dengan parameter
f classif dan k=7, yang menandakan bahwa kita ingin memilih 7 fitur terbaik.
Kemudian, objek SelectKBest dilatih menggunakan data pelatihan, X train, dan
target variabel, y train.
Setelah pelatihan selesai, kita mencetak daftar skor fitur yang dihasilkan
oleh objek SelectKBest menggunakan atribut scores. Selanjutnya, kita mencetak
daftar fitur yang ada dalam dataset menggunakan atribut columns dari objek X train.
Output dari potongan kode tersebut adalah daftar skor fitur yang diperoleh
dan daftar fitur yang ada dalam dataset.
1 X train 2 = s e l e c t f e a t u r e . transform ( X train )
2 X test 2 = s e l e c t f e a t u r e . transform ( X test )
3

4 # hyperparameter tuning
5 p a r a m g r i d = { ' n n e i g h b o r s ' : np . a r a n g e ( 1 , 4 0 ) }
6 knn = K N e i g h b o r s C l a s s i f i e r ( )
7 k n n c v = GridSearchCV ( knn , p a r a m g r i d , cv = 5 )
8 k n n c v . f i t (X, y )
9

10 p r i n t ( ” Best Score : ” + s t r ( knn cv . b e s t s c o r e ) )


11 p r i n t ( ” Best Parameters : ” + s t r ( knn cv . b e s t p a r a m s ) )
Kode 4.19: Select KBest

Pada Kode 4.19 di atas digunakan untuk melakukan penyetelan


hiperparameter (hyperparameter tuning) pada model K-Nearest Neighbors (KNN)
menggunakan GridSearchCV.
Pertama, fitur-fitur terpilih setelah seleksi fitur sebelumnya, X train 2 dan
X test 2, dihasilkan dengan menggunakan metode transform() dari objek select
feature.
Selanjutnya, kita mendefinisikan parameter grid yang berisi daftar nilai
untuk hyperparameter n neighbors dari model KNN. Kemudian, kita membuat objek
KNeighborsClassifier dan objek GridSearchCV dengan menggunakan model KNN
dan parameter grid yang telah ditentukan sebelumnya.
Selanjutnya, objek GridSearchCV dilatih menggunakan data X dan y
(setelah penyeimbangan) untuk mencari kombinasi hyperparameter terbaik dengan
menggunakan metode cross-validation dengan cv=5 (5-fold cross-validation).
Setelah pelatihan selesai, kita mencetak skor terbaik yang diperoleh
menggunakan atribut best score dari objek GridSearchCV, serta mencetak
kombinasi hyperparameter terbaik menggunakan atribut best params dari objek

25
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
GridSearchCV.
Output dari potongan kode tersebut adalah skor terbaik yang diperoleh
setelah penyetelan hiperparameter dan kombinasi hyperparameter terbaik untuk
model KNN.
1 # B u i l d K( 1 0 )
2 knn cv = K N e i g h b o r s C l a s s i f i e r ( 1 0 )
3 %t i m e k n n c v . f i t ( X t r a i n 2 , y t r a i n )
4

6 y pred knn cv 10 = knn cv . p r e d i c t ( X t e s t 2 )


7

8 # Confusion matrix
9 cf matrix knn cv 10 = confusion matrix ( y test , y pred knn cv 10 )
10 print ( cf matrix knn cv 10 )
11

12 ax = s n s . h e a t m a p ( c f m a t r i x k n n c v 1 0 / np . sum ( c f m a t r i x k n n c v 1 0 ) ,
a n n o t = True , f m t = ' .2% ' , cmap= ' b i n a r y ' )
13 ax . s e t t i t l e ( 'K−NN C o n f u s i o n M a t r i x K( 1 0 ) \ n \n ' ) ;
14 ax . s e t x l a b e l ( ' \ n P r e d i c t e d V a l u e s ' )
15 ax . s e t y l a b e l ( ' A c t u a l V a l u e s ' ) ;
16

17 # # T i c k e t l a b e l s − L i s t must be i n a l p h a b e t i c a l o r d e r
18 ax . x a x i s . s e t t i c k l a b e l s ( [ ' 0 ' , ' 1 ' ] )
19 ax . y a x i s . s e t t i c k l a b e l s ( [ ' 0 ' , ' 1 ' ] )
20

21 ## D i s p l a y t h e v i s u a l i z a t i o n of t h e Confusion Matrix .
22 p l t . show ( )
Kode 4.20: Build KNN Classifier with a confusion matrix

Pada Kode 20 di atas digunakan untuk membangun model K-Nearest


Neighbors (KNN) dengan k=10 dan melakukan prediksi menggunakan data uji.
Pertama, model KNN dengan k=10 dibangun dengan menggunakan objek
KNeighborsClassifier dan dilatih dengan menggunakan data X train 2 dan y train.
Selanjutnya, prediksi dilakukan pada data uji (X test 2) menggunakan model
KNN yang telah dilatih, dan hasil prediksi disimpan dalam variabel y pred knn cv
10.
Setelah itu, confusion matrix (matriks konfusi) dihitung dengan
membandingkan nilai sebenarnya (y test) dengan nilai yang diprediksi (y
pred knn cv 10), dan matriks konfusi tersebut disimpan dalam variabel cf matrix
knn cv 10.

26
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
Selanjutnya, matriks konfusi ditampilkan dalam bentuk heatmap (peta
panas) menggunakan seaborn. Di sini, setiap sel dalam matriks konfusi ditampilkan
sebagai persentase dari total jumlah data uji. Selain itu, label sumbu x dan y
disesuaikan untuk menunjukkan nilai prediksi dan nilai aktual yang mungkin.
Terakhir, visualisasi matriks konfusi ditampilkan dengan menggunakan
plt.show().
Output dari potongan kode tersebut adalah matriks konfusi yang
menggambarkan hasil prediksi model KNN dengan k=10 terhadap data uji.
1 # e v a l u a t i o n o f K−NN: m e t r i c s p i v o t c h a r t
2 prin t ( c l a s s i f i c a t i o n r e p o r t ( y test , y pred knn cv 10 ) )
3

4 p r i n t ( 'K( 1 0 ) ' )
5 p r i n t ( ' Accuracy Score : ' + s t r ( round ( a c c u r a c y s c o r e ( y t e s t ,
y pred knn cv 10 ) ,3) ) )
6 p r i n t ( ' P r e c i s i o n Score : ' + s t r ( round ( p r e c i s i o n s c o r e ( y t e s t ,
y p r e d k n n c v 1 0 , p o s l a b e l =0) , 3 ) ) )
7 p r i n t ( ' R e c a l l Score : ' + s t r ( round ( r e c a l l s c o r e ( y t e s t ,
y p r e d k n n c v 1 0 , p o s l a b e l =0) , 3 ) ) )
8 p r i n t ( ' F− S c o r e : ' + s t r ( r o u n d ( f 1 s c o r e ( y t e s t , y p r e d k n n c v 1 0 ,
p o s l a b e l =0) , 3 ) ) )
Kode 4.21: KNN Model Evaluation

Pada Kode 4.21 di atas digunakan untuk mengevaluasi model K-Nearest


Neighbors (KNN) dengan k=10 dan menghasilkan metrik evaluasi serta skor
akurasi, presisi, recall, dan F1-score.
Pertama, classification report digunakan untuk menghasilkan laporan
evaluasi yang mencakup metrik seperti presisi, recall, dan F1-score untuk setiap
kelas dalam data uji. Hasil laporan evaluasi tersebut ditampilkan menggunakan
print().
Selanjutnya, skor akurasi, presisi, recall, dan F1-score dihitung dan
ditampilkan secara terpisah. Skor akurasi dihitung dengan menggunakan accuracy
score, sedangkan skor presisi, recall, dan F1-score untuk kelas 0 (nilai isDiscount
yang tidak aktif) dihitung dengan menggunakan precision score, recall score, dan
f1 score dengan menetapkan pos label=0.
Output dari potongan kode tersebut adalah laporan evaluasi model KNN
dengan k=10, serta skor akurasi, presisi, recall, dan F1-score untuk kelas 0 dengan
hasil seperti di bawah ini:

27
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
Gambar 4.7. Classification Report

1 # Loop o v e r d i f f e r e n t v a l u e s o f k
2 for i , k in enumerate ( neighbors ) :
3 # S e t u p a k−NN C l a s s i f i e r w i t h k n e i g h b o r s : knn
4 knn = K N e i g h b o r s C l a s s i f i e r ( n n e i g h b o r s =k )
5

6 # Fit the c l a s s i f i e r to the t r a i n i n g data


7 knn . f i t ( X t r a i n 2 , y t r a i n )
8

9 # Compute a c c u r a c y on t h e t r a i n i n g s e t
10 t r a i n a c c u r a c y [ i ] = knn . s c o r e ( X t r a i n 2 , y t r a i n )
11

12 # Compute a c c u r a c y on t h e t e s t i n g s e t
13 t e s t a c c u r a c y [ i ] = knn . s c o r e ( X t e s t 2 , y t e s t )
14

15 # Generate plot
16 s n s . s e t ( r c ={ ' a x e s . f a c e c o l o r ' : ' #ECECEC ' } ) # b a c k g r o u n d c o l o r o f a l l
plots
17 plt . figure ( figsize =(12 ,6.5) )
18 p l t . t i t l e ( l a b e l = 'K−NN: V a r y i n g Number o f N e i g h b o r s ' , f o n t s i z e =15 ,
f o n t w e i g h t = ' b o l d ' , f o n t n a m e = ' H e l v e t i c a ' , ha = ' c e n t e r ' )
19 p l t . p l o t ( neighbors , t e s t a c c u r a c y , l a b e l = ' T e s t i n g Accuracy ' ,
c o l o r = ' # E68753 ' )
20 p l t . p l o t ( neighbors , t r a i n a c c u r a c y , l a b e l = ' T r a i n i n g Accuracy ' ,
c o l o r = ' #409996 ' )
21 p l t . legend ( )
22 p l t . x l a b e l ( ' Number o f N e i g h b o r s ' )
23 p l t . y l a b e l ( ' Accuracy ' )
24 p l t . show ( )
Kode 4.22: KNN Model Evaluation

Pada Kode 4.22 di atas digunakan untuk melakukan iterasi melalui berbagai
nilai k dan memplot hasil akurasi dari model K-Nearest Neighbors (KNN) pada data
pelatihan dan pengujian.

28
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
Dalam loop, setiap nilai k diambil dari daftar neighbors. Kemudian, sebuah
objek KNeighborsClassifier dibentuk dengan menggunakan nilai k tersebut. Model
KNN tersebut kemudian dilatih dengan menggunakan data pelatihan (X train 2, y
train) dengan memanggil metode fit().
Selanjutnya, akurasi pada data pelatihan dihitung dengan memanggil
metode score() pada data pelatihan, dan akurasi pada data pengujian dihitung
dengan memanggil metode score() pada data pengujian. Hasil akurasi pada setiap
iterasi disimpan dalam array train accuracy dan test accuracy dengan hasil seperti
di bawah ini:

Gambar 4.8. Varying numbers of neighbor

1 # A p p l y i n g 10− F o l d C r o s s V a l i d a t i o n
2

3 s c o r e s = c r o s s v a l s c o r e ( kn n c v , X t r a i n 2 , y t r a i n , cv = 1 0 ,
scoring= ' accuracy ' )
4

5 p r i n t ( ' Cross − v a l i d a t i o n s c o r e s :{} ' . f or ma t ( s c o r e s ) )


6

7 # compute A v e r a g e c r o s s − v a l i d a t i o n s c o r e
8

9 p r i n t ( ' A v e r a g e c r o s s − v a l i d a t i o n s c o r e : { : . 4 f } ' . f o r m a t ( s c o r e s . mean


() ) )
Kode 4.23: Cross Validation

Pada Kode 4.23 di atas digunakan untuk menerapkan validasi silang 10-Fold
Cross Validation pada model K-NN yang telah ditentukan sebelumnya.
Pada kode tersebut, metode cross val score() dari sklearn digunakan untuk
melakukan validasi silang. Parameter pertama adalah objek knn cv yang merupakan

29
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
model K-NN yang telah ditentukan sebelumnya. Parameter kedua adalah X train 2
yang merupakan data pelatihan setelah dilakukan seleksi fitur. Parameter ketiga
adalah y train yang merupakan target variabel dari data pelatihan. Parameter cv
diatur menjadi 10, menunjukkan bahwa validasi silang menggunakan 10 lipatan.
Parameter scoring diatur sebagai accuracy, yang menunjukkan bahwa metrik
evaluasi yang digunakan adalah akurasi.
Hasil validasi silang kemudian dicetak menggunakan pernyataan print().
Output yang ditampilkan adalah skor validasi silang untuk setiap lipatan dalam
bentuk array.
Outputnya adalah daftar skor validasi silang untuk setiap lipatan yang
dilakukan pada model K-NN dengan hasil seperti di bawah ini:

Gambar 4.9. Cross Validation

Gambar 4.10. Average Cross Validation

4.2 Uji Coba

4.2.1 Skenario Pengujian

Berikut adalah beberapa hasil test pengujian pada model KNN:

4.2.2 Hasil Akurasi Pada Parameter Nilai K

Mencari nilai K terbaik sebagai tolak ukur banyaknya 45.000 data dari K=10
hingga K=70.
Berikut hasil dari K=10 hingga K=70 dengan akurasi dan score sebagai
berikut:

30
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara
Gambar 4.11. Hasil k=10

Total skor dari accuracy k=10 sebesar 99.1%

Gambar 4.12. Hasil k=70

Total skor dari accuracy k=70 sebesar 95%


Berikut adalah hasil seluruh uji coba untuk percobaan perbedaan parameter
K dan menunjukan hasil percobaan dari data latih dan data testing:

Tabel 4.1. Tabel Perhitungan Hasil Uji Coba Parameter K

param k=10 k=20 k=30 k=40 k=50 k=60 k=70


1 0.991 0.979 0.972 0.967 0.96 0.956 0.95

Dan berikut adalah hasil pengolahan data untuk menghasilkan output


predicted number of values:

Gambar 4.13. Predicted number of values

31
Klasifikasi Makanan dan Minuman..., Agung Maulana, Universitas Multimedia Nusantara

You might also like