Monday, May 25, 2009

Usted ya leyó esto en otras partes

En forma bastante predecible, las revistas (las que valen la pena leerse, digo, como el Scientific American, por ejemplo), los blogs (algunos que valen la pena leerse, y otros más parecidos a este blog), los programas de radio, los talk shows de la televisión, los realities y sus estrellitas que hasta el año pasado hacían mostrar el culo a alguna bonita golfa veinteañera se han volcado a preguntarse que ha fallado en nuestra comprensión de la economía para que hoy estemos aquí (bueno, tal vez haya sido demasiado adjudicarle esa preocupación a los últimos puntos de mi enumeración).

Las conclusiones son más o menos parejas: la economía tal como la conocemos dista de ser una ciencia, y no solo eso, difícilmente pueda considerarse una protociencia que al menos va bien encaminada. Los problemas de la economía (la ciencia económica, digo), vendrían básicamente del hecho de que la teoría de la elección racional no es ni siquiera una grosera sobresimplificación de nuestra forma de pensar, y de que, como dice Nassim Taleb, el único premio Nóbel (o algo así, para ser exactos ) de economía que ha recibido su premio por una contribución valiosa fue Daniel Kahneman. Precisamente, don Kahneman ha aportado pruebas convincentes de que nuestros sesgos cognitivos (que además, parecen ser innatos y, sin entrar en el debate nature vs. nurture, genéticos) impiden describir nuestro comportamiento por medio de formuleo matemático de la elección racional.

Como decía arriba, esto se convirtió en un tema más o menos recurrente en unas cuantas publicaciones. En el último número de Scientific American Mind hay dos artículos que tocan el tema. El primero de ellos es una entrevista a Peter Ubel, quien explica como nuestra tendencia al optimismo y al comportamiento manada (que mi vecino sacó un crédito? entonces puede que no sea tan peligroso!, que mi pareja se sirvió otra porción de postre? entonces a mí no me va a engordar tanto) puede arruinar nuestras finanzas personales (y globales), nuestra salud y más genéricamente, nuestro bienestar. Dice también Peter Ubel en un arranque de pesimismo (o elitismo? o derrotismo?, o vaya uno a saber qué) que un tercio de los norteamericanos adultos no son capaces de contestar cuanto es el diez por ciento de mil, y se pregunta como puede un tipo así evaluar el impacto de un posible aumento en las tasas de interés de interés en su hipoteca (una lástima que Ubel no cite fuentes de esta afirmación)

El segundo artículo no toca el tema directamente, es más una explicación (detallada y ejemplificada) de cuan malos somos al evaluar probabilidades, y de cuanto esfuerzo, entrenamiento y concentración requiere hacerlo bien. El ejemplo elegido es la evaluación de las probabilidades de tener una enfermedad dado un resultado positivo de un análisis para detectar dicha enfermedad. El ejemplo es usado también por Leonard Mlowdinow en 'The drunkard's walk' y por John Allen Paulos en 'Innumeracy'.

El asunto es así: Supongamos que nos hacen un análisis de HIV. Usan primero el método Elisa, que tiene un índice de falsos positivos del 1%, aproximadamente. Supongamos que el test da positivo... cual es la probabilidad de que en realidad estemos sanos? (o de que en verdad estemos enfermos?). Cual es? Si hay algún lector... tiene un número?

La respuesta es que en el párrafo anterior faltan datos para decidir: la respuesta no es que hay 99% de probabilidades de que estemos enfermos, ni nada por el estilo. Para llegar a la respuesta nos falta un dato: la prevalencia (el porcentaje de gente que sufre la enfermedad) de la infección. Para derivar la respuesta, tomemos la prevalencia global del HIV estimada para Argentina (0,31%).

Bien, ahora para hacer números redondos, supongamos que se han hecho en nuestro laboratorio 320 análisis de HIV. Como la incidencia es del 0,31%, eso da que nuestro laboratorio encontró un caso positivo (vamos a asumir que estamos en el caso más probable, esto es estadística, nada dice que deba ser así en todos los casos), ya que el 0,31% de 320 es 1.

