File size: 6,422 Bytes
1013508
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import gradio as gr
import joblib
import numpy as np
import pandas as pd
from huggingface_hub import hf_hub_download
from sklearn.preprocessing import StandardScaler, LabelEncoder

REPO_ID = "Hemg/modelxxx"
MoDEL_FILENAME = "studentpredict.joblib"
SCALER_FILENAME = "studentscaler.joblib"

model = joblib.load(hf_hub_download(repo_id=REPO_ID, filename=MoDEL_FILENAME))
scaler = joblib.load(hf_hub_download(repo_id=REPO_ID, filename=SCALER_FILENAME))

def encode_categorical_columns(df):
    label_encoder = LabelEncoder()
    ordinal_columns = df.select_dtypes(include=['object']).columns

    for col in ordinal_columns:
        df[col] = label_encoder.fit_transform(df[col])

    nominal_columns = df.select_dtypes(include=['object']).columns.difference(ordinal_columns)
    df = pd.get_dummies(df, columns=nominal_columns, drop_first=True)

    return df

def predict_performance(Location, College_Fee, College, GPA, Year, Course_Interested, Faculty, Source, 
                       Visited_College_for_Inquiry_Only, Event, Attended_Any_Events, 
                       Presenter, Visited_Parents):
    try:
        input_data = [[Location, College_Fee, College, GPA, Year, Course_Interested, Faculty, Source,
                    Visited_College_for_Inquiry_Only, Event, Attended_Any_Events,
                    Presenter, Visited_Parents]]

        feature_names = ["Location", "College Fee", "College", "GPA", "Year", "Course Interested",
                     "Faculty", "Source", "Visited College for Inquiry Only", "Event",
                     "Attended Any Events", "Presenter", "Visited Parents"]
        
        input_df = pd.DataFrame(input_data, columns=feature_names)
        df = encode_categorical_columns(input_df)
        df = df.reindex(columns=scaler.feature_names_in_, fill_value=0)
        scaled_input = scaler.transform(df)

        # Get probability prediction
        probabilities = model.predict_proba(scaled_input)[0]
        # Take the probability of positive class (usually index 1)
        admission_probability = probabilities[1]
        
        # Ensure the probability is between 0 and 1
        admission_probability = np.clip(admission_probability, 0, 1)
        
        # Convert to percentage
        prediction_percentage = admission_probability * 100

        # Create styled HTML output
        # html_template = """
        # <div style='text-align: center; padding: 20px;'>
        #     <div style='font-family: Arial, sans-serif; font-size: 24px; margin-bottom: 15px;'>
        #         Admission Probability: <span style='font-weight: bold;'>{:.1f}%</span>
        #     </div>
        #     <div style='{style}'>
        #         {message}
        #     </div>
        # </div>
        # """
 # Create styled HTML output
        html_template = """
        <div style='text-align: center; padding: 20px;'>
            <div style='{style}'>
                {message}
            </div>
        </div>
        """


        if prediction_percentage > 50:
            style = "font-family: Arial, sans-serif; font-size: 32px; color: #28a745; font-weight: bold;"
            message = "High chance of admission"
        elif prediction_percentage < 50:
            style = "font-family: Arial, sans-serif; font-size: 32px; color: #dc3545; font-weight: bold; text-transform: uppercase;"
            message = "Lower chance of admission"
        else:  # exactly 50
            style = "font-family: Arial, sans-serif; font-size: 32px; color: #ffc107; font-weight: bold;"
            message = "Moderate chance of admission"

        return html_template.format(prediction_percentage, style=style, message=message)

    except Exception as e:
        return f"<div style='color: red; font-family: Arial, sans-serif;'>Error in prediction: {str(e)}</div>"

# Update the Gradio interface
iface = gr.Interface(
    fn=predict_performance,
   inputs=[
        gr.Radio(["Kathmandu", "Bhaktapur", "Lalitpur", "Kritipur"], label="Location",info="What is your current location?"),
        gr.Slider(minimum=1000000, maximum=1700000,step=100000,label="College Fee", info="What 's the the total bachelor fee for the course you want to enroll?"),
        gr.Radio(["Trinity", "CCRC", "KMC", "SOS", "ISMT", "St. Xavier's", "Everest", "Prime"], label="College", info="What is the name of the last college you attended?"),
        gr.Slider(minimum=2, maximum=3, label="GPA", info="What is your GPA (Grade Point Average) of +2 ?"),
        gr.Slider(minimum=2024, maximum=2026, step=1, label="Year", info="What is your intended year of admission?"),
        #gr.Radio([2024, 2025, 2026], label="Year", info="What is your intended year of admission?")
        gr.Radio(["MSc IT & Applied Security", "BSc (Hons) Computing", "BSc (Hons) Computing with Artificial Intelligence", 
                 "BSc (Hons) Computer Networking & IT Security", "BSc (Hons) Multimedia Technologies", "MBA", 
                 "BA (Hons) Accounting &  Finance", "BA (Hons) Business Administration"], label="Course_Interested", info="Which course are you most interested in?"),
        gr.Radio(["Science", "Management", "Humanities"], label="Faculty", info="what is your last stream ?"),
        gr.Radio(["Event", "Facebook", "Instagram", "Offline", "Recommendation"], label="Source",info="How did you first hear about this college?"),
        gr.Radio(["Yes", "No"], label="visited_college_for_inquery_only", info="Have you visited the college you're interested in for an inquiry or consultation?"),
        gr.Radio(["Yes", "No"], label="attended_any_event", info="Have you attended any events organized by the college you're interested in?"),
        gr.Radio(["New Year", "Dashain", "Orientation", "Fresher's Party", "Holi Festival", "Welcome Ceremony"], 
                label="attended_event_name", info="If yes, which events did you attend?" ),
        gr.Radio(["Ram", "Gita", "Manish", "Shyam", "Raj", "Hari", "Rina", "Shree"], label="Presenter", info="who is the counser that help you while in counseling?"),
        gr.Radio(["Yes", "No"], label="visited_with_parents", info="Did you visit the college with your parents?")
    ],


    
    outputs=gr.HTML(),  # Changed to HTML output
    title="Student Admission Prediction",
    description="Predict the probability of student admission",
    css="body { font-family: Arial, sans-serif; }"
)

if __name__ == "__main__":
    iface.launch(share=True)