二分類問題中候選集和覆蓋率的概念

      最近在學習天池比賽:商場中精確定位用戶所在店鋪,該比賽作爲新手剛開始我想到了多分類,經過學習一些人的想法後得知該問題轉化爲二分類去做會減少計算量同時準確度也會提升,在學習過程中接觸到了「候選集」、「覆蓋率」兩個概念,經過查詢很多資料找到相關解釋,寫在下面供以後查閱。


賽題類型

從領域歸屬劃分來看:電商推薦,廣告點擊率預估,銷量預估,貸款違約判定,癌症檢測等

從任務目標劃分來看:迴歸,分類,排序,推薦等

從數據載體劃分來看:互聯網日誌,表單數據,文本,語音,圖像等

從特徵形式劃分來看:原始數據,明文特徵,脫敏特徵等

針對該比賽先了解一下其中的數據情況:

特徵工程

缺失值填充

  • 特徵爲連續值,且爲正態分佈,使用均值填充,保持期望不變
  • 特徵爲連續值,且爲長尾分佈,使用中值填充,避免異常點影響
  • 特徵爲離散值,使用衆數填充
  • 使用模型預測,完善用戶畫像

特徵變換

  • 對長尾分佈的特徵,做對數變換
  • 標準化,歸一化
  • 連續值特徵離散化
LR,SVM,DNN等對特徵的分佈和尺度是比較敏感的,歸一化有助於模型收斂;
基於樹的模型,具有伸縮不變性,不需要做特徵變換;


ID類特徵的處理

  • OneHot編碼,比如,性別編碼爲0或者1
  • 使用每種類別的某種統計量代替該特徵
  • Word Embedding,將高維稀疏特徵映射成低維稠密特徵

模型選擇

  • 對於高維稀疏型特徵(比如ID特徵one hot編碼)使用線性模型LR,FM模型(廣告預測)
  • 對於低維稠密型特徵,使用集成樹模型XGBoost,GBDT,RandomForest(優惠券預測)
  • 對於圖像或者語音等感官型數據,使用DNN或者CNN或者LSTM

模型融合

Averaging, Voting, Stacking , Blending


本賽題目標爲在商場內精確的定位用戶當前所在商鋪。在真實生活中,當用戶在商場環境中打開手機的時候,存在定位信號不準、環境信息不全、店鋪信息缺失、不同店鋪空間距離太近等等挑戰,因此如何精確的判斷用戶所在商鋪是一個難題。

本次大賽我們將提供在2017年8月份大概100家商場(複賽爲2017年7-8月大概500家商場)的詳細數據,包括用戶定位行爲和商場內店鋪等數據(已脫敏),參賽隊伍需要對其進行數據挖掘和必要的機器學習訓練。另外,我們會提供2017年9月份的商場內用戶數據來做評測,檢測您的算法是否能準確的識別出當時用戶所在的店鋪。


任務描述

參賽者需要對我們提供的2017年8月份(複賽爲2017年7-8月)數據進行店鋪、用戶、WIFI等各個維度進行數據挖掘和特徵創建,並自行創建訓練數據中的負樣本,進行合適的機器學習訓練。在我們提供2017年9月份的數據中,根據當時用戶所處的位置和WIFI等環境信息,通過您的算法或模型準確的判斷出他當前所在的店鋪。

1、數據

本賽題提供兩種數據

1、商場內店鋪的信息數據,這個對訓練和評測都是統一的。

2、真實用戶在這些商場內的一段時間的到店交易數據,訓練和評測將採用不同的時間段。

注意:爲了保護用戶和商家的隱私,所有數據均作匿名處理,同時做了必要的有偏採樣、過濾等脫敏措施。某些數據的某些字段可能爲NULL,請自行處理。


2、評價方式

本賽題採用準確率進行評價。詳細評分算法如下:

預測正確:您給出的shop_id和標準答案的shop_id相等。

準確率 = 預測正確樣本總數/總樣本數

注意:如果某些row_id樣本您沒有給出結果,那麼也會被當成錯誤識別。





首先通過這個問題映射出二分類問題中候選集和覆蓋率的概念。

常規問題的解決思路是:


對於常規問題來說採用上述步驟進行即可,但是還有一個其中一個步驟可以穿插到其中即候選集的構建。


