從遊戲到用戶分類
困境
最近在做Antispam的過程中,遇到了這樣一個困境:當策略調整的太嚴格的時候,就容易傷害到很多正常用戶,當策略太寬鬆的時候,就很容易漏掉很多垃圾用戶,不過這樣一個問題也是在早期就已經預料到隨著spammer的成長必然會遇到的問題,只不過沒想到會來的這麼快,於是我們就開始想著,如何解決這種困境。
思路
解決這個問題的思路有兩個
利用站上的業務數據,比如贊同感謝神馬的給用戶分級;
利用用戶自己的行為,給用戶分類。
第一個思路牽涉到的場景和業務相關性很強,每個網站使用起來參考性不大,但是第二個思路卻是一個通用性的解決方法,我們就來聊聊第二個思路。利用用戶自己的行為給用戶分類,廣義的分類方法在機器學習上可分為監督方法和無監督方法,兩種的區別在於,監督方法需要事先對於訓練集給出標準答案,然後將標準答案輸入到學習演算法中,然後建立模型,處理後續的輸入方法;而無監督學習,是事先沒有標準答案,利用個體之間在輸入數據上的相近程度,自然聚成一類。
通過以上的描述,可能無監督的學習方法更適合我們,因為我們實現不知道用戶有幾類,也沒有標準答案。那麼問題就來了,目前大多數聚類演算法,原理大多數都是利用空間點中的相近程度,將點分成若干類,差別可能是,有的用的是歐幾里得距離,有的用的是餘弦距離,有的用的是空間密度分布而已,那麼擺在我們面前一個急需解決的問題就是,如何將用戶的行為量化,也就是映射到一個n維空間中,用來對用戶進行聚類呢?
啟發
為了解決這個問題我也是想了很久,有一天實在無果,就玩起了一個手游,養成類遊戲,大題思路就是一群人闖關,然後過程中給不同的人加點,然後這個英雄就會有不同的技能。玩的正無聊,我妹子問了我一句,這些英雄,你怎麼知道把誰安排到前面,誰放在後面啊。我說,有的英雄體力高,可以放在前面擋著,有些英雄魔法高,就只適合放在後面作為遠程攻擊了,也許是聽著無心,言者有意吧,我突然想到這麼一個場景。
當一個英雄剛剛產生的時候,他在體力和魔法上的點數是一樣,這個時候你分不清他是戰士還是魔法師,但是當遊戲不斷進行,你購買了各種裝置,每種裝置在體力和魔法上加成都不一樣,慢慢的,有的英雄體力更強,這個時候就比較適合物理戰鬥,有的魔法值更強,就適合魔法攻擊,自然就分成了兩類。
英雄的分類方法,是按照體力值和魔法值不同,分成兩類,那麼很自然的就想到,對於不同功能的使用偏好,是不是我們分類用戶的思路呢?那麼又怎麼衡量一個用戶的偏好呢?就是利用用戶在不同功能模塊上被加成的點數,我們可以按照用戶訪問每個模塊的次數不同,來定義這個用戶的習慣,進而根據用戶的習慣,決定這個用戶的類型。一下子思路就清晰了。
下面就用一個demo來解釋一下吧:
求解
- 行為計數向量表示法
我們假設我們的網站有四個模塊,分別是ABCD,有四個用戶分別是1234。我們現在有了這四個用戶的訪問日誌,格式是
<user>, <path>, <stamp>
比如說 1, A, 1234567 這個樣子,那麼我們對這些日誌進行聚合,就可以得到一個用戶訪問每個模塊的次數,如下表格:
ABCD1000213132224342這樣就可以分別用一個4維向量代表一個用戶,比如1號用戶就是 [0,0,0,10] 其他類似。
再這樣數據的基礎上,我們可以使用聚類演算法比如KMeans,得到1號用戶這個離群點,對這個離群點特徵性比較強的D模塊上,加大監控力度,在剛剛準備作惡的時候,就組織他,或者採用其他措施。
以上這種方法可以很自然的將用戶轉換成一個n維向量,但是轉換過程中卻丟失了一個很重要的屬性,也就是時間屬性,丟失了訪問的先後次數,而這個先後次數對於定義用戶的類別卻十分有用。那麼自然我們就有了第二個思路:行為序列向量表示法
- 行為序列表示法
依然是上面的四個模塊: ABCD,我們現在得到了四個人的訪問序列:
1: A -> C -> D -> B2: C -> D -> B3: A -> C4: A -> A -> D -> A -> A -> A -> D
當有了上面數據以後,我們採用一些數據對齊的方法,比如採樣相同時間段的數據相同長度的數據,就可以將每個人的行為序列,也轉換成一個向量,然後對這些向量使用各種聚類模型,對用戶分類。當然我們也可以模仿類似於貝葉斯中的基於先驗概率的模型,實現我們的訓練過程中,根據標記數據,我們獲知,A -> A -> A這種情況出現的概率很小,這樣我們就可以知道,4號用戶很可能有什麼異常,爬蟲或者是spammer。
當然在實際模型建立過程中,不可能只依靠一種演算法,對於數據也不會像例子上面那麼清晰,會有很多的雜訊和其他影響,需要其他的技術輔助處理,再配合策略作為限制,相信會有比較不錯的效果,目前正在研究第一種思路,聚類效果明顯,且某些類別的spam比例能到達99%,好了,就扯這麼多了吧。
推薦閱讀:
※2-1 Model Representation
※Machine Learning: 機器學習項目Top 30 (v.2018)
※《機器學習基石》課程學習總結(一)
※Google自動編程框架AutoML入門指南
※機器學習數學:拉格朗日對偶問題
TAG:反垃圾AntiSpam | 機器學習 |