viernes, 12 de febrero de 2016

Una metodología para fomentar la innovación cuando la rutina nos consume (agile personalizado)

Antes de empezar:
Esta metodología que propongo tiene aspectos de la metodología AGILE  https://info.bbva.com/es/noticias/ciencia/tecnologia/metodologia-agile-la-revolucion-las-formas-trabajo  y de las experiencias Hackathon de Twitter (semana en la que los desarrolladores se concentran en un proyecto elegido por ellos) https://en.wikipedia.org/wiki/Hackathon

El problema: supongamos que tenemos dos tareas y una de ellas insume más tiempo del que quisiéramos. Generalmente a esta tarea la llamamos rutinaria y, en general, la otra es una tarea que probablemente aumente nuestra productividad pero sus beneficios no son inmediatos (lo más parecido a una inversión).

Ejemplos
  • Carlos trabaja como economista en un servicio de estudios económicos y entre sus responsabilidades están las de seguir las economías de Paraguay, Brasil y Argentina pero también tiene como tarea la de llevar a cabo proyectos de investigación sobre temas económicos. En su día a día, no le queda tiempo para investigar.
  • Luis trabaja en una empresa proveedora de materiales de construcción. Coordina las compras y los envíos a través de correos electrónico (la tarea rutinaria) y le encantaría dedicar tiempo para crearse unos filtros automáticos que organice con etiquetas los correos entrantes (la innovación) pero nunca le sobra tiempo para llevar a cabo su tarea innovadora.
La propuesta:

Partiendo del supuesto que cuando el trabajador va de vacaciones hay alguien reemplaza sus tareas, la idea sería la siguiente: 

      1. Se decide un tiempo determinado (un día, una semana, un mes, etc.) para llevar a cabo toda, o parte, de la actividad innovadora. Si es solo parte de la actividad, se deben definir bien los entregables (por ejemplo, para el caso del investigador, bajaré X datos o, en el caso del proveedor de materiales, crearé X filtros automáticos).

      2. En ese periodo de tiempo el trabajador (o grupo de trabajadores) se dedica al 100% a la tarea definida y son sus compañeros (los que habitualmente le hacen la suplencia cuando está de vacaciones) los que responden y se encargan de toda la actividad rutinaria.

      3. Al finalizar el periodo de tiempo preestablecido el trabajador explica sus resultados o avances, si no concluyó la tarea, los problemas que encontró y el porqué no pudo cumplir con la meta.

      4. El trabajador que estuvo con la tarea innovadora pasa a la tarea rutinaria haciendo además soporte a otro trabajador o grupo de trabajadores. Y así sucesivamente se convertirá en rutinario el trabajo de innovar. Salud!

Las variaciones:

Si no hay compañeros que hagan soporte de las tareas rutinarias uno tendrá que autoimponerse un periodo de tiempo determinado para esas tareas más innovadoras (quizás una hora al día o dos). En esas horas, está prohibido distraerse, móviles y correos apagados. Incluso les recomendaría la técnica Tomato http://tomato-timer.com/ que consiste en dividir todas las tareas diarias en trabajos intensivos de 25 minutos con descansos de 5.

También podemos indicarles a los trabajadores unas temáticas generales o simplemente dejarles que ellos elijan en qué quieren invertir ese tiempo (puede que el jefe no vea la utilidad directa de la tarea que ofrezca el trabajador pero la utilidad indirecta será que el trabajador podrá hacer algo que quiere y eso probablemente hará que se sienta mejor en la empresa y conlleve a una mayor productividad).

sábado, 6 de febrero de 2016

Una aplicación de Montecarlo en Stata

Una aplicación de Montecarlo
El problema: Supongamos que somos alumnos y un dia de clase el profesor nos sorprende con un examen de selección multiple que no penaliza por respuesta incorrecta (5 opciones). Si no hemos estudiado absolutamente nada ¿qué estrategia deberíamos seguir para maximar las respuestas correctas?
Las opciones son:
  • En cada pregunta elegir una respuesta al azar (la llamaré estrategia aleatoria)
  • En la primera pregunta elegir al azar una respuesta y luego seleccionar la misma opción en todas las demás preguntas (la llamaré estrategia fija).
