/modelacion-bayesiana_ITAM

Notas y contenido del curso en Modelación Bayesiana para la MCD @ ITAM

Primary LanguageRMIT LicenseMIT

EST-46115: Modelación Bayesiana

https://github.com/agarbuno/modelacion-bayesiana/actions/workflows/docker.yml/badge.svg https://img.shields.io/docker/pulls/agarbuno/bayesiana.svg?logo=docker https://img.shields.io/docker/image-size/agarbuno/bayesiana/notas.svg?logo=docker https://img.shields.io/github/languages/top/agarbuno/modelacion-bayesiana.svg?logo=r https://img.shields.io/github/languages/code-size/agarbuno/modelacion-bayesiana.svg?logo=r

Contenido

Introducción

Este es el repositorio con el contenido del curso en Modelación Bayesiana de la maestría en ciencia de datos. También puede ser ofrecida de manera simultánea para alumnos avanzados en las licenciaturas de matemáticas aplicadas, ciencia de datos y actuaría.

Our goal is not to eliminate uncertainty, but to understand and quantify the uncertainty in order to make sound decisions. —Netflix Tech Blog

images/20220123-012255_screenshot.png

A previous acquaintance with probability and statistics is not necessary; indeed, a certain amount of innocence in this area may be desirable, because there will be less to unlearn. —Jaynes, 2003.

Probability theory is nothing but common sense reduced to calculation. —Laplace, 1819.

Contexto

Este es el curso EST-46115: Temas Selectos de Estadística. Lo conoceremos como Modelación Bayesiana y corresponde al segundo semestre de la Maestría en Ciencia de Datos.

Objetivo

En este curso se verán temas avanzados en la visualización, simulación y diagnóstico de modelos bayesianos para: inferencia, análisis de potencia y calibración de procedimientos estadísticos. Se estudiará un flujo de trabajo bayesiano que permite validar y evaluar hipótesis. Se introducirán algunos modelos modernos utilizados en distintas áreas como: modelos predictivos, selección de variables y sistemas de recomendación. El material se complementará con algunos podcasts y lecturas de artículos de divulgación e investigación a lo largo del curso.

Temario

El temario para el semestre de primavera 2022 se puede encontrar aqui. Este es un plan preliminar que está sujeto al avance del curso a lo largo del semestre.

¿De qué trata el curso?

En esta iteración del curso se estudiarán las bases algorítmicas de la inferencia bayesiana (métodos de simulación por cadenas de Markov) así como los diagnósticos pertinentes. De igual manera estudiaremos un flujo de trabajo basado en calibración y simulación para poder identificar rutas potenciales de mejora en nuestros modelos y revisaremos principios basados en el método científico. El curso continuará con métodos de inferencia aproximada que han dado lugar a aplicaciones del estado de arte como sistemas de recomendación o análisis de texto.

Estructura del curso

El curso está planeado alrededor de tres temas centrales:

  1. Cómputo probabilístico.
  2. Flujo de trabajo Bayesiano.
  3. Modelación predictiva probabilística.

images/20230108-173942_screenshot.png

¿Existe un libro de texto?

images/20220123-011136_screenshot.png

Recursos

El contenido actual del curso se encuentra en la rama: spring-2023. La estructura del repositorio se muestra a continuación donde a grandes razgos tenemos:

.
├── docs       # Handouts con las notas de clase (pdf).
├── images     # Material visual de apoyo (png).
├── modelos    # Directorio con los modelos que usaremos en el curso (stan).
├── notas      # Material fuente de las notas (emacs).
├── renv       # Archivos de estructura de ambiente (R).
└── rscripts   # Codigo de R para interactuar con Stan (R).

6 directories

Horarios

El curso será los días Lunes y Miércoles en el horario de 17:30 a 19:00 horas.

Formato

El curso será completamente presencial. Por otro lado, salvo se indique lo contrario, las evaluaciones serán presenciales.

Canvas

Utilizaremos este LMS para gestionar la comunicación fuera de los horarios de clase. Asimismo, ahi tendrán acceso al calendario y las sesiones de zoom que se necesiten a lo largo del semestre.

Fechas importantes

  • 6 de Febrero no hay clase.
  • 20 de Marzo no hay clase.
  • 3 y 5 de Abril no hay clase.
  • 26 de Abril último día de bajas.
  • 1 de Mayo no hay clase.
  • 10 de Mayo última clase.

Atención de alumnos

El horario de atención a alumnos será Lunes y Miércoles en un horario de 12:00pm a 2:00pm. Recomiendo utilizar el sitio de calendly. Por supuesto, si no les queda algún horario podemos agendar por correo electrónico.

images/20220809-101938_screenshot.png

Importante: les estoy proporcionando la facilidad de agendar con plena libertad las sesiones de asesoría. Consideren que al ustedes agendar una reunión están privando ese espacio a alguien mas en mis cursos. Asi que por favor no desperdicien ese espacio.

Evaluación

La evaluación del curso será por medio de:

  • Participación y tareas (30%)
  • Evaluaciones parciales (30%)
  • Evaluación final (40%)

Proyecto final

Trabajo basado en un paper, método, modelo, aplicación relacionado con la temática de la clase. Entregables:

  1. Presentaciones de Seguimiento (25%),
  2. Reporte escrito (50%)
  3. Presentación final (25%).

Ambiente de trabajo

