Rango Finito

fotoscódigoobservatorioshermanocerdo temas juegos

David

El domingo fuimos al supermercado y de camino paramos en una cafetería colorida del floreciente pequeño barrio indio. Un hombre en la cafetería nos preguntó si hablábamos portugués. Le dije que hablábamos español, español de Colombia. Ah, el mejor del mundo, exclamó. Eso dicen, le respondí.

Se llamaba David. Tiene unos cuarenta y tres años. Llegó a Toronto hace dos días después de vivir unos años en California. Aunque nació en Montreal, cuando sus papás se divorciaron fue enviado por su mamá a un colegio internado en Gales, así que habla con acento inglés de persona de bien. Me contó que adora Latinoamérica y que cuando tenía diecisiete años hizo una peregrinación hasta Machu Pichu desde Bogotá durante los años duros de Sendero Luminoso. Está convencido de que no fue secuestrado de milagro. Durante el viaje aprendió un poco de español de supervivencia pero cuando intentó practicarlo conmigo lo sentí oxidado. Mi familia es originalmente de España, me explicó. Nos expulsaron hace cinco siglos.

En su próximo viaje a Latinoamérica quiere conocer Chile. De Chile pasamos a hablar obviamente de campos de concentración y soldados alemanes que estaban asignados a los campos y que terminaron viviendo en Chile y Argentina. Me confesó que aunque los nazis mataron a setenta parientes suyos él no sentía rencor. Es un sentimiento que no le interesa cargar. No sabían lo que hacían, me explicó. Los comparó con las muchachos gringos que van a Afganistán.

Le pregunté qué lo traía de vuelta a su país de nacimiento.

Me contó que vivió algunos años en California trabajando en el cine como escritor y también como editor. Su visa de trabajo había expirado hace más de un año. Estaba hasta hace unos días en Inglaterra de vacaciones visitando a sus parientes y allá decidió que tal vez no era buena idea volver a California (temía problemas a la entrada) así que compró un pasaje a Toronto con el propósito de instalarse acá. Estaba en el proceso de importar sus pertenencias y su carro desde California. Le pregunté si había opciones de trabajo para él en la ciudad. Me explicó que aunque había varios estudios de cine no muy lejos del barrio (donde planea vivir — todavía no tiene apartamento — el domingo visitaría dos opciones en el área) él en realidad vivía de su trabajo como curandero. Qué tipo de curación hace, le pregunté. Flores, vibraciones de las esencias, energía cuántica, me dijo. Aprendió con maestros en Brasil y Australia.

Parecía un hombre profundamente solo y feliz.

Londres, Ontario

Mañana nos vamos. Llevamos una semana despidiéndonos de desconocidos que las rutinas que nos inventamos convirtieron en lo más parecido a amigos que tuvimos acá. No sé de qué estoy apegado. Supongo que de la seguridad que me daba mi encierro. O de la vida organizada en torno a Laia. Tal vez es eso. El lunes después de firmar el contrato de arriendo caminaba por Toronto y pensaba en lo grande que es todo allá. Me intimida de repente lo que creía añorar. Seguro que estaremos bien. De pronto incluso mejor que acá.

Interstellar

Grothendieck

Casa

Ayer aceptaron nuestra postulación para arrendar un apartamento en Leslieville, un barrio al oriente del centro de Toronto muy cerca de las playas sobre el lago y una zona llamada “Little India” que aprovecharemos intensamente. Hay parques y negocios bonitos. También hay una biblioteca y un centro comunal de la ciudad con piscina y pista de hielo muy cerca. Parece una zona buena para familias con hijos. Para llegar al trabajo probablemente tome el tranvía y aprovecho la media hora de viaje para leer y oír podcasts. Más adelante, si me siento cómodo, de pronto compro una bicicleta y hago el recorrido por la ciclorruta que bordea el lago. De todos los apartamentos que vimos creo que fue uno de los dos donde me sentí más a gusto, más en un lugar que se sintiera como una casa de nosotros. Espero que eso sea una buena señal.

Empacar

