# 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}")