Una de las virtudes de las máquinas es que no olvidan. ¿Para qué sirve que lo aprendido pierda valor con el tiempo?. Para aprender datos que pueden cambiar con el tiempo. Por ejemplo hábitos, gustos e intereses. Realmente el concepto de olvidar es que con el tiempo la información aprendida pierda valor.
Supongamos que queremos hacer un algoritmo que valore aplicaciones según el valor de las votaciones de los usuarios, pero como las aplicaciones van cambiando con cada nueva versión queremos que los votos recientes cuenten más que los votos más antiguos. Es decir que el programa «olvide» el valor de los votos según pasa el tiempo. Para lograr este efecto. Cada voto lo multiplicamos por un valor que disminuye con el tiempo. De esa forma cuanto más tiempo hace que se votó menos valor tiene el voto.
Algunas fórmulas:
W(t) representa el peso del voto V tras t unidades de tiempo transcurridas desde que se voto. Las llamo «unidades de tiempo» porque para las fórmulas da igual que sean segundos, horas, días, días de Júpiter, una unidad de tiempo inventada,….
t son las unidades de tiempo desde que se votó.
V representa el valor del voto.
W(t) es el peso de ese voto en el instante t
k es una constante que determina como de rápido pierde valor el voto.
W(t) = 1-k*t

Para esta función k tiene que ser menos que 1.
La caída del valor el lineal
W(t) = 1/(k*t)

En este caso k tiene que ser mayor que 1 si es menor aumenta el valor de V en lugar de reducirlo. Cuidado también con valores de t pequeños
W(t) = k^t

En este caso k ha de ser menor que 1. A mayor valor tenga k más rápida será la perdida de valor con el paso del tiempo.
W(t) = e ^ -kt

Basta con que k sea positivo. A mayor valor de k más rápido cae el valor.
Permite ajustar la «vida media» (vm) que seria la cantidad de tiempo en que el valor V valdría la mitad. Para calcular el k necesario para tener esa vida media basta con hacer la siguiente operación:
k = ln 2 / vm
Por ejemplo si queremos una vida media de 3 unidades de tiempo:
k = ln 2 / 3 = 0,23104906
Una vez tenemos el valor actualizado de cada voto lo único que hay que hacer es sumarlos.
Como se usa
Ahora que tenemos un función W(t) que nos calcula el peso de cada voto cuando tiene una antiguedad t . Podemos calcular el valor obtenidos de todos los votos como:
Σ Vi * W(ti) / Σ W(ti)
Veamos un ejemplo sencillo, tenemos un voto reciente (t = 0) que le da 4 estrellas mientras que hay otro que le da 5 estrellas de hace tres versiones (t = 3). Consideremos que cada vez que se sube una nueva versión el tiempo avanza una unidad. Para calcular el peso del voto vamos a usar la función: W(t) = e ^ -kt con k=0,23104906 (vida media = 3)
(4 * W(0) + 5 * W(3)) / (W(0) +W(3)) = (4 * 1 + 5 * 0.5) / (1 + 0.5) = 4.33
Si todos los votos valieran lo mismo el valor seria de 4.5. Podemos ver como el voto más reciente «cuenta más».
Un último consejo es que borrar aquellos votos cuyo peso caiga por debajo de un mínimo para reducir los cálculos.
Pingback: Simular la curva del olvido | Construyendo a Chispas