Empezamos a meter en cajas los libros. Laia me ayuda a sacar los libros de los estantes y organizarlos. La vida en cajas. Tenemos que filtrar y decidir qué llevamos y qué dejamos. Probablemente tengamos menos espacio allá. No sabemos aún dónde viviremos. El viaje del sábado fue útil pero más que nada nos aclaró cuál es el procedimiento para postularse como arrendatario y qué es lo que no hay que buscar. Ahora tenemos más claridad sobre lo que queremos y apenas doce días para encontrarlo. El miércoles volveremos a Toronto a mirar otros apartamentos más cercanos a lo que nos gustaría tener. Tal vez este año tengamos que resignarnos a algo sub-óptimo en aras de la tranquilidad.

Perversión

En la versión cinematográfica de Serial el programa genera una presión social inmensa para que se reabra el caso de Adnan Sayed, la gente simpatiza con el muchacho, el caso se reabre y Sayed sale libre pues se demuestra, como sugiere el programa, que no hay pruebas concluyentes en su contra. El programa, por supuesto, es considerado un hito del periodismo investigativo responsable y activo y recibe todos los premios. Una vez libre, sin embargo, Sayed busca a Sarah Koenig, la creadora del programa, y la mata. Después se entrega voluntariamente a la policía.

Cambios

Ayer me ofrecieron un trabajo como programador en una empresa en Toronto. Llevo trabajando hacia esto un buen rato pero sólo hasta este año me metí con todo a experimentar y practicar con la intención de ganar fluidez. Aún me siento bastante inmaduro en muchos sentidos pero con el postdoc de Mónica casi al cierre no podía darle más largas a mis postulaciones a trabajos acá. Mi misión será jugar con una base de datos biométricos de un tipo muy específico, entender lo que dicen, clasificar los registros de muchas formas, escribir programas eficientes para agregarlos y procesarlos, e inventarse formas útiles y provechosas de presentarlos a sus usuarios por medio de diferentes aplicaciones. Decidimos aceptar y dejar London abruptamente. En quince días necesitamos estar instalados en la ciudad. Serán dos semanas intensas. Nos vamos con algo de pena porque aunque no teníamos muchas opciones laborales aquí estábamos encariñados con nuestra vida pequeña y tranquila de barrio, nuestro apartamento silencioso con vista al árbol y la guardería de Laia con sus amigos y sus profesoras. En Toronto hay más oportunidades para los dos y también actividades para Laia. Con suerte nos instalaremos en un sitio agradable a seguir armando estos rumbos tan raros en los que nos metimos por andar estudiando de más. Si todo sale bien nos gustaría que Toronto sea nuestro destino final. A ver adónde nos lleva este nuevo salto.

Reporte

Parece que hoy Laia amenazó con meterle un palazo a un compañero de la guardería. Por fortuna Vicky, la profesora, estaba cerca y previno el asalto. Más tarde, ya en la casa, Laia nos contó que otro niño le había pegado en la panza. Estaba apachurrada por eso. Mañana le contaré a Vicky cuando la llevemos al colegio.

Es difícil seguir el progreso del lenguaje porque todo es tan suave que se siente como si nada cambiara aunque todo cambia. Me gustaría poder ser más metódico y registrar eso de alguna forma. Aunque ya para este momento el avance ha sido inmenso. Las estructuras de las frases son cada vez más complejas. Se nota que le gusta experimentar con las herramientas que va adquiriendo, como si probara límites. Es un juego constante en el que yo participo gustoso. Cada vez las conversaciones son más largas y extrañas. Las lecturas de libros incluyen más pausas para que ella intervenga, pregunte, explique y opine. Una pregunta recurrente en todas las historias es si el personaje es bebé, mamá o papá y dónde están los demás (si está solo).

Por alguna razón del cinco salta al catorce cuando cuenta. Después vuelve al siete u ocho, dependiendo.

Las letras le importan un culo, aunque le gusta cantar una versión del ABC que deja de ser el ABC a partir de la D o F. Muy entonada eso sí.

Le gusta hacer todo sola y después de intentar un rato, cuando descubre que le cuesta, pide/exige ayuda. Es mandoncita y nos regaña ocasionalmente con un “¡NO!” firme con dedo en alto que le enseñé para amonestar a Gonta cuando le suelta mordisco. En el colegio también usa el “¡NO!” con profesoras y compañeros.