即在數據分析和特徵工程之間加入候選集的構建。

在這個比賽當中可以採用多分類的做法以及二分類的做法。

多分類的方法:

候選集:所在mall的所有的商店

覆蓋率:100%

正負樣本比:1:所在mall中的所有商店-1


二分類的方法:

候選集:通過簡單的規則來構造候選樣本來形成候選集

規則如下:

  • 用戶訪問過的商店
  • 與當前row下的wifi有交集的wifi的商店(商店wifi只取出現最多的15個)
  • 和當前用戶gps最近的三個商店
  • 構造gpsKNN,與用戶gps最近的100個用戶的商店去重
  • 保留全部正樣本,負樣本中隨機抽取一定比例的加入訓練集

覆蓋率:99.1%(正樣本未出現在訓練集中的樣本在測試集中剔除)

正負樣本比:1:負樣本隨機抽樣之後所產生的候選集

通過不同規則產生的候選集需要進行候選集融合,因爲訓練的時候要保證每個樣本的候選集的數量相同

候選集的融合和過濾保證候選集的數量一致


在多分類中候選集的數量爲整個mall當中的所有商店

在二分類中候選集的數量爲通過規則生成的少量商店


二分類中:相對於直接使用全量的商場店鋪做候選,用簡單規則構造的候選集樣本可以在不降低模型預測精度的情況下,大大降低模型訓練的複雜度

在構造候選集的過程當中,應當控制正負樣本比,把正負樣本比控制在合適的位置,必然,正負樣本比越小,模型的覆蓋率越高,但是當正負樣本太大的時候,會導致模型的複雜度和模型訓練時間大大增加,得不償失。


候選集:通過數據處理之後,通過特定的規則從訓練集當中篩選出來的少量的可以最大化體現數據特徵的樣本點

覆蓋率:在驗證集上面,正樣本可以在候選集中命中的概率。(亦可以是在整個訓練集中)

構建完候選集之後,之後模型訓練以及預測都是基於候選集來完成的

所以,覆蓋率可以大致表明該模型的上限

所以構造候選集的過程也是至關重要的一個步

下面給出針對該比賽比較好的方案:

認識數據

數據大致就是上圖中所述的那樣

在數據當中,存在如下的數據缺陷:

  1. wifi連接信息不穩定,同一個商店並不能總是能夠搜索到同一個wifi(分析原因:移動wifi)
  2. wifi的強度不穩定(分析原因:信號源可能不是很穩定)
  3. wifi的數據當中很多隻連接一個wifi且強度值爲null(分析原因:IPhone手機權限原因)
  4. 裏面的gps數據也存在較多的異常值等等

數據分析模塊:

分析數據的分佈(圖)佔坑,各種數據的分析

數據集劃分

數據劃分的過程通過前面的講解,我們可以判斷該類問題爲時間序列推斷相關的問題,我們應該採用滑窗法進行劃分。



不一定要以線上測試集的窗口爲準,因爲特徵提取的時間跨度越小越好

因爲,窗口越大, 在當前窗口中的後續部分的預測可能遺漏了很多關鍵信息

(上述劃分當以天爲劃分的時候效果最佳但是太過於複雜和耗時)

上述劃分在訓練線上訓練集的時候將時間窗口進行疊加,也就是第二條線,這樣可能會有小幅度的提升。

在進行比賽之前可以先不考慮模型的問題,可以先考慮通過構造簡單的規則來處理這個數據,

這些規則的構建也可以爲後續的特徵工程做一些準備的工作。

規則可以包括如下:

  • wifi歷史(通過交易信息中,當前商鋪中的wifi和歷史交易信息中wifi的交集)
  • 連接的wifi
  • GPS位置KNN(對經緯度去最近鄰100個樣本點的參考值)
  • user歷史(用戶之前到過的店鋪)

通過上面的規則可以大致過濾出來一些店鋪,上述的規則同時也可以用來構造候選集


構造完成規則之後,需要考慮使用什麼樣紙的模型

對於這個問題來說,這個問題肯定是一個分類的問題

那麼是採用二分類還是採用多分類

就這個問題而言,二分類和多分類都是可以的


多分類的問題就是對兩個以上類別的標籤的數據進行分類,對於所有的店鋪有一個概率預測值

