Sobat Exsight masih ingat gak nih, pada artikel Exsight sebelumnya pernah dibahas terkait teori Feature Selection in Data Mining.
Feature Selection merupakan proses pemilihan variabel yang paling relevan dan memiliki kontribusi signifikan dalam analisis data. Konsep dari feature selection yaitu mengidentifikasi serta mempertahankan variabel yang paling informatif dan relevan, sementara variabel yang kurang penting atau tidak memberikan kontribusi yang signifikan akan dihilangkan dalam analisis.
Nah, melanjutkan dari artikel tersebut, kali ini kita akan membahas terkait tutorial melakukan feature selection dengan software Python. Yuk yuk simak artikel ini dengan seksama yaa!
Tutorial Feature Selection
Studi Kasus
Studi kasus yang akan kita gunakan dalam hal ini menggunakan data Smoking and Drinking Dataset with Body Signal yang didapatkan dari situs Kaggle dimana data dikumpulkan dari National Health Insurance Service di Korea Selatan. Data terdiri atas 24 variabel dan 991.346 observasi.
24 Variabel dalam data Smoking and Drinking Dataset with Body Signal diantaranya:
- Sex = Jenis Kelamin meliputi Male dan Female
- Age = Usia (dibulatkan dalam 5 tahun)
- Heigh = Tinggi badan (dibulatkan dalam 5 cm)
- Weigh = Berat badan (dalam kg)
- Sight_left = Penglihatan (mata sebelah kiri), jika 1 (normal) dan 2 (abnormal)
- Sight_right = Penglihatan (mata sebelah kanan), jika 1 (normal) dan 2 (abnormal)
- SBP = Sistolic Blood Pressure (Tekanan darah sistolik dalam satuan mmHg)
- DBP = Diastolic Blood Pressure (Tekanan darah diastolik dalam satuan mmHg)
- BLDS = BLDS atau FSG(fasting blood glucose) dalam satuan mg/dL.
- tot_ chole = Total kolestrol dalam satuan mg/dL
- HDL_chole = HDL kolestrol dalam satuan mg/dL
- LDL_chole = LDL kolestrol dalam satuan mg/dL
- Triglyceride = Triglyceride dalam satuan mg/dL
- Hemoglobin = Hemoglobin dalam satuan mg/dL
- urine_protein = Protein dalam urin 1(-), 2(+/-), 3(+1), 4(+2), 5(+3), 6(+4)
- serum_creatinine = Serum(blood) creatinine dalam satuan mg/dL
- SGOT_AST = SGOT(Glutamate-oxaloacetate transaminase) AST(Aspartate transaminase) [IU/L]
- SGOT_ALT = ALT(Alanine transaminase) [IU/L]
- gamma_ GTP = y-glutamyl transpeptidase [IU/L]
- SMK_ stat_ type_ cd = Smoking state, 1 (tidak pernah merokok), 2 (pernah merokok tetapi sudah berhenti), 3 (masih merokok)
- DRK_ YN = Drinker or Not (Pemabuk atau Bukan Pemabuk)
Berdasarkan 24 variabel yang tersedia, variabel DRK_YN (Drinker or Not dengan kata lain Pemabuk atau Bukan Pemabuk)) merupakan variabel dependen sedangkan 23 lainnya merupakan variabel independen.
Load Library Python
Tahapan paling awal sebelum melakukan running syntax di Python yaitu melakukan load library. Apabila sobat Exsight masih belum memiliki library untuk feature selection , maka dapat menginstall terlebih dahulu dengan cara.
pip install (nama library nya)
Adapun beberapa library yang digunakan terdiri atas:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
#Untuk Metode Filter (Chi-Square)
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
#Untuk Metode Wrapper (Backward Elimination)
from mlxtend.feature_selection import SequentialFeatureSelector as SFS
from sklearn.linear_model import LinearRegression
Load Data
Tahapan selanjutnya yaitu melakukan load data di Python. Data yang diinput diberi nama sebagai data yang berasal dari file smoking_drinking. Perlu diperhatikan untuk jenis file data yang diinput dalam format CSV, hal ini dengan tujuan untuk mempermudah pengguna. Syntax yang digunakan untuk load data adalah sebagai berikut
data = pd.read_csv('smoking_drinking.csv')
data
Apabila sobat Exsight masih ingat, dalam artikel sebelumnya terkait Feature Selection in Data Mining, disebutkan bahwa terdapat beberapa metode yang umum digunakan dalam feature selection, antara lain: metode Filter, metode Wrapper, dan metode Embedded.
A. Metode Filter dengan Chi-Square
Penerapan feature selection dalam hal ini kita awali dengan menggunakan metode Filter. Metode filter merupakan metode feature selection yang dilakukan berdasarkan informasi yang terkandung dalam setiap fitur (variabel) secara independen. Contoh penerapan metode Filter untuk pemilihan fitur yaitu Chi-Square.
Pada metode Chi-Square mula-mula kita pisahkan terlebih dahulu kolom variabel Dependen dan variabel Independen
data_selection_independen = data.drop('DRK_YN',1)
data_selection_independen
dependen = data['DRK_YN']
data_selection_dependen=pd.DataFrame(dependen)
data_selection_dependen
Apabila kita perhatikan pada Gambar 2. untuk variabel Independen yaitu sex berupa data kategorik yang masih dalam bentuk Text, maka dari itu terlebih dahulu kategori pada variabel sex, kita ubah dalam bentuk (Male = 0, Female = 1) menggunakan Label Encoder.
# Creating a instance of label Encoder.
le = LabelEncoder()
# Using .fit_transform function to fit label
# encoder and return encoded label
label = le.fit_transform(data_selection_independen['sex'])
# printing label
label
# Appending the array to our dataFrame
# with column name '"Sex'
data_selection_independen['sex']= label
# printing Dataframe
data_selection_independen
Tahapan selanjutnya, dari 23 fitur (variabel independen) yang tersedia, kita akan mencari 15 fitur (variabel dependen) yang memiliki nilai paling tinggi.
chi2_selector = SelectKBest(chi2, k=15)
chi2_selector.fit(data_selection_independen, data_selection_dependen)
cols = chi2_selector.get_support(indices=True)
data_selected_features = data_selection_independen.iloc[:,cols]
data_selected_features
Berdasarkan Gambar 5., didapatkan hasil bahwa, dengan menggunakan Metode Filter (Chi- Square), yang semula terdapat 23 fitur (variabel independen), kemudian didapatkan 15 fitur (variabel independen) dengan nilai tertinggi diantaranya:
– sex – LDL chole
– age – triglyceride
– height – hemoglobin
– weight – SGOT_ AST
– waistline – SGOT_ALT
– DBP – gamma _GTP
– tot chole – SMK_stat_type_cd
– HDL chole
B. Metode Wrapper dengan Backward Elimination
Berikutnya terdapat metode Wrapper. Metode wrapper menggunakan algoritma pembelajaran untuk mengevaluasi fitur (variabel) berdasarkan kinerja model yang dibangun. Metode wrapper melibatkan proses iteratif di mana berbagai kombinasi variabel dievaluasi menggunakan model. Pada tutorial kali ini, metode wrapper yang digunakan berfokus pada Backward Elimination.
Pada metode backward elimination, diawali dengan full model (dalam hal ini full model terdiri atas seluruh variabel independen), berikutnya dilakukan eliminasi atau penghapusan fitur yang tidak signifikan (yaitu fitur dengan p-value > significance level). Untuk tutorial ini, significance level yang digunakan yaitu sebesar 0,05. Kemudian proses eliminasi atau penghapusan fitur yang tidak signifikan dilakukan secara iteratif hingga didapatkan hasil final berupa sekumpulan fitur yang signifikan dengan model.
Sebagai catatan, eliminasi dilakukan untuk menghilangkan fitur (variabel) yang menyebabkan penurunan pada kinerja model. Adapun Syntax python untuk metode backward elimination adalah sebagai berikut.
def backward_elimination(data, target,significance_level = 0.05):
features = data.columns.tolist()
while(len(features)>0):
features_with_constant = sm.add_constant(data[features])
p_values = sm.OLS(target, features_with_constant).fit().pvalues[1:]
max_p_value = p_values.max()
if(max_p_value >= significance_level):
excluded_feature = p_values.idxmax()
features.remove(excluded_feature)
else:
break
return features
Tahapan berikutnya dari 23 fitur (variabel independen) yang tersedia, kita akan mencari 15 fitur (variabel dependen) yang signifikan terhadap model.
#Sequential backward selection(sbs)
sbs = SFS(LinearRegression(),
k_features=15,
forward=False,
floating=False,
cv=0)
sbs.fit(data_selection_independen, data_selection_independen)
sbs.k_feature_names_
Berdasarkan Gambar 6. diperoleh hasil bahwa, dengan menggunakan Metode Wrapper (Backward Elimination), yang semula terdapat 23 fitur (variabel independen), kemudian didapatkan 15 fitur (variabel independen) dengan nilai tertinggi diantaranya:
– height – LDL_ chole
– waistline – triglyceride
– sight_ left – urine_ protein
– sight_ right – serum_ creatinine
– hear_ right – SGOT_ AST
– DBP – gamma_ GTP
– BLDS – SMK_ stat_ type_ cd
– HDL_ chole
C. Metode Embedded dengan Regresi Lasso
Metode lainnya yaitu metode Embedded. Metode embedded dilakukan dengan dengan menggabungkan proses algoritma pembelajaran secara bersamaan. Fitur-fitur dipilih berdasarkan keputusan algoritma pembelajaran tersebut. Untuk tutorial metode embedded kali ini, metode yang digunakan berfokus pada regresi Lasso.
Apabila kita perhatikan pada Gambar 3. untuk variabel Dependen yaitu DRK_YN berupa data kategorik yang masih dalam bentuk Text, maka dari itu terlebih dahulu kategori pada variabel DRK_YN, kita ubah dalam bentuk (Y or Yes= 1, N or No = 0) menggunakan Label Encoder
#Mengubah variabel dependen dari string ke float
# Creating a instance of label Encoder.
le = LabelEncoder()
# Using .fit_transform function to fit label
# encoder and return encoded label
label2 = le.fit_transform(data_selection_dependen['DRK_YN'])
# printing label
label2
Appending the array to our dataFrame
# with column name 'DRK_YN'
data_selection_dependen['DRK_YN']= label2
# printing Dataframe
data_selection_dependen
Sebagai catatan, untuk metode embedded dengan regresi Lasso memiliki perbedaan jika dibandingkan metode- metode sebelumnya (filter dengan Chi-Square dan Wrapper dengan Backward Elimination) yaitu: untuk pemilihan jumlah fitur dalam hal ini tidak ditentukan dari awal oleh peneliti, namun secara otomatis dipilih oleh algoritma dalam metode Embedded Regresi Lasso.
reg = LassoCV()
reg.fit(data_selection_independen, data_selection_dependen)
coef = pd.Series(reg.coef_, index = data_selection_independen.columns
print("Lasso picked " + str(sum(coef != 0)) + " variables and eliminated the other " + str(sum(coef == 0)) + " variables")
Melalui hasil output pada Gambar 8, diketahui bahwa dengan menggunakan metode Embedded dengan Regresi Lasso, dari 23 fitur (variabel independen) yang tersedia akan dipilih 16 fitur (variabel independen), sedangkan 7 fitur lainnya akan dieliminasi. Pemilihan 16 fitur tersebut dapat ditentukan berdasarkan nilai coef dengan syntax Python sebagai berikut.
coef
coef != 0
Berdasarkan Gambar 9. diperoleh hasil bahwa, dengan menggunakan Metode Embedded (Regresi Lasso) , yang semula terdapat 23 fitur (variabel independen), kemudian didapatkan 16 fitur (variabel independen) dengan coef bernilai positif dengan kata lain fitur ditandai dengan label True. Fitur- fitur yang terpilih tersebut diantaranya:
– sex – HDL_ chole
– age – LDL_ chole
– height – triglyceride
– weight – hemoglobin
– SBP – SGOT_AST
– DBP – SGOT_ ALT
– BLDS – gamma_ GTP
– tot_ chole – SMK_ stat_ type_ cd
Pemilihan subset fitur (variabel) yang tepat dapat membantu dalam menghilangkan fitur yang tidak relevan, meningkatkan efisiensi komputasi, dan meningkatkan interpretabilitas model. Oleh karena itu, pemahaman yang baik tentang metode feature selection dan penerapannya secara cermat sangat diperlukan untuk mendapatkan hasil analisis yang optimal.
Referensi
Nah, sampai disini dulu ya sobat Exsight penjelasan terkait Tutorial Feature Selection dengan Python. Jika masih terdapat hal-hal yang dibingungkan, sobat Exsight bisa langsung saja ramaikan kolom komentar atau hubungi admin melalui tombol bantuan di kanan bawah. Stay tuned di website https://exsight.id/blog/ agar tidak ketinggalan artikel-artikel menarik lainnya. Bye bye!