martes, 12 de junio de 2018

Sitio de reclamos Buenos Aires - Estimación tiempo de denuncia



En https://gestioncolaborativa.buenosaires.gob.ar el Gobierno de la Ciudad de Buenos Aires permite hacer diferentes tipos de trámites, denuncias, reclamos, etc.

En particular, yo lo use para denunciar un auto abandonado en la puerta de mi casa. En el mismo hay que subir una foto, completar unos datos del auto (color, patente, etc) y luego ESPERAR. Al día siguiente de hacer la denuncia ya estaba impaciente, quería tener una idea de cuanto tardaría mi trámite.
La web ofrece, a medida que el tramite se mueve un estado que se va actualizando, con esta pinta:


Lo que no aparece, es la estimación de tiempo, o como es la distribución de espera típica. Lo cual es raro teniendo en cuenta la cantidad de datos pasados que tienen. 

Como quería tener una noción  de como se resuelven estos tramites, baje los “pedidos” del sistema. Casi todos los del 2017 y los del 2018 hasta el 10 de Mayo o similar (en total fueron unos 1.1 millones). 

Para bajarlos, entré a la url que se genera luego de cargar un pedido, por ejemplo si mi trámite es el 1234/18, la web donde se puede ver es: 


Que en realidad, lo que hace es pegarle a otro entrypoint para obtener los datos en formato JSON, para el mismo ejemplo el otro entrypoint es:


Esta entrada devuelve los datos en formato JSON con la info que se ve en la pantalla del trámite (y un poco más!)



La data que devuelve, y la cantidad de datos que hay, dan para varios post, pero traté de centrarme en mi inquietud: Encontrar el tipo de tramite que hice yo y medir como eran las dispersiones típicas de resolución y de tiempos.

En principio, había un campo importante que era el tipo, en toda la muestra que obtuve, encontré 5 tipos diferentes y se distribuían así.


TIPO

DENUNCIA
19%
QUEJA
2%
RECLAMO
15%
SOLICITUD
23%
TRAMITE
41%


Los de tipo TRAMITE, que eran la mayoría, a su vez eran ‘SOLICITUD DE PARTIDAS', y tenían casi todas la misma coordenada y dirección que corresponden al Registro Civil Central (Uruguay Av. 753 ) por lo que supongo que los pedidos tramite aparecen en esta web también. En el caso de mi pedido, era de tipo RECLAMO.

Otra información relevante de los datos, es el CONCEPTO, hay varios, la mayoría nuevamente corresponde a SOLICITUD DE PARTIDAS. El que origine yo, se llamaba "Remoción de vehículo / auto abandonado".





De los 7369 pedidos de “Remoción de vehículo”, 73% tenían estado 100%, de las cuales 43% correspondían  a “ya resolvimos la solicitud”, otros 43% a ‘nuestro verificador no pudo identificar el problema que originó el pedido’ y lo restante correspondieron también a pedidos con resultado negativo por parte del que emite la solicitud (la solicitud no fue conducente por no poder ser identificada o por no ser competencia del gobierno de la ciudad, la solicitud no contaba con la información suficiente para tratar el pedido y por lo tanto fue desestimada por favor realiza una nueva solicitud aportando la mayor cantidad de datos posible, la solicitud no fue conducente o finalizó sin resultados, etc)

Osea, solo el 32% (0.73 * 0.42) terminan de manera exitosa para el que genera el pedido al gobierno de la ciudad en este tipo de tramites.

A priori pensé que tal vez dependía del barrio el éxito del tramite y el tiempo de resolución, pero a ojímetro estas dos variables parecían ser invariantes en toda la ciudad. Por ejemplo, así se distribuían en la ciudad las denuncia de auto abandonado en función a todas las denuncias (en azul)





En fin, suponiendo entonces que el barrio no modificaba lo que tarda un pedido en ser resuelto, miré las distribuciones de tiempos para tramites de “Remoción de vehículo”, separando en los que terminan favorablemente para él que hizo el pedido y los que no.




