EdwinFdo commited on
Commit
ed2eb33
·
verified ·
1 Parent(s): 5089bb3

Upload 5 files

Browse files

Commint ejemplo : Este modelo clasifica empresas del sector TIC en **innovadoras** o **tradicionales** usando:

- Actividad económica (CIIU)
- Tamaño (empleados)
- Uso de tecnologías avanzadas (IA, GitHub)
- Exportación de servicios

Files changed (5) hide show
  1. README.md +24 -14
  2. app.py +60 -0
  3. empresas_tic_bucaramanga.csv.txt +8 -0
  4. requirements.txt +5 -0
  5. tic_innovacion.py +51 -0
README.md CHANGED
@@ -1,14 +1,24 @@
1
- ---
2
- title: MLticBga
3
- emoji: 😻
4
- colorFrom: purple
5
- colorTo: pink
6
- sdk: gradio
7
- sdk_version: 5.49.1
8
- app_file: app.py
9
- pinned: false
10
- license: gpl
11
- short_description: Machine Learning para identificar empresas para innovación
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🚀 Empresas TIC Innovadoras en Bucaramanga
2
+
3
+ Este modelo clasifica empresas del sector TIC en **innovadoras** o **tradicionales** usando:
4
+
5
+ - Actividad económica (CIIU)
6
+ - Tamaño (empleados)
7
+ - Uso de tecnologías avanzadas (IA, GitHub)
8
+ - Exportación de servicios
9
+
10
+ ## 🎯 Aplicaciones
11
+ - **Alcaldía de Bucaramanga**: identificar empresas para programas de innovación.
12
+ - **ParqueSoft Santander**: priorizar incubación.
13
+ - **Estudiantes UIS/UNAB**: elegir empresas para pasantías con impacto.
14
+
15
+ ## 📊 Datos
16
+ - MinTIC – Directorio Nacional de Empresas TIC
17
+ - RUES – Datos abiertos de Colombia
18
+ - Información pública de redes (GitHub, LinkedIn)
19
+
20
+ ## 🛠️ Tecnología
21
+ - `RandomForestClassifier` + calibración (`CalibratedClassifierCV`)
22
+ - Interfaz interactiva con **Gradio** en **Hugging Face Spaces**
23
+
24
+ Hecho con ❤️ para el ecosistema TIC de Santander.
app.py ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ import gradio as gr
3
+ import joblib
4
+ import numpy as np
5
+
6
+ # Cargar
7
+ modelo = joblib.load("modelo_tic.pkl")
8
+ le_ciiu = joblib.load("encoder_actividad.pkl")
9
+
10
+ CIIU_OPCIONES = ["6201 - Desarrollo software", "6202 - Consultoría TIC", "6209 - Otros servicios TIC", "6311 - Hosting/Cloud"]
11
+
12
+ def predecir_innovacion(ciiu_str, empleados, exporta, usa_ia, tiene_github):
13
+ # Extraer código CIIU
14
+ ciiu = ciiu_str.split(" ")[0]
15
+ try:
16
+ ciiu_cod = le_ciiu.transform([ciiu])[0]
17
+ except:
18
+ ciiu_cod = 0 # fallback
19
+
20
+ entrada = np.array([[ciiu_cod, empleados, int(exporta), int(usa_ia), int(tiene_github)]])
21
+ prob = modelo.predict_proba(entrada)[0][1]
22
+
23
+ if prob >= 0.7:
24
+ mensaje = "🚀 Alta innovación: probable startup tecnológica o empresa exportadora."
25
+ elif prob >= 0.4:
26
+ mensaje = "💡 Innovación moderada: podría beneficiarse de apoyo del clúster TIC."
27
+ else:
28
+ mensaje = "🔧 Empresa tradicional: servicios básicos de TI."
29
+
30
+ return f"{prob*100:.1f}%", mensaje
31
+
32
+ with gr.Blocks(title="TIC Bucaramanga") as demo:
33
+ gr.Markdown("# 🧠 ¿Es innovadora tu empresa TIC en Bucaramanga?")
34
+ gr.Markdown("Modelo basado en datos del MinTIC, RUES y clústeres locales.")
35
+
36
+ with gr.Row():
37
+ ciiu = gr.Dropdown(CIIU_OPCIONES, label="Actividad principal (CIIU)", value=CIIU_OPCIONES[0])
38
+ empleados = gr.Slider(1, 100, value=10, label="Número de empleados")
39
+ with gr.Row():
40
+ exporta = gr.Checkbox(label="¿Exporta servicios?")
41
+ usa_ia = gr.Checkbox(label="¿Usa inteligencia artificial?")
42
+ tiene_github = gr.Checkbox(label="¿Tiene repositorios públicos (GitHub)?")
43
+
44
+ prob_output = gr.Textbox(label="Probabilidad de ser innovadora")
45
+ mensaje_output = gr.Textbox(label="Interpretación")
46
+
47
+ btn = gr.Button("Analizar empresa")
48
+ btn.click(
49
+ predecir_innovacion,
50
+ inputs=[ciiu, empleados, exporta, usa_ia, tiene_github],
51
+ outputs=[prob_output, mensaje_output]
52
+ )
53
+
54
+ gr.Markdown("""
55
+ > ℹ️ Este modelo ayuda a identificar talento TIC en Bucaramanga.
56
+ > Datos: MinTIC, RUES, ParqueSoft Santander.
57
+ > Proyecto de código abierto para el ecosistema local.
58
+ """)
59
+
60
+ demo.launch()
empresas_tic_bucaramanga.csv.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ empresa,actividad_ciiu,empleados,exporta_servicios,usa_ia,tiene_github,innovadora
2
+ SoftSantander,6201,15,0,1,1,1
3
+ DataSys SAS,6202,8,0,0,0,0
4
+ NeuronCloud Ltda,6209,25,1,1,1,1
5
+ SoporteTI,6209,3,0,0,0,0
6
+ IAAndina,6201,12,1,1,1,1
7
+ RedesBuc,6311,5,0,0,0,0
8
+ CyberSantander,6202,18,0,1,1,1
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ gradio==4.36.0
2
+ scikit-learn==1.5.0
3
+ pandas==2.2.0
4
+ joblib==1.4.0
5
+ numpy==1.26.0
tic_innovacion.py ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # tic_innovacion.py
2
+ import pandas as pd
3
+ import numpy as np
4
+ from sklearn.model_selection import train_test_split
5
+ from sklearn.ensemble import RandomForestClassifier
6
+ from sklearn.preprocessing import LabelEncoder
7
+ from sklearn.calibration import CalibratedClassifierCV
8
+ from sklearn.metrics import classification_report, brier_score_loss, calibration_curve
9
+ import joblib
10
+ import matplotlib.pyplot as plt
11
+
12
+ # Cargar datos
13
+ df = pd.read_csv("data/empresas_tic_bucaramanga.csv")
14
+
15
+ # Codificar actividad CIIU
16
+ le_ciiu = LabelEncoder()
17
+ df['actividad_cod'] = le_ciiu.fit_transform(df['actividad_ciiu'])
18
+
19
+ # Variables predictoras
20
+ X = df[['actividad_cod', 'empleados', 'exporta_servicios', 'usa_ia', 'tiene_github']]
21
+ y = df['innovadora']
22
+
23
+ # Dividir
24
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)
25
+
26
+ # Modelo base
27
+ model = RandomForestClassifier(
28
+ n_estimators=150,
29
+ max_depth=6,
30
+ class_weight='balanced',
31
+ random_state=42
32
+ )
33
+ model.fit(X_train, y_train)
34
+
35
+ # Calibración (como en cancer.py)
36
+ calibrated_model = CalibratedClassifierCV(model, method='sigmoid', cv=3)
37
+ calibrated_model.fit(X_train, y_train)
38
+
39
+ # Evaluar
40
+ prob_cal = calibrated_model.predict_proba(X_test)[:, 1]
41
+ y_pred = (prob_cal >= 0.5).astype(int)
42
+
43
+ print("=== Reporte de Clasificación ===")
44
+ print(classification_report(y_test, y_pred))
45
+
46
+ print(f"Brier Score: {brier_score_loss(y_test, prob_cal):.4f}")
47
+
48
+ # Guardar
49
+ joblib.dump(calibrated_model, "modelo_tic.pkl")
50
+ joblib.dump(le_ciiu, "encoder_actividad.pkl")
51
+ print("✅ Modelo y encoder guardados.")