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() |