File size: 9,884 Bytes
d7717b4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41a5a36
d7717b4
 
 
 
 
226dd1b
 
 
d7717b4
5ce59f6
 
ad457bf
226dd1b
7849dfa
5ce59f6
 
 
f9d5aed
5ce59f6
226dd1b
 
7849dfa
5ce59f6
 
 
 
 
 
 
 
 
 
226dd1b
5ce59f6
 
 
ad457bf
d7717b4
 
 
5ce59f6
 
 
 
d7717b4
 
5ce59f6
d7717b4
5ce59f6
d7717b4
bbe87d6
5ce59f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbe236d
5ce59f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbe87d6
5ce59f6
bbe87d6
5ce59f6
 
 
 
 
 
 
 
 
d7717b4
226dd1b
d7717b4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbe87d6
d7717b4
 
bbe236d
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
import streamlit as st
import pickle
import pandas as pd
from catboost import CatBoostClassifier

# Load the trained model and unique values from the pickle file
with open('model_and_key_components.pkl', 'rb') as file:
    saved_components = pickle.load(file)

model = saved_components['model']
unique_values = saved_components['unique_values']

# Define the Streamlit app
def main():
    st.title("Employee Attrition Prediction App")
    st.sidebar.title("Model Settings")

    # Sidebar inputs
    with st.sidebar.expander("View Unique Values"):
        st.write("Unique values for each feature:")
        for column, values in unique_values.items():
            st.write(f"- {column}: {values}")

    # Main content
    st.write("Welcome to the Employee Attrition Prediction App!")
    st.write("This app helps HR practitioners predict employee attrition using a trained CatBoost model.")
    st.write("Please provide the following information to make a prediction:")

    # Define layout with three columns
    col1, col2, col3 = st.columns(3)

    # Column 1
    with col1:
        age = st.number_input("Age", min_value=18, max_value=70)
        monthly_income = st.number_input("Monthly Income")
        num_companies_worked = st.number_input("Number of Companies Worked")
        percent_salary_hike = st.number_input("Percent Salary Hike", min_value=0, max_value=25)
        training_times_last_year = st.number_input("Training Times Last Year", min_value=0, max_value=6)

    # Column 2
    with col2:
        department = st.selectbox("Department", ['Sales', 'Research & Development', 'Human Resources'])
        environment_satisfaction = st.selectbox("Environment Satisfaction", [1, 2, 3, 4])
        job_role = st.selectbox("Job Role", ['Sales Executive', 'Research Scientist', 'Laboratory Technician',
                                              'Manufacturing Director', 'Healthcare Representative', 'Manager',
                                              'Sales Representative', 'Research Director', 'Human Resources'])
        job_satisfaction = st.selectbox("Job Satisfaction", [1, 2, 3, 4])
        work_life_balance = st.selectbox("Work Life Balance", [1, 2, 3, 4])

    # Column 3
    with col3:
        over_time = st.checkbox("Over Time")
        relationship_satisfaction = st.selectbox("Relationship Satisfaction", [1, 2, 3, 4])
        years_since_last_promotion = st.number_input("Years Since Last Promotion")
        years_with_curr_manager = st.number_input("Years With Current Manager")

    # Create a DataFrame to hold the user input data
    input_data = pd.DataFrame({
        'Age': [age],
        'Department': [department],
        'EnvironmentSatisfaction': [environment_satisfaction],
        'JobRole': [job_role],
        'JobSatisfaction': [job_satisfaction],
        'MonthlyIncome': [monthly_income],
        'NumCompaniesWorked': [num_companies_worked],
        'OverTime': [over_time],
        'PercentSalaryHike': [percent_salary_hike],
        'RelationshipSatisfaction': [relationship_satisfaction],
        'TrainingTimesLastYear': [training_times_last_year],
        'WorkLifeBalance': [work_life_balance],
        'YearsSinceLastPromotion': [years_since_last_promotion],
        'YearsWithCurrManager': [years_with_curr_manager]
    })

    # Make predictions
    prediction = model.predict(input_data)
    probability = model.predict_proba(input_data)[:, 1]

    # Display prediction
    if prediction[0] == 0:
        st.success("Employee is predicted to stay (Attrition = No)")
    else:
        st.error("Employee is predicted to leave (Attrition = Yes)")

        # Offer recommendations for retaining the employee
        st.subheader("Suggestions for retaining the employee:")
        st.markdown("- Invest in orientation programs and career development for entry-level staff, which could contribute to higher retention.")
        st.markdown("- Implement mentorship programs and career development initiatives aimed at engaging and retaining younger employees.")
        st.markdown("- Offer robust training and development programs and regular promotions to foster career growth. This investment in skills and career advancement can contribute to higher job satisfaction and retention.")
        st.markdown("- Recognize the diverse needs of employees based on marital status and consider tailoring benefits or support programs accordingly.")
        st.markdown("- Consider offering benefits that cater to the unique needs of married, single, and divorced employees.")
        st.markdown("- Introduce or enhance policies that support work-life balance for employees with families.")
        st.markdown("- Recognize the unique challenges and opportunities within each department and tailor retention strategies accordingly.")

    # Display probability
    st.write(f"Probability of Attrition: {probability[0]:.2f}")

if __name__ == "__main__":
    main()
import streamlit as st
import pickle
import pandas as pd
from catboost import CatBoostClassifier

# Load the trained model and unique values from the pickle file
with open('model_and_key_components.pkl', 'rb') as file:
    saved_components = pickle.load(file)

model = saved_components['model']
unique_values = saved_components['unique_values']

# Define the Streamlit app
def main():
    st.title("Employee Attrition Prediction App")
    st.sidebar.title("Model Settings")

    # Sidebar inputs
    with st.sidebar.expander("View Unique Values"):
        st.write("Unique values for each feature:")
        for column, values in unique_values.items():
            st.write(f"- {column}: {values}")

    # Main content
    st.write("Welcome to the Employee Attrition Prediction App!")
    st.write("This app helps HR practitioners predict employee attrition using a trained CatBoost model.")
    st.write("Please provide the following information to make a prediction:")

    # Define layout with three columns
    col1, col2, col3 = st.columns(3)

    # Column 1
    with col1:
        age = st.number_input("Age", min_value=18, max_value=70)
        monthly_income = st.number_input("Monthly Income", min_value=1000, max_value=20000)
        num_companies_worked = st.number_input("Number of Companies Worked")
        percent_salary_hike = st.number_input("Percent Salary Hike", min_value=10, max_value=25)
        training_times_last_year = st.number_input("Training Times Last Year", min_value=0, max_value=6)

    # Column 2
    with col2:
        department = st.selectbox("Department", ['Sales', 'Research & Development', 'Human Resources'])
        environment_satisfaction = st.selectbox("Environment Satisfaction", [1, 2, 3, 4])
        job_role = st.selectbox("Job Role", ['Sales Executive', 'Research Scientist', 'Laboratory Technician',
                                              'Manufacturing Director', 'Healthcare Representative', 'Manager',
                                              'Sales Representative', 'Research Director', 'Human Resources'])
        job_satisfaction = st.selectbox("Job Satisfaction", [1, 2, 3, 4])
        work_life_balance = st.selectbox("Work Life Balance", [1, 2, 3, 4])

    # Column 3
    with col3:
        over_time = st.checkbox("Over Time")
        relationship_satisfaction = st.selectbox("Relationship Satisfaction", [1, 2, 3, 4])
        years_since_last_promotion = st.number_input("Years Since Last Promotion")
        years_with_curr_manager = st.number_input("Years With Current Manager")

    # Create a DataFrame to hold the user input data
    input_data = pd.DataFrame({
        'Age': [age],
        'Department': [department],
        'EnvironmentSatisfaction': [environment_satisfaction],
        'JobRole': [job_role],
        'JobSatisfaction': [job_satisfaction],
        'MonthlyIncome': [monthly_income],
        'NumCompaniesWorked': [num_companies_worked],
        'OverTime': [over_time],
        'PercentSalaryHike': [percent_salary_hike],
        'RelationshipSatisfaction': [relationship_satisfaction],
        'TrainingTimesLastYear': [training_times_last_year],
        'WorkLifeBalance': [work_life_balance],
        'YearsSinceLastPromotion': [years_since_last_promotion],
        'YearsWithCurrManager': [years_with_curr_manager]
    })

    # Make predictions
    prediction = model.predict(input_data)
    probability = model.predict_proba(input_data)[:, 1]

    # Display prediction
    if prediction[0] == 0:
        st.success("Employee is predicted to stay (Attrition = No)")
    else:
        st.error("Employee is predicted to leave (Attrition = Yes)")

        # Offer recommendations for retaining the employee
        st.subheader("Suggestions for retaining the employee:")
        st.markdown("- Invest in orientation programs and career development for entry-level staff, which could contribute to higher retention.")
        st.markdown("- Implement mentorship programs and career development initiatives aimed at engaging and retaining younger employees.")
        st.markdown("- Offer robust training and development programs and regular promotions to foster career growth. This investment in skills and career advancement can contribute to higher job satisfaction and retention.")
        st.markdown("- Recognize the diverse needs of employees based on marital status and consider tailoring benefits or support programs accordingly.")
        st.markdown("- Consider offering benefits that cater to the unique needs of married, single, and divorced employees.")
        st.markdown("- Introduce or enhance policies that support work-life balance for employees with families.")
        st.markdown("- Recognize the unique challenges and opportunities within each department and tailor retention strategies accordingly.")

    # Display probability
    st.write(f"Probability of Attrition: {probability[0]*100:.2f}%")

if __name__ == "__main__":
    main()