前言
傳統的資料開放共享方式,很多是將原始資料以明文的方式直接輸出,這樣在資料安全和隱私保護方面存在顯著風險,不符合日益完善的法律法規要求,也越來越不能滿足當今資料體量、規模日益龐大而複雜的應用需求。另外,也存在加工為標籤類的資料再進行輸出的方式,但通常存在資訊漏損,使用這類資料進行建模,效果大打折扣。
經過實踐,TalkingData 藉助機器學習技術探索出一套新的方案,通過對原始資料進行分散式的隱含表徵提取計算(一種資料變換方式),再將變換後的資料用於開放共享,既可以滿足資料輸出的安全性要求,又提升了大資料輸出的處理速度。該資料輸出方式主要基於機器學習的分散式 embedding 演算法(嵌入演算法)。Embedding 演算法是一系列演算法的統稱,該類演算法能夠對原始資料進行變換,並挖掘其中的潛在關聯。Embedding 演算法處理後的資料由於資訊漏損較少,相對標籤資料有更好的建模效果,被廣泛用於推薦系統、自然語言處理等領域。
TalkingData 將該類演算法應用到資料安全輸出領域,使得原始資料在經過變換後,能夠以不具備可識別性的方式輸出,而資料獲取方無法從中提取到與個人身份相關的敏感資訊,也就實現了對隱私資料的匿名化保護。
基於保護使用者隱私、保障資料輸出安全性以及提升大資料輸出處理速度的考量,構建了 TalkingData System 平臺(以下簡稱 TDS)。TDS 平臺的底層基於 Spark 和 Hadoop 生態搭載了 embedding 演算法,對原始資料進行計算和處理,再將結果通過前端平臺頁面輸出給企業使用者,目前已經在金融、零售、網際網路、廣告等行業中得到應用。
藉助 TDS 平臺,企業可以將內部來自垂直領域的第一方資料,比如使用者群體的活躍、消費、人口屬性標籤等,與 TalkingData 的第三方資料進行融合,豐富企業的自有模型特徵維度。理論上,不需要業務解釋或識別的預測模型均可使用本方法輸出的資料。
演算法方案詳解
本演算法具有通用性,可以應用於任何能變換為標準格式的原始資料輸出。下面通過一個示例詳解說明處理過程:
一、TDS 平臺的使用方上傳了一批裝置 ID(裝置標識),通過 ID 匹配,得到對應的 TDID(即 TalkingData 自有的加密識別符號)。
二、使用 TDID 作為索引,提取原始資料。假設有 M 個 TDID,TDID 可以看作每一臺智慧移動裝置的虛擬唯一編號,則提取後的原始資料共有 M 行,每行對應一個裝置的屬性資訊。假設屬性個數為 N,每個裝置的每個屬性值為 1 或 0,代表一個裝置具有或不具有某個屬性。將該原始資料變換為 M*N 的稀疏矩陣,每行對應一個裝置,每列對應一個屬性。例如第三行第五列為 0,則表示第三個裝置不具有第五列對應的屬性。
稀疏矩陣相對普通矩陣來比,能夠極大的節省儲存空間。構造稀疏矩陣的方法可以理解為以下步驟:
(1)建立一個 M*N 的矩陣,將其中的值全部填充為零。
(2)逐行掃描,如果一個裝置具有某個屬性,就將該處的值替換為 1,直到掃描完成。
(3)記錄哪些行和哪些列的資料為 1,儲存這些資訊。儲存下來的這些資訊,實際上就是一個係數矩陣。
三、通過嵌入模型對標準格式的原始資料進行表徵學習。實際上就是對輸入的原始矩陣進行分解。嵌入模型可以使用的演算法很多,此處以奇異值分解 SVD(Singular Value Decomposition)演算法為例進行介紹。
提到 SVD,就不得不提到與其相關的概念——PCA(Principal Components Analysis),即主成分分析,又被稱為特徵值分解。關於 PCA 方法,大家的普遍聯想是降維 。簡單來說,PCA 所做的就是在原始空間中順序地找一組相互正交的座標軸,第一個軸是使得方差最大的,第二個軸是在與第一個軸正交的平面中使得方差最大的,第三個軸是在與第 1、2 個軸正交的平面中方差最大的。這樣,假設在 N 維空間中,我們可以找到 N 個這樣的座標軸,我們取前 r 個去近似這個空間,這樣就從一個 N 維的空間壓縮到 r 維的空間了,而我們選擇的 r 值對空間的壓縮要能使資料的損失最小。
PCA 從原始資料中挑選特徵明顯的、比較重要的資訊保留下來,這樣一來問題就在於如何用比原來少的維度去儘可能刻畫原來的資料。同時,PCA 也有很多的侷限,比如說變換的矩陣必須是方陣,而 SVD 演算法能夠避免這一侷限。
SVD 演算法,能夠將一個矩陣分解為三個子矩陣(三個子矩陣相乘可以還原得到原始矩陣)。我們將這三個矩陣稱為 U、Sigma 及 V,其中 Sigma 矩陣為奇異值矩陣,只有對角線處有值,其餘均為 0。
假設原始矩陣是 10,000 行 1,000 列,那麼分解後即可得到如下三個子矩陣:
U 矩陣為 10,000*10,000
Sigma 矩陣為 10,000*1,000(除了對角線的元素都是
0,對角線上的元素稱為奇異值)
V(^)T矩陣(V 的轉置)為 1,000*1,000
實際應用過程中,我們只保留 U 矩陣的前 512 列,於是三個矩陣的維度就變成了:10,000*512,512*512,512*1,000。為什麼是保留 512 列呢?原因是奇異值在矩陣Σ中是從大到小排列,而且奇異值的減小特別快,在很多情況下,前 10% 甚至 1% 的奇異值之和,就佔了全部奇異值之和的 99% 以上了。根據我們的多次實驗,512 列已經能夠很好的保留奇異值的資訊。
四、矩陣分解得到三個子矩陣後,將 U 和 Sigma 相乘,得到輸出矩陣。輸出矩陣的維度為 10,000*512。可以看到,輸出矩陣與輸入矩陣有著相同的行數,每一行仍舊代表一個裝置。但是輸出矩陣的列數變為了512,與原始矩陣中每一列是一個屬性不同,此時的輸出矩陣中每一列對應一個特徵。該特徵不具備可解釋性和可識別性,這也就保證了輸出資料不會洩露個人隱私。
五、將輸出矩陣直接輸出,TDS 平臺的使用方可以通過資料介面進行呼叫。因為平臺使用方無法獲得 V 矩陣,故而無法還原得到原始矩陣,也就無法還原出任何與個人相關的原始屬性資訊。
輸出時,需要將所有的資料先整理成步驟 2 中的標準輸入格式,然後拼接成一個輸入矩陣。之後的步驟與上述示例中相同。
效果
對於 Embedding 演算法在資料安全輸出的實際表現,TalkingData 做了很多相關實驗,也在多個實際專案中進行了驗證。以下用兩個真實案例進行說明:
案例一:性別標籤預測效果提升
性別標籤是基於裝置資訊通過機器學習模型預測打分得出的。在過往的建模過程中,演算法人員往往會對原始資訊進行一定的處理,比如將非結構性的資料處理為結構性的統計數值,或者將其他標籤作為特徵輸入到模型中。但是,這些特徵工程方法都會產生一定的資訊漏損或者誤差引入。
而 Embedding 處理後的資料相比人工的特徵篩選,由於資訊漏損較少,理論上會取得更好的建模效果。從以下兩圖可以看出,基於相同原始資料,使用 Embedding 模型的預測效果比原始性別預測模型提升 (0.71 - 0.63)/0.63 = 13.7%。
案例二:某金融企業的風控模型預測效果提升
在與很多企業的合作中,會將 TalkingData 的人口屬性標籤和應用興趣標籤作為第三方資料引入。在與某金融企業的合作中,TalkingData 將資料通過 TDS 輸出給該企業並應用在風控模型中。
在相同的假陽率(False Positive Rate)下,企業原有演算法的生產準確率為 0.42,而加入 Embedding 演算法輸出的資料後,經過優化的生產準確率達到 0.52,提升 25%。在風控領域中,25% 的提升能夠幫助企業避免很大的經濟損失。
關於其他 Embedding 方法的思考
Embedding 方法被廣泛應用於自然語言處理領域,也就是使用數學語言表示一篇文字。雖然上文提到的 SVD 演算法的有效性在實際模型計算中被驗證了,但是在文字特徵表示方面仍有缺陷。
首先,它是一個詞袋模型(BOW,bag of words),不考慮詞與詞之間的順序,而在實際文字中,詞語的順序也非常重要,而且每個詞在句子中的重要性各不相同;其次,它假設詞與詞之間相互獨立,但在大多數情況下詞與詞是相互影響的,這也是為什麼我們在做“閱讀理解”的時候經常要聯絡上下文的原因。
如今 Embedding 領域早已向深度學習的方向衍化,大致可以分為以下四種常見應用:
不依賴文字語法和語序的詞袋模型:one-hot、tf-idf、textrank 等;
主題模型:LSA、pLSA、LDA;
基於詞向量的固定表徵:word2vec、fastText、glove
基於詞向量的動態表徵:elmo、GPT、bert
其中,Word2vec 是獲得工業界廣泛應用的演算法之一。提到 Word2vec 就不得不引入“詞向量”的概念。NLP 領域中,最細粒度的是詞語,詞語構成句子,句子再組成段落、篇章、文件。如何用數學語言表示每一個詞語,成為研究詞與詞之間關係的關鍵。Word2vec 正是來源於這個思想,可以把它看作是簡單化的神經網路模型,但是它的最終目的,不僅僅是用數值表示文字符號,還有模型訓練完後的副產物——模型引數(這裡特指神經網路的權重)。該模型引數將作為輸入詞語的某種向量化的表示,這個向量便稱為——詞向量。
舉例子說明如何通過 Word2vec 尋找相近詞:
結合 TalkingData 應用 Embedding 的實際場景,與詞向量的最大區別就是被表示的特徵之間沒有上下文的聯絡。TalkingData 以分析移動裝置行為資料為主,對大多數裝置屬性來說,打亂排列的順序對於實際意義來說沒有任何影響,但是一個句子裡面的詞語是不能被打亂順序排列的,句式結構對於詞向量表示來說是非常重要的。基於實際業務場景的考量,我們沒有選擇用 Word2vec 或更復雜的 Embedding 演算法來轉換原始資料。
雖然,我們保證了原始資料輸出的安全性,但是伴隨而來的是資料可解釋性較弱的問題。由於 Embedding 演算法將原始資料轉化為了另一個空間的數值向量,因此無法人為理解或者賦予輸出矩陣的每一列的實際含義。
假設建模人員構建一個“工資預測迴歸模型”,採集到的樣本特徵包括“性別、年齡、學歷、工作城市、工作年限…”,分別對應資料集中的每一列,那麼他們可以容易的計算得到每個特徵的權重,並且能夠比較哪個特徵的權重較高,即特徵重要性的排序,得到諸如“工作年限對工資高低的影響比性別更重要”這樣的結論。
但是在使用 TDS 平臺輸出的資料構建模型的時候,我們沒辦法向上述模型一樣分析比較每一列特徵對模型的影響,只能得出增加 Embedding 特徵對於模型效果是否有提升這樣粒度較粗的結論。顯然,如果建模人員對於模型的解釋性有特別嚴苛的需求的話,TDS 平臺暫時沒有辦法提供解決方案。
作者:TalkingData資料科學家 周婷
作者簡介周婷,TalkingData 資料科學家,專注移動大資料的深度挖掘和基於Spark 的機器學習平臺開發,為 TalkingData 智慧營銷雲和資料智慧市場提供演算法支援,主要負責精準營銷預測、企業級使用者畫像等產品的演算法研發,長期關注網際網路廣告、金融營銷、反欺詐檢測等領域。