trodrigx commited on
Commit
8dcc4ea
·
verified ·
1 Parent(s): e3f446f

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +91 -0
  2. modelo_churn.joblib +3 -0
  3. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import joblib
3
+ import pandas as pd
4
+
5
+ # --- CARGAR MODELO ---
6
+ try:
7
+ modelo = joblib.load("modelo_churn.joblib")
8
+ except:
9
+ modelo = None
10
+
11
+ # --- LÓGICA DE PREDICCIÓN ---
12
+ def predecir(antiguedad, pago, contrato, internet, seguridad, soporte, factura):
13
+ if modelo is None:
14
+ return {"Error": 0}, "⚠ Error: Falta el archivo modelo_churn.joblib"
15
+
16
+ # 1. Traducir Inputs visuales a Números (Igual que en el entrenamiento)
17
+ # Contrato
18
+ if contrato == "Mes a Mes": c_code = 0
19
+ elif contrato == "Un año": c_code = 1
20
+ else: c_code = 2
21
+
22
+ # Internet
23
+ if internet == "DSL": i_code = 0
24
+ elif internet == "Fibra Óptica": i_code = 1
25
+ else: i_code = 2
26
+
27
+ # Checkboxes (True/False -> 1/0)
28
+ sec_code = 1 if seguridad else 0
29
+ sop_code = 1 if soporte else 0
30
+ pap_code = 1 if factura else 0
31
+
32
+ # 2. Crear DataFrame
33
+ columnas = ['tenure', 'MonthlyCharges', 'Contract_Code', 'Internet_Code',
34
+ 'OnlineSecurity_Code', 'TechSupport_Code', 'Paperless_Code']
35
+
36
+ datos = pd.DataFrame([[antiguedad, pago, c_code, i_code, sec_code, sop_code, pap_code]], columns=columnas)
37
+
38
+ # 3. Predicción
39
+ proba = modelo.predict_proba(datos)[0]
40
+ riesgo_fuga = proba[1] # Probabilidad de 1 (Yes)
41
+
42
+ # 4. Mensaje de Negocio Inteligente
43
+ mensaje = ""
44
+ if riesgo_fuga < 0.30:
45
+ mensaje = "✅ CLIENTE LEAL: Bajo riesgo. Ideal para ofrecerle productos premium."
46
+ elif riesgo_fuga < 0.60:
47
+ mensaje = "⚠ RIESGO MODERADO: Cliente en duda. Se sugiere ofrecer descuentos en su plan actual."
48
+ else:
49
+ mensaje = "🚨 ALERTA CRÍTICA: Alto riesgo de abandono. Contactar inmediatamente para retención."
50
+
51
+ return {"Se queda": float(proba[0]), "Se va": float(proba[1])}, mensaje
52
+
53
+ # --- DISEÑO VISUAL (DASHBOARD) ---
54
+ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
55
+ gr.Markdown("# 📊 Dashboard de Retención de Clientes (Telco)")
56
+ gr.Markdown("Análisis de riesgo de abandono basado en IA.")
57
+
58
+ with gr.Row():
59
+ # Columna Izquierda (Datos Facturación)
60
+ with gr.Column():
61
+ gr.Markdown("### 💳 Facturación y Contrato")
62
+ in_contrato = gr.Dropdown(["Mes a Mes", "Un año", "Dos años"], label="Contrato", value="Mes a Mes")
63
+ in_pago = gr.Slider(18, 120, value=70, label="Pago Mensual ($)")
64
+ in_factura = gr.Checkbox(label="Factura Digital (Paperless)", value=True)
65
+
66
+ # Columna Central (Datos Técnicos)
67
+ with gr.Column():
68
+ gr.Markdown("### 📡 Servicios")
69
+ in_internet = gr.Dropdown(["DSL", "Fibra Óptica", "Ninguno"], label="Internet", value="Fibra Óptica")
70
+ in_seguridad = gr.Checkbox(label="Seguridad Online", value=False)
71
+ in_soporte = gr.Checkbox(label="Soporte Técnico", value=False)
72
+
73
+ # Columna Derecha (Perfil y Botón)
74
+ with gr.Column():
75
+ gr.Markdown("### 👤 Cliente")
76
+ in_antiguedad = gr.Slider(0, 72, value=5, label="Antigüedad (Meses)")
77
+ btn = gr.Button("🔍 Analizar Riesgo", variant="primary", size="lg")
78
+
79
+ gr.Markdown("---")
80
+
81
+ # Resultados
82
+ with gr.Row():
83
+ out_grafica = gr.Label(num_top_classes=2, label="Probabilidad")
84
+ out_texto = gr.Textbox(label="Estrategia Sugerida", lines=2)
85
+
86
+ # Acción
87
+ btn.click(fn=predecir,
88
+ inputs=[in_antiguedad, in_pago, in_contrato, in_internet, in_seguridad, in_soporte, in_factura],
89
+ outputs=[out_grafica, out_texto])
90
+
91
+ interfaz.launch()
modelo_churn.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d644019a924fa4695f9356a01ced34709834aade119a177e6c8b555c7c023496
3
+ size 10681
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ scikit-learn
2
+ pandas
3
+ joblib
4
+ gradio