<jupyter_start><jupyter_text>Hands On: Seleksi Fitur Seleksi fitur (feature selection) adalah proses memilih feature yang tepat untuk melatih model ML. Untuk melakukan feature selection, kita perlu memahami hubungan antara variables.Hubungan antar dua random variables disebut correlation dan dapat dihitung dengan menggunakan correlation coefficient.Range nilai correlation coeficient adalah:Positif maks +1, korelasi positif, artinya kedua variable akan bergerak searah.Negatif maks -1, korelasi negatif, artinya kedua variable akan bergerak berlawanan.Nol, menunjukan antara kedua variable tidak ada correlation.Teknik perhitungan correlation cukup banyak, berikut yang umum digunakan: Pearson, Kendall dan Spearman.A. Pearson* Paling umum digunakan.* Digunakan untuk numerical data.* Tidak bisa digunakan untuk ordinal data.* Mengukur linear data dengan asumsi data terdistribusi normal.B. Kendall* Rank correlation measure.* Dapat digunakan untuk numerical dan ordinal data, namun tidak untuk nominal data.* Tidak diperlukan linear relationship antar variable.* Digunakan untuk mengukur kemiripan ranked ordering data.* Untuk kondisi normal lebih baik menggunakan Kendall dibandingkan Spearman.C. Spearman* Rank correlation measure* Dapat digunakan untuk numerical dan ordinal data, namun tidak untuk nominal data.* Tidak diperlukan linear relationship antar variable.* Monotonic relationshipAda beberapa metoda feature selection yang umum digunakan, yaitu Filter, Embedded dan Wrapper.**Filter Method**Umumnya digunakan pada tahap preprocessing. Pemilihan features tidak tergantung kepada algoritma ML yang akan digunakan . Features dipilih berdasarkan score test statistik kolerasi.**Embedded Method**Feature dipilih saat proses model training. Menggunakan learning algorithm untuk melakukan variable selection dan feature selection and classification secara simultan. Harus memilih algoritma machine learning yang sesuai.**Wrapper Method**Menggunakan subset of features untuk melatih model. Berdasarkan hasil yang dihasilkan dari model sebelumnya, kita tentukan untuk menambah atau membuang features dari subset. Kelemahannya membutuhkan resource besar dalam melakukan komputasi.Ada jenis seleksi fitur lainnya, seperti dalam slide modul 8 ini, diantaranya:1. Seleksi Univariat (Univariate Selection)2. Pentingnya Fitur (Feature Importance)3. Matriks Korelasi (Correlation Matrix) dengan HeatmapTeknik pemilihan fitur yang perlu kita ketahui, untuk mendapatkan performa terbaik dari model Anda.1. SelectKBest2. Regresi linier3. Random Forest4. XGBoost5. Penghapusan Fitur Rekursif6. Boruta  Berikut ini adalah sebagian kecil dari metode/teknik dalam Seleksi Fitur  Sumber dataset: ---https://www.kaggle.com/iabhishekofficial/mobile-price-classificationtrain.csv  1. Seleksi Unvariate---Metode paling sederhana dan tercepat didasarkan pada uji statistik univariat. Untuk setiap fitur, ukur seberapa kuat target bergantung pada fitur menggunakan uji statistik seperti  χ2 (chi-square) or ANOVA.Uji statistik dapat digunakan untuk memilih fitur-fitur tersebut yang memiliki relasi paling kuat dengan variabel output/target.Library scikit-learn menyediakan class *SelectKBest* yang digunakan untuk serangkaian uji statistik berbeda untuk memilih angka spesifik dari fitur. Berikut ini adalah uji statistik chi-square utk fitur non-negatif untuk memilih 10 fitur terbaik dari dataset *Mobile Price Range Prediction*.<jupyter_code>import pandas as pd
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

data = pd.read_csv("train.csv")

X = data.iloc[:,0:20]  #independent colums
y = data.iloc[:,-1]    # target colum i.e price range

# apply SelectKBest class to extract