Nos dice papito y mamita (o mamacita). No sabemos de dónde lo sacó pero yo tiendo a culpar a Dora La Exploradora. Hoy empezó a decir “Laiecita” para referirse a sí misma. No es muy consentida pero a veces, muy ocasionalmente, le gusta consentir. También le gusta dar el “sana que sana”, aunque ella lo llama “sana mañana”.

Canta todo el tiempo. Le gusta aprenderse canciones y practicarlas conmigo. Necesito más canciones. Por las noches, antes de dormir, siempre hay sesión de canciones con el papá. Es el mejor momento del día.

Codility

Codility es una plataforma en línea para evaluar habilidades de programación. Ayer, una de las empresas a las que he enviado hojas de vida me envió allá a hacer un examen de aptitud. Todavía no me he animado a hacerlo, pero ayer mismo estuve probando la plataforma aprovechando que ofrecen algunos problemas de prueba. Son problemas típicos (y (a posteriori) sencillos) de diseño de algoritmos. Hice dos más o menos rápido. En el que quedaba me embolaté y me fui a dormir cansado y frustrado pero la ansiedad que determina el 98% de mi existencia me despertó a las cuatro de la mañana con una idea vaga de cómo escribirlo (y otros pensamientos menos agradables). Finalmente me levanté a las seis e hice el deber. Al final, después de varios intentos, logré soluciones satisfactorias a todas las preguntas. Como lenguaje elegí Python, que también está disponible como opción en la prueba que tengo que hacer. Algo bueno de Python es que me puedo desentender de problemas de desborde con números muy grandes (varios de los tests que hacían a las soluciones intentan romperlas así.) Aquí subí las soluciones sin mayor comentario. Espero que el código sea suficientemente claro.

Despegue

despegue

Cuando empecé a escribir Despegue se llamaba Para poder llegar. Lo escribí durante las mañanas del verano de 2011, en el intermedio entre mis dos semestres como postdoc en la universidad de Waterloo. La escritura tomó un mes y algo. Escribía un capítulo diario. Borré muchos capítulos durante las correcciones. Tomaba notas de posibles capítulos en hojas que no sé dónde habrán terminado. La idea era expandir un relato mínimo y críptico titulado Prodigio que aparecía en Inframundo donde un niño hablaba con admiración de un primo que se había ido y mencionaba de pasada, como si no fuera nada, varias experiencias fuera del cuerpo. Quería sostener el tono infantil pero oscuro de ese relato en algo con aspiraciones de ser una novela infantil con componentes de ciencia ficción y fantasía paranormal. Rápidamente, mientras lo escribía, me di cuenta de que al fondo de la historia estaba mi dificultad por dejar ir la muerte de nuestro hijo. A un año de distancia todavía me atormentaba muchísimo. Me tenía mental y anímicamente incapacitado. Me costaba mucho redactar párrafos y pensar en general. Escribirlo me sirvió para salir de ahí, o al menos para empezar a salir. Fue una forma de reconciliarme con lo que nos había pasado. El protagonista de la historia era un niño que ayudaba a su primo enfermo a organizar una fuga hacia el espacio (el Arriba-Afuera de Cordwainer Smith). Quería que fuera una novela infantil sobre asuntos duros donde el niño protagonista no evadiera la realidad hundiéndose en ensoñaciones fantásticas sino que, al contrario, la encarara usando lo que tenía a su mano: unos poderes y saberes misteriosos heredados de su papá ausente. Quería que él los describiera como cosas naturales, como una ciencia más a la que por cualquier razón tenía acceso. Pese al tema, creo que el libro es más esperanzador que triste. Es una victoria. Aunque mi objetivo era hacer algo lineal, muy rápido (por algo que es más vicio que estilo) terminé escribiendo fragmentos a saltos que al ser encajados cuentan varias reflexiones y anécdotas sobre la partida. Entrelíneas es un ensayo pequeño sobre la soledad, las responsabilidades con los otros y las despedidas. Todavía me gusta el resultado. Es raro e intrigante. Creo que sería un libro que habría disfrutado de haberlo encontrado a los nueve o diez años. Espero poder leérselo a Laia pronto.