Las distribuciones están muy buenas, se separan bastante y esencialmente con sentido. Si te rebotan, te robotan rápido, si pasas masomenos los 10 días es mas probable que  salga bien y remuevan el auto (puesto que a su vez, la cola de la distribución de abajo tiene mucha menor cantidad de casos que la de arriba)

En fin, luego de ver esto, tengo mas esperanza de que me den bola. Estaría bueno que muestren esta info en cada pedido…


... aunque ya voy 50 días y el auto sigue ahi :p

Nota de color:

Para ver una denuncia, no hace falta estar logueado, uno puede acceder a un montón de información de cada denuncia, lo que resulta coherente, PERO también puede ver el NOMBRE DE PILA de quien origino la denuncia (pegándole al entry point que devuelve el JSON), lo cual es un poco raro…

lunes, 13 de marzo de 2017

Concursos docentes: Cómo integrar opiniones de los jurados

El año pasado fui parte del jurado de un concurso docente para cubrir cargos en el Departamento de Computación (FCEN-UBA). Una parte del concurso consistió en evaluar la prueba de oposición (PO) de los concursantes. En nuestro caso, decidimos que cada jurado evaluara la prueba de oposición y cuantificara con un solo número del 0 al 1 al concursante. Tras haber completado todas  las pruebas de oposiciones nos preguntamos cómo íbamos a hacer para juntar nuestras opiniones en un orden de mérito.

En principio pensamos en usar simplemente el promedio de la valoraciones de las POs pero nos dimos cuenta de algunos de los problemas que ocurren tomando esta decisión:

1) ¿Las opiniones de los jurados valen igual?
2) ¿Qué hacemos con las abstenciones?

Para intentar responderlas, junto a David Gonzalez Marquez, usamos datos de 3 concursos distintos (de manera 100% anonima). De cada concurso usamos una tabla con tres puntajes correspondientes a la valoración de la PO de cada jurado (distintos para cada concurso) para cada concursante. Para cada concurso contamos en promedio con 24 candidatos.

El primer acercamiento a los datos que hicimos fue mirar la distribución de puntajes del orden de méritos y notamos cosas interesantes: cada concurso tiene formas y usos de rangos bastante particulares entre si y distintas entre los concursos. Por ejemplo el concurso 3 tiene un uso del rango mucho mayor que  los demás concursos para todos los jurados. Inclusive, tomando todas las valoraciones y comparando por concursos resultan estadísticamente distintas entre si (Concurso 1 vs Concurso 3 pval<10^-5, Concurso 2 vs Concurso 3 pval<10^-8).
No sabemos bien a qué se debe esto. Podría ser que realmente haya un buen uso del rango por todos los jurados y justo la muestra a la cual accedimos en cada año sea muy distinta entre concursos, aunque esto parece muy poco probable. Nos inclinamos más a pensar que puede haber una sugestión por parte de un jurado o un sesgo en como reportan las PO los jurados con más experiencia y un ajuste en los nuevos jurados a medida que pasa el concurso.


Mirando las mismas distribuciones pero por jurado se ve que si bien entre concursos hay formas particulares también hay cierta heterogeneidad entre los jurados en el uso del rango y distribución de los puntajes.


Esto nos llevó a preguntarnos si había una valoración coherente de los candidatos entre las distintas opiniones de los jurados. Para eso medimos la correlación entre los jurados por concurso. Vemos en la figura que las correlaciones son muy altas, esto significa que los jurados concuerdan en opiniones, es decir, están típicamente de acuerdo si un candidato es muy bueno, promedio o malo.

Si bien la alta correlación es alta, en el mismo gráfico se ve que los rangos de uso de las PO son algo distintos. Por ejemplo los Jurados 1 y 2 en el Concurso 3 tiene una correlación lineal muy alta (rho >0.87) sin embargo también se ve que el Jurado 1 suele tener una valoración  significativamente (pval<0.001) menor que el jurado 2.