Ahora, de esos 320 casos, alrededor de tres tipos se llevaron un test positivo sin serlo. O sea, de cuatro test positivos, uno es un positivo real y los otros tres son falsos positivos. Por lo tanto, hay un 75% de probabilidades de que no tengamos nada. Si a esto lo corregimos por incidencia demográfica y de comportamiento la probabilidad es menos (sonará feo, pero si somos una persona que no usa drogas endovenosas y que no tiene sexo sin protección o es monógama, las probabilidades de estar infectado bajan: no a cero, pero bajan).

Quiere molestar a su médico, estimado lector (si es que hubiera algún lector)?. Bueno, si es así, la próxima vez puede preguntarle cual es la probabilidad de que un resultado positivo de un determinado análisis no sea en verdad un falso positivo dada la incidencia?. El médico, en medio de una consulta por obra social mal paga, apurado porque se ve obligado a que su consultorio funcione como un McDonalds, raramente disfrutará de su sentido del humor.

Friday, May 15, 2009

Modelos de espera

Por motivos que no vienen al caso, el otro día estaba repasando las herramientas y papers que tengo en mi notebook y que pueden llegar a ser útiles en el trabajo. Pienso que hay una, que he usado en los proyectos de mejora de performance (mi pasión oculta, y algo así como el premio consuelo: puedo jugar a detective sin trabajar para House o sin dedicarme a la investigación) que bien vale un post.

La herramienta es tan simple como una planilla excel que se basa en la idea de que un sistema que atiende transacciones en, en definitiva, un modelo de colas. La idea del modelo de colas es bastante simple:
  • Existen una cantidad variable de recursos que atienden peticiones (canales).
  • Los clientes arriban al sistema y si no hay un recurso que atienda espera poniéndose en una cola.
  • Los canales demoran en atender cada cliente un tiempo variable descrito por una función de probabilidad.
  • Los clientes arriban al sistema en intervalos variables descriptos por una función de probabilidad
Los cálculos que yo conozco se basan en sistemas donde la disciplina de la cola es FIFO, la distribución de los arribos se describe como un proceso Poisson caracterizado por la tasa de clientes arribados sobre unidad de tiempo. Los tiempos de servicio de los canales (lo que tarda cada canal desde que la petición entra el canal, no a la cola, hasta que sale) se describen por medio de una distribución exponencial. Se puede complicar más ( impaciencia de los clientes, otras disciplinas de espera ) pero usualmente el modelo básico es suficiente para analizar un software up&running.

Prácticamente, no me he encontrado con un sistema que no pueda ser modelado como un sistema de colas:
  • Un sistema web recibe peticiones (los GET y POST HTTP) que son atendidas por threads que corren en el application server. Los threads son los canales de atención y si no hay un thread disponible, la petición espera.
  • Un proceso batch procesa peticiones (transacciones) que esperan en cola hasta que el proceso puede atender a la próxima.
  • Una base de datos que recibe DML es tiene una serie de procesos que atienden las peticiones
Encuentro particularmente útil el modelo de colas no para reemplazar al test de stress de un sistema, sino para complementarlo. Así, luego de terminar el test de stress o de mirar en producción un rato puedo contestar fácilmente preguntas del tipo:
  • Que sucedería si mi sistema recibe el doble de peticiones y hago un esfuerzo (en rediseño) para que el tiempo de servicio no aumente más del 10%?
  • Si espero un determinado incremento en la carga de transacciones, cual debería ser mi optimización del tiempo de servicio para obtener un determinado tiempo libre del canal (para tareas administrativas, por ejemplo).
Craig Shallahamer tiene un excel de un modelo de colas en su web (en el link hasta que Craig decida rediseñar su página). Es una modesta maravilla que en la primer solapa requiere la introducción de los valores característicos y en las siguientes muestra la evolución del sistema con variaciones de los valores característicos.

Así que la próxima vez que un cliente, con cara de ‘ahá, acá te cagué, consultor’ pregunte: 'y de donde sacaste que si la carga de transacciones aumenta un 20% me quedo sin tiempo para el backup', uno puede sacar las planillas y agobiarlo con una clase de investigación operativa ligera.

Y como bien saben los economistas, mostrar números y matemática razonablemente avanzada da un aura de respetabilidad. Aunque todo esté construido sobre nada. En realidad, el modelo de colas sí funciona para el análisis de performance de los sistemas informáticos, simplemente tenía ganas de hablar mal de los economistas. Porque (y con el solo objeto de divertirse un rato con una buena lectura y sin que tenga relación con el post) como bien señala Leonardo Moledo, con la economía es otra historia.