import streamlit as st import pandas as pd import joblib from catboost import CatBoostClassifier st.set_page_config( page_title="Müşteri Satın Alma Niyeti Tahmini", page_icon="🛒", layout="centered" ) model = CatBoostClassifier() model.load_model("src/purchase_intent_model.cbm") feature_columns = joblib.load("src/feature_columns.pkl") cat_features = joblib.load("src/cat_features.pkl") st.title("🛒 Müşteri Satın Alma Niyeti Tahmini") st.write( "Bu uygulama, müşteri ve satış süreci bilgilerine göre müşterinin satın alma " "olasılığını tahmin eder." ) st.info( "Model, CatBoost algoritması ile eğitilmiştir. Tahmin sonucu eğitim ve portföy " "amacıyla sunulmaktadır." ) st.sidebar.header("Müşteri ve Satış Bilgileri") start_date = st.sidebar.date_input("Başlangıç Tarihi") end_date = st.sidebar.date_input("Bitiş Tarihi") estimated_win_rate = st.sidebar.slider( "Tahmini Kazanma Oranı", min_value=0.0, max_value=1.0, value=0.50, step=0.01 ) price = st.sidebar.number_input("Fiyat", min_value=0.0, value=10000.0) unit_number = st.sidebar.number_input("Ürün Adedi", min_value=1, value=1) input_data = {} for col in feature_columns: if col in ["Estimated Win Rate", "Price", "Unit Number"]: continue elif col == "journey_days": input_data[col] = (pd.to_datetime(end_date) - pd.to_datetime(start_date)).days elif col == "start_year": input_data[col] = pd.to_datetime(start_date).year elif col == "start_month": input_data[col] = pd.to_datetime(start_date).month elif col == "start_quarter": input_data[col] = pd.to_datetime(start_date).quarter elif col == "price_per_unit": input_data[col] = price / unit_number elif col in cat_features: input_data[col] = st.sidebar.text_input(col, value="Unknown") else: input_data[col] = st.sidebar.number_input(col, value=0.0) input_data["Estimated Win Rate"] = estimated_win_rate input_data["Price"] = price input_data["Unit Number"] = unit_number input_df = pd.DataFrame([input_data]) input_df = input_df[feature_columns] st.subheader("Girilen Değerler") st.dataframe(input_df) if st.button("Satın Alma Olasılığını Tahmin Et"): probability = model.predict_proba(input_df)[0, 1] st.subheader("Tahmin Sonucu") st.metric("Satın Alma Olasılığı", f"%{probability * 100:.2f}") st.progress(float(probability)) if probability >= 0.70: st.success("Yüksek satın alma olasılığı: Bu müşteri güçlü bir potansiyel alıcı olarak değerlendirilebilir.") elif probability >= 0.40: st.warning("Orta düzey satın alma olasılığı: Bu müşteri için takip ve ek pazarlama çalışmaları faydalı olabilir.") else: st.error("Düşük satın alma olasılığı: Bu müşteri için satın alma ihtimali zayıf görünmektedir.") st.caption( "Bu uygulama eğitim ve portföy amacıyla hazırlanmıştır. Gerçek iş kararlarında " "ek analizler ve uzman değerlendirmeleri dikkate alınmalıdır." )