Sunday, December 15, 2013

Hipótesis nula, significación estadística, valor p, et al.

Voy a comentar cómo entiendo yo (se aceptan correcciones) todos estos términos, más que nada para acordarme en un futuro ya que no son conceptos con los que trabaje todos los días.

Digamos que quiero probar si un nuevo medicamento sirve para tratar la alergia.

Hipótesis nula (H0): El medicamento no sirve para tratar la alergia
Hipótesis alternativa (H1): El medicamento sirve para tratar la alergia

Tal como se observa, la hipótesis nula es la negación de la hipótesis que realmente queremos validar, asumiendo que no hay relación entre el uso del medicamento y la mejora de alergia. Es decir, que no hay relación entre dos fenómenos observados.

Para validar la efectividad del medicamento se trata de validar H1 rechazando H0.
Si nos fijamos ambas son mútuamente exclusivas, si se cumple H0 se rechaza automáticamente H1 y viceversa.

Por ejemplo, hay 1000 pacientes, a 500 que forman el grupo 1 (G1) le suministro el medicamento y a los otros 500 que forman el grupo 2 (G2) le suministro placebo.

Calculo un parámetro en ambos grupos que represente la mejoría, por ejemplo la reducción media de crisis alérgicas (u). En este caso tendremos u1 y u2.
Por lo tanto, las hipótesis se pueden formular de la siguiente manera:

H0: u1<=u2  (La mejoría en ambos grupos en similar o incluso el grupo tratado con el medicamento G1 empeora)
H1: u1>u2 (El grupo tratado con el medicamento G1 mejora)

Imaginemos que:
u1 = 0.2 (el grupo 1 ha experimientado de media un descenso del 20% en el número de crisis alérgicas)

¿Esto qué significa? ¿Podemos anunciar el éxito del medicamento? Para resolver esto entra en juego la significación estadística, es decir, vemos que que existe mejoría pero ¿es realmente debida al medicamento? o por el contrario ¿se debe al azar?

Para dar por válida nuestra hipótesis H1 (el medicamenteo es efectivo) se trataría de rechazar H0 (no hay mejoría por el uso del medicamento). Para ello, en primer lugar calculamos el valor p (p-value) que es la probabilidad de obtener un resultado al menos tan extremo como el que se ha obtenido suponiendo que la hipótesis nula es cierta. 

En este caso se trataría de calcular el valor p que podría plantearse como: ¿Cuál es la probabilidad de que cogiendo a 500 personas al azar y administrándole placebo se observe una mejoría del 20% o mayor? Decir que se administre placebo es suponer que la hipótesis nula es cierta, no existe relación entre la toma del medicamento y las mejorías observadas. A continuación, por convención se dice que si el valor p es menor de 0.05 (umbral representado por la letra alfa), se rechaza la hipótesis nula H0 afirmándose que la hipótesis de partida H1 es cierta.

Para calcular en este caso el valor p, obviamente se necesitan datos que desconozco, pero imaginemos los siguientes valores p:

p=0.01
En este caso estamos diciendo que seleccionando a 500 personas al azar a las que le administramos placebo, la probabilidad de que se observe una reducción mayor de un 20% en el número de crisis alérgicas es del 1%. Como 0.01<0.05, rechazamos la hipótesis nula que vendría a decir que el 20% de mejoría observado al administrar el medicamento es altamente improbable que se deba al azar y por lo tanto se debe al medicamento.

p = 0.9
En este caso, existe una probabilidad del 90% que seleccionando 500 personas al azar y administrándoles placebo consigan reducir el número de crisis alérgicas al menos un 20%. Es un ejemplo "irreal" que representa un caso extremo. En este caso no se puede rechazar la hipótesis nula ya que 0.9 no es menor de 0.05. Sin embargo tampoco se puede aceptar. Lo que estaríamos diciendo es que es bastante probable observar descensos del 20% en el número de crisis alérgicas en grupos de personas seleccionadas al azar tras administrar placebo. Por lo tanto, que suministremos un nuevo medicamento y observe un 20% de mejora no es significativo (parece deberse al azar, es decir, con placebo también se observaría).

Tuesday, November 19, 2013

Adapted Bayesian Knowledge Tracing (Brute Force) BKT-BF

I adapted the original Bayesian Knowledge Tracing (Brute Force) BKT-BF code (www.columbia.edu/~rsb2162/BKT-BruteForce.zip) to allow data in chronological order but not necessary sorted on Skill and Student (can be mixed). Moreover, the dataset can have free number of columns in any order and any separator (coma, tab, etc.)

I didn't tested it thoroughly but at least it works for my needs.

