File size: 2,791 Bytes
3fde146
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# app.py:

import gradio as gr
import pickle
import numpy as np

# =============================================================================
# MEMUAT MODEL & DATA PENDUKUNG
# =============================================================================
# Muat model K-Means yang sudah dilatih
try:
    with open('kmeans_model.pkl', 'rb') as file:
        model = pickle.load(file)
except FileNotFoundError:
    # Jika aplikasi di-deploy, error ini akan muncul di log Hugging Face
    print("File model 'kmeans_model.pkl' tidak ditemukan.")
    # Gradio akan menampilkan error jika model tidak bisa dimuat
    raise

# Kamus untuk menerjemahkan ID cluster menjadi nama segmen
cluster_names = {
    0: "Pelanggan rata-rata",   # Sesuai dengan label untuk y_kmeans == 0
    1: "Pelanggan premium",       # Sesuai dengan label untuk y_kmeans == 1
    2: "Pelanggan impulsif",    # Sesuai dengan label untuk y_kmeans == 2
    3: "Pelanggan hemat",         # Sesuai dengan label untuk y_kmeans == 3
    4: "Pelanggan pasif"          # Sesuai dengan label untuk y_kmeans == 4
}

# =============================================================================
# FUNGSI PREDIKSI (INTI DARI APLIKASI GRADIO)
# =============================================================================
# Fungsi ini akan menerima input dari interface Gradio dan mengembalikan output
def predict_segment(annual_income, spending_score):
    """
    Menerima input pendapatan dan skor, lalu mengembalikan prediksi segmen pelanggan.
    """
    # Ubah input menjadi format numpy array yang bisa dibaca model
    input_data = np.array([[annual_income, spending_score]])
    
    # Lakukan prediksi menggunakan model yang sudah dimuat
    prediction = model.predict(input_data)
    cluster_id = prediction[0]
    
    # Ambil nama segmen dari kamus
    segment_name = cluster_names.get(cluster_id, "Segmen Tidak Diketahui")
    
    return segment_name

# =============================================================================
# MEMBUAT DAN MELUNCURKAN INTERFACE GRADIO
# =============================================================================
# Definisikan interface Gradio
iface = gr.Interface(
    fn=predict_segment,  # Fungsi yang akan dijalankan
    inputs=[
        gr.Slider(15, 140, step=1, value=50, label="Pendapatan Tahunan (k$)"),
        gr.Slider(1, 99, step=1, value=50, label="Skor Pengeluaran (1-100)")
    ],
    outputs=gr.Label(label="Hasil Segmentasi"), # Komponen untuk menampilkan hasil
    title="🛍️ Aplikasi Segmentasi Pelanggan Mall",
    description="Masukkan data pendapatan dan skor pengeluaran pelanggan untuk mengetahui segmen pasarnya. Dibuat dengan K-Means dan Gradio.",
    allow_flagging="never" # Menonaktifkan tombol "Flag"
)

# Luncurkan aplikasi
iface.launch()