跳到正文
DEV Community· Rafi Miftah·· 4 小時前AI 評分53

學生退學預測研究回顧及 Python 視覺化與建模教學

Dari Tumpukan Data Akademik ke Peringatan Dini: Review Jurnal Terkini Prediksi Dropout Mahasiswa dan Tutorial Visualisasinya dengan Python

AI 導讀

Rafi Miftah 回顧三篇學生退學預測研究,並以 UCI 的 Predict Students' Dropout and Academic Success 數據集示範 Python 探索、視覺化及建模。

正文

_Oleh Rafi Miftah Al Ma'rif — Mahasiswa S-2 Teknik Informatika | Mata kuliah Big Data Analysis and Data Visualisation | Oktober 2026

Setiap semester, kampus menyimpan jutaan baris data: nilai, kehadiran, status pembayaran, jalur masuk, hingga riwayat studi. Sebagian besar data itu hanya berhenti sebagai laporan. Padahal di dalamnya ada sinyal yang bisa memberi tahu kita lebih awal mahasiswa mana yang mulai berisiko putus kuliah.

Tulisan ini ditujukan untuk teman-teman mahasiswa yang sedang belajar analisis dan visualisasi data. Isinya dua bagian: (1) review tiga artikel jurnal terbaru tentang prediksi dropout mahasiswa, dan (2) tutorial langkah demi langkah untuk mengeksplorasi, memvisualisasikan, dan memodelkan data dropout memakai Python. Topik ini kebetulan juga dekat dengan riset tesis saya, yaitu prediksi risiko dropout menggunakan Deep Neural Network (DNN) dengan Dropout Regularization dan Early Stopping pada data sistem informasi akademik (SIAKAD), sehingga beberapa catatan di bawah lahir dari pertanyaan yang benar-benar saya hadapi.

Mengapa Dropout Mahasiswa Adalah Masalah Data
Dari kacamata Big Data, data akademik punya karakter yang sama dengan data skala besar pada umumnya:

  • Variety (beragam): data demografis, sosial-ekonomi, akademik, dan keuangan bercampur dalam satu tabel, dengan tipe numerik dan kategorikal.
  • Veracity (kualitas data): nilai kosong, kode kategori yang tidak konsisten, dan data dari beberapa sistem yang harus digabung.
  • Imbalance (ketimpangan kelas): mahasiswa yang dropout biasanya jauh lebih sedikit daripada yang lulus atau bertahan, sehingga model mudah terlihat "akurat" padahal gagal mengenali yang paling penting. Dataset yang dipakai pada tutorial ini memang berukuran kecil (ribuan baris), jadi belum "big" secara volume. Namun alur kerjanya persis sama dengan yang akan Anda pakai pada data berukuran jutaan baris, hanya perangkatnya yang nanti diganti (misalnya pandas diganti Spark). Belajar alurnya di data kecil adalah cara yang murah dan aman.

Dataset yang Dipakai
Ketiga artikel yang direview, dan juga tutorial ini, bertumpu pada dataset publik Predict Students' Dropout and Academic Success dari UCI Machine Learning Repository (Realinho et al., 2022). Dataset ini berasal dari sebuah institusi pendidikan tinggi di Portugal dan mencakup berbagai program sarjana. Ringkasnya:

Selain itu, dataset ini dirancang agar prediksi bisa dilakukan lebih awal, karena memuat informasi yang sudah diketahui saat mahasiswa mendaftar dan prestasi akademik di akhir semester pertama dan kedua.

Bagian 1: Review Tiga Artikel Jurnal Terkini

Artikel 1: Efek Teknik Penyeimbang Kelas SMOTE pada Prediksi Dropout
Zirekgür, Karakaya, & Avcı (2026). Predicting Student Dropout Using Explainable Artificial Intelligence: The Impact of SMOTE-Based Class Balancing Techniques. Fırat University, Faculty of Engineering.

Penulis membandingkan dampak tiga teknik penyeimbang kelas, yaitu SMOTE, SMOTE-ENN, dan SMOTE-Tomek, pada dataset UCI di atas. Dari ketiganya dibuat empat versi dataset yang kemudian dilatih dengan model machine learning, lalu model terbaik ditafsirkan dengan LIME dan SHAP.

Temuan utama. Kombinasi SMOTE-ENN dengan CatBoost dilaporkan mencapai 98% pada accuracy, precision, recall, dan F1, dengan AUC 1,00. Analisis penjelasan model menunjukkan bahwa performa akademik yang rendah meningkatkan risiko dropout, sedangkan dukungan seperti beasiswa mendorong mahasiswa menyelesaikan studi.