Parameters (1 is the first one): 
  skillPos = Skill column position 
  studentPos = Student column position
  rightPos = Right column position
  separator = Separator (comma(,) , tab(tab), etc.)

$> java ComputeKTparamsAll ./data.txt 4 3 6 tab

In  this example, it gets the model from the data.txt dataset where the skill column is the 4th, student column is the 3rd, right column is the 6th and the columns are separated by tab.







Thursday, June 20, 2013

Técnicas LSH (Locality Sensitive Hashing)


En I2Talentia necesitamos buscar relaciones en grandes cantidades de datos, habitualmente textos que componen los distintos cursos. La búsqueda de relaciones entre datos es un asunto ampliamente estudiado en el ámbito de la Ingeniería del Software. Cuando el volumen de datos es relativamente pequeño, es sencillo encontrar estas relaciones mediante técnicas convencionales, basadas en la comparación e iteración de los elementos entre sí. Sin embargo, cuando el volumen de datos es considerable este tipo de aproximaciones no son adecuadas ya que el tiempo de procesamiento es excesivo e inaceptable.

Una de las técnicas empleadas para la resolución de este tipo de problemas es la estrategia Locality Sensitive Hashing (LSH) basada en la asociación de un mismo Hash a datos similares frente al comportamiento clásico de una función Hash, que evita colisiones entre los datos de entrada. Por lo tanto, con LSH elementos similares se clasificarán dentro del mismo “cubo” con una alta probabilidad. Es importante la apreciación de "alta probabilidad" ya que existe la posibilidad de que dos elementos muy parecidos caigan en cubos distintos por lo que a la hora de usar técnicas de LSH debe tenerse esto en cuenta.

La formulación matemática del problema es bastante compleja de manera que mediante ejemplos gráficos sencillos trataré de explicar brevemente en qué consiste la técnica LSH. En ningún caso trato de cubrir todos los aspectos de LSH, es simplemente un ejemplo de aplicación.

Imaginemos una nube de puntos que definidos como un par de coordenadas (x,y) para los que necesitamos encontrar aquellos puntos que son similares (próximos en distancia) a uno dado. Comparar iterativamente las distancias entre el punto objetivo y el resto es aceptable, como anteriormente comenté, cuando el número de puntos es relativamente pequeño. Sin embargo, si tuviéramos una nube de millones de ellos, esta solución no es nada eficiente.

Para abordar este problema usando la estrategia LSH, deberemos dividir el espacio dimensional (plano en este caso) en distintas regiones. En este ejemplo dividiré el plano en cuadrículas de igual tamaño aunque sería válida cualquier otro tipo de división.

Tal como se muestra en la figura, cada punto está contenido en una y sólo una cuadrícula. Si necesitamos obtener los puntos similares respecto a uno dado, simplemente identificaríamos todos aquellos que están en la misma cuadrícula o dicho de otro modo, aquellos que tienen el mismo valor de Hash.

A continuación describiré el procedimiento para analizar la similitud de un punto respecto a otro dato. Para ello utilizaré el concepto de vector cuyas coordenadas indicarán si un punto sobrepasa un determinado lado de estas cuadrículas en las que he dividido el espacio.



Al punto identificado en la figura de color verde, le asignaríamos un valor de Hash 11101100 en el que las primeras cuatro cifras se corresponderían con valores asociados al eje X y las siguientes cuatro al eje Y. El razonamiento para calcular el Hash de un punto es el siguiente:

Respecto al eje X, el punto verde está más a la derecha que los lados 1,2,3 y a la izquierda del lado 4, por tanto su valor sería 1110.

Siguiendo un razonamiento similar para el eje Y, el punto verde está más abajo de los lados 1,2 y más arriba de los lados 3, 4 siendo por tanto su valor 1100.

Uniendo ambos valores resultaría el valor del Hash 11101100.

De este modo, queda claro que los tres puntos rojos de la figura que están dentro de la misma cuadrícula compartirán el mismo valor de hash 11001100.

Si creamos un índice inverso que relacione hashes con los puntos ya tenemos todo lo necesario.

El índice inverso de este ejemplo sería:

11001100 = punto rojo 1, punto rojo 2, punto rojo 3
11101100 = punto verde
11111111 = punto negro

Si necesitásemos obtener los puntos parecidos a un nuevo punto muy cerca de los tres puntos rojos, simplemente calcularíamos el valor del Hash de este punto que, con alta probabilidad, sería también 11001100. Finalmente, a través del índice inverso obtendríamos los puntos rojos 1,2 y 3.

Tal como se observa esta operación es realmente ligera aún cuando el volumen de datos fuese enorme, millones o incluso billones de puntos.

