Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import joblib | |
| st.set_page_config(page_title="Insurance Predictor", layout="centered") | |
| def load_assets(): | |
| model = joblib.load("lgbm_model.pkl") | |
| columns = joblib.load("model_columns.pkl") | |
| return model, columns | |
| model, model_columns = load_assets() | |
| st.title("🏥 Sağlık Sigortası Fiyat Tahmini") | |
| # Kullanıcı Girişleri | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| age = st.number_input("Yaş", 18, 100, 30) | |
| bmi = st.number_input("BMI", 10.0, 60.0, 25.0) | |
| children = st.number_input("Çocuk Sayısı", 0, 10, 0) | |
| with col2: | |
| sex = st.selectbox("Cinsiyet", ["male", "female"]) | |
| smoker = st.selectbox("Sigara", ["yes", "no"]) | |
| region = st.selectbox("Bölge", ["southeast", "southwest", "northwest", "northeast"]) | |
| if st.button("Tahmin Et"): | |
| # 1. Temel DataFrame | |
| input_df = pd.DataFrame([[age, bmi, children]], columns=['age', 'bmi', 'children']) | |
| input_df['sex'] = 1 if sex == "male" else 0 | |
| input_df['smoker'] = 1 if smoker == "yes" else 0 | |
| # 2. Arka Planda Feature Engineering (Notebook'undaki Mantık) | |
| # BMI_CAT | |
| bmi_cat = "ideal" | |
| if bmi < 18.5: bmi_cat = "underweight" | |
| elif 25 <= bmi < 30: bmi_cat = "overweight" | |
| elif bmi >= 30: bmi_cat = "obese" | |
| # AGE_CAT | |
| age_cat = "young" | |
| if 35 < age <= 55: age_cat = "middle" | |
| elif age > 55: age_cat = "old" | |
| # Smoker_Obese Etkileşimi | |
| input_df['is_smoker_obese'] = 1 if (smoker == "yes" and bmi >= 30) else 0 | |
| # 3. One-Hot Encoding Simülasyonu | |
| for col in model_columns: | |
| if col not in input_df.columns: | |
| # Region, BMI_CAT ve AGE_CAT sütunlarını kontrol et | |
| if f"region_{region}" == col or f"BMI_CAT_{bmi_cat}" == col or f"AGE_CAT_{age_cat}" == col: | |
| input_df[col] = 1 | |
| else: | |
| input_df[col] = 0 | |
| # Sütunları modelin beklediği sıraya diz | |
| input_df = input_df[model_columns] | |
| res = model.predict(input_df)[0] | |
| st.success(f"Tahmini Yıllık Ücret: ${res:,.2f}") |