Lembar Kerja 4.
1: Proyek Pemrograman Aplikasi KA (supervised/unsupervised
learning) Menggunakan Dataset
1. Menulis Skrip Sederhana dengan Sintaks Dasar KA
# Fungsi untuk mengevaluasi suhu
def evaluasi_suhu(suhu):
if suhu > 30:
return "Panas"
elif 20 <= suhu <= 30:
return "Sejuk"
else:
return "Dingin"
# Program utama
def main():
try:
input_suhu = int(input("Masukkan suhu dalam derajat Celsius: "))
hasil = evaluasi_suhu(input_suhu)
print(f"Suhu terasa: {hasil}")
except ValueError:
print("Masukkan harus berupa angka bulat.")
# Menjalankan program
if __name__ == "__main__":
main()
Output
2. Membangun Model Sederhana Menggunakan Library KA
Berikut adalah contoh proyek model pembelajaran mesin sederhana menggunakan Scikit-learn dan
dataset pariwisata. Fokusnya adalah klasifikasi tingkat kunjungan wisatawan (Rendah, Sedang, Tinggi)
berdasarkan data pengunjung, cuaca, hari libur, dan musim.
1. Library: Scikit-learn
Library ini populer untuk proyek Machine Learning klasik, sangat cocok untuk edukasi dan pemodelan
cepat.
2. Dataset
Dataset digunakan: Jumlah pengunjung tempat wisata di suatu daerah tiap bulan
Contoh data bisa diperoleh dari: [Link] atau dummy dataset yang disimulasikan secara realistis.
3. Fitur dan Target
Fitur utama (X):
• Jumlah hari libur dalam bulan tersebut (hari_libur)
• Rata-rata suhu (suhu)
• Curah hujan (curah_hujan)
• Musim (musim) — dikodekan sebagai 0: Hujan, 1: Kemarau
Target (y):
• Kategori kunjungan: Rendah, Sedang, Tinggi
4. Jenis Model
Supervised Learning - Klasifikasi Multikelas
Model: Decision Tree Classifier
5. Kode Program Lengkap (dalam .ipynb atau .py)
Asumsi kita punya dataset : [Link]
# === 1. Import Library ===
import pandas as pd
from sklearn.model_selection import train_test_split
from [Link] import DecisionTreeClassifier
from [Link] import LabelEncoder
from [Link] import accuracy_score, classification_report
# === 2. Load Dataset ===
# Pastikan file .csv berada di lokasi yang sama dengan notebook
df = pd.read_csv("[Link]")
# === 3. Pilih Kolom Relevan ===
df_model = df[['Price', 'Rating', 'Time_Minutes', 'Rating_Count',
'Category']].copy()
# Tangani nilai kosong (NaN) di Time_Minutes
# df_model['Time_Minutes'].fillna(df_model['Time_Minutes'].mean(),
inplace=True)
df_model['Time_Minutes'] =
df_model['Time_Minutes'].fillna(df_model['Time_Minutes'].mean())
# === 4. Encode Target Kategorikal ===
le = LabelEncoder()
df_model['Category_encoded'] = le.fit_transform(df_model['Category'])
# Definisikan fitur (X) dan target (y)
X = df_model[['Price', 'Rating', 'Time_Minutes', 'Rating_Count']]
y = df_model['Category_encoded']
# === 5. Split Data (Train-Test) ===
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)
# === 6. Bangun Model Decision Tree ===
model = DecisionTreeClassifier(random_state=42)
[Link](X_train, y_train)
# === 7. Evaluasi Model ===
y_pred = [Link](X_test)
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=le.classes_)
print(f"Akurasi model: {accuracy:.2f}")
print("Laporan Klasifikasi:\n", report)
# === 8. Contoh Prediksi Baru ===
data_baru = [Link]({
'Price': [50000],
'Rating': [45],
'Time_Minutes': [90],
'Rating_Count': [20]
})
prediksi = [Link](data_baru)
kategori = le.inverse_transform(prediksi)
print("Prediksi kategori tempat wisata:", kategori[0])
6. hasil yang diharapkan
Output :
3. Evaluasi dan Penyempurnaan Kode
Berikut adalah evaluasi dan penyempurnaan dari model Decision Tree Classifier pada dataset destinasi
wisata Indonesia yang Anda lampirkan. Fokus kita adalah:
• Menambahkan confusion matrix dan metrik lainnya (precision, recall, F1-score).
• Menampilkan visualisasi confusion matrix.
• Menyempurnakan model: tuning hyperparameter dan/atau mengganti algoritma jika perlu.
• Menyediakan perbandingan performa sebelum dan sesudah perbaikan.
# === 1. Import Library ===
import pandas as pd
import [Link] as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from [Link] import DecisionTreeClassifier
from [Link] import LabelEncoder
from [Link] import (
accuracy_score,
classification_report,
confusion_matrix,
precision_score,
recall_score,
f1_score
)
# === 2. Load Dataset ===
df = pd.read_csv("[Link]")
# === 3. Pilih Kolom Relevan dan Tangani Missing Value ===
df_model = df[['Price', 'Rating', 'Time_Minutes', 'Rating_Count', 'Category']].copy()
# df_model['Time_Minutes'].fillna(df_model['Time_Minutes'].mean(), inplace=True)
df_model.loc[:, 'Time_Minutes'] = df_model['Time_Minutes'].fillna(df_model['Time_Minutes'].mean())
# === 4. Encode Target Kategorikal ===
le = LabelEncoder()
df_model['Category_encoded'] = le.fit_transform(df_model['Category'])
# Fitur dan Target
X = df_model[['Price', 'Rating', 'Time_Minutes', 'Rating_Count']]
y = df_model['Category_encoded']
# === 5. Split Data ===
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# === 6. Bangun dan Latih Model ===
model = DecisionTreeClassifier(criterion='entropy', max_depth=5, random_state=42)
[Link](X_train, y_train)
# === 7. Evaluasi Model ===
y_pred = [Link](X_test)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='weighted', zero_division=0)
recall = recall_score(y_test, y_pred, average='weighted')
f1 = f1_score(y_test, y_pred, average='weighted')
print(f"Akurasi : {accuracy:.2f}")
print(f"Presisi : {precision:.2f}")
print(f"Recall : {recall:.2f}")
print(f"F1-Score : {f1:.2f}")
print("\n=== Laporan Klasifikasi ===")
print(classification_report(y_test, y_pred, target_names=le.classes_))
# === Confusion Matrix ===
cm = confusion_matrix(y_test, y_pred)
[Link](figsize=(8, 6))
[Link](cm, annot=True, fmt='d', cmap='Blues', xticklabels=le.classes_, yticklabels=le.classes_)
[Link]('Predicted')
[Link]('Actual')
[Link]('Confusion Matrix')
plt.tight_layout()
[Link]()
# === 8. Prediksi Data Baru ===
data_baru = [Link]({
'Price': [50000],
'Rating': [45],
'Time_Minutes': [90],
'Rating_Count': [20]
})
prediksi = [Link](data_baru)
kategori = le.inverse_transform(prediksi)
print("Prediksi kategori tempat wisata:", kategori[0])
Output :