Algoritmos que “olvidan” con el tiempo

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 agente que recomiende noticias para ello tiene en cuenta dos parámetros. El tema de la noticia y su popularidad. Vamos a suponer que la primera parte ya está hecha y estamos peleando con la segunda. La idea es valorar la importancia de una noticia por el número de lectores que tiene. Pero no basta solo con eso. Las noticias pierden importancia con el tiempo, por lo que tenemos que ser capaces de incluir eso en nuestro sistema.

Podemos ver cada lector como un voto a favor de la noticia, ahora hemos de tener en cuenta la antigüedad del voto para valorarlo según esta. El truco es que el voto solo cuenta como un voto durante un periodo de tiempo desde que “votó”. 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:

V(t) representa el valor del voto V en t unidades de tiempo después de que se votará. 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.

k es una constante que determina como de rápido pierde valor el voto.

V(t) = V – k*t

V(t) = V – k * t     En rojo k = 0,2 En azul k = 0,5

Para esta función k tiene que ser menos que 1.

La caída del valor el lineal

V(t) = V/(k*t)

V(t) = 1/(k*t)   K = 2

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

V(t) = V * k^t

Vt) = V * k^t         En negro k = 0.9 en rojo k = 0.5

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.

V(t) = V * e ^ -kt

V(t) = V * e ^ -kt     En azul  k = 2 en verde k = 1

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.

Un último consejo es que aquellos votos cuyo valor caiga por debajo de uno que consideremos mínimo se borren o al menos no se tengan en cuenta, ya no aportan nada y así se reducen los cálculos necesarios