File size: 8,246 Bytes
4194c98 d7717b4 4194c98 6c39bca 4194c98 0f59064 4194c98 1b02265 4194c98 52a7208 caefd9f 4194c98 8748300 4194c98 8748300 4194c98 caefd9f d7717b4 5ce59f6 ad457bf 226dd1b 7849dfa 5ce59f6 f9d5aed 5ce59f6 226dd1b 7849dfa 5ce59f6 226dd1b 5ce59f6 ad457bf 292f81f 4194c98 292f81f d035eb2 4e1803a d035eb2 4e1803a 94b741a d035eb2 94b741a c7a93a0 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 94b741a d035eb2 399e950 94b741a d035eb2 292f81f 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 |
#Import Relevant Libraries
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']
# Page Title with Style
st.markdown(
f"""
<div style="text-align: center;">
<h2 style="color: #3a2a71;">π¨βπΌπ©βπΌ Employee Attrition Prediction App</h2>
</div>
""",
unsafe_allow_html=True
)
st.markdown("---")
# Attrition Information
st.markdown(
"""
**Employee attrition** refers to the phenomenon of employees leaving their jobs for various reasons. It's crucial for organizations to predict attrition to retain valuable talent.
"""
)
# Main content
st.image("https://www.aihr.com/wp-content/uploads/Reasons-for-Employee-Attrition.png")
# Link to Detailed Article on Employee Attrition
st.markdown("π **Learn more about employee attrition from [Academy to Innovate HR (AIHR)](https://www.aihr.com/wp-content/uploads/Reasons-for-Employee-Attrition.png)**")
st.markdown("---")
# Additional Information for Sample Prediction
st.write("π To make a sample prediction, you can refer to the training dataset information available in the sidebar or input the information of the employee whose attrition you want to predict.")
st.write("Please provide the following information to make a prediction:")
# About Section with Style
st.sidebar.title("βΉοΈ About")
st.sidebar.info(
"This app predicts employee attrition using machine learning on HR data, aiding HR professionals in retention strategies. "
"It utilizes a CatBoost machine learning model trained on an employee attrition dataset."
)
# Load The Train Dataset
train_df = pd.read_csv("train_data.csv", index_col=None)
# Training Dataset Information in the sidebar
st.sidebar.markdown("π **Training Dataset Information:**")
st.sidebar.write("The model is trained on a sepsis dataset. Here's an overview of the dataset:")
st.sidebar.write(train_df.head())
# Auto-expand sidebar code
st.markdown(
"""
<style>
[data-testid="stSidebar"][aria-expanded="false"] > div:first-child {
width: 100%;
}
</style>
""",
unsafe_allow_html=True
)
# Define the Streamlit app
def main():
# 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")
# Predict button
if st.button("Predict Employee Attrition π"):
# 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]
})
# Reorder columns to match the expected order
input_data = input_data[['Age', 'Department', 'EnvironmentSatisfaction', 'JobRole', 'JobSatisfaction',
'MonthlyIncome', 'NumCompaniesWorked', 'OverTime', 'PercentSalaryHike',
'RelationshipSatisfaction', 'TrainingTimesLastYear', 'WorkLifeBalance',
'YearsSinceLastPromotion', 'YearsWithCurrManager']]
# Make predictions
prediction = model.predict(input_data)
probability = model.predict_proba(input_data)[:, 1]
# Display prediction probability
if prediction[0] == 1:
st.subheader("Prediction Probability π")
st.write(f"The probability of the employee leaving is: {probability[0]*100:.2f}%")
# Display characteristic-based recommendations
st.subheader("Recommendations for Retaining The Employee π‘:")
if job_satisfaction == 1 or environment_satisfaction == 1:
st.markdown("- **Job and Environment Satisfaction**: Enhance job and environment satisfaction through initiatives such as recognition programs and improving workplace conditions.")
if years_since_last_promotion > 5:
st.markdown("- **Opportunities for Advancement**: Implement a transparent promotion policy and provide opportunities for career advancement.")
if years_with_curr_manager > 5:
st.markdown("- **Change in Reporting Structure**: Offer opportunities for a change in reporting structure to prevent stagnation and promote growth.")
if percent_salary_hike < 5:
st.markdown("- **Salary and Benefits Adjustment**: Consider adjusting salary and benefits packages to remain competitive and reward employee loyalty.")
if training_times_last_year < 2:
st.markdown("- **Employee Development**: Invest in employee development through training programs and continuous learning opportunities.")
if over_time:
st.markdown("- **Workload Evaluation**: Evaluate workload distribution and consider implementing measures to prevent overwork, such as workload balancing and flexible scheduling.")
if relationship_satisfaction == 1:
st.markdown("- **Positive Work Environment**: Foster positive relationships and a supportive work environment through team-building activities and open communication channels.")
if monthly_income < 5000:
st.markdown("- **Compensation Review**: Review compensation structures and adjust salaries to align with industry standards and employee expectations.")
if num_companies_worked > 5:
st.markdown("- **Address High Turnover**: Identify reasons for high turnover and address issues related to job stability, career progression, and organizational culture.")
if work_life_balance == 1:
st.markdown("- **Work-Life Balance Initiatives**: Promote work-life balance initiatives, such as flexible work arrangements and wellness programs, to support employee well-being.")
# General recommendation for all negative predictions
st.markdown("- **Exit Interviews**: Conduct exit interviews to gather feedback and identify areas for improvement in retention strategies.")
if __name__ == "__main__":
main() |