Skip to content

Instantly share code, notes, and snippets.

@gogojimmy
Last active December 31, 2015 14:49
Show Gist options
  • Save gogojimmy/8003203 to your computer and use it in GitHub Desktop.
Save gogojimmy/8003203 to your computer and use it in GitHub Desktop.

追蹤使用者行為

記錄頁面名稱

pageTracker._trackPageView('頁面名稱');

追蹤出站連結(廣告、友情連結)

<a target="_blank" href="http:///www.twitter.com/gogojimmy" onClick="javascript:pageTracker._trackPageView('twitter')"></a>

記錄時間(頁面停留時間、頁面載入時間)

<script type="text/javascript">
  pageopen = new Date();
  function bluewhale(){
    pageClose = new Date();
    minutes = (pageClose.getMinutes() - pageOpen.getMinutes());
    seconds = (pageClose.getSeconds() - pageOpen.getSeconds());
    bluewhaletime =  (seconds + (minutes * 60) + "seconds");
    pageTracker._trackPageView(bluewhaletime)
  }
</script>

<body unonload="bluewhale()">

unonload 會在使用者離開的時候記錄停留時間、改用onload的話會在使用者開完頁面的時候記錄頁面載入時間。

記錄頁面狀態

<img src="http://www.gogojimmy.net/image.jpg" onload="javascript:pageTracker._trackPageView('imageloaded');">
<img src="http://www.gogojimmy.net/image.jpg" onerror="javascript:pageTracker._trackPageView('imageerror');">

記錄用戶行為

<img src="http://www.gogojimmy.net/image.jpg" onmouseover="javascript:pageTracker._trackPageView('mouseover');">

自定義報表

準備工作

  • 確定各部門的數據需求(5w1h)
  • 建立設定檔
  • 使用篩選去控制數據

報表設定

  • 主控台
  • 幫特定的使用者為他們設定他們想看的主控台
  • 對報告調整權限
  • 設定自定快訊及Email通知
  • 使用篩選器來控制數據

關於篩選器

  1. 屬於設定檔,一個篩選器可以
  2. 數據不可逆
  3. 只對新數據起作用
  4. 按先後順序執行

進階篩選器

  1. 從現有的基礎指數或是字串中提取資料
  2. 將提取的資料重新整理
  3. 將重新整理的資料輸出到報表

進階篩選器

  • 擷取區:用來擷取字串,指定你想要從哪邊擷取,可使用正規表示法,例如想要從網址中擷取所有帶 rel 參數的值

擷取區

這樣像是網址 /book?rel=123 就會把 rel=123 的部份擷取下來

  • 建構區:用來將擷取的資料建構後輸出,

BI

  • 數據應用:報表展示(Report)、即時查詢(Ad-hoc)、數據分析(Data Analysis)、數據挖掘(Data Mining)
  • 數據倉庫:聚合數據(Summary)、多維數據模型(OLAP)、業務模型(Business Model)
  • 來源數據:點擊流數據(Click Stream)、數據庫數據(OLTP)、文檔數據(Documents)、其他

關於數據統計、數據分析以及數據挖掘

  • 數據統計:描述數據的形態與特徵,重點是數據本身而非發現問題
  • 數據分析:從數據中發現問題、尋找規律、找出結論
  • 數據挖掘:江問題提升到了預測的層面、例如推薦

網站內容的關聯推薦

  • 向上營銷(Up Marketing):根據客戶過去的喜好,提供更高價值或其他加強原有功能或用途的產品或服務。
  • 交叉營銷(Cross Marketing):已客戶的購買行為中發現客戶的多種需求,向其推銷相關的產品或服務。

實現商品關聯推薦的前提條件:

  • 準確記錄使用者的訂單與交易記錄、最好也同時記錄了使用者的瀏覽記錄
  • 網站的使用者可以被唯一識別
  • 擁有一個強大的數據計算平台來處理數據

基礎關聯:當用戶購買了A商品的基礎上、又購買了B商品的人所佔的比例,當這個比例到達了預設的目標水平時,我們就認為這兩個商品是存在一定關連性的,所以當用戶購買了A商品時,我們就可以向他推薦B商品。

