โœ…Contoh lengkap sudah tersedia (dari pola yang dipakai di P1-P4)

Proyek ini sudah punya versi contoh lengkap pakai dataset dummy: 160 siswa dengan 4 fitur awal semester (nilai mid, kehadiran, jam belajar, ikut ekskul atau tidak) dan label lulus/tidak. Materinya bisa dibuka dan dipelajari alurnya sebelum Abbas kerjakan versi asli:

Beda penting dari P1-P4: spreadsheet TIDAK BISA melatih model Machine Learning. Tab 1-6 di Sheet contoh cuma EDA (Exploratory Data Analysis), yaitu mengenali pola di data SEBELUM modeling. Model ML yang sesungguhnya (training, evaluasi, feature importance) cuma bisa dikerjakan di Python, ada di tab ke-7. Ini bukan keterbatasan tools yang dipakai, ini memang batas kemampuan spreadsheet, dan alasan kenapa Bulan 9-10 di roadmap fokus penuh ke scikit-learn.

Alur yang dipakai:

  • Formula Spreadsheet (EDA) (tab Latihan_Formula + Kunci_Jawaban): bandingkan rata-rata tiap fitur antara siswa yang lulus dan tidak, pakai AVERAGEIF, COUNTIFS untuk fitur kategorikal, dan CORREL. Tujuannya membangun intuisi fitur mana yang kelihatannya penting, sebelum model memastikannya dengan angka.
  • Pivot Table (tab Ringkasan_Pivot): ringkas rata-rata Nilai Mid berdasarkan status Lulus x Ekskul sekaligus.
  • SQL (tab Query_SQL): function QUERY(), termasuk contoh mencari siswa dengan nilai rendah DAN tidak lulus sekaligus (WHERE gabungan), mensimulasikan cara mencari kandidat yang butuh intervensi dini.
  • Model ML beneran (tab Lanjutan_Sklearn_Looker): RandomForestClassifier dari scikit-learn, lengkap dengan train-test split, evaluasi, dan feature importance. Ini satu-satunya tahap yang benar-benar "memprediksi", bukan cuma meringkas data yang sudah ada.
  • Dashboard (Looker Studio): Looker Studio tidak bisa menjalankan model, tapi bisa menampilkan HASIL prediksi (daftar siswa berisiko beserta skor probabilitasnya) sebagai dashboard yang mudah dibaca guru non-teknis.

Hasil model di dataset contoh: akurasi 91%, AUC-ROC 0.97, dengan Nilai_Mid sebagai fitur terpenting, disusul Kehadiran dan Jam_Belajar. Satu temuan menarik: korelasi sederhana Jam_Belajar terhadap kelulusan kelihatan lemah (sekitar 0.07) kalau dilihat sendirian, tapi tetap masuk sebagai fitur penting ke-3 di model. Ini menunjukkan kenapa EDA sederhana (1 fitur vs 1 label) kadang belum cukup: model yang mempertimbangkan semua fitur sekaligus bisa menangkap pola yang tidak kelihatan dari korelasi tunggal. Detail lengkap ada di tab Panduan pada Sheet di atas.

๐ŸŽฏPertanyaan yang akan Abbas jawab
  • Faktor apa di awal semester yang paling memprediksi performa akhir?
  • Seberapa akurat model prediksi Abbas (dan apa batas akurasi yang realistis)?
  • False positive vs false negative: mana yang lebih buruk dalam konteks ini?
  • Apakah model bisa diinterpretasikan oleh guru yang tidak paham ML?
  • Bagaimana cara melakukan update model saat ada data semester baru?

Deliverable (output wajib)

  • Model ML terlatih yang disimpan dengan joblib
  • Notebook evaluasi lengkap: confusion matrix, precision, recall, AUC-ROC
  • Feature importance visualization
  • Model card: deskripsi model, data training, limitasi, cara pakai
  • Demo sederhana: input nilai awal semester, output prediksi

Dataset

๐Ÿ“Opsi 1 (tercepat): pakai dataset yang sudah disiapkan

Tab Data di Google Sheet pada bagian atas halaman ini sudah berisi 160 baris siswa dummy siap pakai (kolom: Siswa, Nilai_Mid, Kehadiran_Persen, Jam_Belajar_Perminggu, Ekskul, Lulus). Download tab itu ke CSV (File > Download > Comma Separated Values) kalau mau langsung dipakai di Colab.

๐Ÿ“Opsi 2: dataset asli atau bikin sendiri (untuk deliverable final)

Gunakan dataset "Student Performance" dari UCI/Kaggle, atau buat sendiri: data 100 siswa dengan fitur awal semester (nilai ujian pertama, kehadiran minggu pertama, jarak rumah, aktivitas ekskul) dan label akhir (lulus/tidak lulus). Kalau pakai data siswa asli, kerjakan di sheet privat, jangan di folder publik ini.

Scaffold Kode

Ini kerangka awal. Abbas kembangkan sendiri sesuai kebutuhan analisis.

python
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import joblib
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Load dan prepare data
df = pd.read_csv('student_data.csv')
features = ['nilai_mid', 'kehadiran_pct', 'jam_belajar', 'ekskul']
target = 'lulus'

X = df[features]
y = df[target]

# Split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)

# Pipeline
pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('model', RandomForestClassifier(n_estimators=100, random_state=42))
])
pipe.fit(X_train, y_train)

# Evaluasi
y_pred = pipe.predict(X_test)
print(classification_report(y_test, y_pred))
print(f"AUC-ROC: {roc_auc_score(y_test, pipe.predict_proba(X_test)[:,1]):.3f}")

# Feature importance
importances = pipe['model'].feature_importances_
plt.barh(features, importances)
plt.title('Feature Importance')
plt.show()

# Simpan model
joblib.dump(pipe, 'model_prediksi_siswa.pkl')
print("Model tersimpan!")
๐Ÿค”Sebelum mulai, pikirkan ini
  • Apa yang Abbas harapkan akan ditemukan? Tulis hipotesis awal sebelum melihat data.
  • Siapa yang akan membaca hasil analisis ini? Bagaimana cara penyajian yang paling tepat untuk mereka?
  • Apa yang akan Abbas lakukan jika data tidak mendukung hipotesis awal?
P6: Capstone Final โ†’