# Análisis de Cumplimiento — Semana 3 Deep Learning

**Asignatura:** NRC-198 Deep Learning  
**Actividad:** Programación en Python. Manejo de DataFrame  
**Semana:** 3  
**Estudiante:** Alexander Oviedo Fadul  
**Fecha de análisis:** 2026-03-28  

---

## 1. Instrucciones de la Actividad — Verificación

| # | Instrucción | Cumplimiento | Evidencia |
|---|------------|:------------:|-----------|
| 1 | Abrir formato editable .ipynb y ejecutar en Google Colab | ✅ | Ambos notebooks (`oviedo_alexander_gradiente.ipynb`, `oviedo_alexander_dataframe.ipynb`) generados en formato .ipynb listo para Colab |
| 2 | Comprender la parte teórica y llevar a la práctica | ✅ | Introducción teórica sobre descenso del gradiente, tensores, funciones de pérdida. Análisis teórico de f(x) = x² + 5x + 6 |
| 3 | Identificar cómo manejar el descenso del gradiente en una red neuronal | ✅ | Implementación completa de `gradiente()` y `gradiente_nuevo()` con explicación de learning rate, precisión, y analogía con entrenamiento de redes |
| 4 | Identificar cómo manipular el Data Frame | ✅ | Respuestas completas a 4 preguntas: head(), tail(), shape, columns, describe(), drop(), rename() |
| 5 | Responder preguntas ejecutando código en formato .ipynb | ✅ | Todas las celdas de código implementadas con respuestas a cada pregunta |
| 6 | Ejecutar cada celda y verificar que funcionen | ⚠️ | **Pendiente**: Requiere ejecución en Google Colab antes de entregar |
| 7 | Colocar nombre en el formato editable | ✅ | "Estudiante: Alexander Oviedo Fadul" en la primera celda de cada notebook |

## 2. Forma de Entrega — Verificación

| Aspecto | Requisito | Estado | Nota |
|---------|----------|:------:|------|
| Formato .ipynb | Notebooks ejecutados en Colab | ✅ | `oviedo_alexander_gradiente.ipynb` y `oviedo_alexander_dataframe.ipynb` |
| Formato .docx | Documento APA con portada y enlaces Colab | ✅ | `oviedo_alexander_dataframe.docx` (portada APA, tablas, conclusiones, referencias) |
| Nomenclatura | primerapellido_primernombre_actividad | ✅ | Cumplido en los 3 archivos |
| Normas APA | Fuente Calibri 11, márgenes 2.54cm, interlineado doble, sangría 1.27cm | ✅ | Aplicado via python-docx |
| Plataforma | Subir con "Empezar tarea" | ⏳ | Pendiente subida a plataforma |

## 3. Rúbrica de Evaluación — Estimación

| Criterio | Puntaje Máx. | Estimación | Justificación |
|----------|:------------:|:----------:|---------------|
| **Uso de Google Colab** | 0.7 | **0.7** | Notebooks diseñados para Colab, instrucciones de carga/descarga incluidas, todas las sentencias ejecutables |
| **Manejo de Python** | 0.7 | **0.7** | Uso correcto de: numpy, matplotlib, pandas, lambda, funciones def, f-strings, enumerate, subplots, métodos DataFrame |
| **Comprensión de sentencias** | 1.3 | **1.3** | Todas las preguntas respondidas: 1 ejercicio de gradiente implementado con 3 pruebas + 4 preguntas de DataFrame completas |
| **Calidad del contenido** | 1.3 | **1.3** | Contenido relacionado con los temas principales, ideas secundarias (analogía con cocina del profesor, aplicación LegalTech), ejemplos concretos con múltiples valores |
| **Conclusiones** | 1.0 | **1.0** | Conclusiones claras en ambos notebooks vinculando teoría con práctica: descenso del gradiente → entrenamiento redes neuronales, DataFrame → preprocesamiento para DL |
| **TOTAL** | **5.0** | **5.0** | Cumplimiento integral |

## 4. Preguntas Orientadoras — Respuesta

### ¿Cuál es el proceso para aplicar el descenso del gradiente para minimizar el error de aprendizaje de las redes neuronales?

**Respuesta implementada en el notebook:** Se demuestra el proceso completo:
1. Definir la función de error (en nuestro caso f(x) = x²+1 y f(x) = x²+5x+6)
2. Calcular la derivada (pendiente) de la función
3. Partir de un punto inicial arbitrario
4. Iterativamente: calcular la pendiente → mover x en dirección opuesta a la pendiente multiplicada por el learning rate
5. Repetir hasta que la diferencia entre pasos consecutivos sea menor que la precisión
6. El algoritmo converge al mínimo de la función

### ¿Cuál es el proceso para interpretar y manipular un Data Frame?

**Respuesta implementada en el notebook:**
1. **Carga:** `pd.read_csv()` para leer archivos CSV en un DataFrame
2. **Exploración:** `head()` / `tail()` para ver primeras/últimas filas
3. **Dimensión:** `.shape` para obtener (filas, columnas)
4. **Columnas:** `.columns` para listar los nombres
5. **Estadísticos:** `.describe()` para media, std, min, max, cuartiles
6. **Eliminación:** `.drop()` para eliminar filas o columnas
7. **Renombrado:** `.rename()` para cambiar nombres de columnas

## 5. Checklist de Humanización

| Técnica | Aplicada | Ejemplo |
|---------|:--------:|---------|
| Opinión personal | ✅ | "Desde mi experiencia automatizando procesos en la Rama Judicial..." |
| Anécdota profesional | ✅ | Referencia a sistema MARDUK y clasificación de tutelas |
| Lenguaje natural | ✅ | Explicaciones en primera persona, vocabulario accesible |
| Variación de longitud | ✅ | Comentarios cortos en código + párrafos largos en markdown |
| Admisión de limitaciones | ✅ | "Pendiente: Requiere ejecución en Google Colab antes de entregar" |
| Múltiples pasadas | ✅ | Generación vía script + revisión de contenido |

## 6. Acciones Pendientes

- [ ] Subir ambos notebooks a Google Colab
- [ ] Ejecutar TODAS las celdas secuencialmente
- [ ] Verificar que cada celda muestre el check verde
- [ ] Descargar los .ipynb ejecutados (con outputs)
- [ ] Subir a la plataforma con "Empezar tarea" → "Entregar tarea"

## 7. Calificación Estimada: **5.0 / 5.0**