二分類的問題就是對兩個類別的標籤的數據進行分類,通過預測結果判定該店鋪到底是不是預測結果

多分類

多分類的問題當前交易訂單中的商店就是該筆訂單的label信息,如果將所有的數據一起進行訓練的話, label的種類非常的多,十分的難以進行訓練,因爲數據交易信息當中給出了商場的信息,我們可以通過分mall的方式進行訓練,這樣的話,就可以降低訓練難度


在多分類的問題當中,訓練集的劃分就需要按照分mall來進行,每個mall單獨構造訓練集的方式,候選的話就是該店鋪所在mall的所有商店,之後再構建特徵工程,進行預測

採用多分類的方式的話,覆蓋率線下的話,可以達到100%,

但是存在相應的缺點的問題就是:

  1. 模型精確度不是很高,特徵比較稀疏;
  2. 每一個商場都要訓練一個模型
  3. shop作爲標籤之後,無法再對shop進行信息挖掘

優點就是樣本的召回率特別的高,與二分類有一定的互補性。(可以將多分類的預測結果top10作爲二分類的候選集)


二分類

候選集的構建的方式:

  1. 通過使用多分類的預測結果的top10作爲二分類的候選集-存在的問題就是太過於麻煩
  2. 通過簡單的規則構造二分類候選樣本
    1. 規則1:用戶訪問過的商店
    2. 規則2:和當前row下的wifi有交集的wifi的商店(商店的wifi只取出現在商店中的最多的15個wifi)
    3. 規則3:和當前用戶gps最近的三個商店(歐式距離)
      1. 問題1:商店給定的gps十分的不準確
      2. 解決:可以採用將交易歷史信息中所有在該商店中交易的用戶gps取中位數
    4. 構造gps KNN,與用戶gps最近的100個用戶的商店去重
      1. 每一筆交易都有gps信息,與其他所有的交易進行距離計算,得到與當前交易最近的交易訂單,查看最近的100個交易訂單都是發生在哪個店鋪當中
  3. 訓練集負樣本繼續採樣
    1. 保留全部的正樣本,負樣本隨機抽取一定比例加入訓練集
      1. 之所以這樣做,因爲上述規則的構建也是比較麻煩的,規則構建的好壞直接影響候選集的好壞最終直接影響覆蓋率
      2. 負樣本隨機抽樣的意識就是:將一個mall當中的所有樣本都作爲候選集,但是保留正樣本,將所有的負樣本進行採樣,採樣出來的結果作爲候選集
      3. 上述的抽樣過程只發生在訓練的過程中,預測的過程中不做抽樣

一般的思路是先用規則構造候選,然後在候選集中利用模型輸出概率值。這樣需要同時兼顧候選集合的覆蓋率和預測模型的

準確率,實現上較爲複雜。直接選取目標mall中所有的shop作爲候選,大大降低了模型的複雜程度。

同時,爲了避免訓練集數據量過大,可以在訓練集中進行樣本抽樣。具體方法是,保留全部正樣本,負樣本中隨機抽取一定比例加入訓練集。實際測試,抽樣對於模型的精度影響不大。

通過上述候選集的構建可以達到現下覆蓋率99.1%(但是這個覆蓋率是有一定的水分的,我們將測試集中的正樣本如果沒有出現在訓練集當中的話,將其進行剔除)

採用二分類的優點,相對於直接用全量的商場店鋪進行候選,用簡單的規則構造出來的候選集樣本可以在不降低模型預測精度的情況下,大大的降低模型訓練的負擔

採用二分類的理由:

  1. 大大的降低模型訓練的負擔
  2. 精度可以得以提高

採用二分類的理由:

  1. 大大的降低模型訓練的負擔
  2. 精度可以得以提高

二分類方案,即針對測試集中的每一條記錄,構造候選shop集合,用模型輸出每個候選的概率值,然後選取概率值最大的作爲該條記錄的預測shop。訓練集和測試集的構造方法圖示如下:

訓練


測試


特徵工程

標記特徵

  1. 記錄中是否有連接的wifi
  2. 記錄中是含否有null
  3. 記錄中wifi與候選shop出現過的wifi重合的個數

"總量-比例"特徵

  1. 該mall的總歷史記錄數、候選shop在其中的佔比
  2. 該user的總歷史記錄數、候選shop在其中的佔比
  3. wifi歷史上出現過的總次數、候選shop在其中的佔比
  4. 在當前排序位置(如最強、第二強、第三強...)上wifi歷史上出現過的總次數、候選shop在其中的佔比
  5. 連接的wifi出現的總次數、候選shop在其中的佔比
  6. 經緯度網格(將經緯度按不同精度劃分成網格)中的總記錄數、候選shop在其中的佔比

對於特徵3、4,每條記錄中的10個wifi由強到弱排列,可生成10個特徵。

差值特徵

  1. wifi強度 - 候選shop的歷史記錄中該wifi的平均強度
  2. wifi強度 - 候選shop的歷史記錄中該wifi的最小強度
  3. wifi強度 - 候選shop的歷史記錄中該wifi的最大強度

三個wifi強度差值特徵,按照信號強度由強到弱排列,可生成10個特徵。

距離特徵

  1. 與候選shop位置的GPS距離(L2)
  2. 與候選shop歷史記錄中心位置的GPS距離(L2)
  3. 與候選shop對應wifi信號強度歷史均值的距離(L1、L2)

離散化是將強度值取整(就是將後續的個位數部分去除,因爲可能在同一個方面的不同位置強度值也是不同的,但是是表示的同一個店鋪,應該表示的是同一個店鋪纔對)


數據挖掘比賽當中,如果想要取得較好的名詞,特徵基本上一定要在百位級別才比較好

如何判定一個特徵是否有用:

你不可能單純的爲了測試這個特徵有沒有用,而且測試一遍數據集,顯然如果對於大數據集是不可行的,必然採用其他的比較簡單的方式進行判斷。

"總量-比例"特徵

  1. 該mall的總歷史記錄數、候選shop在其中的佔比
  2. 該user的總歷史記錄數、候選shop在其中的佔比
  3. wifi歷史上出現過的總次數、候選shop在其中的佔比
  4. 在當前排序位置(如最強、第二強、第三強...)上wifi歷史上出現過的總次數、候選shop在其中的佔比
  5. 連接的wifi出現的總次數、候選shop在其中的佔比
  6. 經緯度網格(將經緯度按不同精度劃分成網格)中的總記錄數、候選shop在其中的佔比

對於特徵3、4,每條記錄中的10個wifi由強到弱排列,可生成10個特徵。

差值特徵

  1. wifi強度 - 候選shop的歷史記錄中該wifi的平均強度
  2. wifi強度 - 候選shop的歷史記錄中該wifi的最小強度
  3. wifi強度 - 候選shop的歷史記錄中該wifi的最大強度

三個wifi強度差值特徵,按照信號強度由強到弱排列,可生成10個特徵。

距離特徵

  1. 與候選shop位置的GPS距離(L2)
  2. 與候選shop歷史記錄中心位置的GPS距離(L2)
  3. 與候選shop對應wifi信號強度歷史均值的距離(L1、L2)

離散化是將強度值取整(就是將後續的個位數部分去除,因爲可能在同一個方面的不同位置強度值也是不同的,但是是表示的同一個店鋪,應該表示的是同一個店鋪纔對)


數據挖掘比賽當中,如果想要取得較好的名詞,特徵基本上一定要在百位級別才比較好

如何判定一個特徵是否有用:

你不可能單純的爲了測試這個特徵有沒有用,而且測試一遍數據集,顯然如果對於大數據集是不可行的,必然採用其他的比較簡單的方式進行判斷。

可以通過畫圖分析的方式對該數據進行分析判斷,如果該數據在時間序列上或者在空間上有着明顯的區分度的話,或者這個特徵對於結果的影響是呈現特定分佈的時候,可以考慮進行該特徵的提取。


該特徵需要在不同的取值下對結果有一定的影響,要有一定的區分度。


模型選擇

對於這個比賽來說,這種低維稠密的特徵,直接上XGBOOST就可以了。

模型融合

比較常用的是averaging,這個就是加權平均

還有就是voting,這個就是投票

"總量-比例"特徵

  1. 該mall的總歷史記錄數、候選shop在其中的佔比
  2. 該user的總歷史記錄數、候選shop在其中的佔比
  3. wifi歷史上出現過的總次數、候選shop在其中
相關文章
相關標籤/搜索