purchase-intent-prediction / src /streamlit_app.py
MSK34's picture
Update src/streamlit_app.py
e6fcd2f verified
Raw
History Blame Contribute Delete
3.11 kB
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."
)