| import streamlit as st |
| import numpy as np |
| import joblib |
|
|
| |
| |
| try: |
| model = joblib.load("kmeans.pkl") |
| scaler = joblib.load("scaler.pkl") |
| except: |
| st.error("Model dosyaları bulunamadı! / Model files not found!") |
|
|
| st.set_page_config(page_title="Customer Segmentation", page_icon="💎") |
| st.title("Customer Personality Segmentation / Müşteri Segmentasyonu") |
| st.write("---") |
|
|
| |
| st.sidebar.header("📊 Segment Criteria / Segment Kriterleri") |
|
|
| st.sidebar.subheader("💎 Premium") |
| st.sidebar.write("Income / Gelir > 100,000") |
| st.sidebar.write("Spending / Harcama > 2,000") |
| st.sidebar.write("Children / Çocuk = 0") |
|
|
| st.sidebar.write("---") |
|
|
| st.sidebar.subheader("🛒 Budget / Bütçeli") |
| st.sidebar.write("Income / Gelir > 40,000") |
| st.sidebar.write("Spending / Harcama > 500") |
|
|
| st.sidebar.write("---") |
|
|
| st.sidebar.subheader("📉 Occasional / Seyrek") |
| st.sidebar.write("Income / Gelir < 20,000") |
| st.sidebar.write("Spending / Harcama < 100") |
|
|
| st.sidebar.write("---") |
|
|
| st.sidebar.subheader("⚠️ Alternative / Alternatif") |
| st.sidebar.write("Others / Diğerleri") |
|
|
| |
| col1, col2 = st.columns(2) |
|
|
| with col1: |
| |
| income = st.number_input("Income / Gelir ($)", value=110000) |
| spending = st.number_input("Spending / Harcama ($)", value=3000) |
|
|
| with col2: |
| kidhome = st.number_input("Kids / Çocuklar", value=0) |
| teenhome = st.number_input("Teens / Gençler", value=0) |
| recency = st.slider("Recency / Son Alışveriş (Gün)", 0, 100, 15) |
|
|
| |
| children = kidhome + teenhome |
|
|
| st.write("---") |
|
|
| |
| def segment_belirle(income, spending, children): |
| |
| if income > 100000 and spending > 2000 and children == 0: |
| return "💎 Premium" |
| |
| elif income > 40000 and spending > 500: |
| return "🛒 Budget" |
| |
| elif income < 20000 and spending < 100: |
| return "📉 Occasional" |
| |
| else: |
| return "⚠️ Alternative" |
|
|
| |
| if st.button("Predict Segment / Segmenti Tahmin Et", use_container_width=True): |
|
|
| try: |
| |
| |
| data = np.array([[income, spending, children, recency]]) |
| data_scaled = scaler.transform(data) |
| cluster = model.predict(data_scaled)[0] |
|
|
| |
| segment = segment_belirle(income, spending, children) |
|
|
| |
| st.info(f""" |
| 📌 **Entered Values / Girilen Değerler:** |
| - Income / Gelir: **${income:,}** |
| - Spending / Harcama: **${spending:,}** |
| - Total Children / Toplam Çocuk: **{children}** |
| - Recency / Güncellik: **{recency} days** |
| """) |
|
|
| st.write(f"🔍 **AI Cluster / Model Kümesi:** {cluster}") |
|
|
| |
| if segment == "💎 Premium": |
| st.balloons() |
| st.success("### Result: 💎 Premium Customer / Değerli Müşteri") |
| st.write("This customer is high-value and loyal. / Bu müşteri yüksek değerli ve sadıktır.") |
|
|
| elif segment == "🛒 Budget": |
| st.info("### Result: 🛒 Budget Customer / Bütçeli Müşteri") |
| st.write("Standard customer with stable spending. / Dengeli harcaması olan standart müşteri.") |
|
|
| elif segment == "📉 Occasional": |
| st.warning("### Result: 📉 Occasional Customer / Seyrek Müşteri") |
| st.write("Low frequency, potential for campaigns. / Düşük frekanslı, kampanya hedefi olabilir.") |
|
|
| else: |
| st.error("### Result: ⚠️ Alternative Customer / Alternatif Müşteri") |
| st.write("Uncategorized or unique behavior. / Kategorize edilmemiş veya özel davranışlı.") |
|
|
| except Exception as e: |
| st.error(f"Error / Hata oluştu: {e}") |
|
|
| st.write("---") |
| st.caption("Marketing Campaign Analysis 2026 | Streamlit Multi-Language App") |