Un ejercicio propuesto en Twitter

Me preguntaron esto en Twitter. Como ando dedicado a estudiar probabilidad y estadística entonces aproveché la pregunta para practicar. Repito el problema acá por si acaso:

Sea $\{y_t\}_{t=1}^T$ una sucesión de variables aleatorias independientes e idénticamente distribuidas $N(0, \sigma^2)$ y sea $$S_T = \frac{1}{T}\sum_{t=1}^T y_t^2.$$ Muestre que $$\sqrt{T}(S_T – \sigma^2) \to N(0,2\sigma^4)$$ cuando $T$ tiende a infinito.

Este es el tipo de enunciado que clama al cielo por una aplicación del teorema central del límite. El teorema central del límite es uno de esos resultados cuasi-filosóficos que esencialmente justifica un montón de metodologías y obsesiones que los estadísticos tienen y que giran en torno al uso de la distribución normal. Lo que dice el teorema central del límite, siendo vago, es que si uno tiene unas variables independientes entonces el promedio de estas variables tiende a distribuirse normalmente cuando el número de variables que se consideran tiende a infinito. Filosóficamente lo que implica es que como casi cualquier medida de cualquier cosa es en el fondo un promediado de un montón de otras variables distintas de cosas que no podemos realmente medir, entonces es común que esas medidas finales (las que nosotros hacemos) se comporten normalmente (o sea, que se distribuyan como una curva de Bell.) Por supuesto esta es más una declaración de fe que otra cosa, pero en términos prácticos funciona lo suficiente (en ciertos contextos) como para asumirlo como dogma.

Ahora escribo un enunciado formal del teorema central del límite más básico para que vean lo cerca que está del problema propuesto:

Sean $\{X_i\}_{i<\infty}$ una sucesión de variables aleatorias independientes e idénticamente distribuidas con $E[X_i]=\mu$ y $Var[X_i]=\sigma^2<\infty$. Entonces cuando $n$ tiende a infinito, $$\sqrt{n}\left(\left(\frac{1}{n}\sum_{i=1}^n X_i \right) - \mu\right) \to N(0,\sigma^2).$$

Como aspiramos a usar el teorema central del límite en el problema, entonces el ejercicio se reduce a traducir: en el problema tenemos una sucesión de variables independientes e idénticamente distribuidas pero queremos calcular la distribución del límite de los promedios de sus cuadrados, entonces la media y varianza que necesitamos son las de $y^2$ donde $y$ se distribuye $N(0,\sigma^2)$:

  • Calculemos $E[y^2]$: $$E[y^2] = E\left[\sigma^2 \frac{y^2}{\sigma^2}\right] = \sigma^2 E\left[\frac{y^2}{\sigma^2}\right] = \sigma^2$$ porque $$E[X^{2n}] = \sigma^{2n} (2n – 1)!!$$ si $X$ se tiene distribución normal con varianza $\sigma^2$ y $!!$ es el doble factorial. En este caso $y/\sigma$ se distribuye $N(0,1)$ y $1!! = 1$.
  • Ahora calculemos $Var[y^2]$: $$Var[y^2] = E[y^4] – (E[y^2])^2 = \sigma^4\left(E\left[\frac{y^4}{\sigma^4}\right] – \left(E\left[\frac{y^2}{\sigma^2}\right]\right)^2\right).$$ Pero $$E\left[\frac{y^4}{\sigma^4}\right] = 3!! = 3$$ y $$\left(E\left[\frac{y^2}{\sigma^2}\right]\right)^2 = 1^2 = 1.$$ De donde $Var[y^2] = 2\sigma^4$.

Por tanto tenemos unas variables aleatorias independientes e idénticamente distribuidas (las $y_t^2$) con $E[y_t^2]=\sigma^2$ y $Var[y_t^2]$. El teorema central del límite nos dice que: $$\sqrt{T}\left(\left(\frac{1}{T}\sum_{t=1}^T y_t^2 \right) – \sigma^2\right) \to N(0,2\sigma^4)$$ cuando $T$ tiende a infinito. Esto es precisamente lo que queríamos demostrar.

