Easy Way: Feature Selection with Python #2

DW ADS

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.

feature

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
feature
Gambar 1. Data Smoking_ Drinking

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
feature
Gambar 2. Variabel Independen
dependen = data['DRK_YN']
data_selection_dependen=pd.DataFrame(dependen)
data_selection_dependen
feature
Gambar 3. Variabel 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
feature
Gambar 4. Variabel Independen (Variabel Sex setelah Label Encoder)

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
feature
Gambar 5. Hasil Metode Filter (Chi- Square)

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:
sexLDL chole
agetriglyceride
heighthemoglobin
weightSGOT_ AST
waistlineSGOT_ALT
DBPgamma _GTP
tot choleSMK_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_
feature
Gambar 6. Hasil Metode Wrapper (Backward Elimination)

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:
heightLDL_ chole
waistlinetriglyceride
sight_ lefturine_ protein
sight_ rightserum_ creatinine
hear_ rightSGOT_ AST
DBPgamma_ GTP
BLDSSMK_ 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
feature
Gambar 7. Variabel Dependen (Variabel DRK_YN setelah Label Encoder)

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")
feature
Gambar 8. Keterangan Pemilihan Fitur Metode Embedded dengan Regresi Lasso

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
feature
Gambar 9. Nilai Coef Hasil dari Metode Embedded Regresi Lasso

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:
sexHDL_ chole
ageLDL_ chole
heighttriglyceride
weighthemoglobin
SBPSGOT_AST
DBPSGOT_ ALT
BLDSgamma_ GTP
tot_ choleSMK_ 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

Chandrashekar, G., & Sahin, F. (2014). A Survey on Feature Selection Methods. Computers & Electrical Engineering, 40(1), 16-28.

Guyon, I., & Elisseeff, A. (2003). An Introduction to Variable and Feature Selection. Journal of Machine Learning Research, 3, 1157-1182.

Hall, M. A. (1999). Correlation-based Feature Selection for Machine Learning. Ph.D. Thesis, The University of Waikato.

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!

Sstt...
Mau Kiriman Artikel Terbaru Exsight
Tanpa Biaya Langganan? ????

Nama Kamu

Email Kamu

Dapatkan Akses Informasi Terupdate Seputar Dunia Data dan Statistika 🙂

Exsight ADS

Leave a Comment

Hubungi Admin
Halo, selamat datang di Exsight! 👋

Hari ini kita ada DISKON 20% untuk semua transaksi. Klaim sekarang!