從購買全部商品的用戶集合U、購買了A商品的用戶集合A,以及購買了A商品後又購買了B商品的集合G這三個集合可以計算關聯規則中的兩個關鍵指標:支持度(Support)與可信度(Confidence)。

  • 支持度:購買了A與B商品(集合G)的人數 / 購買所有商品(集合U)的人數,也就是A與B同時被購買的機率
  • 可信度:購買了A與B商品(集合G)的人數 / 購買了A商品(集合A)的人數,也就是說當A出現時,B也會出現的機率有多大

得到這兩個指標後,需要為這兩個指標設立一個最小值,即為最小支持度及最小可信度,將所有滿足最小支持度的集合全部拿來計算出可信度,當可信度大於最小可信度的時候,才可以被認為這商品是有關連可以被推薦的。

需要注意的是,商品種類的差異、購買頻率都會影響到數據的推算,因此用同樣的最小支持度去限制所有類別商品是不合適的,因為這樣購買頻率低的永遠不會出現在集合中,一個解決方案是根據購買頻率來對商品進行分類。

另一個問題是有些熱門商品的銷售與其他商品其實並沒有關連性,例如到超市的人幾乎都會買牛奶,你又發現了買茶杯的人也都會買牛奶,但這關聯其實不一定成立,因為大部分到超市的人都會買牛奶,因此就有了提昇度(Lift)這個概念:

  • 提昇度:購買了A商品後購買B商品的人數比例 / 所有用戶中購買B商品的人數比例

當提昇度大於1的時候我們才認為這樣的關聯規則是有效的,如果提昇度小於1,即時支持度與可信度滿足要求,也很有可能是因為B商品是熱賣商品所引起的,並不能產生真正有效的推薦。

KNN相關內容推薦

剛剛提的內容是基於用戶的歷史行為所推測,在用戶行為不斷變化下我們就必須不斷更新關聯規則,這需要巨大的維護成本,我們可以選擇一些相對簡單的方法。例如說一般內容都有固定的屬性,這些屬性本身就說明了內容的相似度,並且這些屬性相對固定的附著在內容上,我們可以憑藉這些內容數據來定位其相關內容,而與用戶的行為數據脫離,處理上相對簡單。

KNN(K - Nearest Neighbor algorithm),KNN演算法,通過計算個體間的距離或其相似度來尋找與每個個體最相近的K個個體,算法的時間複雜度與樣本數有正相關,但因為內容屬性是固定的,因此在建立計算後就可重複利用。

以上兩種推薦方式,一種基於用戶行為、一種基於內容固有屬性,兩種各有利弊:

  1. 內容關聯推薦:
  • 優點:以用戶行為為基礎,考慮了用戶的實際需求,結果能比較貼合用戶的需要,隨著用戶行為的變化不斷更新推薦結果,使內容推薦具備時效性。
  • 缺點:無法對一些新發佈的內容做出有效推薦,也就是所謂的『冷啟動』的問題,用戶行為推薦的數據不斷變化需要定時對推薦結果進行更新,而推薦的算法決定這個過程需要消耗較大的成本及計算時間。
  1. KNN相關內容:
  • 優點:不存在『冷啟動』的問題,即使是新的內容只要其固有屬性完整,同樣可以選擇最相關的內容;每次只要計算新加入的內容與所有內容的關聯性即可。
  • 缺點:僅考慮了內容的固有關係,因此很難做出內容類別跨度很大的推薦,在滿足用戶需求方面有所缺陷;同時無法考慮到內容的重疊與替代關係而可能會有重複推薦,以及存在一些已經過時的內容的推薦,比如可能推薦內容非常相似的兩本書,但讀者只要購買其中一本就可以,或是對那些已經購買第二版的用戶再推薦第一版的書。

從上面的分析來看,兩者同時進行的話可以達到互補的作用,新加入的內容以KNN相關內容推薦來解決『冷啟動』問題,當資料有了一定的累積後就可以改使用關聯推薦的方式。

評估效果

為了衡量效果,我們一般都會追蹤點擊率(CTR)及轉換率

部落格衡量

用類似這樣的方式就可以很好的看出內容推銷是否有用,如果要衡量轉化率的話,我們要使用網頁內容分析(In-Page Analytics)。

最終手段:A/B Testing,多變量追蹤。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment