Sistema de clasificación multiclase supervisada que automatiza la categorización de artículos periodísticos digitales utilizando técnicas avanzadas de Procesamiento de Lenguaje Natural (NLP) y aprendizaje automático. El proyecto clasifica noticias en 30 categorías temáticas diferentes analizando el contenido textual (titular y descripción corta) de cada artículo.
El crecimiento exponencial del contenido digital ha transformado la forma en que se produce y consume información periodística. Según el Digital News Report 2023, más del 60% de los usuarios accede a noticias a través de plataformas digitales, donde los sistemas de recomendación y búsqueda dependen directamente de una categorización precisa del contenido.
La clasificación manual de artículos resulta inviable a escala: un portal de noticias puede publicar cientos de artículos diarios, lo que exige criterios consistentes, personal especializado y tiempos de procesamiento incompatibles con la inmediatez del periodismo digital. Esta solución automatizada permite procesar contenido a escala sin sacrificar precisión.
Desarrollar un sistema de clasificación automática de noticias basado en aprendizaje supervisado que prediga la categoría temática de un artículo a partir de su contenido textual, evaluando y comparando múltiples algoritmos de Machine Learning para determinar el modelo más efectivo.
- Analizar las características textuales del dataset e identificar patrones léxicos por categoría
- Preprocesar datos mediante técnicas de NLP (limpieza, normalización, vectorización TF-IDF) con selección de características Chi-squared
- Implementar y ajustar con GridSearchCV: Regresión Logística, Árbol de Decisión, Random Forest, MLP y DNN
- Evaluar desempeño con métricas estándar (accuracy, precision, recall, F1-score) y matrices de confusión
- Comparar modelos y determinar el más adecuado para clasificación de noticias
Fuente: News Category Classification Dataset - Kaggle
| Variable | Tipo | Rol | Descripción |
|---|---|---|---|
category |
Categórica | Variable objetivo (y) | Categoría temática de la noticia |
headline |
Texto | Feature principal | Titular del artículo |
short_description |
Texto | Feature principal | Resumen corto de la noticia |
authors |
Texto | Informativa | Autor(es) del artículo |
date |
Fecha | Informativa | Fecha de publicación |
link |
Texto | Informativa | URL original del artículo |
- Alta dimensionalidad: La representación vectorial del vocabulario genera espacios de miles de features
- Desbalance de clases: Algunas categorías concentran más artículos que otras
- Ambigüedad semántica: Categorías similares como Politics/Government comparten vocabulario
- Eliminación de caracteres especiales y URLs
- Conversión a minúsculas
- Tokenización del texto
- Eliminación de stopwords
- Lematización/Stemming
- Transformación mediante TF-IDF (Term Frequency-Inverse Document Frequency)
- Selección de 15,000 características principales con Chi-squared (Chi²)
- Estandarización de características
Descripción: Modelo estadístico lineal fundamentado en teoría Bayesiana que utiliza la función sigmoide para generar probabilidades de clase.
Características:
- Complejidad: Baja-media (lineal)
- Interpretabilidad: Muy alta
- Velocidad: Muy rápida (entrenamiento en segundos)
- Escalabilidad: Excelente - O(n·m) lineal
Estructura:
- Entrada: 15,000 características
- Transformación lineal: matriz de pesos (15,000 × 30)
- Activación: Softmax para 30 clases
- Pérdida: Entropía cruzada categórica
- Optimizador: SAGA (Stochastic Average Gradient Ascent)
- Regularización: L2 (Ridge)
Hiperparámetros Ajustados:
- C (inverso de λ): [0.1, 0.5, 1, 5, 10]
- Penalty: L2
- Class weight: Balanceado
- Solver: LBFGS
- Max iterations: 1000
Descripción: Modelo no-paramétrico que particiona recursivamente el espacio de características mediante divisiones binarias basadas en criterios de impureza.
Características:
- Interpretabilidad: Muy alta (reglas transparentes)
- Velocidad: Muy rápida
- Sesgo-Varianza: Sesgo bajo, varianza potencialmente alta
- Sensibilidad: No requiere normalización
Descripción: Conjunto de árboles de decisión que utiliza bagging para reducir varianza y mejorar generalización.
Descripción: Red neuronal artificial con capas ocultas para capturar relaciones no-lineales complejas.
Descripción: Red neuronal profunda con múltiples capas para modelar patrones muy complejos.
Proyecto final IA/
├── README.md # Este archivo
├── DESCRIPCION_MODELOS.md # Documentación detallada de modelos
├── requirements.txt # Dependencias del proyecto
│
├── Notebooks Principales/
│ ├── Taller ML/
│ │ ├── proyecto_clasificacion_FINAL.ipynb # Notebook principal del proyecto
│ │ ├── dataset_limpio_20260522_151119.csv # Dataset procesado
│ │ └── archive/
│ │ ├── news_category_clean.csv
│ │ ├── news_category_ml_ready.csv
│ │ └── preparacion_datos_noticias.ipynb
│ │
│ ├── EDA.ipynb # Análisis Exploratorio de Datos
│ ├── proyecto_pre.ipynb # Versión previa del proyecto
│ ├── proyecto_v_prefin.ipynb # Versión prefinal
│ └── OTROOO.ipynb # Análisis adicional
│
├── Scripts Python/
│ ├── taller_ML_noticias.py # Script principal de ML
│ ├── completar_fases_word.py # Generación de reportes
│ └── d.py # Utilidades
│
├── Visualizaciones (img/)/
│ ├── distribucion_categorias_torta.png
│ ├── balanceo_barras_antes.png
│ ├── balanceo_barras_final.png
│ ├── nube_palabras_antes.png
│ ├── nube_palabras_final.png
│ ├── heatmap_terminos_por_categoria.png
│ ├── chi2_top_terminos_por_categoria.png
│ ├── Matriz_confusion_regresion_logistica_exp1.png
│ ├── Matriz_confusion_decision_Tree_exp1.png
│ ├── Matriz_confusion_decision_Tree_exp2.png
│ ├── Matriz_confusion_random_forest_NUEVA.png
│ ├── comparativa_pred_real_regresion_exp1.png
│ ├── comparativa_decision_tree_exp1.png
│ ├── comparativa_decision_tree_exp2.png
│ └── matriz_correlacion_*.png
│
└── Otros/
├── papers/ # Papers de referencia
└── rendered_docx_check/ # Reportes generados
El proyecto utiliza las siguientes librerías principales:
pandas==3.0.2 # Manipulación de datos
numpy==2.4.4 # Operaciones numéricas
scikit-learn==1.8.0 # Modelos de ML y preprocesamiento
matplotlib==3.10.8 # Visualizaciones
seaborn==0.13.2 # Gráficos estadísticos
nltk==3.9.4 # Procesamiento de lenguaje natural
jupyter # Notebooks interactivos
tensorflow # (para modelos DNN)
scipy==1.17.1 # Operaciones científicas
- Python 3.8 o superior
- pip o conda
- Clonar o descargar el repositorio:
cd "Proyecto final IA"- Crear un entorno virtual (recomendado):
python -m venv .venv- Activar el entorno virtual:
Windows:
.\.venv\Scripts\Activate.ps1Linux/Mac:
source .venv/bin/activate- Instalar dependencias:
pip install -r requirements.txt- Ejecutar Jupyter Notebook:
jupyter notebookAbrir y ejecutar Taller ML/proyecto_clasificacion_FINAL.ipynb en Jupyter Notebook. El notebook está estructurado en bloques temáticos:
- Bloque I: Descripción del problema e inspección del dataset
- Bloque II: Preprocesamiento y limpieza de datos
- Bloque III: Análisis Exploratorio de Datos (EDA)
- Bloque IV: Vectorización TF-IDF y selección de características
- Bloque V: Implementación de modelos y ajuste de hiperparámetros
- Bloque VI: Evaluación y comparación de modelos
- Bloque VII: Conclusiones y recomendaciones
Para ejecutar el script de clasificación:
python taller_ML_noticias.pyPara generar reportes:
python completar_fases_word.pyLos modelos fueron evaluados utilizando:
- Accuracy: Precisión global de clasificación
- Precision/Recall: Capacidad de identificar correctamente cada categoría
- F1-Score: Media armónica entre precision y recall
- Matrices de Confusión: Análisis detallado de errores por categoría
- Distribución de categorías en el dataset
- Balanceo de clases antes y después de procesamiento
- Términos más discriminativos por categoría
- Matrices de confusión para cada modelo
- Comparativas de predicciones vs valores reales
- 30 categorías temáticas distintas
- Desbalance inicial identificado y tratado
- Análisis de términos más frecuentes por categoría
- Análisis de longitud de titulares y descripciones
- Identificación de palabras clave por categoría
- Correlación de términos con categorías
- Eliminación de ruido (URLs, caracteres especiales)
- Normalización y tokenización
- Aplicación de Chi-squared para selección de 15,000 features más relevantes
Este proyecto demuestra que la clasificación automática de noticias mediante aprendizaje supervisado es viable y efectiva. La combinación de técnicas de NLP estándar (TF-IDF, Chi-squared) con modelos clásicos de ML produce resultados competitivos y modelos interpretables, mientras que alternativas más complejas (Random Forest, MLP, DNN) ofrecen potencial para casos más desafiantes.
- La Regresión Logística ofrece un buen balance entre rendimiento e interpretabilidad
- Random Forest mejora el desempeño pero a costo de interpretabilidad
- Los modelos profundos (MLP, DNN) requieren más datos y ajuste fino
- Considerar ensemble de modelos para producción
- Monitorear desempeño en categorías problemáticas (Politics/Government)
Materia: Inteligencia Artificial 2026-1
Integrantes:
- Martinez Uribe, Juan Sebastian
- Mosquera Molina, Sergio Andres
- Vergara Vergara, Eduardo Enrique
Fecha de Entrega: 22 de Mayo de 2026
Fuente de Datos: Kaggle - News Category Classification Dataset
Para más detalles sobre la implementación de modelos, consultar DESCRIPCION_MODELOS.md.
Para reproducibilidad: Se utilizó random_state=42 en todos los modelos.
Proyecto académico desarrollado para el curso de Inteligencia Artificial.
