hfzdzakii's picture
<Update>: UI
f090c19
import gradio as gr
import pickle
with open(f"./model/model.pkl", "rb") as f:
model = pickle.load(f)
def get_yes_no_question(yes_no):
yes_no_mapping = {
"No" : 0,
"Yes" : 1
}
return yes_no_mapping.get(yes_no, -1)
def get_gender(gender):
gender_mapping = {
"Female" : 0,
"Male" : 1
}
return gender_mapping.get(gender, -1)
status = {
0 : "Dropout",
1 : "Graduate"
}
def predict_status(_sem_enrolled, _scholarship_holder, _sem_approved, _sem_credited,
_tuition_fees, _sem_evaluations, _gender, _debt):
scholarship_holder = get_yes_no_question(_scholarship_holder)
tuition_fees = get_yes_no_question(_tuition_fees)
gender = get_gender(_gender)
debt = get_yes_no_question(_debt)
data = [[debt, _sem_approved, _sem_evaluations, _sem_credited,
_sem_enrolled, scholarship_holder,
tuition_fees, gender]]
prediction = model.predict(data)[0]
prediction_proba = model.predict_proba(data)[0][prediction] * 100
if prediction == 0:
return f"The student might {status[prediction]}, model confidence is {prediction_proba:.2f}%"
if prediction == 1:
return f"The student should {status[prediction]}, model confidence is {prediction_proba:.2f}%"
with gr.Blocks(title="Student Status Prediction") as demo:
gr.Markdown("""
# ๐ŸŽ’ Student Status Prediction
# Dicoding - Solving Educational Institution Problem
## Made by : Muhammad Hafizh Dzaki
## Gihub Repo : [Here](https://github.com/hfzdzakii/Dicoding-SolvingEducationIntsituteProblem)
""")
with gr.Row():
with gr.Column():
gr.Markdown("### Input Variables")
sem_approved = gr.Number(label="Sum of 2nd Semester Curricular Units Approved:",
value=0, minimum=0, maximum=24)
sem_evaluations = gr.Number(label="Sum of 2nd Semester Curricular Units Evalutions:",
value=0, minimum=0)
sem_credited = gr.Number(label="Sum of 2nd Semester Curricular Units Credited:",
value=0, minimum=0, maximum=24)
sem_enrolled = gr.Number(label="Sum of 2nd Semester Curricular Units Enrolled:",
value=0, minimum=0, maximum=24)
debt = gr.Radio(label="Having Debt?",
choices=["No", "Yes"], value="No")
scholarship_holder = gr.Radio(label="Scholarship Holder?",
choices=["No", "Yes"], value="No")
tuition_fees = gr.Radio(label="Tuition Fees Payed?",
choices=["No", "Yes"], value="No")
gender = gr.Radio(label="Gender:",
choices=["Male", "Female"], value="Male")
with gr.Column():
gr.Markdown("""### Example Data
Choose one from list below to fill input immediately!
""")
gr.Examples(
examples=[
[6, "No", 5, 0, "Yes", 13, "Female", "Yes"],
[5, "No", 0, 0, "Yes", 0, "Male", "No"],
[7, "No", 6, 2, "Yes", 10, "Female", "Yes"],
[5, "Yes", 3, 0, "No", 9, "Female", "No"],
[6, "Yes", 6, 0, "No", 6, 'Female', "Yes"],
[6, "Yes", 6, 2, "No", 6, "Female", "No"]
],
inputs=[sem_enrolled, scholarship_holder, sem_approved,
sem_credited, tuition_fees, sem_evaluations, gender,
debt]
)
gr.Markdown("### Predict and Result")
predict_button = gr.Button("Predict", variant="primary")
prediction = gr.Textbox(label="Prediction", interactive=False)
predict_button.click(
fn=predict_status,
inputs=[sem_enrolled, scholarship_holder,
sem_approved,
sem_credited, tuition_fees,
sem_evaluations, gender, debt],
outputs=prediction,
)
demo.launch()