Hugomartinezg's picture
Update app.py
21be535 verified
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import gradio as gr
# Cargar el dataset real
df = pd.read_csv('dataset_actualizado.csv')
# Seleccionar solo columnas numéricas
X = df[['frecuencia_compra', 'monto_promedio', 'edad', 'ingreso']]
# Escalar datos
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Entrenar modelo KMeans
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X_scaled)
# Función para predecir segmento
def predecir_segmento(frecuencia_compra, monto_promedio, edad, ingreso):
nuevo = pd.DataFrame([[frecuencia_compra, monto_promedio, edad, ingreso]],
columns=['frecuencia_compra', 'monto_promedio', 'edad', 'ingreso'])
nuevo_scaled = scaler.transform(nuevo)
cluster = kmeans.predict(nuevo_scaled)[0]
return f"El caso ingresado pertenece al segmento {cluster}"
# Interfaz Gradio
iface = gr.Interface(
fn=predecir_segmento,
inputs=[
gr.Number(label="Frecuencia de Compra"),
gr.Number(label="Monto Promedio"),
gr.Number(label="Edad"),
gr.Number(label="Ingreso")
],
outputs="text",
title="Clasificación de Clientes por Segmento",
description="""### Descripción de los Segmentos
**Segmento 0:**
- Edad promedio: 49 años
- Frecuencia de compra: moderada (5.4)
- Monto promedio: bajo
- Ingreso promedio: medio (≈ $3.3M)
- Perfil: Usuarios de edad media-alta, compras frecuentes pero no costosas, ingresos medios.
**Segmento 1:**
- Edad promedio: 41 años
- Frecuencia de compra: alta (8)
- Monto promedio: medio
- Ingreso promedio: alto (≈ $7.6M)
- Perfil: Usuarios jóvenes, con alta frecuencia e ingresos elevados.
**Segmento 2:**
- Edad promedio: 46 años
- Frecuencia de compra: baja (3.3)
- Monto promedio: alto
- Ingreso promedio: medio-alto (≈ $5.5M)
- Perfil: Usuarios con baja frecuencia, pero compras de alto valor.
👉 Esta información te permitirá entender el segmento al que pertenece un nuevo usuario según sus datos.
"""
)
if __name__ == "__main__":
iface.launch()