employee-attrition-classifier / src /streamlit_app.py
MSK34's picture
Update src/streamlit_app.py
7d216e0 verified
Raw
History Blame Contribute Delete
6.73 kB
# Streamlit uygulaması
import streamlit as st
import pandas as pd
import joblib
from catboost import CatBoostClassifier
st.set_page_config(
page_title="Employee Attrition Classifier",
page_icon="👥",
layout="centered"
)
st.title("👥 Employee Attrition Classifier")
st.write(
"This application predicts whether an employee is likely to leave the company "
"based on HR, job role, income, satisfaction, and work-life balance factors."
)
st.write(
"Bu uygulama; insan kaynakları, iş rolü, gelir, memnuniyet ve iş-yaşam dengesi "
"bilgilerine göre çalışanın işten ayrılma olasılığını tahmin eder."
)
model = CatBoostClassifier()
model.load_model("src/employee_attrition_model.cbm")
feature_columns = joblib.load("src/feature_columns.pkl")
age = st.number_input("Age / Yaş", min_value=18, max_value=65, value=35)
business_travel = st.selectbox("Business Travel / İş Seyahati", ["Travel_Rarely", "Travel_Frequently", "Non-Travel"])
daily_rate = st.number_input("Daily Rate / Günlük Ücret", min_value=0, max_value=2000, value=800)
department = st.selectbox("Department / Departman", ["Research & Development", "Sales", "Human Resources"])
distance_from_home = st.number_input("Distance From Home / Eve Uzaklık", min_value=0, max_value=50, value=10)
education = st.number_input("Education Level / Eğitim Seviyesi", min_value=1, max_value=5, value=3)
education_field = st.selectbox(
"Education Field / Eğitim Alanı",
["Life Sciences", "Medical", "Marketing", "Technical Degree", "Other", "Human Resources"]
)
environment_satisfaction = st.number_input("Environment Satisfaction / Çevre Memnuniyeti", min_value=1, max_value=4, value=3)
gender = st.selectbox("Gender / Cinsiyet", ["Male", "Female"])
hourly_rate = st.number_input("Hourly Rate / Saatlik Ücret", min_value=0, max_value=150, value=70)
job_involvement = st.number_input("Job Involvement / İşe Katılım", min_value=1, max_value=4, value=3)
job_level = st.number_input("Job Level / İş Seviyesi", min_value=1, max_value=5, value=2)
job_role = st.selectbox(
"Job Role / İş Rolü",
[
"Sales Executive",
"Research Scientist",
"Laboratory Technician",
"Manufacturing Director",
"Healthcare Representative",
"Manager",
"Sales Representative",
"Research Director",
"Human Resources"
]
)
job_satisfaction = st.number_input("Job Satisfaction / İş Memnuniyeti", min_value=1, max_value=4, value=3)
marital_status = st.selectbox("Marital Status / Medeni Durum", ["Married", "Single", "Divorced"])
monthly_income = st.number_input("Monthly Income / Aylık Gelir", min_value=0, max_value=30000, value=5000)
monthly_rate = st.number_input("Monthly Rate / Aylık Oran", min_value=0, max_value=30000, value=15000)
num_companies_worked = st.number_input("Number of Companies Worked / Çalışılan Şirket Sayısı", min_value=0, max_value=10, value=2)
over18 = st.selectbox("Over 18 / 18 Yaş Üzeri", ["Y"])
overtime = st.selectbox("OverTime / Fazla Mesai", ["Yes", "No"])
percent_salary_hike = st.number_input("Percent Salary Hike / Maaş Artış Oranı", min_value=0, max_value=30, value=14)
performance_rating = st.number_input("Performance Rating / Performans Değeri", min_value=1, max_value=4, value=3)
relationship_satisfaction = st.number_input("Relationship Satisfaction / İlişki Memnuniyeti", min_value=1, max_value=4, value=3)
standard_hours = st.number_input("Standard Hours / Standart Saat", min_value=0, max_value=100, value=80)
stock_option_level = st.number_input("Stock Option Level / Hisse Opsiyon Seviyesi", min_value=0, max_value=3, value=1)
total_working_years = st.number_input("Total Working Years / Toplam Çalışma Yılı", min_value=0, max_value=50, value=10)
training_times_last_year = st.number_input("Training Times Last Year / Son Yıl Eğitim Sayısı", min_value=0, max_value=10, value=2)
work_life_balance = st.number_input("Work Life Balance / İş-Yaşam Dengesi", min_value=1, max_value=4, value=3)
years_at_company = st.number_input("Years at Company / Şirketteki Yıl", min_value=0, max_value=40, value=5)
years_in_current_role = st.number_input("Years in Current Role / Mevcut Roldeki Yıl", min_value=0, max_value=20, value=3)
years_since_last_promotion = st.number_input("Years Since Last Promotion / Son Terfiden Beri Yıl", min_value=0, max_value=20, value=1)
years_with_curr_manager = st.number_input("Years with Current Manager / Mevcut Yöneticiyle Yıl", min_value=0, max_value=20, value=3)
income_per_year = monthly_income / (total_working_years + 1)
promotion_gap = years_at_company - years_since_last_promotion
role_stability = years_in_current_role / (years_at_company + 1)
input_df = pd.DataFrame({
"Age": [age],
"BusinessTravel": [business_travel],
"DailyRate": [daily_rate],
"Department": [department],
"DistanceFromHome": [distance_from_home],
"Education": [education],
"EducationField": [education_field],
"EmployeeCount": [1],
"EnvironmentSatisfaction": [environment_satisfaction],
"Gender": [gender],
"HourlyRate": [hourly_rate],
"JobInvolvement": [job_involvement],
"JobLevel": [job_level],
"JobRole": [job_role],
"JobSatisfaction": [job_satisfaction],
"MaritalStatus": [marital_status],
"MonthlyIncome": [monthly_income],
"MonthlyRate": [monthly_rate],
"NumCompaniesWorked": [num_companies_worked],
"Over18": [over18],
"OverTime": [overtime],
"PercentSalaryHike": [percent_salary_hike],
"PerformanceRating": [performance_rating],
"RelationshipSatisfaction": [relationship_satisfaction],
"StandardHours": [standard_hours],
"StockOptionLevel": [stock_option_level],
"TotalWorkingYears": [total_working_years],
"TrainingTimesLastYear": [training_times_last_year],
"WorkLifeBalance": [work_life_balance],
"YearsAtCompany": [years_at_company],
"YearsInCurrentRole": [years_in_current_role],
"YearsSinceLastPromotion": [years_since_last_promotion],
"YearsWithCurrManager": [years_with_curr_manager],
"income_per_year": [income_per_year],
"promotion_gap": [promotion_gap],
"role_stability": [role_stability]
})
input_df = input_df[feature_columns]
if st.button("Predict Attrition Risk / İşten Ayrılma Riskini Tahmin Et"):
probability = model.predict_proba(input_df)[0][1]
risk_percent = probability * 100
st.success(f"Attrition Probability: {risk_percent:.2f}%")
st.success(f"İşten Ayrılma Olasılığı: %{risk_percent:.2f}")
if probability >= 0.50:
st.warning("Risk Level: High / Risk Seviyesi: Yüksek")
else:
st.info("Risk Level: Low / Risk Seviyesi: Düşük")