| import streamlit as st |
| import pandas as pd |
| import numpy as np |
| import pickle |
|
|
|
|
| st.title("Credit Card Customer Segmentation") |
|
|
| st.write( |
| "Bu uygulama, KMeans kümeleme algoritmasını kullanarak müşteri segmentlerini tahmin eder." |
| ) |
|
|
|
|
| |
| model = pickle.load(open("src/kmeans_model.pkl", "rb")) |
|
|
| scaler = pickle.load(open("src/scaler.pkl", "rb")) |
|
|
|
|
| |
| balance = st.number_input("Balance", value=1000.0) |
|
|
| balance_frequency = st.slider( |
| "Balance Frequency", |
| 0.0, |
| 1.0, |
| 0.9 |
| ) |
|
|
| purchases = st.number_input("Purchases", value=500.0) |
|
|
| oneoff_purchases = st.number_input("Oneoff Purchases", value=200.0) |
|
|
| installments_purchases = st.number_input( |
| "Installments Purchases", |
| value=300.0 |
| ) |
|
|
| cash_advance = st.number_input("Cash Advance", value=0.0) |
|
|
| purchases_frequency = st.slider( |
| "Purchases Frequency", |
| 0.0, |
| 1.0, |
| 0.5 |
| ) |
|
|
| oneoff_frequency = st.slider( |
| "Oneoff Purchases Frequency", |
| 0.0, |
| 1.0, |
| 0.3 |
| ) |
|
|
| installments_frequency = st.slider( |
| "Installments Purchases Frequency", |
| 0.0, |
| 1.0, |
| 0.4 |
| ) |
|
|
| credit_limit = st.number_input("Credit Limit", value=5000.0) |
|
|
| payments = st.number_input("Payments", value=1000.0) |
|
|
| minimum_payments = st.number_input( |
| "Minimum Payments", |
| value=300.0 |
| ) |
|
|
| full_payment = st.slider( |
| "Full Payment Ratio", |
| 0.0, |
| 1.0, |
| 0.3 |
| ) |
|
|
| tenure = st.slider( |
| "Tenure", |
| 1, |
| 12, |
| 12 |
| ) |
|
|
|
|
| |
| input_data = pd.DataFrame({ |
| |
| "BALANCE":[balance], |
|
|
| "BALANCE_FREQUENCY":[balance_frequency], |
| |
| "PURCHASES":[purchases], |
| |
| "ONEOFF_PURCHASES":[oneoff_purchases], |
| |
| "INSTALLMENTS_PURCHASES":[installments_purchases], |
| |
| "CASH_ADVANCE":[cash_advance], |
| |
| "PURCHASES_FREQUENCY":[purchases_frequency], |
| |
| "ONEOFF_PURCHASES_FREQUENCY":[oneoff_frequency], |
| |
| "PURCHASES_INSTALLMENTS_FREQUENCY":[installments_frequency], |
| |
| "CASH_ADVANCE_FREQUENCY":[0], |
| |
| "CASH_ADVANCE_TRX":[0], |
| |
| "PURCHASES_TRX":[10], |
| |
| "CREDIT_LIMIT":[credit_limit], |
| |
| "PAYMENTS":[payments], |
| |
| "MINIMUM_PAYMENTS":[minimum_payments], |
| |
| "PRC_FULL_PAYMENT":[full_payment], |
| |
| "TENURE":[tenure] |
| }) |
|
|
|
|
| |
| input_data = np.log1p(input_data) |
|
|
|
|
| |
| input_scaled = scaler.transform(input_data) |
|
|
|
|
| |
| if st.button("Predict Cluster"): |
|
|
| cluster = model.predict(input_scaled) |
|
|
| st.subheader(f"Predicted Cluster: {cluster[0]}") |
|
|
| |
| if cluster[0] == 0: |
| st.write("Risky cash advance users") |
|
|
| elif cluster[0] == 1: |
| st.write("Premium high spending customers") |
|
|
| elif cluster[0] == 2: |
| st.write("Balanced active customers") |
|
|
| elif cluster[0] == 3: |
| st.write("Low spending passive customers") |
|
|
| else: |
| st.write("Low balance customers") |