El curso puede ser seguido en Python, Julia, etc (básicamente cualquier lenguaje de scripteo con interface a Stan). El curso utilizará Stan como lenguaje para definir y ajustar modelos bayesianos (tanto asintóticamente correctos, como aproximados). En particular utilizaré la interfase de R por medio de cmdstanr pero de igual manera son bienvenidos en utilizar la interfase de python o la que les acomode$^†$.

images/20230108-173842_screenshot.png

Como herramienta de trabajo se sugiere utilizar Rstudio Visual Studio Code para poder trabajar en sus proyectos y sus tareas. En particular, el material de clase es editado en GNU Emacs a través de orgfiles (archivos de texto plano con sufijo .org) pero pueden ser visualizados en Github.

Nota: Si van a utilizar R se recomienda tener instalada la versión 4.2.1 para tener la mejor compatibilidad con el código del curso.

Configuración R

Utilizaremos renv para mantener actualizada las herramientas de R junto con el contenido del curso. En la carpeta principal se encuentran los archivos de requerimientos (renv.lock) con el que podrán usar los archivos que se vayan decantando en la carpeta rscripts. Aún asi, la configuración se irá refinando en los ejercicios de tarea que vayamos utilizando en el curso.

Configuración renv

Si utilizas MacOS o alguna distribución Linux se recomienda escribir en el archivo ~/.Renviron la siguiente línea lo cual mantendrá el cache de renv en un lugar centralizado y de fácil acceso:

RENV_PATHS_ROOT=~/.renv

Trabajando con ambiente Dockerizado

Las imágenes de agarbuno/bayesiana (puedes ver imágenes en mi hub de Docker aqui, y/o los Dockerfiles aqui) permiten tener un ambiente para trabajar con Docker en nuestro curso.

Mi idea de ambiente computacional es el que se puede reproducir en cualquier sistema operativo. Para esto Docker es la herramienta ideal y el uso de los Codespaces de GitHub ha resultado increíble para una solución dentro de un ámbito educativo.

Para la imagen agarbuno/bayesiana consideren que:

  1. El tag notas basado en una distribución linux en una emulación con un procesador Intel, tiene la configuración mínima necesaria para poder reproducir el ambiente de cómputo para poder ejecutar el material del curso.

La idea es que si usamos el combo Docker + Visual Code Studio, entonces ¡tod@s tenemos la misma computadora para trabajar! 🥲. Y si lo quieren correr en la nube entonces: Docker + Visual Code Studio + Github Codespaces 🥲 $× 1078$.

Importante: Si espero que sepan reproducir ustedes la configuración del ambiente de trabajo. Parte del curso contemplará organizar una sesión para discutir esto a profundidad. De momento, lo importante es que lo sepan utilizar en su computadora o en un explorador de internet. Esto es, que pueden utilizarlo para las prácticas del curso.

Esta imagen provee de un ambiente donde se podrán instalar las paqueterías que utilizaremos sin ningún problema$^†$. La idea, adicional, es que utilicemos volumes para poder tener permanencia en nuestro trabajo.

El contenedor se podrá levantar sin ningún problema por medio de la siguiente serie de instrucciones en terminal (también se puede establecer un script de shell).

# Ruta del cache de renv en el contenedor
RENV_PATHS_CACHE_CONTAINER=/home/rstudio/.renv
# Ruta del cache de renv en tu maquina
RENV_PATHS_CACHE_HOST=~/.renv/cache
# Ruta donde guardes los clones de las tareas
PATH_TRABAJO_HOST=<ruta hacia las carpetas de los repos de tareas>

docker run -p 8787:8787 \
    -e PASSWORD=<contraseña de tu preferencia> \
    -e "RENV_PATHS_CACHE=${RENV_PATHS_CACHE_CONTAINER}" \
    -e "RENV_PATHS_ROOT=${RENV_PATHS_CACHE_CONTAINER}" \
    -v "${RENV_PATHS_CACHE_HOST}:${RENV_PATHS_CACHE_CONTAINER}" \
    -m 6g \ 
    -v "${PATH_TRABAJO_HOST}:/home/rstudio/documentos" \
    agarbuno/bayesiana:<tag>

Configuración de Docker

La imágen de Docker para el ambiente de RStudio está basada en la imagen de rocker/verse de los desarrolladores en el Proyecto de Rocker con las siguientes herramientas agregadas para la materia de modelación bayesiana:

Para instrucciones de uso, se sugiere seguir la Documentación de Rocker

Un ejemplo de como construir y correr este contenedor sería lo siguiente. En un terminal, dentro del folder del repo, correr la siguiente línea

docker build --tag bayesiana:notas .

El contenedor lo podemos despertar con

docker run -e PASSWORD=qwerty -p 8787:8787 --rm bayesiana:notas

Para vistarlo basta con utilizar la ruta localhost:8787 en cualquier browser de internet y utilizar la contraseña especificada. Se puede agregar la bandera de -v si se quiere acceder a un folder local. Mas información de volúmenes se pueden encontrar en la documentación.

Tareas

Las primeras tareas del semestre son básicamente configuración y es recomendable hacerlas si no cuentan con experiencia en: Git, Github, R y el tidyverse.

Las tareas las gestionaremos a través de Github Classroom lo cual me permite administrar sus entregas como proyectos de Git. Además, habrá ejercicios de las tareas que tendrán mecanismos de calificación automatizada.

images/20220624-182316_screenshot.png

¿Dudas?

Contribuidores

AdrianTJ (ambiente en Docker).

Bibliografía

\nocite{*} bibliographystyle:abbrvnat bibliography:references.bib