一、背景
在 DMP 的人羣畫像或者商品畫像等的應用中,有一類常見的打分需求:旨在基於一些 transactions,爲兩種關係打上一個歸一化的分數。比如基於一個用戶的購買商品行爲對該用戶購買類目意願打分,該文章討論如何在考慮時間因素的情況下給用戶打分。
二、要求
- transaction 發生的時間越近,其所佔的比重越大,且減小的速度越來越慢。
- 所有分數都需要正則化到 0-100 區間。
三、數據形式
輸入的數據(表示某人某天買了某個類目多少單):用戶 id、日期、類目 id、訂單數
最終產出數據:用戶 id 對每個類目的購買意願分
四、實現方式
1) 要求 transaction 發生時間和現在的距離越小,這條記錄越大,就像一個熱門事件,會被人慢慢遺忘,且後續遺忘的速度越來越慢。
基於這個需求,很容易讓人想到基於熱力學的牛頓冷卻定律:物體的冷卻速度,與當前溫度與室溫之間的溫差成正比。
換成數學語言表達:
其中H爲室溫,初始時刻的溫度爲:
其中α>0爲與物體有關的常數,爲負數表示當物體溫度高於室溫的時候,物體溫度會下降,但當物體溫度低於室溫的時候會上升。
對於上個公式,兩邊取積分:
eg: 人體在死亡後,溫度調節功能隨即消失,由此正常溫度(假設37)與室溫比較,利用牛頓冷卻定律可以獲得死亡時間。
假設某冬天早上,接到報警,街頭髮現流浪漢屍體,6:30AM測量其體溫爲18度,到了7:30AM,其體溫已經下降爲16度。
預備知識完了,現在我們回到業務:假設transaction發生當天的熱度爲100度
而180天之前的transaction我們假設降爲1度,又假設室溫爲0度,可以求出α:
2) 對分數(上面的sum_score)做歸一化。
假設對於sum_score,有最大值和最小值,如果差距過於大,會先對其做對數處理:
圖像爲:
該函數以原點爲中心,將實數集映射到值(0,1)且兩邊都是開區間。我們希望通過平移和拉伸,對於上面的 [ -15,2 ] 的區間映射做映射:
符合要求,然後 0-1 的分數再乘以 100,將其轉成 0-100 的歸一分數。
本文轉載自公衆號有贊coder(ID:youzan_coder)。
原文鏈接: