Instructions to use NicolTcT/defiende-el-servidor with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Scikit-learn
How to use NicolTcT/defiende-el-servidor with Scikit-learn:
from huggingface_hub import hf_hub_download import joblib model = joblib.load( hf_hub_download("NicolTcT/defiende-el-servidor", "sklearn_model.joblib") ) # only load pickle files from sources you trust # read more about it here https://skops.readthedocs.io/en/stable/persistence.html - Notebooks
- Google Colab
- Kaggle
Defiende el servidor · v2 (E4_hist_gb)
Clasificador binario de conexiones de red: normal (0) vs. ataque (1), entrenado con las particiones publicadas de UNSW-NB15. Trabajo académico del curso MLOps 2026-II (Universidad Externado de Colombia). No es un producto de seguridad.
Propósito
Demostrar el versionado y la recuperación de una solución de ML: código (Git), datos (DVC), experimentos (MLflow) y modelo (esta revisión de Hugging Face).
Contenido de la revisión
| Archivo | Descripción |
|---|---|
model.joblib |
sklearn.pipeline.Pipeline completo: imputación, codificación, escalado/transformación y estimador |
config.json |
umbral, variables de entrada, hashes y referencias de trazabilidad |
requirements.txt |
dependencias fijadas para cargar el modelo |
- Modelo:
hist_gradient_boosting(familia trees), parámetros{"learning_rate": 0.1, "max_iter": 300, "max_leaf_nodes": 63, "l2_regularization": 0.0, "early_stopping": false} - Preprocesamiento:
{"numeric_transform": "none", "scale": false, "categorical_encoding": "ordinal"} - Umbral: 0.55 →
ataque si score_attack >= 0.55 - SHA-256 de
model.joblib:b3c55ced64ce60d2c75f2d0c5fddc3e0e306bea65cd8592c8dbee8806c4c9a8a - Cambio respecto a la versión anterior: Cambio de modelo y de umbral, decidido solo con validación (configs/selection.yaml): HistGradientBoosting (familia árboles, mejor macro-F1 de los cuatro experimentos) y umbral 0.55, el de mayor macro-F1 con recall de ataque >= 0.95. Frente a v1 reduce la tasa de falsos positivos de 17.0 % a 6.7 % a cambio de perder 1.5 puntos de recall.
Datos
- Fuente: UNSW-NB15 (Moustafa & Slay, 2015), https://research.unsw.edu.au/projects/unsw-nb15-dataset.
Copia usada: mirror fijado en commit (
https://raw.githubusercontent.com/Nir-J/ML-Projects/44bbd02b9e70f74dd915218d5eb702f125341ffc/UNSW-Network_Packet_Classification), SHA-256 verificados. - Entrenamiento: 80 % de
UNSW_NB15_training-set.csvdividido por grupos de entradas idénticas (semilla 20261016); validación: el 20 % restante. Se excluyeron 940 filas con entradas idénticas y etiquetas contradictorias.label,attack_cateidno son entradas. - Versión DVC: datos originales
fe93051ae209ffb0128a31e7a478c009.dir, preparadosb3533724917eef902710882f831d14e5.dir.
Métricas de validación (34 880 filas, umbral 0.55)
| Métrica | Valor |
|---|---|
| Recall de ataque | 97.12 % |
| Precision de ataque | 96.69 % |
| Tasa de falsos positivos | 6.70 % |
| Macro-F1 | 0.9531 |
| Accuracy | 95.85 % |
Matriz de confusión (filas = real, columnas = predicho):
| pred. normal | pred. ataque | |
|---|---|---|
| normal | 10794 | 775 |
| ataque | 671 | 22640 |
Denominadores cero se reportan como 0.0.
Evaluación en test
Evaluación única sobre las 82332 filas de UNSW_NB15_testing-set.csv
(SHA-256 734fe6642edf758f7c94d7d9149426b49d202fe8e7bf0bef47392489c3c0a559), con la revisión congelada
4ea2e9e7b2245d27a672e58b81d27574843615f7 (model.joblib SHA-256 b3c55ced64ce60d2c75f2d0c5fddc3e0e306bea65cd8592c8dbee8806c4c9a8a), umbral 0.55.
La decisión se congeló en el commit Git e378e2005e499e5f48ec153c421c7982e49573cd, antes de evaluar.
| Métrica | Test | Validación |
|---|---|---|
| Recall de ataque | 97.66 % | 97.12 % |
| Precision de ataque | 83.09 % | 96.69 % |
| Tasa de falsos positivos | 24.36 % | 6.70 % |
| Macro-F1 | 0.8726 | 0.9531 |
Matriz de test (filas = real): normal → [27988, 9012]; ataque → [1063, 44269].
El FPR empeora mucho en test (de 6.7 % a 24.4 %): el tráfico normal del archivo de test es distinto del de entrenamiento (más conexiones en estado INT y REQ, y conexiones FIN/sin servicio que el modelo confunde con Fuzzers). La validación salió del mismo archivo que el entrenamiento y fue optimista. El resultado se conserva sin reajustar modelo ni umbral.
Limitaciones
- Dataset histórico (2015, tráfico sintético de laboratorio): no demuestra eficacia en una red actual.
- Train y test comparten ~10 % de entradas idénticas; validación comparte entradas con test (1 739 filas).
- El umbral se eligió en validación; las métricas de validación con ese umbral son algo optimistas.
- Las puntuaciones no están calibradas como probabilidades reales.
Uso
import json, joblib, pandas as pd
from huggingface_hub import hf_hub_download
REV = "<SHA completo de esta revisión>"
path = hf_hub_download("NicolTcT/defiende-el-servidor", "model.joblib", revision=REV)
cfg = json.load(open(hf_hub_download("NicolTcT/defiende-el-servidor", "config.json", revision=REV)))
model = joblib.load(path)
df = pd.read_csv("conexiones.csv") # columnas de UNSW-NB15
score = model.predict_proba(df[cfg["features"]])[:, 1]
y_pred = (score >= cfg["threshold"]).astype(int) # 1 = ataque
O desde el repositorio de código: python src/predict.py --revision <SHA> --input X.csv --output Y.csv.
Trazabilidad
| Pieza | Referencia |
|---|---|
| Código | https://github.com/Nicol-Tatiana-Cerinza-Tejada/Defiende-el-servidor · commit 0412c387fc1433f164876e00c743bdafaa1f221a · tag v2-code |
| Datos (DVC) | data/raw.dvc md5 fe93051ae209ffb0128a31e7a478c009.dir · data/prepared.dvc md5 b3533724917eef902710882f831d14e5.dir |
| Experimento (MLflow) | experimento defiende-el-servidor · run 83c62ca284954280b3cca861e87dbc9f (exportado en evidencias/mlflow/) |
| Modelo | este repositorio, tag v2 |
Referencias
Moustafa, N., & Slay, J. (2015). UNSW-NB15: a comprehensive data set for network intrusion detection systems. MilCIS 2015.
- Downloads last month
- -