Diferencias significativas

Un error estadístico frecuente ocurre cuando se comparan resultados en intenciones de voto en una encuesta entre un par de candidatos, usualmente los dos más fuertes. El error consiste en tomar la diferencia entre los porcentajes obtenidos y compararla con el margen de error que reporta la encuesta. Si la diferencia es mayor que el margen de error (o dos veces el margen de error, algo así), se concluye erróneamente que la ventaja es significativa. En realidad ese margen de error no aplica a diferencias de valores sino a valores puntuales, por decirlo burdamente. Las diferencias de valores tienen una distribución distinta y un margen de error propio. Hace un par de días Guillermo Moncecchi publicó este cuaderno de iPython mostrando cómo evaluar rigurosamente esas diferencias. En algún apartado proponía armas una página que permitiera poner los valores a comparar y el número de encuestados y la página calculara si la diferencia era significativa o no. Ayer me senté un rato y la armé. Permite comparar valores a una pregunta en una misma encuesta o el mismo valor en dos encuestas distintas con la misma pregunta. En el primer caso, si la diferencia no es significativamente distinta de cero con un nivel de confianza del 95% entonces indica cuál sería el mínimo número de encuestados con los cuales esa diferencia sería efectivamente significativa. Aquí, como acompañamiento, cuatro gráficos señalando para porcentajes p1 y p2 cuáles pares tienen diferencia significativa (azul marino) y cuales no (rosa claro) dependiendo del número de encuestados (N). Sombreo la zona irrelevante en la que p1 y p2 suman más de 1. Entre más altos sean los valores de p1 y p2 se vuelve más difícil asegurar que su diferencia sea respaldada por la encuesta.

confianzas

Un clasificador de Bayes falso

Lo que sigue es un pequeño complemento a Tres Modelos que estuve conversando con Santiago hoy: una forma de usar Bayes (asignar la clasificación de acuerdo a qué color tiene la mayor probabilidad en cada punto) aunque no se cuente con la distribución de densidad de las poblaciones que se estudian es asumir alguna distribución de densidad a priori basada en datos empíricos y proceder desde ahí. Hay una discusión filosófica al fondo de eso pero no importa la posición que se tenga el método sigue teniendo sentido. Sobre esto me gustaría escribir algo detallado. Probablemente le dedique otro texto largo pues es un criterio de selección de procedimientos clave en teoría de decisión estadística.

Lo que quiero hacer ahora es un poco distinto y probablemente bastante sucio: con los datos de entrenamiento a mano (¡y solo con ellos!) hay métodos que permiten calcular una función de densidad falsa que se conoce como kernel density estimate (KDE). Para calcular el KDE, además de los datos $x_1, x_2,\ldots,x_m\in\mathbb{R}^n$ se necesita un $h>0$ y una función $$K:\mathbb{R}^n\to \mathbb{R}$$ simétrica con respecto al origen pero no necesariamente positiva con la condición de que $$\int_{\mathbb{R}^n} K = 1.$$ El $K$ estándar es una multinormal centrada en cero y con la matriz identidad como covarianza.

Dados estos ingredientes, a el KDE es una función $f_{K,h}$ definida como sigue: $$f_{K,h}(x)=\frac{1}{mh}\sum_{i=1}^m K\left(\frac{x-x_i}{h}\right).$$

O sea una suerte de promedio local ponderado de las distancias del punto a los datos disponibles.

En el código que sigue tomo la muestra de entrenamiento y para cada color calculo un KDE con $K$ normal bivariada y $h$ elegido con un método estándar para estos menesteres que está descrito acá. Después grafico los KDE en tres dimensiones para ver las dos montañas:


# Primero extraigo las poblaciones de cada color:
blues <- training_sample[training_sample$color == "blue", 1:2]
oranges <- training_sample[training_sample$color == "orange", 1:2]

# Después calculo los KDE en 2D:
dblues <- kde2d(blues[,1], blues[,2], n=200, lims = c(-3, 3, -3, 3))
doranges <- kde2d(oranges[,1], oranges[,2], n=200, lims = c(-3, 3, -3, 3))

