2017-02-16 31 views
0

假設我們有以下Web訪問日誌。通過訪問時間戳進行聚類

timestamp     page_visted 
====================================== 
2017-01-02 10:00:02   /xxx/a.html 
2017-01-02 10:00:06   /xxx/b.html 
2017-01-02 10:01:03   /xxx/c.html 
2017-01-02 10:02:02   /xxx/d.html 
2017-01-02 15:00:02   /xxx/a.html 
2017-01-02 15:01:10   /xxx/b.html 
2017-01-02 15:03:05   /xxx/c.html 

該用戶訪問我們的網站2次,並訪問了7頁。我的問題是「知道他訪問我們的網站多少次而不是訪問了多少頁面的最佳方式是什麼?」

因爲用戶可能會訪問不同數量的頁面併爲每次訪問花費不同的時間,因此很難設置固定數量或間隔來對這些記錄進行分組。有沒有算法根據它們的時間戳對這些記錄進行分組(聚合)?謝謝。

+0

你訪問日誌還包含用戶ID的我假設? – mtoto

+0

如果您有任何登錄頁面或提供身份驗證的任何頁面,那麼您只能計算這些值。 – Knight71

+0

@ Knight71這是一個好主意,只要沒有'記住我'選項 – ImDarrenG

回答

0

會話的開始/結束

一個簡單的方法是隨便挑一個數字,表示會議已經結束,我已經看到了20分鐘閒置用來顯示會話已經結束。

一個更健全的方法涉及將此視爲probabilistic problem,因爲沒有固定的會話長度或會話之間的固定時間量。

你需要做的第一件事就是看數據。特別是到達時間。你有一個page_visited事件的列表。您需要繪製以秒爲單位的到達間隔時間分佈(頁面訪問間隔時間)。

一個公平的假設是,分佈看起來Poisson-like,或者這將是泊松等,但是如果additional humps會話間的時間的確聚集。

如果數據顯示一個很好的Poisson distribution,一個簡單的方法是直接使用訪問時間的分佈。

通過根據您到達時間間隔分佈中的用例適用percentile,您可以確定一個相當有用的閾值,高於該閾值時,到達時間間隔表明新會話已開始。

或者,如果它更有用,則可以使用分佈來獲得觀察到達時間間隔的概率,並以低概率指示新會話的開始/結束。

更復雜的是,如果分佈是雙模式的,比如說,因爲人們傾向於以相似的方式來分隔他們的會話。如果是這樣,在到達時間間隔內,您可能會更簡單地探索一個簡單的聚類算法,如k-means,您可能期望一個羣集進行會話內訪問,一個羣集進行會話間訪問。

伯爵會議

一旦你在適當的方法到達,以確定不同的會議,這是一個簡單的例子來分配一個唯一的密鑰,按每個用戶會話和計數的唯一鑰匙。

+1

也許你可以用代碼來說明你的方法,因爲這就是你的方法。但是,除了第一段,列出的所有選項對於一個基本上簡單的問題都是不必要的複雜。 – mtoto

+0

噢,好的。抱歉。我很興奮。 – ImDarrenG

+0

使用會話標識符(如sessionId)應該是最簡單的解決方案。不幸的是,我們沒有這樣的會話ID,很難生成一個。 我會檢查你提到的算法。謝謝。 – Scott2000