Catatan kritis. Angka 98% dan AUC 1,00 itu sangat tinggi untuk masalah yang melibatkan perilaku manusia. Sebagai pembaca, pertanyaan yang layak kita ajukan ke naskah lengkapnya: apakah resampling dilakukan setelah data dibagi menjadi data latih dan uji? Jika SMOTE diterapkan sebelum pembagian, sampel sintetis yang "mirip" data uji bisa bocor ke data latih dan membuat skor tampak lebih bagus dari kenyataan. Ini jebakan yang saya bahas lagi di tutorial.
Relevansi. Memberi bukti bahwa pilihan teknik penyeimbang kelas sama pentingnya dengan pilihan algoritma, dan bahwa XAI (SHAP/LIME) menjadikan hasil prediksi bisa dipertanggungjawabkan kepada pihak kampus.

Artikel 2: Machine Learning vs Deep Learning pada Data Tabular Dropout
Aljawazneh et al. (2026). A Comparative Study of Machine Learning and Deep Learning Algorithms for Student Dropout Prediction in Higher Education. Penulis berasal dari Al-Zaytoonah University of Jordan.

Penelitian dua tahap. Tahap pertama membandingkan tiga algoritma machine learning (Random Forest, SVM, XGBoost) dengan dua model deep learning (Deep Neural Network dan TabNet) pada data asli. Tahap kedua menguji pengaruh SMOTE dan Borderline-SMOTE. Evaluasi memakai accuracy, precision, recall, dan specificity.
Temuan utama. XGBoost secara konsisten unggul, baik pada data tidak seimbang maupun yang sudah diseimbangkan. Teknik penyeimbang data terbukti menaikkan recall secara signifikan, yang berarti lebih banyak mahasiswa berisiko berhasil terdeteksi.

Catatan kritis. Temuan bahwa model berbasis pohon seperti XGBoost mengalahkan DNN pada data tabular sejalan dengan pengamatan yang cukup umum di komunitas machine learning. Jadi jika Anda memakai DNN, jangan berasumsi ia otomatis paling baik; bandingkan selalu dengan baseline yang kuat.

Relevansi. Sangat relevan bagi siapa pun yang memilih DNN untuk data akademik: DNN layak dicoba, tetapi perlu dibuktikan dengan perbandingan yang jujur, dan metrik recall untuk kelas dropout patut menjadi sorotan.

Artikel 3: Model Hibrida Logistic Regression dan Neural Network
Mustofa, Emon, Mamun, Akhy, & Ahad (2025). A novel AI-driven model for student dropout risk analysis with explainable AI insights. Computers and Education: Artificial Intelligence, 8, 100352.

Penulis menangani ketimpangan kelas dengan upsampling pada kelas Dropout, memilih fitur dengan RFE-CV (Recursive Feature Elimination dengan Cross-Validation), lalu mengusulkan model hibrida HLRNN yang menggabungkan Logistic Regression dan Neural Network. Faktor risiko dianalisis dengan SHAP dan LIME.

Temuan utama. HLRNN dilaporkan mencapai akurasi 96% dan mengungguli model-model pembanding, termasuk dua model induknya (Logistic Regression dan ANN).

Catatan kritis. Nilai tambah artikel ini ada pada alur lengkapnya: penyeimbangan data, seleksi fitur, model, lalu interpretasi. Seperti artikel pertama, kita perlu memeriksa di naskah lengkap kapan upsampling dilakukan terhadap pembagian data.
Relevansi. Menunjukkan bahwa seleksi fitur dan interpretabilitas bukan tambahan, melainkan bagian inti dari sistem peringatan dini yang bisa dipercaya.

Benang Merah dari Ketiganya

  1. Ketimpangan kelas wajib ditangani, dan efeknya paling terasa pada recall kelas dropout.
  2. Akurasi saja tidak cukup. Precision, recall, F1, dan AUC perlu dilaporkan bersama.
  3. Penjelasan model (SHAP/LIME) mengubah prediksi menjadi sesuatu yang bisa ditindaklanjuti kampus.
  4. Algoritma yang "lebih canggih" belum tentu lebih baik pada data tabular.

Bagian 2: Tutorial Eksplorasi, Visualisasi, dan Pemodelan di Python*

Tutorial ini dirancang untuk dijalankan di Google Colab tanpa instalasi tambahan, kecuali satu perintah di awal.
Langkah 0: Persiapan

!pip install ucimlrepo imbalanced-learn

Langkah 1: Memuat dan Mengenali Data
Sebelum membuat grafik apa pun, kenali dulu data Anda: ukuran, proporsi kelas, dan nilai kosong.

import numpy as np, pandas as pd
import matplotlib.pyplot as plt, seaborn as sns
from ucimlrepo import fetch_ucirepo