Con este mecanismo, también sería posible calcular la similitud entre puntos que pertenezcan a distintas cuadrículas haciendo uso de lo que se denomina la distancia de Hamming que no es más que el número de posiciones en los que dos series (vectores) tienen distintos valores.

Por ejemplo, ¿cómo de distintos son los puntos rojos?

Punto rojo 1 = 11001100
Punto rojo 2 = 11001100
Punto rojo 3 = 11001100


La distancia de Hamming es 0 ya que todas las posiciones de los tres puntos tienen el mismo valor. Por tanto, decimos que los puntos son "iguales" en el sentido de que pertenecen a la misma cuadrícula.

La diferencia entre un punto rojo y el punto verde es:
Punto rojo 1 = 11001100
Punto verde  = 11101100

Sólo difieren en la tercera posición por lo que su distancia es 1.

La diferencia entre un punto rojo y el punto negro es:
Punto rojo 1 = 11001100
Punto negro  = 11111111

Difieren en la tercera, cuarta, séptima y octava posiciones por lo que su distancia es 4.

Claramente un punto rojo es más parecido al punto verde (distancia 1) que a al punto negro (distancia 4).

Ahora bien, ¿para qué puede ser útil buscar la similitud entre puntos? Bueno, a raíz de esta pregunta no se me ocurren demasiadas aplicaciones. Sin embargo, vamos a aplicar inteligencia lateral y darle la vuelta a la pregunta, ¿qué cosas podría querer comparar que puedan modelarse como puntos? Ahora sí que puedo ver aplicaciones prácticas.

Si por ejemplo en vez de X le llamo edad y en vez de Y le llamo nota, un punto podría ser una abstracción de un alumno de una determinada edad y una nota media = (edad, nota). Si parto de un alumno del que conozco su edad y su nota media y necesitara obtener todos los alumnos que tienen edades similares (no necesariamente la misma) y notas similares (no necesariamente la misma), podríamos aplicar los mismos conceptos vistos anteriormente para obtenerlos de forma rápida y sencilla.

Además, no tenemos por qué quedarnos en un espacio bidimensional, podemos usar el número de coordenadas que necesitemos, por ejemplo (x,y,z) o (x,y,z,h). Podemos por ejemplo, clasificar alumnos en función de la edad, nota y color de pelo o incluso de más categorías: edad, nota, color de pelo y nivel de estudios de sus padres. Los conceptos y aplicación de LSH serían los mismos.

Wednesday, May 29, 2013

Saber y Sabiduría

Después de un largo tiempo, retomo el blog aprovechando el comienzo de mi nuevo proyecto en el que me encuentro inmerso: I2Talentia, una plataforma de aprendizaje adaptativo muy interesante e innovadora.

Para el desarrollo de esta plataforma me encontré el pasado fin de semana con la necesidad de calcular ciertos parámetros de una elipse. Después de años en el colegio y tras estudiar una ingeniería en la universidad, estaba completamente en blanco, no sabía ni siquiera cómo empezar. No me quedó más remedio que empezar a tirar de Google para empezar a recordar: coordenadas polares, derivadas, métodos numéricos, etc. Conceptos que aprendí en su día perfectamente pero que ya tenía olvidados, entre otros motivos, por no usarlos. Esto me llevó a pensar en que pasamos años estudiando cosas que al final se terminan olvidando porque no se usan en la vida real o porque realmente no aprendes, simplemente memorizas conceptos, reglas y fórmulas que el día del examen sueltas como un papagayo y se acabó, via libre para el olvido.

Para mí, en el sistema educativo actual, lo que se enseña es a Saber. Es decir, te enseñan a usar ciertas fórmulas y técnicas para resolver unos determinados tipos de problemas. Esto no dista mucho de memorizar. De ahí las típicas quejas de los alumnos, "para qué me sirve esto", "no entiendo por qué, pero sé que tengo que resolverlo así", etc.

Por tanto, el alumno adquiere Saber, pero no tiene Sabiduría. La sabiduría es un paso más, es saber por qué las cosas son cómo son, saber cómo aplicar lo que has aprendido, saber extrapolar a otros ámbitos de la vida que pueden no tener nada que ver. Cuando tienes sabiduría te das cuenta realmente que todas las piezas del puzzle encajan y que el engranaje funciona perfectamente. Si en las escuelas se enseñara Sabiduría, la motivación y nivel de aprendizaje aumentaría sustancialmente permitiendo a la larga que la gente aproveche esa Sabiduría para innovar, algo realmente necesario en los días que nos ha tocado vivir.