Esta cualidad de los datos hace que tomar el promedio para juntar las opiniones de los jurados no sea buena idea pues, si un jurado usa un rango muy grande, por ejemplo valora 1 a los malos, 5 a los medios y 10 a los buenos, y otro jurado usa  4 para los malos, 5 para los medios y 6 para los buenos el promedio de las valoraciones lo único que hará es tomar en cuenta la decisión del primer jurado pues en el caso donde haya mayor discrepancia de opiniones pesará más la del primer jurado.

Por ejemplo si cierta PO el jurado X la evalúa como buena (10) y el jurado Y como media (5), el promedio de estos dos seria 7.5, ahora si el jurado Y la puntua como mala (4) la valoración promedio será 7.  En caso contrario, si el jurado X con el rango grande vota otra cosa, por ejemplo que es mala (1) y el jurado Y que es buena el promedio seria 3.5, ponderando más la decisión del jurado X en ambos casos. Si bien este problema está mitigado si la correlación entre jurados es alta, esto no garantiza nada pues para los pocos sujetos que haya discrepancia una opinión valdrá de igual manera más que otra.

Otro problema que encontramos de usar el promedio es cómo proceder frente a los casos donde un jurado se abstiene de calificar de un candidato. El problema es similar al anterior, en los casos donde se usen distintos rangos la abstención puede mover la valoración de un participante sustancialmente rompiendo con el orden relativo que tiene el candidato para los demás jurados.

Por ejemplo, supongamos que el concursante A, dio una PO media y hay consenso en esto, entonces el jurado Z (que suponemos usa un rango de 7 a 9 para calificar) le otorga un 8, el jurado T (q se comporta como Z) le otorga otro 8 y por otro lado, el jurado W (que suponemos usa el rango [2,3,4]) lo califica con algún valor cercano a 3. El promedio de estas valoraciones son: (3+8+8) / 3 = 6.33, de este modo todos los candidatos con PO promedio van a moverse en torno al 6.33, sin embargo, si el jurado W se abstiene de evaluar al candidato, el promedio del candidato se va a 8 puntos ( (8+8)/2 ). Esta distorsión hace que un candidato promedio que tiene en promedio una PO entorno al 6 ahora tenga uno entorno a 8.  Mucho mayor al promedio de los candidatos con consenso de PO alta.

Si bien este ejemplo de juguete es extremadamente exagerado, vimos, cuando probamos el promedio como medida primera, que ocurren este tipo de distorsiones con algunos candidatos y nos dimos cuenta que eran producto de los distintos usos de las escalas de valoración (muchos más sutiles que el ejemplo de juguete).

En el caso de un concurso real, si tomamos el Concurso 3 y simulamos una abstención al azar de un jurado al azar vemos la siguiente distribución de cambios del orden de mérito (si repetimos el experimento 30K veces partiendo cada vez del estado inicial)
Es decir, cualquier abstención al azar cambia por lo menos en una posición a los candidatos (tomamos el valor de cambio de posiciones del primer candidato con cambio en la posición más alta), un 6% de las veces genera un cambio de 2 posiciones, un 3%  de 3 posiciones y 2% cambios de 4 posiciones o más. En datos reales se ve que la influencia de las abstenciones es mucho menor que en el ejemplo de juguete, sin embargo hay posiciones donde cambiar en uno la posición es quedarse sin cargo.  

Una solución posible: normalizar

Como solución para mitigar este efecto, propusimos normalizar las series de los jurados primero y luego tomar el promedio. Par eso probamos usando z-score. Z-score esencialmente consiste en normalizar con la siguiente formula: Para cada valor de una serie se resta la media y se divide por el desvío estándar. Las propiedades que tiene esta cuenta son claras, primero al restar se centra la media a 0 y al dividir por el desvío, normalizamos el rango de dispersión de la muestra.

Haciendo el mismo experimento de abstenciones al azar, pero con los datos reales del concurso 3 se ven los siguientes cambios:


