Хорошая формула почти наверняка будет иметь некоторые произвольные параметры, которые требуют настройки. (Чтобы понять почему, обратите внимание, что вам нужен тот же результат, независимо от того, обозначено ли расстояние в метрах, где 500 - довольно небольшое значение, или в километрах, где 500 - довольно большое значение.)
Для средних и больших значений, я догадываюсь, что вам понадобится логарифмическая шкала; разница между 1 км и 2 км кажется довольно сходной с разницей между 100 км и 200 км (а не с разницей между 100 км и 101 км), а разница между 3 днями и 6 днями кажется довольно сходной с разницей между 30 и 60 днями (а не с разницей между 30 и 31 днями). Это означает что-то вроде
оценка = a log d + b log t
(где более низкий балл означает, что сообщение более актуально).
Однако, поскольку логарифмы расходятся к отрицательной бесконечности для чрезвычайно малых значений, вам необходимо настроить это для действительно малых значений; Вы не хотите, чтобы слова «прямо здесь, год назад» и «другая сторона Земли, ноль секунд назад» считались более актуальными, чем «тридцать метров назад, десять минут назад». Один из способов - добавить немного смещения, чтобы вы не брали логарифмы очень маленьких значений:
счет = a журнал ( d + 1) + b журнал ( t + 1)
Уверен, вы обнаружите, что со временем вам придется больше настраивать. Мне будет интересно услышать, что вы придумали!