神經網路在客戶分層上的應用—Autoencoder
一個原理很簡單,操作很簡單,但是應用起來費點勁的演算法。
Autoencoder,非監督學習演算法的一種。非監督學習(Unsupervised Learning)是機器自己學習的模式。上篇 「機器學習的Hello world」,是監督學習(Supervised Learning)的一種。
監督與非監督學習的差別很簡單,就是是否會有一個明確的標籤。
例如,「機器學習的Hello world」中的數字圖片識別,最終資料庫會告訴你這個圖片對應的數字分類。然後建立神經網路之後,通過訓練及學習 將神經網路預測結果調整至與已知的標籤對應。監督學習,學的就是那個明確的標籤
但是現實社會中,大部分數據或者問題,是沒有明確的標籤的或者說標籤樣本量不夠大。這就屬於非監督學習的範疇了。讓機器自己去發現規律,找到方法。
面對的問題
那麼什麼是autoencoder呢?
這個演算法我在4月份就接觸到了,但是直到現在也不知道它的英文名字。不過,名字並不重要,重要的是解決問題的方式,原理及應用場景。
那麼,今天所要提到的就是Autoencoder在客戶分層場景上的應用。一般的客戶分層,可以分為人口特徵和地理特徵上的分層。比如,你的目標客戶是北京 20~30歲的女性。但是傳統的客戶分層方法有自己的局限性,其中一個就是僅對客戶的幾個特徵進行分類。比如性別,年齡、地理。
但是,當今社會,有大量的數據,個人的特徵值也超出了傳統人口特徵、地理特徵的範圍。比如在社交平台上活躍度、旅行次數、月消費數量、日均上網時間、某個商品的消費頻率等等。
那麼,我們面對的問題,簡單總結下就是,當我們拿到用戶600個特徵時,我們怎麼對客戶進行分層呢? 如何考慮600個特徵的同同時,對用戶進行分層呢?
演算法原理
Autoencoder 在此問題上,能幫上一些忙。那麼autoencoder是怎麼工作的呢?
假設我們目前的數據是60000*600 ,60000個用戶 每個用戶600個特徵;
同樣Autoencoder是一種特殊的神經網路架構,其也要包含輸入層,隱藏層、輸出層。
輸入層:600個輸入值
隱藏層: 暫略
輸出層:600個輸出值
首先,Autoencoder的第一個特徵是輸入層與輸出層相同。這看起來很奇怪,因為輸入60000*600的訓練數據,經歷神經網路運算一通騷操作之後,輸出的結果要和輸入一樣。 感覺是白費功夫,但是這也是這個演算法的核心。
其次,下面是一個Autoencoder 結構簡單的例子,大家能看出來,其實這是個縮小再放大的過程。
當數據經歷整個神經網路,就是一個「壓縮」再「解壓」的過程。想像下,當把一個電影壓縮,再解壓。壓縮解壓之後,電影還是那個電影。 但是壓縮後的「電影」其實是原電影的另一種存在形式。即,壓縮後的電影也繼承了原電影的特徵值。
上圖可以看出,神經網路將6個(藍色)特徵值 壓縮成 2個(紅色框框)神經元,再解壓成6個藍色。 當訓練完之後,我們只用神經網路的前半部分,輸入6個特徵值,輸出2個神經元預測結果。
換一個角度,原來的客戶有600個數據特徵,即600維度特徵。Autoencoder就是用上面那個漏斗形的網路,將600個特徵值降維到 二維。
即,將600個客戶特徵濃縮到 兩維 特徵。其實我並不清楚濃縮後的特徵代表著什麼。但是重要的是濃縮後的特徵的數據的趨向性。
比如下圖,每個點是一個客戶。大家能發現明顯的聚合趨勢,能發現明顯的極端值。這樣就完成了第一步的客戶特徵值降維
總結下原理,其實這個演算法背後的邏輯很直接也很好理解。就是通過將原來600個特徵壓縮再解壓後,得出的還是自己。 所以,可以推斷出壓縮後的狀態其實代表著自己本身的數據特徵。
這個演算法的實際應用及代碼展示將在下篇介紹。~
TAG:全球大搜羅 |