標籤:
項目地址 : https://github.com/Huangtuzhi/AlibabaRecommand
AlibabaRecommand
Alibaba 2015 mobile recommending algorithm competition.
比賽介紹
比賽通過對使用者在移動終端上一個月的行為資料進行分析,為後一天的使用者購買行為作出預測,進行推薦。
目錄結構
├── LICENSE #許可證└── README.md #使用說明#建表├── create_table.sql #建立基本表├── add_table.sql #後續增加的表├── add_index.sql #為表建立索引├── add_table_31day.sql #建立儲存31天資料的表,結構同上└── add_index_31day.sql #為表建立索引#資料匯入├── datatoDB.sql #大賽csv格式未經處理資料匯入基本表└── FeaturetoDB.sql #feature.txt匯入對應表#main├── __init__.py├── TrainModel.py├── ObtainPredict.py└── GetFeature31day.py#資料 ├── feature.txt #符合某個標準的記錄(user_id,item_id,look,store,cart,buy)├── data_features.txt #feature.txt中記錄的n維特徵├── data_features.npy #轉為矩陣格式(numpy庫),下同├── data_labels.txt #feature.txt中記錄的label(1/0表示購買/未購買)├── data_labels.npy ├── feature_pos.txt #feature.txt中所有正例├── feature_p.npy ├── feature_neg.txt #feature.txt中所有負例├── feature_p.npy├── TrainSet.npy #訓練集├── TestSet.npy #測試集└── 31day_data_features.txt #31天所有資料的n維特徵#結果├── predict_all_pairs.txt #得到所有預測的userid itemid對└── filter_pairs.txt #用train_item過濾的userid itemid對
原理
題目給了31天的資料,我們選擇第30天作為分割點。用前30天的資料提取n維特徵(每個[user_id,item_id]對可以提取一行特徵),用第31天的真實資料去標記每行特徵。
舉個例子:某個[user_id,item_id]對[9909811,266982489]在前30天出現,如果在第31天它也出現了且behavior_type為購買,則標記這一行的label為1,否則為0。
這樣形成了很多行的特徵資料,我們把資料進行Logistic Regression訓練,得到一個二分類的模型,這樣模型就訓練好了。
接下來就是預測,預測的東西就是上面的label,也即模型的輸出。label為1表示我們認為使用者會購買。那麼模型的輸入是什麼呢?模型的輸入就是31天所有資料的特徵。
1th~30th————> 31th的label1th~31th————> 32th的label
因為31th的label資料是已知的,所以可以利用它對訓練出來的模型進行評估。而32th的label就是輸出結果了。
說明
這是一個預測的架構,特徵工程還需要進一步改善。
2015阿里天池大資料比賽演算法設計