Fundamental
Data Analyst
Minggu Ke - 8
Pokok Bahasan
1. Unsupervised Learning (Dimensional Reduction)
2. CRISP-DM: Metode Principal Component Analysis (PCA)
3. Evaluasi:
▪ Menemukan jumlah komponen optimal
▪ Menentukan komponen paling optimal
▪ Menemukan fitur dengan nilai kontribusi optimal
dalam komponen teroptimal
▪ Menentukan Jumlah fitur paling optimal dalam
komponen teroptimal
▪ Menetapkan fitur dataset terpilih
Dimensional Reduction
Dimensional Reduction (Reduksi Dimensi) adalah teknik dalam data mining
dan machine learning yang digunakan untuk mengurangi jumlah variabel acak
di bawah pertimbangan, dengan cara memperoleh sekumpulan variabel
utama.
Tujuan utama dari reduksi dimensi adalah menyederhanakan data tanpa
kehilangan informasi penting, yang pada akhirnya meningkatkan efisiensi dan
performa model machine learning.
Tujuan Reduksi Dimensi (Dimensional
Reduction)
▪ Mengurangi Komputasi: Dengan mengurangi jumlah fitur, kita dapat
mengurangi waktu komputasi dan kebutuhan memori.
▪ Mengatasi Curse of Dimensionality: Ketika jumlah dimensi (fitur)
meningkat, volume ruang meningkat secara eksponensial, menyebabkan
data menjadi lebih jarang dan sulit untuk dianalisis.
▪ Memperbaiki Visualisasi Data: Data dengan dimensi tinggi sulit untuk
divisualisasikan. Reduksi dimensi membantu dalam memvisualisasikan data
dalam 2D atau 3D.
▪ Menghilangkan Noise: Fitur yang tidak relevan atau redundant dapat
dihapus, meningkatkan performa model dan interpretabilitas.
▪ Mengatasi Overfitting: Dengan mengurangi jumlah fitur, kita dapat
mengurangi kompleksitas model, yang dapat membantu mencegah
overfitting.
Implementasi Dimensional Reduction dengan
Python
Studi Kasus : House Price
Dataset : https://s.id/DatasetFDA
Total Variable : 81 Variable
*Sumber Dataset: https://www.kaggle.com/
CRISP-DM :
1. Business Understanding
Langkah pertama ini berfokus pada pemahaman tujuan bisnis dan
persyaratan proyek. Ini melibatkan:
▪ Menentukan tujuan bisnis dan kebutuhan yang spesifik.
▪ Mengidentifikasi masalah bisnis yang ingin diselesaikan.
▪ Menyusun rencana proyek, termasuk sasaran, anggaran, dan waktu.
Tujuan Bisnis (Study Kasus: House Price):
1. menyederhanakan data tanpa kehilangan informasi penting, yang
pada akhirnya meningkatkan efisiensi dan performa model machine
learning.
2. Mengurangi jumlah Fitur dengan harapan dapat mengurangi waktu
komputasi dan kebutuhan memori serta mengurangi kompleksitas
model, yang dapat membantu mencegah overfitting.
CRISP-DM :
2. Data Understanding
Langkah kedua melibatkan pengumpulan data dan familiarisasi dengan data
yang tersedia. Hal Ini mencakup:
▪ Mengumpulkan data awal yang diperlukan untuk analisis.
▪ Menjelajahi data untuk memahami strukturnya, kualitas, dan pola yang ada.
▪ Mengidentifikasi masalah kualitas data seperti nilai yang hilang atau data
yang tidak konsisten.
Studi Kasus : House Price
Dataset : https://s.id/DatasetFDA
Deskripsi : dataset house prices memiliki 81 fitur, diantaranya seperti
OverallQual, GrLivArea, GarageCars, GarageArea, TotalBsmtSF, FullBath,
YearBuilt dan seterusnya (check informasi dasar dari dataset pada pengolahan
data)
*Sumber Dataset: https://www.kaggle.com/
Import Library yang Diperlukan
Sebelum melakukan import library harap install library yellowbrick dengan scrip:
pip install yellowbrick
1 import pandas as pd
2 import numpy as np
3 from sklearn.preprocessing import StandardScaler
4 from sklearn.decomposition import PCA
5 from sklearn.discriminant_analysis import
LinearDiscriminantAnalysis as LDA
6 from sklearn.model_selection import train_test_split
7 from sklearn.metrics import accuracy_score
8 from mlxtend.feature_selection import
SequentialFeatureSelector
9 from sklearn.preprocessing import OneHotEncoder
10 import matplotlib.pyplot as plt
Import Library (Lanjutan)
Keterangan Library:
1. Manipulasi dan analisis data tabular dimjuat dalam bentuk dataframe
2. Manipulasi data dalam bentuk array
3. Bagian dari fungsi library sklearn untuk melakukan standardisasi fitur-
fitur dalam dataset
4. mengimpor kelas PCA (Principal Component Analysis) dari modul
decomposition yang terdapat dalam pustaka scikit-learn
5. library untuk untuk menemukan kombinasi fitur yang memisahkan dua
atau lebih kelas dari objek
6. Bagian dari fungsi library sklearn yaitu untuk Membagi dataset ke dalam
data training dan testing
7. Library untuk menghitung akurasi dari suatu model klasifikasi.
8. Library untuk memilih subset fitur yang optimal dari sebuah dataset.
9. Library untuk mengubah fitur kategorikal (nominal) menjadi
representasi numerik yang dapat digunakan dalam algoritma machine
learning
10. Library untuk visualisasi data/ grafik plot dalam python
Memuat Dataset
# Memuat dataset
df = pd.read_csv('HousePriceTrain.csv’)
df.info()
CRISP-DM :
3. Data Preparation
Langkah ketiga ini melibatkan pembersihan dan transformasi data agar
siap untuk pemodelan. Hal Ini termasuk:
▪ Menghapus fitur yang tidak memiliki pengaruh
▪ Check Baris yang Kosong
▪ Hapus Fitur dengan Data Kosong
▪ Check Fitur dengan type categorical
▪ Konversi Fitur dengan type categorical Menjadi angka
▪ Memisahkan fitur dan Target
▪ Standarisasi fitur.
CRISP-DM :
3. Data Preparation
1. Menghapus fitur yang tidak memiliki pengaruh
Menghapus kolom fitur "Id" karena tidak memiliki pengaruh pada
pembelajaran model
df = df.drop('Id', axis=1)
print(df.shape)
2. Check Baris yang Kosong
Setelah fitur Id dihapus ukuran dataset saat ini: 1460 baris dan 80 kolom,
kemudian lakukan pengecheckan apakah terdapat kolom data dengan
data kosong atau NaN
df.loc[:, df.isna().any()]
CRISP-DM :
3. Data Preparation
3. Hapus Fitur dengan Data Kosong
Berdasarkan hasil diatas terdapat 19 kolom data yang memiliki data
kosong, data kosong dapat diganti dengan data yang sering muncul atau
nilai rata atau nilai lainnya. namunpada studi kasus ini, data kosong akan di
hapus
new_df = df.dropna(axis=1) # hapus fitur dengan data kosong
print(new_df.shape)
Jumlah data sekarang sebanyak 1460 baris dan 61 kolom
CRISP-DM :
3. Data Preparation
4. Check Fitur dengan type categorical
s = (new_df.dtypes == 'object')
object_cols = list(s[s].index)
print("Variabel/fitur dengan bertipe Categorical:")
print(object_cols)
print('\n Jumlah Variabel/fitur dengan bertipe Categorical ',
len(object_cols))
Hasil:
Variabel/fitur dengan bertipe Categorical:
['MSZoning', 'Street', 'LotShape', 'LandContour', 'Utilities', 'LotConfig', 'LandSlope',
'Neighborhood', 'Condition1', 'Condition2', 'BldgType', 'HouseStyle', 'RoofStyle',
'RoofMatl', 'Exterior1st', 'Exterior2nd', 'ExterQual', 'ExterCond', 'Foundation',
'Heating', 'HeatingQC', 'CentralAir', 'KitchenQual', 'Functional', 'PavedDrive',
'SaleType', 'SaleCondition’]
Jumlah Variabel/fitur dengan bertipe Categorical 27
CRISP-DM :
3. Data Preparation
5. Konversi Fitur dengan type categorical Menjadi angka
Fitur yang memiliki tipe categorical tidak akan dapat dihitung atau dikalkulasi, karena itu
kita melakukan konversi/encode menjadi angka berdasarkan jumlah kelompok data nya
OH_encoder = OneHotEncoder(sparse_output=False)
OH_cols =
pd.DataFrame(OH_encoder.fit_transform(new_df[object_cols]))
OH_cols.index = new_df.index
OH_cols.columns = OH_encoder.get_feature_names_out()
df_final = new_df.drop(object_cols, axis=1)
df_final = pd.concat([df_final, OH_cols], axis=1)
6. Memisahkan fitur dan Target
X = df_final.drop('SalePrice', axis=1) #data fitur
y = df_final['SalePrice'] #data target
CRISP-DM :
3. Data Preparation (Lanjutan)
7. Standarisasi fitur.
Dalam kasus ini akan menggunakan StandardScaler() untuk
menstandarisasi fitur-fitur dalam dataset sebelum melakukan tahap
modeling.
# Standarisasi fitur [lihat materi minggu ke-1]
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
CRISP-DM :
3. Data Preparation (Lanjutan)
8. mengetahui berapa jumlah komponen utama
untuk mengetahui berapa jumlah komponen utama yang paling optimum kita
dapat menggunakan fungsi "elbow“, disini kita dapat menggunakan fungsi
model KMEANs untuk mengetahui sebaran data/cluster dan metrik
perhitungan dalam kasus ini menggunakan calinski_harabasz
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer
# Inisiasi model cluster dan visualisasi
model = KMeans()
visualizer = KElbowVisualizer(model, k=(4,12),
metric='calinski_harabasz', timings=False)
visualizer.fit(X_pca) # Fit the data to the visualizer
visualizer.show() # Finalize and render the figure
CRISP-DM :
3. Data Preparation (Lanjutan)
CRISP-DM :
4. Modeling
1. Menerapkan PCA dengan 4 komponen
Langkah keempat adalah membangun model menggunakan teknik data
mining. Hal Ini mencakup:
▪ Memilih teknik pemodelan yang sesuai dengan masalah bisnis dan jenis
data.
▪ Melatih model menggunakan data pelatihan.
Dalam tahap pembelajaran ini algoritma yang akan digunakan adalah
Principal Component Analysis (PCA)
# Menerapkan PCA dengan 4 komponen
pca = PCA(n_components=4)
X_pca = pca.fit_transform(X_scaled)
CRISP-DM :
4. Modeling (Lanjutan)
# Menampilkan komponen utama
components = pca.components_
explained_variance = pca.explained_variance_ratio_
cumulative_explained_variance = np.sum(explained_variance)
print('\nVariansi yang Dijelaskan oleh Setiap Komponen Utama:')
print(explained_variance)
print('\nKumulatif Variansi yang Dijelaskan oleh Setiap Komponen
Utama:')
print(cumulative_explained_variance)
Cumulative explained variance sebesar 0.142 berarti bahwa beberapa komponen utama
pertama secara kumulatif menjelaskan 14.2% dari total variansi dalam dataset asli. Ini
membantu dalam menentukan seberapa banyak informasi yang berhasil dijelaskan oleh
komponen-komponen utama tersebut dan dapat digunakan untuk memilih jumlah fitur
yang optimal untuk reduksi dimensi yang efektif.
CRISP-DM :
5. Evaluasi Model
1. Membuat DataFrame untuk visualisasi yang lebih baik
components_df = pd.DataFrame(components, columns=X.columns,
index=[f'PC{i+1}' for i in range(4)])
explained_variance_df = pd.DataFrame(explained_variance, index=[f'PC{i+1}'
for i in range(4)], columns=['Explained Variance'])
print('\nKomponen Utama dalam DataFrame:')
print(components_df)
Catatan:
Hasil Selengkapnya bisa dilihat pada IDE.
CRISP-DM :
5. Evaluasi Model
2. Menampilkan nilai kontribusi dari PC1 hingga PC4
for i in range(4):
print(f'\nFitur dan Nilai yang paling berkontribusi pada PC{i+1}:')
print(components_df.iloc[i].sort_values(ascending=False))
Catatan:
Hasil Selengkapnya bisa dilihat pada IDE.
CRISP-DM :
5. Evaluasi Model
Penjelasan Hasil Nilai Kontribusi
▪ Explained Variance PC1=0.061920: Komponen utama pertama (PC1) menjelaskan
sekitar 6.192% dari variansi total dalam data asli.
▪ Explained Variance PC2=0.031061: Komponen utama kedua (PC2) menjelaskan sekitar
3.106% dari variansi total dalam data asli.
▪ Explained Variance PC3=0.027212: Komponen utama ketiga (PC3) menjelaskan sekitar
2.7212% dari variansi total dalam data asli.
▪ Explained Variance PC4=0.022207: Komponen utama keempat (PC4) menjelaskan
sekitar 2.2207% dari variansi total dalam data asli.
▪ Komponen utama pertama (PC1) memiliki kontribusi terbesar dalam menjelaskan
variansi data. Ini berarti PC1 adalah arah dalam ruang fitur yang memaksimalkan
pemisahan data.
▪ Jika kita ingin mempertahankan komponen yang menjelaskan setidaknya 10% dari
variansi total, kita mungkin hanya perlu mempertahankan PC1, karena PC1 sendiri
menjelaskan sekitar 6.192%.
CRISP-DM :
5. Evaluasi Model
3. menemukan dan menentukan jumlah fitur yang optimal
print('\nFitur yang paling berkontribusi pada PC1:')
pc1_loadings = components_df.iloc[1].sort_values(ascending=False)
print("Loadings untuk PC1:")
print(pc1_loadings)
CRISP-DM :
5. Evaluasi Model
4. Visualisasi nilai loadings untuk PC1
import seaborn as sns
plt.figure(figsize=(30, 20))
sns.barplot(x=pc1_loadings.index, y=pc1_loadings.values)
plt.xlabel('Fitur')
plt.ylabel('Loadings')
plt.title('Loadings untuk PC1')
plt.xticks(rotation=45)
plt.show()
Catatan:
Hasil Selengkapnya bisa dilihat pada IDE.
CRISP-DM :
5. Evaluasi Model
4. Menetapkan threshold untuk loadings
# Menetapkan threshold untuk loadings
# Threshold ini menjadi batas pemilihan fitur dengan kontribusi
tertinggi.
# Fitur yang memiliki nilai loadings di atas atau di bawah
threshold tertentu dapat dianggap penting.
threshold = 0.1 # Misalnya, threshold ini bisa disesuaikan
# Memilih fitur yang kontribusinya lebih besar dari threshold
important_features_pc1 = pc1_loadings[pc1_loadings.abs() >
threshold].index.tolist()
important_features_pc1_count = len(important_features_pc1)
print("Fitur penting untuk berdasarkan threshold:")
print(important_features_pc1)
print("\nJumlah Fitur penting untuk berdasarkan threshold:")
print(important_features_pc1_count)
CRISP-DM :
5. Evaluasi Model
4. Hasil Menetapkan threshold untuk loadings
Keterangan:
detail pada IDE, untuk menampilkan fitur penting hasil seleksi PCA, gunakan script berikut:
new_X = X[['YearBuilt', 'OverallQual', 'Foundation_PConc', 'YearRemodAdd',
'GarageCars', 'ExterQual_Gd', 'GarageArea', 'FullBath', 'HeatingQC_Ex',
'Exterior1st_VinylSd', 'Exterior2nd_VinylSd', 'TotalBsmtSF',
'KitchenQual_Gd', 'GrLivArea', '1stFlrSF', 'SaleType_New',
'SaleCondition_Partial', 'CentralAir_Y', 'TotRmsAbvGrd', 'PavedDrive_Y',
'KitchenQual_Ex', 'Neighborhood_NridgHt', 'MSZoning_RM', 'CentralAir_N',
'HeatingQC_TA', 'Foundation_CBlock', 'KitchenQual_TA', 'ExterQual_TA']]
print(new_X.shape)
new_X.head()
CRISP-DM :
5. Evaluasi Model
4. Hasil Menetapkan threshold untuk loadings
Catatan:
Hasil Selengkapnya bisa dilihat pada IDE.
Full Script : https://drive.google.com/file/d/1ppkCbcH8iQRDYFPFLcos7s-
zkrGikvxq/view?usp=sharing
CRISP-DM
6. Deployment
Langkah terakhir adalah mengimplementasikan model ke dalam
lingkungan operasional. Hal Ini mencakup:
▪ Merencanakan dan menjalankan implementasi model dalam sistem
produksi.
▪ Memantau dan memelihara model untuk memastikan kinerjanya
tetap optimal.
▪ Mengkomunikasikan hasil dan manfaat model kepada pemangku
kepentingan.
Dalam Perkuliahan ini tidak membahas tahap Deployment
Penjelasan Project
untuk penilaian CPMK-3
Langkah Terakhir dalam menerapkan model pembelajaran pada dataset,
mahasiswa diwajibkan membuat laporan terkait dengan dataset yang telah
digunakan pada Tugas 1 dan Tugas 2 dengan object laporan Project:
1. Business understanding (Tugas 1)
2. Data Understanding (Tugas 1)
3. Data Preparation (Tugas 2)
4. Modelling (Tugas 2)
5. Evaluation
Adapun detail format penulisan pedoman Laporan dapat dilihat [disini]
Waktu Pengumpulan/ Presentasi Project: Minggu Ke – 10 s/d 16