【问题标题】:How to normalize unix timestamps to sum to discrete numeric values?如何标准化 unix 时间戳以求和为离散数值?
【发布时间】:2021-12-14 17:00:10
【问题描述】:

我有一个“理想”公式,其中我有一个像这样的值的总和

score[i] = SUM(properties[i]) * frequency[i] + recency[i]

properties 是值向量,frequencyrecency 标量值,取自给定的 N 个项目数据集。虽然这里的所有变量都是数字且具有离散整数值,但recency 值是给定时间范围内的 UNIX 时间戳(例如从现在开始 1 个月,或者从现在开始 1 周,等等)。

在数据集中,每个项目i都有一个表示为recency[i]的日期值和一个频率值frequency[i],以及列表properties[i]。因此,item[i] 的所有属性都会在建议的时间范围内以recency[i] 表示的每一天进行评估。

根据此公式,item[i] 的新近度对 score 值的贡献是负贡献:时间戳越旧,得分越高(因此+ 在该公式中签名)。

我的想法是在给定范围内使用重新缩放方法,例如

scaler = MinMaxScaler(feature_range=(min(recencyVec), max(recencyVec)))
scaler = scaler.fit(values)
normalized = scaler.transform(values)

其中recencyVec 收集每个数据点的所有recency 向量,其中min(recencyVec) 是第一天,max(recencyVec) 是最后一天。

使用 scikit-learn 对象 MinMaxScaler,因此通过将每个特征缩放到给定范围来转换 recency 值,如如何 Normalize and Standardize Time Series Data in Python 中所建议的那样

这是这个数值公式的正确方法吗?当与其他离散数值相加时,哪种替代方法可以标准化时间戳值?

【问题讨论】:

    标签: python time-series timestamp unix-timestamp


    【解决方案1】:

    recency 那么是绝对的 UNIX 时间戳吗?还是您已经减去当前时间戳?如果不是,那么根据您的目标,只需从recency 中减去当前的 unix 时间戳就足够了,这样它就可以一致地描述“从现在开始的秒数”,或者时间增量而不是绝对的 unix 时间。 当然,这会产生相当大的分数,但会保持一致。

    您使用什么缩放取决于您的目标(什么是可接受的score?),但只要它们是单调的,许多都是有效的。除了最小-最大缩放(我建议使用0 作为最小值并将最大值设置为某个已知的最大时间偏移量)之外,您可能还需要考虑对数转换。

    【讨论】:

    • recency 是一个 unix 时间戳数组:[1621250658000, 1619371761000, ...]。对于score 的可接受值,我没有具体的参考。它旨在更加重视最近的项目,并与 frequency 字段(它是文档更新的计数器)与所有可用属性的总数成正比。
    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 2016-01-21
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2018-12-19
    • 2011-02-20
    相关资源
    最近更新 更多