MSK34's picture
Update src/streamlit_app.py
a03b2ea verified
Raw
History Blame Contribute Delete
7.85 kB
# Streamlit uygulaması
import streamlit as st
import pandas as pd
import joblib
from catboost import CatBoostClassifier
st.set_page_config(
page_title="Academic Success Classification",
page_icon="🎓",
layout="centered"
)
st.title("🎓 Academic Success Classification / Akademik Başarı Sınıflandırma")
st.write("""
Bu uygulama; öğrencinin demografik bilgileri, akademik performansı ve ekonomik göstergeleri kullanarak
**Mezun Olma (Graduate)**, **Eğitime Devam Etme (Enrolled)** veya
**Okulu Bırakma Riski (Dropout)** durumlarından hangisine daha yakın olduğunu
makine öğrenmesi modeli ile tahmin eder.
This application uses a student's demographic information, academic performance,
and socioeconomic indicators to predict whether the student is most likely to
**Graduate**, **Remain Enrolled**, or **Drop Out**.
""")
model = CatBoostClassifier()
model.load_model("src/academic_success_model.cbm")
feature_columns = joblib.load("src/feature_columns.pkl")
reverse_target_map = joblib.load("src/reverse_target_map.pkl")
marital_status = st.number_input("Marital Status / Medeni Durum", min_value=1, max_value=6, value=1)
application_mode = st.number_input("Application Mode / Başvuru Şekli", min_value=1, max_value=60, value=1)
application_order = st.number_input("Application Order / Başvuru Sırası", min_value=0, max_value=10, value=1)
course = st.number_input("Course / Program", min_value=1, max_value=9999, value=9500)
daytime_evening_attendance = st.number_input("Daytime/Evening Attendance / Eğitim Zamanı", min_value=0, max_value=1, value=1)
previous_qualification = st.number_input("Previous Qualification / Önceki Eğitim", min_value=1, max_value=50, value=1)
previous_qualification_grade = st.number_input("Previous Qualification Grade / Önceki Eğitim Notu", min_value=0.0, max_value=200.0, value=130.0)
nationality = st.number_input("Nationality / Uyruk", min_value=1, max_value=200, value=1)
mothers_qualification = st.number_input("Mother's Qualification / Anne Eğitim Durumu", min_value=1, max_value=50, value=1)
fathers_qualification = st.number_input("Father's Qualification / Baba Eğitim Durumu", min_value=1, max_value=50, value=1)
mothers_occupation = st.number_input("Mother's Occupation / Anne Mesleği", min_value=0, max_value=200, value=1)
fathers_occupation = st.number_input("Father's Occupation / Baba Mesleği", min_value=0, max_value=200, value=1)
admission_grade = st.number_input("Admission Grade / Kabul Notu", min_value=0.0, max_value=200.0, value=130.0)
displaced = st.selectbox("Displaced / Yerinden Edilmiş", [0, 1])
educational_special_needs = st.selectbox("Educational Special Needs / Özel Eğitim İhtiyacı", [0, 1])
debtor = st.selectbox("Debtor / Borçlu", [0, 1])
tuition_fees_up_to_date = st.selectbox("Tuition Fees Up to Date / Harç Ödemesi Güncel", [0, 1])
gender = st.selectbox("Gender / Cinsiyet", [0, 1])
scholarship_holder = st.selectbox("Scholarship Holder / Burslu", [0, 1])
age_at_enrollment = st.number_input("Age at Enrollment / Kayıt Yaşı", min_value=15, max_value=80, value=20)
international = st.selectbox("International / Uluslararası Öğrenci", [0, 1])
cu1_credited = st.number_input("1st Sem Credited Units", min_value=0, max_value=30, value=0)
cu1_enrolled = st.number_input("1st Sem Enrolled Units", min_value=0, max_value=30, value=6)
cu1_evaluations = st.number_input("1st Sem Evaluations", min_value=0, max_value=50, value=6)
cu1_approved = st.number_input("1st Sem Approved Units", min_value=0, max_value=30, value=5)
cu1_grade = st.number_input("1st Sem Grade", min_value=0.0, max_value=20.0, value=12.0)
cu1_without_evaluations = st.number_input("1st Sem Without Evaluations", min_value=0, max_value=30, value=0)
cu2_credited = st.number_input("2nd Sem Credited Units", min_value=0, max_value=30, value=0)
cu2_enrolled = st.number_input("2nd Sem Enrolled Units", min_value=0, max_value=30, value=6)
cu2_evaluations = st.number_input("2nd Sem Evaluations", min_value=0, max_value=50, value=6)
cu2_approved = st.number_input("2nd Sem Approved Units", min_value=0, max_value=30, value=5)
cu2_grade = st.number_input("2nd Sem Grade", min_value=0.0, max_value=20.0, value=12.0)
cu2_without_evaluations = st.number_input("2nd Sem Without Evaluations", min_value=0, max_value=30, value=0)
unemployment_rate = st.number_input("Unemployment Rate / İşsizlik Oranı", min_value=0.0, max_value=30.0, value=10.0)
inflation_rate = st.number_input("Inflation Rate / Enflasyon Oranı", min_value=-5.0, max_value=20.0, value=1.0)
gdp = st.number_input("GDP / GSYH", min_value=-10.0, max_value=10.0, value=1.0)
academic_success = cu1_grade + cu2_grade
total_approved = cu1_approved + cu2_approved
approval_rate = total_approved / (cu1_enrolled + cu2_enrolled + 1)
performance_change = cu2_grade - cu1_grade
evaluation_efficiency = total_approved / (cu1_evaluations + cu2_evaluations + 1)
input_df = pd.DataFrame({
"Marital status": [marital_status],
"Application mode": [application_mode],
"Application order": [application_order],
"Course": [course],
"Daytime/evening attendance": [daytime_evening_attendance],
"Previous qualification": [previous_qualification],
"Previous qualification (grade)": [previous_qualification_grade],
"Nacionality": [nationality],
"Mother's qualification": [mothers_qualification],
"Father's qualification": [fathers_qualification],
"Mother's occupation": [mothers_occupation],
"Father's occupation": [fathers_occupation],
"Admission grade": [admission_grade],
"Displaced": [displaced],
"Educational special needs": [educational_special_needs],
"Debtor": [debtor],
"Tuition fees up to date": [tuition_fees_up_to_date],
"Gender": [gender],
"Scholarship holder": [scholarship_holder],
"Age at enrollment": [age_at_enrollment],
"International": [international],
"Curricular units 1st sem (credited)": [cu1_credited],
"Curricular units 1st sem (enrolled)": [cu1_enrolled],
"Curricular units 1st sem (evaluations)": [cu1_evaluations],
"Curricular units 1st sem (approved)": [cu1_approved],
"Curricular units 1st sem (grade)": [cu1_grade],
"Curricular units 1st sem (without evaluations)": [cu1_without_evaluations],
"Curricular units 2nd sem (credited)": [cu2_credited],
"Curricular units 2nd sem (enrolled)": [cu2_enrolled],
"Curricular units 2nd sem (evaluations)": [cu2_evaluations],
"Curricular units 2nd sem (approved)": [cu2_approved],
"Curricular units 2nd sem (grade)": [cu2_grade],
"Curricular units 2nd sem (without evaluations)": [cu2_without_evaluations],
"Unemployment rate": [unemployment_rate],
"Inflation rate": [inflation_rate],
"GDP": [gdp],
"academic_success": [academic_success],
"total_approved": [total_approved],
"approval_rate": [approval_rate],
"performance_change": [performance_change],
"evaluation_efficiency": [evaluation_efficiency]
})
input_df = input_df[feature_columns]
if st.button("Classify Academic Outcome / Akademik Durumu Sınıflandır"):
prediction_code = int(model.predict(input_df)[0][0])
prediction = reverse_target_map[prediction_code]
prediction_tr = {
"Graduate": "Mezun Olur",
"Enrolled": "Eğitimine Devam Eder",
"Dropout": "Okulu Bırakma Riski"
}[prediction]
if prediction == "Graduate":
st.success(f"🎓 Predicted Academic Outcome: {prediction}")
st.success(f"🎓 Tahmini Akademik Durum: {prediction_tr}")
elif prediction == "Enrolled":
st.info(f"📚 Predicted Academic Outcome: {prediction}")
st.info(f"📚 Tahmini Akademik Durum: {prediction_tr}")
else:
st.error(f"⚠️ Predicted Academic Outcome: {prediction}")
st.error(f"⚠️ Tahmini Akademik Durum: {prediction_tr}")