Tengo una fórmula "ideal" en la que tengo una suma de valores como
score[i] = SUM(properties[i]) * frequency[i] + recency[i] siendo properties un vector de valores, valores escalares de frequency y recency , tomados de un conjunto de datos dado de N elementos. Si bien todas las variables aquí son numéricas y con valores enteros recency , el valor de actualidad es una marca de tiempo UNIX en un intervalo de tiempo determinado (como 1 mes desde ahora, o 1 semana desde ahora, etc. diariamente).
En el conjunto de datos, cada elemento i tiene un valor de fecha expresado como actualidad recency[i] y un valor de frequency[i] y las properties[i] . Por lo tanto, todas las propiedades del item[i] se evalúan cada día expresado como actualidad recency[i] en el intervalo de tiempo propuesto.
De acuerdo con esta fórmula, la contribución de la actualidad al valor de la score del item[i] es una contribución negativa: cuanto más antigua es la marca de tiempo, mejor es la puntuación (de ahí el signo + en esa fórmula).
Mi idea era usar un enfoque de reescalado en el rango dado como
scaler = MinMaxScaler(feature_range=(min(recencyVec), max(recencyVec))) scaler = scaler.fit(values) normalized = scaler.transform(values) donde recencyVec recopila todos los vectores de recency para cada punto de datos, donde min(recencyVec) es el primer día y max(recencyVec) es el último día.
usando el objeto scikit-learn MinMaxScaler , por lo tanto, transformando los valores de recency al escalar cada función al rango dado como se sugiere en Cómo normalizar y estandarizar datos de series temporales en Python
¿Es este el enfoque correcto para esta formulación numérica? ¿Qué enfoque alternativo puede ser posible para normalizar los valores de marca de tiempo cuando se suman a otros valores numéricos discretos?
¿Es la recency entonces una marca de tiempo absoluta de UNIX? ¿O ya restas la marca de tiempo actual? De lo contrario, dependiendo de su objetivo, podría ser suficiente simplemente restar la marca de tiempo actual de Unix de recency , de modo que describa consistentemente "segundos a partir de ahora", o el tiempo delta en lugar del tiempo absoluto de Unix. Por supuesto, eso crearía una puntuación bastante grande, pero será consistente.
La escala que utilice depende de su objetivo (¿cuál es una score aceptable?), pero muchas son válidas siempre que sean monótonas. Además de la escala mínima-máxima (donde sugeriría usar 0 como mínimo y establecer el máximo en algún desplazamiento de tiempo máximo conocido), también puede considerar la transformación de registro.