# 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()