Uploaded by Alfi Filsafalasafi

Sistem Prediksi Prestasi

advertisement
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
Download