{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNEHsAKrayQno/0+Q5EeUPM"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["## Validación semántica, explicabilidad y ética en sistemas de PLN\n","\n","### Objetivos\n","- análisis de casos de evasión\n","- implementación de explicabilidad\n","- identificación de limitaciones éticas\n","- propuesta de mejoras al sistema"],"metadata":{"id":"eRLF59s-XHpJ"}},{"cell_type":"markdown","source":["### 1. Construcción de casos de evasión"],"metadata":{"id":"GYoY0RjfXxDI"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"-3Gd61TqVhbY"},"outputs":[],"source":["#Crear dataset de evaluación cualitativa\n","import pandas as pd\n","\n","casos = [\n"," # Ataques explícitos\n"," (\"Verifique su cuenta inmediatamente\", \"ataque\"),\n"," (\"Actualice su contraseña ahora\", \"ataque\"),\n","\n"," # Evasión semántica\n"," (\"Se recomienda validar su acceso para mantener el servicio\", \"ataque\"),\n"," (\"Para evitar inconvenientes, actualice su información\", \"ataque\"),\n","\n"," # Legítimos\n"," (\"Reunión programada para mañana\", \"legitimo\"),\n"," (\"Adjunto el informe solicitado\", \"legitimo\"),\n","]\n","\n","df_eval = pd.DataFrame(casos, columns=[\"texto\", \"real\"])\n","df_eval\n","\n","#Ejecutar el sistema\n","def sistema_hibrido(texto):\n"," texto = texto.lower()\n","\n"," if \"inmediatamente\" in texto or \"ahora\" in texto:\n"," return \"ataque\"\n"," if \"validar\" in texto or \"actualice\" in texto:\n"," return \"ataque\"\n","\n"," return \"legitimo\"\n","\n","\n","df_eval[\"prediccion\"] = df_eval[\"texto\"].apply(sistema_hibrido)\n","df_eval\n","\n","#Análisis cualitativo (agrega una columna de interpretación)\n","def interpretar(row):\n"," if row[\"real\"] == row[\"prediccion\"]:\n"," return \"correcto\"\n"," else:\n"," return \"error\"\n","\n","df_eval[\"evaluacion\"] = df_eval.apply(interpretar, axis=1)\n","df_eval\n","\n"]},{"cell_type":"markdown","source":["### 2. Explicabilidad del modelo"],"metadata":{"id":"JTsJqTjXZC3D"}},{"cell_type":"code","source":["#Implementar función explicativa\n","def explicar_decision(texto):\n"," texto = texto.lower()\n"," razones = []\n","\n"," if \"inmediatamente\" in texto or \"ahora\" in texto:\n"," razones.append(\"urgencia\")\n"," if \"validar\" in texto or \"actualice\" in texto:\n"," razones.append(\"acción\")\n","\n"," return razones\n","\n","#Aplicar explicabilidad\n","df_eval[\"explicacion\"] = df_eval[\"texto\"].apply(explicar_decision)\n","df_eval"],"metadata":{"id":"twogajArZGoj"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### 3. Evaluación de casos de evasión"],"metadata":{"id":"9tSDW6K5ZaFP"}},{"cell_type":"code","source":["#Identificar casos críticos\n","df_eval[df_eval[\"evaluacion\"] == \"error\"]\n","\n","#Clasificar tipo de error (Agregar columna manualmente por el analista)\n","#Texto\tTipo de error: falso positivo / falso negativo"],"metadata":{"id":"YEvKTCOOZdNH"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### 4. Evaluación ética del sistema"],"metadata":{"id":"HiM3vuNXZ2ig"}},{"cell_type":"code","source":["#Detectar riesgos éticos\n","#Crear columna:\n","def riesgo_etico(row):\n"," if row[\"prediccion\"] == \"ataque\" and row[\"real\"] == \"legitimo\":\n"," return \"falso positivo (riesgo operativo)\"\n"," if row[\"prediccion\"] == \"legitimo\" and row[\"real\"] == \"ataque\":\n"," return \"falso negativo (riesgo de seguridad)\"\n"," return \"sin riesgo crítico\"\n","\n","df_eval[\"riesgo_etico\"] = df_eval.apply(riesgo_etico, axis=1)"],"metadata":{"id":"NHUyvRiBaFyv"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Reflexión guiada\n","Responder:\n","- ¿Qué error es más crítico en ciberseguridad?\n","- ¿El sistema está sesgado hacia detectar más ataques o más legítimos?\n","- ¿Hay sobreinterpretación del lenguaje?"],"metadata":{"id":"PklGPGaOaKXD"}},{"cell_type":"markdown","source":["5. Mejora del sistema (human-in-the-loop)"],"metadata":{"id":"ZvoYjvXGapBq"}},{"cell_type":"code","source":["#Implementar control ético\n","def sistema_mejorado(texto):\n"," pred = sistema_hibrido(texto)\n"," explicacion = explicar_decision(texto)\n","\n"," # regla ética\n"," if pred == \"ataque\" and len(explicacion) < 2:\n"," return \"requiere_revision\"\n","\n"," return pred\n","\n","#Evaluar nuevo sistema\n","df_eval[\"prediccion_mejorada\"] = df_eval[\"texto\"].apply(sistema_mejorado)\n","df_eval"],"metadata":{"id":"Br4eZKqMatS_"},"execution_count":null,"outputs":[]}]}