MANUAL BOOK SISTEM PREDIKSI PRESTASI UJIAN SISWA BERDASARKAN PENGARUH BACKGROUND SOSIAL Alif Dwi Kurniawan Charis Saida Mukmin Fahri Ari Rahman Dr. Eng. Didik Dwi Prasetya, S.T., M.T. TEKNIK INFORMATIKA 2020 | UNIVERSITAS NEGERI MALANG BAB 1 PENDAHULUAN Prestasi akademik siswa adalah indikator penting dalam mengukur kualitas pendidikan. Namun, prestasi akademik siswa tidak hanya dipengaruhi oleh faktor-faktor akademik semata, tetapi juga oleh faktor-faktor sosial dan non-sosial seperti pendidikan orang tua, status ekonomi, jenis kelamin, etnis, motivasi, kecerdasan intelektual, dan kemampuan belajar. Oleh karena itu, perlu dipahami bagaimana faktor-faktor ini berinteraksi dalam mempengaruhi prestasi akademik siswa. Dalam beberapa tahun terakhir, kemajuan teknologi informasi dan komunikasi telah memunculkan big data, yaitu data yang sangat besar dan kompleks yang tidak dapat diolah menggunakan perangkat lunak tradisional. Big data dapat memberikan informasi yang berharga dalam memahami faktor-faktor yang mempengaruhi prestasi akademik siswa, termasuk faktorfaktor sosial dan non-sosial. Dengan memanfaatkan teknologi big data, para peneliti dapat mengumpulkan dan menganalisis data dalam jumlah besar dan kompleks untuk memprediksi prestasi akademik siswa dengan lebih akurat. Salah satu metode yang dapat digunakan untuk memprediksi prestasi akademik siswa dengan memanfaatkan big data adalah machine learning, yaitu teknik yang memungkinkan komputer untuk belajar dari data dan membangun model prediksi yang akurat. Dalam manual book ini, akan dijelaskan bagaimana memanfaatkan teknologi big data dan machine learning untuk memprediksi prestasi akademik siswa dengan lebih efektif dan efisien. 1 BAB 2 CARA MENGOPERASIKAN SISTEM Langkah awal yaitu mengunduh file aplikasi dari https://github.com/charissaida/BigDataSistem_Prediksi, pada bagian code anda dapat memilih berbagai opsi untuk mendownload file tersebut. Setelah selesai mengunduh, jalankan file aplikasi GUI-BigData.exe yang ada didalam folder dist/GUI-BigData/GUI-BigData.exe. 2 Kemudian upload dataset pada tombol “Upload Dataset” dan pilih dataset pada folder penyimpanan anda. 3 Selanjutnya pilih algoritma apa yang ingin anda gunakan. Tersedia tiga pilihan yaitu Naïve Bayes, Random Forest dan Logistic Regression. Setelah memilih kemudian jalankan dengan menekan tombol “Run Algorithm” dan akan muncul tampilan confusion matrix dari algoritma yang telah anda pilih. 4 BAB 3 SOURCE CODE Program di atas menggunakan library pandas dan numpy di Python untuk membuka file CSV dan menyimpan datanya ke dalam variabel data sebagai sebuah DataFrame melalui fungsi open_file(). Setelah itu, program menambahkan kolom baru bernama average_score yang berisi nilai rata-rata dari kolom math score, reading score, dan writing score. Untuk mengonversi nilai average_score menjadi nilai huruf A, B, C, D, atau E, program membuat fungsi bernama letter_grade() dan menggunakan metode apply() pada DataFrame data. Program di atas merupakan sebuah fungsi run_model() yang digunakan untuk melakukan preprocessing pada dataset dan membagi dataset ke dalam train set dan test set. Pertama, fungsi 5 ini melakukan encoding pada variabel kategorikal dalam dataset menggunakan LabelEncoder. Kemudian, dataset di-drop kolom 'grades' sebagai target variabel dan disimpan dalam variabel x. Target variabel disimpan dalam variabel y. Selanjutnya, fungsi ini membagi dataset ke dalam train set dan test set menggunakan fungsi train_test_split() dari library scikit-learn. Variabel x_train dan y_train digunakan untuk training model, sedangkan variabel x_test dan y_test digunakan untuk menguji model. Program di atas merupakan bagian dari fungsi yang digunakan untuk melakukan pemodelan dengan menggunakan algoritma Naive Bayes. Pada baris pertama, dilakukan pengecekan apakah algoritma yang dipilih adalah Naive Bayes. Jika iya, maka model akan diinisialisasi dengan menggunakan GaussianNB. Selanjutnya, dilakukan proses pelatihan model menggunakan data train dan data target. Kemudian, dilakukan prediksi pada data test dengan memanggil fungsi predict pada objek model. Selanjutnya, dilakukan perhitungan nilai akurasi, serta membuat confusion matrix dan menampilkannya dalam bentuk plot. Program di atas merupakan implementasi algoritma logistic regression pada model machine learning. Pada bagian ini, data telah dipisah ke dalam train set dan test set, kemudian model machine learning logistic regression akan dijalankan dengan menggunakan library scikitlearn. Setelah model selesai dilatih, model akan digunakan untuk melakukan prediksi pada data test, dan kemudian dilakukan evaluasi performa model dengan menggunakan metrik akurasi, classification report, dan confusion matrix. 6 Program di atas merupakan bagian dari program untuk memilih algoritma prediksi kelas (grades) pada dataset siswa. Pada bagian ini, jika pengguna memilih algoritma "random_forest", maka program akan membangun model Random Forest dengan menggunakan 100 pohon keputusan (n_estimators=100), melakukan pelatihan model pada data latih, dan menguji model pada data uji. Kemudian program akan mencetak akurasi, laporan klasifikasi, dan confusion matrix pada layar. Jika pengguna tidak memilih algoritma, maka program akan mencetak pesan "Silakan pilih algoritma". Program di atas merupakan kode untuk membuat GUI (Graphical User Interface) menggunakan modul tkinter pada Python. GUI ini digunakan untuk mengunggah dataset, memilih algoritma machine learning yang ingin digunakan (Naive Bayes, Random Forest, atau Logistic Regression), dan menjalankan algoritma tersebut pada dataset yang telah diunggah. Tombol "Upload Dataset" akan memanggil fungsi "open_file" yang akan membuka jendela untuk memilih 7 file dataset yang ingin diunggah. Tombol "Jalankan Algoritma" akan memanggil fungsi "run_model" yang akan menjalankan algoritma machine learning yang dipilih pada dataset yang telah diunggah, dan menampilkan hasil akurasi serta confusion matrix pada jendela konsol. Full Code : import tkinter as tk from tkinter import filedialog import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score, classification_report, f1_score from sklearn.naive_bayes import GaussianNB from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import LabelEncoder from sklearn import utils from sklearn.metrics import ConfusionMatrixDisplay def open_file(): file_path = filedialog.askopenfilename() global data data = pd.read_csv(file_path) print(data.head()) print(data.shape) # Perform data processing and modeling here # Create new column 'average_score' data['average_score'] = np.int_(data[['math score', 'reading score', 'writing score']].mean(axis=1)) # Define function to convert average_score to letter grade def letter_grade(average_score): if average_score >= 90: return 'A' elif average_score < 90 and average_score >= 80: return 'B' elif average_score < 80 and average_score >= 70: return 'C' elif average_score < 70 and average_score >= 60: return 'D' else: return 'E' 8 # Apply letter_grade function to create new column 'grades' data['grades'] = data.apply(lambda x: letter_grade(x['average_score']), axis=1) def run_model(): global data # Encode categorical variables using LabelEncoder le = LabelEncoder() for x in data: if data[x].dtypes == 'object': data[x] = le.fit_transform(data[x]) print(utils.multiclass.type_of_target(data[x].astype('int'))) print(data.head()) # Drop unnecessary columns and split dataset into train and test sets # data = data.drop(columns=['average_score']) x = data.drop(columns=['grades']) y = data['grades'] x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=13) if algorithm.get() == "naive_bayes": # Naive Bayes model = GaussianNB() model.fit(x_train, y_train) y_predict = model.predict(x_test) print(accuracy_score(y_test, y_predict)) print(classification_report(y_test, y_predict, target_names=le.classes_)) cm = confusion_matrix(y_test, y_predict) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=None) disp.plot() plt.show() elif algorithm.get() == "logistic_regression": # Logistic Regression model = LogisticRegression(random_state=13) model.fit(x_train, y_train) y_predict = model.predict(x_test) print(accuracy_score(y_test, y_predict)) print(classification_report(y_test, y_predict, target_names=le.classes_)) cm = confusion_matrix(y_test, y_predict) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=None) disp.plot() plt.show() 9 elif algorithm.get() == "random_forest": # Random Forest model = RandomForestClassifier(n_estimators=100, random_state=13) model.fit(x_train, y_train) y_predict = model.predict(x_test) print(accuracy_score(y_test, y_predict)) print(classification_report(y_test, y_predict, target_names=le.classes_)) cm = confusion_matrix(y_test, y_predict) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=None) disp.plot() plt.show() else: print("Silakan pilih algoritma") root = tk.Tk() root.title("Dataset Upload and Analysis") root.geometry("300x300") upload_button = tk.Button(root, text="Upload Dataset", command=open_file) upload_button.pack(pady=20) # Create radio button to choose algorithm algorithm = tk.StringVar() nb_radio = tk.Radiobutton(root, text="Naive Bayes", variable=algorithm, value="naive_bayes") rf_radio = tk.Radiobutton(root, text="Random Forest", variable=algorithm, value="random_forest") lr_radio = tk.Radiobutton(root, text="Logistic Regression", variable=algorithm, value="logistic_regression") nb_radio.pack() rf_radio.pack() lr_radio.pack() run_button = tk.Button(root, text="Jalankan Algortima", command=run_model) run_button.pack(pady=20) root.mainloop() 10