ds = fetch_ucirepo(id=697)
X, y = ds.data.features, ds.data.targets
df = pd.concat([X, y], axis=1)

print(df.shape)
print(df["Target"].value_counts(normalize=True).round(3))
print("Missing values:", int(df.isna().sum().sum()))

Jika muncul KeyError pada langkah berikutnya, jalankan print(df.columns.tolist()) lalu sesuaikan nama kolom dengan hasil cetakannya.

Langkah 2: Visualisasi Eksploratif
Empat grafik berikut menjawab empat pertanyaan yang berbeda.
(a) Seberapa timpang kelasnya? Grafik batang distribusi kelas langsung memperlihatkan mengapa akurasi bisa menyesatkan.

order = ["Dropout", "Enrolled", "Graduate"]
colors = {"Dropout": "#D1495B", "Enrolled": "#EDAE49", "Graduate": "#2E86AB"}

fig, ax = plt.subplots(figsize=(6, 4))
sns.countplot(data=df, x="Target", order=order, hue="Target",
              palette=colors, legend=False, ax=ax)
for p in ax.patches:
    ax.annotate(int(p.get_height()),
                (p.get_x() + p.get_width() / 2, p.get_height()),
                ha="center", va="bottom")
ax.set_title("Distribusi Status Akhir Mahasiswa")
ax.set_xlabel(""); ax.set_ylabel("Jumlah")
plt.tight_layout(); plt.show()

(b) Apakah nilai berbeda antar kelompok? Boxplot menampilkan sebaran nilai, bukan hanya rata-ratanya, sehingga tumpang tindih antar kelompok terlihat.

fig, ax = plt.subplots(figsize=(6, 4))
sns.boxplot(data=df, x="Target", y="Curricular units 2nd sem (grade)",
            order=order, hue="Target", palette=colors, legend=False, ax=ax)
ax.set_title("Nilai Semester 2 Berdasarkan Status Akhir")
ax.set_xlabel(""); ax.set_ylabel("Rata-rata nilai")
plt.tight_layout(); plt.show()

(c) Apakah faktor finansial berkaitan dengan dropout? Alih-alih jumlah mentah, kita bandingkan tingkat dropout per kelompok supaya adil walau ukuran kelompoknya berbeda.

df["is_dropout"] = (df["Target"] == "Dropout").astype(int)

fig, axes = plt.subplots(1, 3, figsize=(11, 3.6), sharey=True)
for ax, col in zip(axes, ["Tuition fees up to date", "Scholarship holder", "Debtor"]):
    rate = df.groupby(col)["is_dropout"].mean() * 100
    ax.bar(rate.index.astype(str), rate.values, color=["#2E86AB", "#D1495B"])
    ax.set_title(col); ax.set_xlabel("0 = Tidak, 1 = Ya")
axes[0].set_ylabel("Tingkat dropout (%)")
plt.tight_layout(); plt.show()

(d) Fitur mana yang paling berhubungan dengan dropout? Korelasi bukan sebab-akibat, tetapi ini cara cepat menentukan fitur mana yang layak diselidiki lebih jauh.

corr = (df.drop(columns="Target").corr()["is_dropout"]
          .drop("is_dropout").sort_values())
top = pd.concat([corr.head(8), corr.tail(8)])

fig, ax = plt.subplots(figsize=(7, 5))
ax.barh(top.index, top.values, color=np.where(top.values > 0, "#D1495B", "#2E86AB"))
ax.set_title("Korelasi Fitur dengan Status Dropout")
ax.set_xlabel("Koefisien korelasi (Pearson)")
plt.tight_layout(); plt.show()

Langkah 3: Pra-pemrosesan yang Benar (Split Dulu, Baru SMOTE)
Ini langkah yang paling sering salah. Urutan yang benar: bagi data → scaling (belajar dari data latih saja) → SMOTE (hanya pada data latih). Data validasi dan uji tidak boleh disentuh SMOTE, karena keduanya harus mewakili kondisi dunia nyata

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
from imblearn.over_sampling import SMOTE

le = LabelEncoder()
y_enc = le.fit_transform(df["Target"])   # Dropout=0, Enrolled=1, Graduate=2

X_trval, X_te, y_trval, y_te = train_test_split(
    X, y_enc, test_size=0.2, stratify=y_enc, random_state=42)
X_tr, X_val, y_tr, y_val = train_test_split(
    X_trval, y_trval, test_size=0.15, stratify=y_trval, random_state=42)

scaler = StandardScaler().fit(X_tr)      # hanya belajar dari data latih
X_tr, X_val, X_te = (scaler.transform(a) for a in (X_tr, X_val, X_te))