# Y finalmente lo grafico:
persp3D(x=doranges$x, y=doranges$y, z= doranges$z, shade=.5, col="orange", 
    alpha= .5, phi=20, box=F, contour=T, theta=-30)
persp3D(x=dblues$x, y=dblues$y, z= dblues$z, shade=.5, col="dodgerblue2", 
    alpha= .5, add=T, phi=20, contour=T,  theta=-30)

Densidades Falsas

Para comparar, aquí las densidades reales de las poblaciones:

Densidad Real

Ahora lo que se puede hacer, por jugar, es proponer una clasificación basada en estas densidades falsas y mirar cómo se diferencia de la clasificación de Bayes. Grafiquemos ambas fronteras, Bayes (rojo) y Bayes Falsa (verde), sobre la muestra de evaluación:


# Primero organizo los KDE en un dataframe:
density.df <- expand.grid(dblues$x, dblues$y)
density.df$blues <- as.vector(dblues$z)
density.df$oranges <- as.vector(doranges$z)

# Ahora defino el Bayes falso (1 es naranja y 0 es azul):
density.df$fake.bayes <- as.numeric(density.df$blues < density.df$oranges)

# Finalmente lo grafico:
grid$color <- apply(grid[,1:2], 1, bayes_classifier)
ggplot(grid, aes(X1, X2, z=color)) +  
    geom_point(aes(X1, X2, fill=as.factor(color)), 
        size=1, col="white", shape=21, alpha=0.5) + 
    geom_point(data=test_sample, aes(x=X1, y=X2, col=color)) +
    stat_contour(bins=1, color="red", size=2) +
    stat_contour(data=density.df, aes(x=Var1, y=Var2, z=fake.bayes), 
        color="forestgreen", bins=1, size=2) +
    scale_color_manual(guide="none", values=c("dodgerblue2", "orange")) +
    scale_fill_manual(guide="none", values=c("dodgerblue2", "orange")) +
    theme_bw() + xlab("x") + ylab("y")

bayes.vs.fake.bayes

Obviamente el Bayes falso es muchísimo más débil que Bayes: se deja manipular demasiado por la muestra de entrenamiento.

Ejercicio: calcular el error de este modelo de Bayes falso en la muestra de evaluación.

Tres modelos

TESL

Aunque llevo cerca de un año echándole un ojo ocasionalmente, estos últimos meses he estado mirando con más cuidado The Elements of Statistical Learning, el libro de referencia básico de aprendizaje estadístico. Ayer viernes por la tarde estaba releyendo definiciones del segundo capítulo y descubrí que no entendía del todo la figura 2.4. (una versión de la que encabeza esta entrada). En particular no entendía cómo se podía calcular ese error de Bayes en el caso concreto del ejemplo. Después de buscar un rato en Google y no encontrar ninguna respuesta satisfactoria me puse a reproducir uno a uno los cálculos del capítulo a ver si me iluminaba. Después de darle muchas vueltas creo que entiendo mucho mejor cómo va. El resultado de mis pesquisas intentando explicarme qué es el tal error de Bayes son estas notas. De paso sirve como introducción a modelos de clasificación. Espero no estar muy descachado en mis intuiciones.

Cerca

Esta semana cumplimos otro aniversario del nacimiento y muerte de Mauricio. Sería un niño de cuatro años. Mónica y Laia están en Florida de paseo familiar y yo acá en la casa trabajando. Fue mala idea quedarme solo esta semana.

Los aniversarios son lo más parecido a regresar al mismo momento por fuera del recuerdo. Y de cierta forma también son un regreso físico muy concreto a una posición en el espacio en el sistema de coordenadas que tiene en el centro al sol (aunque también hay un descuadre ahí que hace cada vez más difícil el empalme). De pronto por eso durante los cuatro días de septiembre que nos acompañó lo siento más cerca y presente. Es una forma de reencontrarnos. Pienso en él y en lo que no fue. Lo extraño aunque apenas lo conocí. Y cuando los días pasan nos volvemos a alejar otra vez hasta el próximo año. Así será por siempre.