File size: 2,826 Bytes
7c5d1d0
2750f6c
7a63bb7
2750f6c
 
 
 
 
 
7c5d1d0
2750f6c
 
 
 
 
 
 
 
 
 
 
7a63bb7
2750f6c
 
 
 
 
 
 
7a63bb7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2750f6c
 
 
7a63bb7
2750f6c
 
 
7a63bb7
2750f6c
7c5d1d0
2750f6c
7c5d1d0
2750f6c
7c5d1d0
7a63bb7
 
 
 
 
7c5d1d0
 
7a63bb7
7c5d1d0
7a63bb7
 
7c5d1d0
 
 
 
7a63bb7
 
7c5d1d0
 
 
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
import gradio as gr
import xgboost as xgb
import numpy as np
import joblib
import os
import warnings

# Suppress XGBoost warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*WARNING.*")

# Load your model (automatically detect XGBoost or joblib model)
def load_model():
    model_path = "best_model.json"  # Ensure this matches your file name
    if os.path.exists(model_path):  
        model = xgb.Booster()
        model.load_model(model_path)
        print("βœ… Model loaded successfully.")
        return model
    else:
        print("❌ Model file not found.")
        return None

model = load_model()

# Prediction function
def predict_employee_status(satisfaction_level, last_evaluation, number_project,
                            average_monthly_hours, time_spent_company, 
                            work_accident, promotion_last_5years, salary, department):
    
    # One-hot encode the department
    departments = [
        'RandD', 'accounting', 'hr', 'management', 'marketing',
        'product_mng', 'sales', 'support', 'technical'
    ]
    department_encoded = [1 if dept == department else 0 for dept in departments]

    # Prepare the input with all 18 features
    input_data = np.array([
        satisfaction_level, last_evaluation, number_project, 
        average_monthly_hours, time_spent_company, work_accident, 
        promotion_last_5years, salary
    ] + department_encoded).reshape(1, -1)

    # Predict using the model
    if model is None:
        return "❌ No model found. Please upload the model file."

    try:
        dmatrix = xgb.DMatrix(input_data)
        prediction = model.predict(dmatrix)
        return "Employee is likely to quit." if prediction[0] > 0.5 else "Employee is likely to stay."
    except Exception as e:
        return f"❌ Error: {str(e)}"

# Gradio interface
interface = gr.Interface(
    fn=predict_employee_status,
    inputs=[
        gr.Number(label="Satisfaction Level (0.0 - 1.0)"),
        gr.Number(label="Last Evaluation (0.0 - 1.0)"),
        gr.Number(label="Number of Projects (1 - 10)"),
        gr.Number(label="Average Monthly Hours (80 - 320)"),
        gr.Number(label="Time Spent at Company (Years)"),
        gr.Radio([0, 1], label="Work Accident (0 = No, 1 = Yes)"),
        gr.Radio([0, 1], label="Promotion in Last 5 Years (0 = No, 1 = Yes)"),
        gr.Radio([0, 1, 2], label="Salary (0 = Low, 1 = Medium, 2 = High)"),
        gr.Dropdown(
            ['RandD', 'accounting', 'hr', 'management', 'marketing',
             'product_mng', 'sales', 'support', 'technical'], 
            label="Department"
        )
    ],
    outputs="text",
    title="Employee Retention Prediction System",
    description="Predict whether an employee is likely to stay or quit based on their profile."
)

interface.launch()