La intuición destrás de la estrategia fija se entiende mejor con una analogía: tenemos a un niño que tiene los ojos vendados y se está moviendo de un lado para el otro para que no le mojemos con una pistola de agua. La estrategía fija aquí es apuntar a un punto determinado y seguir tirando agua en esa dirección con la esperanza de que en algún momento le acertemos.
La idea es hacer un experimento para verificar que esta estrategia es mejor y para eso usaremos el método de montecarlo. Este método consiste en definir unas condiciones probabilisticas y repetir un experimento muchas veces hasta que podamos verificar el comportamiento del estadístico que estamos analizando (por ejemplo, podemos probar como se comporta una regresión cuando no se cumple algunos de los supuestos o cuando la muestra es muy pequeña)
El programa en el cual lo he implementado es Stata y aquí está el código.
El resultado muestra que (asumiendo que no me he equivocado en el código), a pesar de lo que dice la intuición, ambas estrategias son igualmente buenas. En ambos casos tendrías de media un resultado de 20% sobre 100%, con mucha suerte 37% y en el peor de los casos un 6%. Así que la próxima vez que tengas este tipo de exámenes si no quieres ir cambiando la respuesta cada tanto, coloca todas la misma letra :).
summarize

    Variable |       Obs        Mean    Std. Dev.       Min        Max
-------------+--------------------------------------------------------
       fixed |     10000     .199851    .0400523        .08        .37
      random |     10000     .200168    .0400925        .06        .35

ttest fixed==random

Paired t test
------------------------------------------------------------------------------
Variable |     Obs        Mean    Std. Err.   Std. Dev.   [95% Conf. Interval]
---------+--------------------------------------------------------------------
   fixed |   10000     .199851    .0004005    .0400523    .1990659    .2006361
  random |   10000     .200168    .0004009    .0400925    .1993821    .2009539
---------+--------------------------------------------------------------------
    diff |   10000    -.000317     .000568    .0567989   -.0014304    .0007964
------------------------------------------------------------------------------
     mean(diff) = mean(fixed - random)                            t =  -0.5581
 Ho: mean(diff) = 0                              degrees of freedom =     9999

 Ha: mean(diff) < 0           Ha: mean(diff) != 0           Ha: mean(diff) > 0
 Pr(T < t) = 0.2884         Pr(|T| > |t|) = 0.5768          Pr(T > t) = 0.7116
**************************************************************************
*
* Autor: Diego José Torres Torres
* Purpose: Apply Montecarlo modelling to check what strategy is pareto superior in * a multiple choice exam when you haven't studied
* Strategy A: Choice randomly every possible answer
* Strategy B: Only choose randomly the first question, the remaining questions you * stick to whatever you have chosen in the first question
* 
**************************************************************************

drop _all
set more off
global nobs = 100 // 100 questions
global nmc = 10000 // number of montecarlo trials
set obs $nobs
gen true_answer = 0
gen strategy_random = 0
gen strategy_fixed = 0
gen score_random_strategy = 0
gen score_fixed_strategy=0

//////////////////////////////////
capture program drop multiplechoice // para borrar un programa definido
program multiplechoice, rclass
tempname sim
postfile `sim' fixed random using results, replace
quietly {
forvalues i = 1/$nmc {
noisily dis "Iteración: " `i'

replace true_answer = 1 + floor(5 * uniform()) // The correct answers

replace strategy_random = 1 + floor(5 * uniform()) // Random strategy
replace strategy_fixed = 1 + floor(5 * uniform()) if _n==1 // only the first question is random
  replace strategy_fixed =  strategy_fixed[1] if _n>1 // 

replace score_random_strategy = true_answer==strategy_random // 1 if you selected the right answer
replace score_fixed_strategy = true_answer==strategy_fixed // 1 if you selected the right answer

su score_random_strategy
scalar random = r(mean)

su score_fixed_strategy
scalar fixed = r(mean)

post `sim' (fixed) (random)

//drop true_answer strategy_random strategy_fixed score_random_strategy score_fixed_strategy // drop generated variables to the next loop
}
}
postclose `sim'
end

multiplechoice
use results, clear
 summarize

 ttest fixed==random
 
// No difference between strategies... :(