Sin normalización
Z-score
Sin cambios
0 %
43 %
Un cambio
89 %
46 %
Dos cambios
6 %
6%
Tres cambios
3 %
3%
4 cambios o más
2 %
3%

Esta tabla muestra que la normalización por z-score disminuye mucho las distorsiones de las abstenciones aumentando mucho la cantidad de casos donde no cambia el orden de merito por una abstención al azar. Por supuesto tal vez haya una mejor forma de hacer estar normalización pero entre que tomamos la prueba de oposición y cerramos el dictamen tuvo que pasar poco tiempo y nos conformamos con esta.

lunes, 19 de septiembre de 2016

Concurso Dpto Computacion/Exactas: predicción de orden de mérito


En la facultad de Ciencias Exactas y Naturales de la Universidad de Buenos Aires existen concursos docentes. Para conseguir un cargo los aspirantes luego de juntar ciertos requisitos compiten contra otros candidatos. El concurso se basa en cuantificar distintas categorías de la experiencia del aspirante (antecedentes docentes, de extensión, científicos, calificaciones, etc) y una prueba de oposición donde el concursante debe performar alguna tarea establecida por el jurado. Dependiendo del cargo que se concursa dicha tarea va desde presentar la resolución de un ejercicio hasta presentar el plan de práctica de una materia.

El cargo de ayudante de 2da tiene dos particularidades: los aspirantes deben ser alumnos y la duración del cargo es de 1 año por lo que para sostener el mismo deben concursar anualmente. En el departamento de computación los concursos están separados en 3 áreas con aproximadamente 45 cargos regulares en total. En el 2015  quedaron los distintos órdenes de mérito aproximadamente 140 personas. Teniendo en cuenta que la prueba de oposición más la discusión del jurado dura al menos 15-20 minutos y que en cada concurso hay 3 jurados, se dedicaron entre 100 y 140 hs hombre (sin contar el extenso trabajo previo de cuantificar los antecedentes), 3.5 semanas laborables completas (40 hs semanales).

Como la información de los concursos es pública nos preguntamos si existe alguna regularidad en los dictámenes entre aspirantes y año tras año.

Distribución en el orden de mérito de concursantes con y sin experiencia en concursos previos.


Tomando como ejemplo el concurso de ayudante de 2da área algoritmos para 2013, 2014 y 2015 se puede medir cómo se distribuye el orden de mérito en función a si el concursante tiene experiencia en concursos del área o concursa por primera vez.  En principio las tasas de concursantes nuevos, es decir sin experiencia, es la siguiente:



Año
Tasa de concursantes sin experiencia
2013
0.3606
2014
0.5571
2015
0.4492


Teniendo en cuenta esto y que dicho concurso hay 20 cargos podemos separar el orden de mérito en los que obtienen un cargo regular (los primeros 20) y los que no (desde la posición 21 en adelante). Cabe aclarar que después terminan obteniendo cargo más aspirantes ya sea por renuncias o por nominaciones interinas.

Los nuevos candidatos se distribuyen muy distinto en los dos grupos (los que obtienen cargo vs los que no) acorde a lo esperado.

Sobre aspirantes sin experiencia

Obtuvieron cargo
No obtuvieron cargo
2013
12%
88%
2014
10%
90%
2015
14%
86%

Esto confirma  lo esperado, ingresantes nuevos se distribuyen no uniformemente quedando más atrás en el orden de méritos de los concursos.

¿Somos consistentes en el tiempo? ¿Mejoramos?


Otra pregunta que nos preguntamos fue si existe una correlación en cada aspirante entre concursos consecutivos. Es decir, si en el 2013 un concursante salio ultimo ¿Es esperable que en el siguiente salga primero? Si otro salió 5to en el 2013 ¿Es esperable que salga en la posición 70 en el 2014? Para contestar esto armamos la relación <posicion concurso anterior, posición concurso actual> para todos los sujetos (a su vez armamos la misma relación pero normalizando la posición en el concurso por la cantidad de concursantes)


Los datos muestran que existe una correlación positiva (pearson rho >0.68, pval<10^-15) indicando que se mantiene cierto orden en el tiempo. Esto significa que si en un un concurso un aspirante quedó en la posición 10 es en el próximo probablemente quede cerca de la misma posición y lo mismo ocurriría para aquel que quedó al final del orden. Sin embargo, si bien el comportamiento tiene esta pinta también muestra que los aspirantes mejoran con el tiempo (más antecedentes y/o mejoran en la prueba de oposición) . De hecho la recta que mejor fitea los datos de ay2 algoritmos tiene  es:

posicion_nuevo_concurso = posicion_concurso_anterior * .72 + 1.98

Suponiendo que tenemos 70 inscriptos en el concurso constantemente para los dos años.
Si en el 2013 un aspirante salió en la posición 60 (osea casi a lo último), este modelo predice que en el 2014 el mismo aspirante saldrá (o salió) en la posición 45. Si otro salió, en el 2013, en la posición 20 el modelo propone que en el 2014 el aspirante saldría en la posición 16/17.

Para testear la validez de este “modelo” performamos validación cruzada de 5 folds reportando un r^2 promedio es 0.46 con una varianza de 0.07.

Para analizar cómo mejoran los concursantes en el tiempo, tomamos todos los aspirantes a concursos de ayudante de 2da con 4 concursos en el mismo área (15).

Tomando la media por concurso por sujeto podemos caracterizar la curva promedio de mejora donde se aprecia lo esperado, inicialmente mejoramos rápidamente y luego disminuye la velocidad, lo que es esperable pues el top10 del ranking tiene mucho menos rango que las últimas 10 posiciones.

Automatización de orden de mérito


Dada las regularidades que ya reportamos nos preguntamos que resultaría de ordenar los aspirantes automáticamente.

La primera prueba que hicimos fue preguntarnos cómo nos va seleccionando a los ganadores. Para eso definimos la siguiente estrategia: Tomamos la lista de aspirante del concurso actual sin orden e  intersecamos con la lista con el concurso anterior respetando el orden del concurso anterior. Devolvemos como nuevo orden esta lista y luego los restantes en cualquier orden. Esta idea trivial genera los siguiente resultados para los concursos de ayudante de 2da algoritmos.

Sobre los 20 ganadores
Año
Precisión
Chance
2013
65%
28%+-4%
2014
60%
29%+-4%
2015
80%
33%+-4%

Los valores de chance son los obtenidos al comparar nuestra estrategia con distintos órdenes al azar. Esta comparación la reportamos para tener idea de cuán bien funciona nuestra estrategia.

La siguiente prueba que hicimos fue intentar regresionar la posición de cada concursante en el orden de mérito.  Para eso enriquecimos un poco más cada aspirante con los siguientes atributos:

  • Cantidad de concursos anteriores (en cualquier área)
  • Si ya concurso como ayudante de primera
  • La media en las posiciones relativas en concursos anteriores
  • El desvío estándar en la posición relativa en concursos anteriores
  • La media de la derivada de las posiciones relativas en concursos anteriores
  • La posición en el concurso inmediatamente anterior

Tomando estos atributos haciendo una regresión no lineal en el mismo esquema de validación cruzada de 5 folds obtenemos un r^2 de 0.6145, mucho mejor que con el modelo lineal y más simple.

En resumen, tener bien formateados los datos para hacer análisis de este tipo puede resultar interesante. Lamentablemente no contábamos con los valores para cada categoría del concurso (antecedentes docentes, extensión, etc…) , con esto podría haberse estudiando el efecto de sobre ajustar la performance de la prueba de oposición al jurado, práctica que se ejerce comúnmente. A su vez, estudiar el sesgo que ponen los jurados al usar distintos rangos para cada categoría.

Algunas ideas de que mirar y cómo medirlo fueron pensadas y discutidas con Edgar Altszyler