X_tr_bal, y_tr_bal = SMOTE(random_state=42).fit_resample(X_tr, y_tr)
print("Sebelum SMOTE:", np.bincount(y_tr), "| Sesudah:", np.bincount(y_tr_bal))

Langkah 4: DNN dengan Dropout dan Early Stopping
Dropout mematikan sebagian neuron secara acak saat pelatihan agar jaringan tidak menghafal data latih. Early Stopping menghentikan pelatihan ketika loss validasi berhenti membaik, lalu mengembalikan bobot terbaik.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
tf.random.set_seed(42)

model = keras.Sequential([
    layers.Input(shape=(X_tr_bal.shape[1],)),
    layers.Dense(64, activation="relu"), layers.Dropout(0.3),
    layers.Dense(32, activation="relu"), layers.Dropout(0.3),
    layers.Dense(3, activation="softmax"),
])
model.compile(optimizer=keras.optimizers.Adam(1e-3),
              loss="sparse_categorical_crossentropy", metrics=["accuracy"])

es = keras.callbacks.EarlyStopping(monitor="val_loss", patience=10,
                                   restore_best_weights=True)
hist = model.fit(X_tr_bal, y_tr_bal, validation_data=(X_val, y_val),
                 epochs=100, batch_size=64, callbacks=[es], verbose=0)
print("Berhenti di epoch:", len(hist.history["loss"]))

Langkah 5: Evaluasi yang Jujur
Fokuskan perhatian pada recall dan F1 untuk kelas Dropout serta macro F1, bukan akurasi keseluruhan.


from sklearn.metrics import classification_report, ConfusionMatrixDisplay

y_pred = model.predict(X_te, verbose=0).argmax(axis=1)
print(classification_report(y_te, y_pred, target_names=le.classes_, digits=3))


ConfusionMatrixDisplay.from_predictions(
    y_te, y_pred, display_labels=le.classes_, cmap="Blues")
plt.title("Confusion Matrix (Data Uji)"); plt.tight_layout(); plt.show()

Perhatikan juga kelas Enrolled. Pada banyak pekerjaan dengan dataset ini, kelas tengah yang "belum lulus tapi belum keluar" biasanya paling sulit dibedakan, karena posisinya memang berada di antara dua kelas lainnya.

Tiga Pelajaran yang Saya Bawa Pulang

  1. Visualisasi dulu, model kemudian. Empat grafik sederhana di Langkah 2 sudah memberi tahu kita tentang ketimpangan kelas dan fitur yang patut dicurigai, jauh sebelum satu neuron pun dilatih.
  2. Urutan pra-pemrosesan menentukan kejujuran hasil. Skor 98% bisa jadi benar, tetapi bisa pula hasil kebocoran data. Selalu cek urutannya.
  3. Prediksi hanya berguna jika bisa ditindaklanjuti. Model yang mengatakan "mahasiswa ini berisiko" tanpa menjelaskan alasannya sulit dipakai oleh dosen wali atau bagian akademik. Di sinilah SHAP dan LIME berperan.

Penutup
Data akademik adalah salah satu sumber data paling dekat dengan kehidupan kita sebagai mahasiswa, dan mengolahnya dengan baik bisa membantu teman-teman yang hampir menyerah mendapat dukungan sebelum terlambat. Jika Anda mencoba tutorial ini, saya sangat tertarik mendengar hasilnya, terutama kelas mana yang paling sulit dikenali model Anda. Silakan berdiskusi di kolom komentar.

Daftar Pustaka

  • Aljawazneh, H., Alqirem, R., Al-Adwan, N., dkk. (2026). A Comparative Study of Machine Learning and Deep Learning Algorithms for Student Dropout Prediction in Higher Education. https://doi.org/10.15849/zjjb.v2i1.16
  • Mustofa, S., Emon, Y. R., Mamun, S. B., Akhy, S. A., & Ahad, M. T. (2025). A novel AI-driven model for student dropout risk analysis with explainable AI insights. Computers and Education: Artificial Intelligence, 8, 100352. https://doi.org/10.1016/j.caeai.2024.100352
  • Realinho, V., Machado, J., Baptista, L., & Martins, M. V. (2022). Predicting Student Dropout and Academic Success. Data, 7(11), 146. https://doi.org/10.3390/data7110146
  • Zirekgür, M., Karakaya, B., & Avcı, D. (2026). Predicting Student Dropout Using Explainable Artificial Intelligence: The Impact of SMOTE-Based Class Balancing Techniques. Fırat University, Faculty of Engineering. https://doi.org/10.62520/fujece.1887893
  • Dataset: Predict Students' Dropout and Academic Success, UCI Machine Learning Repository. https://archive.ics.uci.edu/dataset/697

來源:DEV Community · dev.to