bestfeatures = SelectKBest(score_func=chi2, k=10)
fit = bestfeatures.fit(X,y)
dfscores = pd.DataFrame(fit.scores_)
dfcolumns = pd.DataFrame(X.columns)

#concat two dataframes for better visualization 

featureScores = pd.concat([dfcolumns,dfscores],axis=1)
featureScores.columns = ['Specs','Score']  #naming the dataframe columns
print(featureScores.nlargest(10,'Score'))  #print 10 best features<jupyter_output>Specs          Score
13            ram  931267.519053
11      px_height   17363.569536
0   battery_power   14129.866576
12       px_width    9810.586750
8       mobile_wt      95.972863
6      int_memory      89.839124
15           sc_w      16.480319
16      talk_time      13.236400
4              fc      10.135166
14           sc_h       9.614878<jupyter_text>2. Feature Importance---*Feature importance* mengacu pada kelas teknik untuk menetapkan skor ke fitur input ke model prediktif yang menunjukkan *importance* relatif dari setiap fitur saat membuat prediksi.Skor *Feature importance* dapat dihitung untuk masalah yang melibatkan prediksi nilai numerik, yang disebut regresi, dan masalah yang melibatkan prediksi label kelas, yang disebut klasifikasi.Skor berguna dan dapat digunakan dalam berbagai situasi dalam masalah pemodelan prediktif, seperti:* Lebih memahami data.* Lebih memahami model.* Mengurangi jumlah fitur input.* memberi  skor untuk setiap fitur data, semakin tinggi skor semakin penting atau relevan fitur tersebut terhadap variabel outputinbuilt yang dilengkapi dengan Pengklasifikasi Berbasis Pohon (Tree Based Classifier), kami akan menggunakan Pengklasifikasi Pohon Ekstra untuk mengekstraksi 10 fitur teratas untuk kumpulan data<jupyter_code>import pandas as pd
import numpy as np

data = pd.read_csv("train.csv")
X = data.iloc[:,0:20]  #independent columns
y = data.iloc[:,-1]    #target column i.e price range

from sklearn.ensemble import ExtraTreesClassifier
import matplotlib.pyplot as plt
model = ExtraTreesClassifier()
model.fit(X,y)

print(model.feature_importances_) #use inbuilt class feature_importances of tree based classifiers

#plot graph of feature importances for better visualization
feat_importances = pd.Series(model.feature_importances_, index=X.columns)
feat_importances.nlargest(10).plot(kind='barh')
plt.show()<jupyter_output>[0.06211811 0.01976522 0.03262347 0.01943255 0.0312432  0.01696415
 0.03540888 0.0328172  0.03525155 0.03272211 0.03170136 0.04648436
 0.04934521 0.40406817 0.03209748 0.03192379 0.03393193 0.01437244
 0.01841761 0.0193112 ]<jupyter_text>3. Matriks Korelasi dengan Heatmap---* Korelasi menyatakan bagaimana fitur terkait satu sama lain atau variabel target.* Korelasi bisa positif (kenaikan satu nilai fitur meningkatkan nilai variabel target) atau negatif (kenaikan satu nilai fitur menurunkan nilai variabel target)* Heatmap memudahkan untuk mengidentifikasi fitur mana yang paling terkait dengan variabel target, kami akan memplot peta panas fitur yang berkorelasi menggunakan seaborn library<jupyter_code>import pandas as pd
import numpy as np
import seaborn as sns

data = pd.read_csv("train.csv")

X = data.iloc[:,0:20]  #independent columns
y = data.iloc[:,-1]    #target column i.e price range

#get correlations of each features in dataset
corrmat = data.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(20,20))

#plot heat map
g=sns.heatmap(data[top_corr_features].corr(),annot=True,cmap="RdYlGn")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.05809417665087768, 'fraction_numerical': 0.04611312343271106, 'mean_word_length': 5.42128801431127, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '2784', 'license': 'MIT', 'n_tokens_mistral': 2674, 'n_tokens_neox': 2360, 'n_words': 779, 'path': 'Pertemuan 7/Seleksi_Fitur.ipynb', 'repo_name': 'DiendaRHR/Metodologi-Data-Science', 'size': '7178'}