trodrigx commited on
Commit
e3f446f
·
verified ·
1 Parent(s): 3542a9e

Delete app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -108
app.py DELETED
@@ -1,108 +0,0 @@
1
- import gradio as gr
2
- import joblib
3
- import pandas as pd
4
-
5
- # 1. Cargar el modelo
6
- try:
7
- modelo = joblib.load("modelo_churn.joblib")
8
- except:
9
- modelo = None
10
-
11
- # 2. Función lógica y de predicción
12
- def analizar_cliente(antiguedad, pago, contrato, internet, seguridad, soporte, factura):
13
- # Si no hay modelo, avisar
14
- if modelo is None:
15
- return {"Error": 0}, "⚠ Error: No se encontró el archivo 'modelo_churn.joblib'. Súbelo a Hugging Face."
16
-
17
- # --- TRANSFORMACIÓN DE DATOS ---
18
- # Convertimos lo que elige el usuario (Texto) a lo que entiende el modelo (Números)
19
-
20
- # Mapeo de Contrato
21
- if contrato == "Mes a Mes": con_code = 0
22
- elif contrato == "Un año": con_code = 1
23
- else: con_code = 2 # Dos años
24
-
25
- # Mapeo de Internet
26
- if internet == "DSL": int_code = 0
27
- elif internet == "Fibra Óptica": int_code = 1
28
- else: int_code = 2 # No tiene
29
-
30
- # Mapeo de Checkboxes (True/False -> 1/0)
31
- sec_code = 1 if seguridad else 0
32
- sop_code = 1 if soporte else 0
33
- fac_code = 1 if factura else 0
34
-
35
- # Crear el DataFrame con las 7 columnas exactas del entrenamiento
36
- datos = pd.DataFrame([[antiguedad, pago, con_code, int_code, sec_code, sop_code, fac_code]],
37
- columns=['tenure', 'MonthlyCharges', 'Contract_Code', 'Internet_Code',
38
- 'OnlineSecurity_Code', 'TechSupport_Code', 'Paperless_Code'])
39
-
40
- # --- PREDICCIÓN ---
41
- # Obtenemos la probabilidad [Sano, Fuga]
42
- proba = modelo.predict_proba(datos)[0]
43
- riesgo = proba[1] # Probabilidad de que se vaya
44
-
45
- # Resultado para la gráfica de barras
46
- resultado_grafico = {"Cliente Fiel": float(proba[0]), "Posible Fuga": float(proba[1])}
47
-
48
- # --- RECOMENDACIÓN DE NEGOCIO (ESTRATEGIA) ---
49
- consejo = ""
50
- if riesgo < 0.35:
51
- consejo = "✅ CLIENTE SEGURO: El riesgo es bajo. Es un buen momento para ofrecerle productos adicionales (Up-selling)."
52
- elif riesgo < 0.65:
53
- consejo = "⚠ RIESGO MEDIO: Cliente indeciso. Se recomienda ofrecer un descuento del 10% en la próxima factura para fidelizarlo."
54
- else:
55
- consejo = "🚨 ALERTA ALTA: Riesgo crítico de abandono. Acción sugerida: Llamada prioritaria y ofrecer contrato a 1 año con precio preferencial."
56
-
57
- return resultado_grafico, consejo
58
-
59
- # 3. Diseño de la Interfaz (Layout profesional)
60
- with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
61
-
62
- gr.Markdown("# 📉 Dashboard de Predicción de Fugas (Telco Churn)")
63
- gr.Markdown("Introduce los datos del cliente para evaluar su riesgo de abandono y obtener estrategias de retención.")
64
-
65
- gr.Markdown("---")
66
-
67
- with gr.Row():
68
- # COLUMNA 1: DATOS ECONÓMICOS
69
- with gr.Column():
70
- gr.Markdown("### 💵 Facturación")
71
- in_pago = gr.Slider(minimum=20, maximum=150, value=70, label="Pago Mensual ($)")
72
- in_contrato = gr.Dropdown(choices=["Mes a Mes", "Un año", "Dos años"], value="Mes a Mes", label="Tipo de Contrato")
73
- in_factura = gr.Checkbox(label="¿Usa Facturación Digital?", value=True)
74
-
75
- # COLUMNA 2: DATOS TÉCNICOS
76
- with gr.Column():
77
- gr.Markdown("### 📡 Servicios")
78
- in_internet = gr.Dropdown(choices=["DSL", "Fibra Óptica", "Ninguno"], value="Fibra Óptica", label="Tipo de Internet")
79
- in_seguridad = gr.Checkbox(label="¿Tiene Seguridad Online?", value=False)
80
- in_soporte = gr.Checkbox(label="¿Tiene Soporte Técnico?", value=False)
81
-
82
- # COLUMNA 3: PERFIL
83
- with gr.Column():
84
- gr.Markdown("### 👤 Antigüedad")
85
- in_antiguedad = gr.Slider(minimum=0, maximum=72, step=1, value=10, label="Meses en la empresa")
86
- # Botón grande y llamativo
87
- btn_calcular = gr.Button("🔍 ANALIZAR RIESGO", variant="primary", size="lg")
88
-
89
- gr.Markdown("---")
90
-
91
- # ZONA DE RESULTADOS
92
- with gr.Row():
93
- with gr.Column(scale=1):
94
- # Gráfica de barras
95
- out_grafica = gr.Label(num_top_classes=2, label="Probabilidad Calculada")
96
- with gr.Column(scale=2):
97
- # Caja de texto con el consejo
98
- out_consejo = gr.Textbox(label="💡 Estrategia Recomendada por IA", lines=3)
99
-
100
- # Conectar la lógica
101
- btn_calcular.click(
102
- fn=analizar_cliente,
103
- inputs=[in_antiguedad, in_pago, in_contrato, in_internet, in_seguridad, in_soporte, in_factura],
104
- outputs=[out_grafica, out_consejo]
105
- )
106
-
107
- # 4. Lanzar
108
- interfaz.launch()