Site icon DataFlair

ML Project – Admission Chance Predictor using Logistic Regression GUI Based

Machine Learning courses with 110+ Real-time projects Start Now!!

Program 1

Admission Dataset

# Admission Chance Predictor Based on Test Scores and Profile
# This project uses a Logistic Regression model to predict
# whether a student will be admitted (1) or not admitted (0) based on:
# GRE score , TOEFL score ,SOP (Statement of Purpose) score, CGPA, Research experience

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import tkinter as tk
from tkinter import messagebox

# Load dataset
df = pd.read_csv("admission_data.csv")
#print(df.isnull().sum())
# # Features and labels
X = df[['GRE', 'TOEFL', 'SOP', 'CGPA', 'Research']] # Independed variables
y = df['Admitted'] # Depended variables
# x_train---> Training data set for Independed variable
# x_test---> Testing data set for Independed variable
# y_train---> Training data set for depended variable
# y_test---> Testing data set for depended variable
# # Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# print(len(X_train))
# print(X_test)
# # Train model
model = LogisticRegression()
model.fit(X_train, y_train) # Trained
print(model)
#
# # Accuracy on test set
accuracy = accuracy_score(y_test, model.predict(X_test))
print(accuracy)
#
# GUI setup
app = tk.Tk()
app.title("Admission Predictor - GUI Version")
app.geometry("500x500")
app.config(bg="#eef2f3")
app.resizable(False,False)
# Entry fields
labels = {
    "GRE Score": None,
    "TOEFL Score": None,
    "SOP Score (1-5)": None,
    "CGPA (out of 10)": None,
    "Research (0 or 1)": None
}

tk.Label(app, text="Admission Chance Predictor", font=("Helvetica", 16, "bold"), bg="#eef2f3").pack(pady=10)
frame = tk.Frame(app, bg="#eef2f3")
frame.pack()
for i, label in enumerate(labels):
    tk.Label(frame, text=label, font=("Arial", 12), bg="#eef2f3").grid(row=i, column=0, pady=8, padx=10, sticky="w")
    entry = tk.Entry(frame, font=("Arial", 12), width=20)
    entry.grid(row=i, column=1, pady=8, padx=10)
    labels[label] = entry

# Prediction function
def predict_admission():
    try:
        gre = float(labels["GRE Score"].get())
        toefl = float(labels["TOEFL Score"].get())
        sop = float(labels["SOP Score (1-5)"].get())
        cgpa = float(labels["CGPA (out of 10)"].get())
        research = int(labels["Research (0 or 1)"].get())

        features = [[gre, toefl, sop, cgpa, research]]
        prob = model.predict_proba(features)[0][1]
        #Above line calculates the probability that the student will be admitted.
        #Returns the probability of each class (0 or 1) as a list.
        # For example: [[0.10, 0.90]] 10% chance of Not Admitted (class 0) 90% chance of Admitted (class 1)

        pred = model.predict(features)[0]

        result = f"Prediction: {'Admitted' if pred == 1 else 'Not Admitted'}\n" \
                 f"Probability: {prob*100:.2f}%\n" \
                 f"Model Accuracy (on test set): {accuracy*100:.2f}%"

        messagebox.showinfo("Admission Prediction", result)

    except ValueError:
        messagebox.showerror("Invalid Input", "Please enter valid numeric values.")

# Button
tk.Button(app, text="Predict Admission", command=predict_admission,
          font=("Arial", 12), bg="#4caf50", fg="white", padx=10, pady=5).pack(pady=20)

app.mainloop()

 

 

Exit mobile version