Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Inteligencia Artificial (IS). Curso 2016-17 Trabajo sobre Inferencia en Redes Bayesianas Esta propuesta pretende construir un sistema para realizar inferencia probabilística en dominios representados mediante redes bayesianas. Como se comenta en el Tema 5 de teoría, las redes bayesianas constituyen un formalismo que permite representar de manera compacta y eficiente un modelo probabilístico sobre un dominio concreto. Existen numerosas aplicaciones prácticas de sistemas expertos basados en redes bayesianas 1. Entre otros: Sistemas expertos que manejan información médica. Sistemas para decisión en economía y finanzas. Predicción de fenómenos atmosféricos... 1) Implementación de la estructura de datos Se deberá presentar una Red Bayesiana realista como ejemplo para realizar pruebas. Puede ser inventada o basada en algún ejemplo real (en cuyo caso, explicitar la correspondiente referencia), y deberá tener al menos 10 nodos y estructura de poliárbol. Se podrá utilizar cualquier tipo de datos de Python para representar internamente el grafo de la Red Bayesiana y la tabla de probabilidades asociada. El código diseñado deberá ser capaz de manejar variables discretas 1 En la página web del sistema HUGIN (y en concreto en su enlace sobre Resources) se pueden consultar numerosos ejemplos de aplicaciones comerciales reales de los sistemas expertos basados en redes bayesianas).
con dominios finitos (no sólo variables booleanas). Se deberá programar la manera de poder cargar un ejemplo de Red Bayesiana desde un fichero independiente en formato XMLBIF. 2) Inferencia exacta y aproximada En este trabajo se pide implementar en Python el algoritmo de inferencia probabilística mediante eliminación de variables (EV), y también algún algoritmo de inferencia aproximada (a elegir). 3) Orden de eliminación de las variables La implementación del algoritmo EV que se pide debe seguir los siguientes pasos: 1. Descartar las variables irrelevantes para la consulta antes de comenzar (mostrando un mensaje con la lista de variables descartadas). 2. Obtener todos los factores iniciales a partir de la red, ignorando las variables descartadas y teniendo en cuenta las evidencias. 3. Eliminar las variables ocultas, a través de las correspondientes operaciones sobre los factores. 4. Multiplicar los factores finales (en caso de que haya más de uno). 5. Normalizar. Una cuestión fundamental para la eficiencia de EV es el orden de eliminación de las variables. La idea básica es evitar en la medida de lo posible que aparezcan factores que involucren a muchas variables. Si cuando se decide eliminar una variable, el producto que hay que realizar involucra a muchas variables y/o muchos valores de variables, entonces la tabla resultante puede resultar muy grande y por tanto afectar a la eficiencia del algoritmo. En general, el orden de eliminación óptimo sería aquél que minimizara el tamaño de los factores que se puedan llegar a generar en algún momento durante el proceso. Si bien el conocer de antemano el orden de eliminación óptimo puede llegar a ser computacionalmente costoso, en la práctica se pueden aplicar localmente técnicas heurísticas que decidan en cada paso cuál es la siguiente variable a eliminar, en función del conjunto de factores que se tiene en cada momento. Se pide incorporar estas tres heurísticas en la implementación realizada:
Min Degree: dado un conjunto de factores, la variable que se decide eliminar es la que está çonectadaçon menos variables en el conjunto de factores. Decimos que una variable está conectada con otra respecto de un conjunto de factores, cuando ambas aparecen en un mismo factor del conjunto. Min Fill: dado un conjunto de factores, la variable que se decide eliminar es aquella que al eliminarse introduciría menos conexiones nuevas (conexiones en el sentido explicado en el punto anterior). Min Factor: dado un conjunto de factores, la variable que se decide eliminar es aquella que al eliminarse produciría el factor más pequeño (es decir, el que menos entradas tendría). 4) Asistente recomendador de evidencias En este trabajo se deberá incluir además un recomendador que pueda sugerir aportar más evidencias (si fuese conveniente). La idea es que si un usuario está intentando tomar una decisión basándose en el cálculo de una probabilidad condicionada, hay que intentar que la decisión esté lo más fundamentada posible. El funcionamiento del recomendador será como sigue: Se parte de una inferencia introducida por el usuario (con una variable de consulta y una o más de evidencia). En primer lugar el sistema deberá identificar qué variables de la red son candidatas a ser recomendadas Para cada una de dichas variables, y para cada uno de los valores de su correspondiente dominio, se deberá lanzar un algoritmo de inferencia aproximada añadiendo la evidencia en cuestión. (Se repetirán esas inferencias aproximadas varias veces para evitar ruido) En base a los resultados obtenidos en el punto anterior, el sistema recomendará al usuario una variable. 5) Documentación Escribir (en formato pdf) un pequeño informe sobre el trabajo realizado. Para la elaboración de dicho informe pueden usarse como guía los siguientes puntos:
Descripción del ejemplo elegido, citando la fuente (en su caso). Opcionalmente se podrá incluir también un gráfico de la red. Descripción de la representación escogida para manejar la red y sus tablas de probabilidad asociadas. Descripción informal del diseño del algoritmo de eliminación de variables, de las heurísticas y del recomendador. Una sección de experimentación, con ejemplos concretos de uso del algoritmo y del recomendador. Se deberán incluir comentarios sobre el rendimiento. Listado completo de todas las referencias que se hayan consultado durante la elaboración del trabajo (libros, material online, etc.). Redes bayesianas que se usarán como ejemplos de control El algoritmo que se pide implementar debe ser general y poderse aplicar a inferencia probabilística con cualquier red bayesiana cuyas variables aleatorias sean de dominio finito (aunque no necesariamente booleanas). Se espera que, además del ejemplo elegido, al menos se pueda aplicar a los "Sample problems" que se pueden cargar en AI Space. En concreto, a todas las siguientes redes: Fire Alarm: descrita en el ejemplo 6.10 de [AIFCA-2010]. ( basicfirealarm.xml) Simple diagnosis: ejemplo 6.14 de [AIFCA-2010]. ( InfluenzaSmokes.xml) Electrical diagnosis problem: figura 6.2 de [AIFCA-2010] que desarrolla como red bayesiana el ejemplo 1.10 del mismo libro. ( elec.xml) 6) Comentarios generales Entrega del trabajo El trabajo debe entregarse no después de la fecha de envío fijada para cada convocatoria. El trabajo se presentará en tres ficheros, que se enviarán por email al profesor (ariscosn..at.. us.es):
1. en primer lugar la representación del ejemplo elegido en un fichero XMLBIF, 2. por otra parte, un fichero PY con el código Python3 del trabajo (el fichero deberá estar bien comentado), y, 3. por último, el fichero PDF con la documentación. Presentación del trabajo El trabajo debe ser presentado ante el profesor en el día y hora que se anunciará una vez cumplido el plazo de entrega (se puede realizar también con antelación a dicha fecha previa solicitud al profesor). La presentación es requisito imprescindible para la evaluación de la parte práctica, para ambos alumnos. Para la presentación se aconseja traer portátil personal con todo preparado para la correcta ejecución. El profesor podrá pedir el cálculo de determinadas probabilidades en alguna de las redes anteriores. Se valorará que la introducción de las consultas se haga de manera cómoda. Igualmente, los alumnos deben traer preparadas una serie de consultas como ejemplo, con las que se puede mostrar el funcionamiento de la implementación (se valorará que estas consultas tengan sentido e interés). En la medida de lo posible, salvo imprecisiones en la aritmética del compilador de Python, las respuestas calculadas deben de coincidir con las que calcule AI Space. Importante: Si el fichero.py entregado da error al cargarlo con el intérprete de Python 3, o si salta algún error al realizar inferencias sobre uno de los ficheros de ejemplo, el trabajo no será evaluado. Criteros de evaluación Originalidad e interés del ejemplo elegido. Corrección y eficiencia de la implementación, tanto a nivel de la estructura de datos elegida como en lo relativo al tratamiento de ficheros XMLBIF, y al diseño del algoritmo y la heurística. Se valorará especialmente la originalidad del código (por ejemplo, respecto al material de prácticas o librerías de Python existentes). Claridad y buen estilo general de programación Python. Claridad y buen estilo general de la memoria del trabajo
Desarrollo de la demostración realizada durante la defensa. Respuestas de cada miembro del grupo (de manera individual) a preguntas sobre la realización del trabajo. Posibles mejoras adicionales (Se valorará cualquier aportación original añadida no requerida en esta propuesta) Se podrá utilizar también el material de clase, así como cualquier otra referencia que se estime oportuno (libros, webs, librerías de Python, etc), siempre que aparezca convenientemente reflejado en la documentación. Evidentemente, se espera que el grado de aportaciones originales en el trabajo sea significativo. Posibles mejoras adicionales Sería conveniente que se implementara un mecanismo (no necesariamente gráfico, puede ser un menú de diálogos de texto) con el que sea fácil interactuar con el sistema implementado. Se podría implementar también un diálogo que permita al usuario introducir los detalles de una red bayesiana, de manera que al final se genere un fichero en formato XMLBIF donde se guarde dicha red. Se puede incluir alguna componente aleatoria, por ejemplo para que se generen automáticamente las tablas de probabilidad de los nodos. Cualquier otra aportación original podrá ser valorada, tanto a nivel de funcionalidades adicionales como en lo que se refiere a material auxiliar sobre el ejemplo elegido. Nota Importante: El hecho de detectar plagio, compartición de código o uso de cualquier material que no sea original y del que no se cite convenientemente la fuente, significará automáticamente la calificación de cero en la asignatura para todos los alumnos involucrados. Por tanto a estos alumnos no se les conserva, ni para la actual ni para futuras convocatorias, ninguna nota que hubiesen obtenido hasta el momento. Todo ello sin perjuicio de las correspondientes medidas disciplinarias que se pudieran tomar.