Spaces:
Sleeping
Sleeping
| 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." | |
| ) |