kmean_clustring / app.py
armansurahman's picture
Create app.py
3fde146 verified
Raw History Blame Contribute Delete
2.79 kB
# 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()