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