Sessi 14: Studi Kasus Komprehensif dan Proposal Proyek Akhir

Fokus: Penerapan seluruh alur Data Science Pipeline (dari Sessi 1 hingga Sessi 13) secara terintegrasi melalui Capstone Project. Pembahasan kriteria pemilihan *dataset*, perumusan masalah, dan penyusunan proposal proyek.

A. Integrasi Data Science Pipeline

Proyek akhir adalah kesempatan untuk menerapkan siklus Data Science secara penuh. Tidak ada lagi pengerjaan per modul; mahasiswa harus mengintegrasikan semua tahapan dengan lancar.

1. Lima Tahapan Kunci Proyek

B. Pemilihan Dataset untuk Proyek Akhir

Pemilihan *dataset* yang tepat menentukan kompleksitas dan nilai ilmiah dari proyek. Dataset harus memiliki Volume dan Variety yang memadai.

1. Kriteria Pemilihan Dataset

2. Contoh Dataset Ideal (UCI/Kaggle)

C. Struktur Proposal Proyek Akhir (Wajib)

Proposal adalah dokumen perencanaan yang memastikan kelompok memiliki pemahaman yang jelas tentang tujuan dan metodologi.

  1. Judul Proyek: Harus spesifik dan mencerminkan masalah yang dipecahkan.

    Contoh: Klasifikasi Kualitas Air Minum Berdasarkan Parameter Fisika-Kimia Menggunakan Regresi Logistik.

  2. Latar Belakang dan Rumusan Masalah:

    Jelaskan mengapa masalah ini penting (konteks ilmiah/sosial) dan rumuskan pertanyaan kunci: "Apa yang ingin diprediksi atau dianalisis?".

  3. Deskripsi Dataset:

    Sumber data (UCI/Kaggle), jumlah baris/kolom, dan variabel kunci yang akan digunakan (Fitur X dan Target y).

  4. Metodologi (Pipeline):

    Rencanakan langkah-langkah teknis. Sebutkan secara spesifik: Teknik *Wrangling* (e.g., imputasi mean), Teknik *Scaling* (Normalisasi Z-Score), Model ML yang akan dicoba (e.g., Decision Tree), dan Metrik Evaluasi (e.g., F1-Score).

  5. Jadwal Kerja:

    Pembagian tugas antar anggota kelompok untuk Sessi 14 dan Sessi 15.

D. Studi Kasus Kode: Mempersiapkan Pipeline (Pre-Project)

Kode berikut menunjukkan bagaimana seluruh tahapan yang dipelajari (Normalisasi, Split, Pemodelan, Evaluasi) disatukan dalam satu *pipeline* yang efisien.

Dataset: Wine Quality (UCI) - Klasifikasi Biner Kualitas

Tujuan: Mengklasifikasikan anggur menjadi kualitas baik (1) atau kualitas buruk (0) berdasarkan fitur fisika-kimia. Kita definisikan kualitas baik jika skor > 6.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, accuracy_score
import numpy as np

# ASUMSI: File 'winequality-red.csv' sudah diunggah ke Google Colab
# Data ini memiliki fitur fisika-kimia (fixed acidity, pH, alcohol, dll.) dan target 'quality'.
# Data dapat diunduh dari UCI atau Kaggle.
try:
    df = pd.read_csv('winequality-red.csv', sep=';')
except FileNotFoundError:
    print("Pastikan file 'winequality-red.csv' sudah diunggah ke Colab.")
    # Membuat data dummy jika file tidak ditemukan
    df = pd.DataFrame(np.random.rand(100, 12), columns=[f'fitur{i}' for i in range(11)] + ['quality'])
    df['quality'] = np.random.randint(3, 9, 100) # Skor 3 hingga 8

# --- 1. DEFINISI MASALAH (Klasifikasi Biner) ---
# Ubah kualitas menjadi target biner: 1 (Baik) jika quality >= 7, 0 (Buruk) jika quality < 7
df['target'] = np.where(df['quality'] >= 7, 1, 0) 

X = df.drop(['quality', 'target'], axis=1)
y = df['target']

# --- 2. WRANGLING DAN SCALING ---
# Split Data
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# Standardisasi (Z-Score) - Wajib untuk Regresi Logistik
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# --- 3. PEMODELAN ---
model = LogisticRegression(random_state=42)
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)

# --- 4. EVALUASI DAN INTERPRETASI ---
acc = accuracy_score(y_test, y_pred)
print("-------------------------------------------------")
print("HASIL ANALISIS KUALITAS WINE (LOGISTIC REGRESSION)")
print(f"Akurasi Model: {acc:.4f}")
print("Classification Report:")
print(classification_report(y_test, y_pred))
print("-------------------------------------------------")
print("Interpretasi: Fokus pada 'Recall' untuk kelas 1 (Wine Baik) untuk memastikan")
print("bahwa kita tidak salah mengklasifikasikan wine baik sebagai wine buruk (FN rendah).")