---
# System prepended metadata

title: HSCC 玉山交接

---

# HSCC 玉山交接

## 主要目標
預測銀行向客戶發送 EDM 郵件之後的十四天內，客戶是否有購買外匯。
## 計畫目的
每年有太多的新會議論文，而玉山已經有內部的事情要忙。所以想藉由參與計畫的學生，來試試可以應用的新方法，或想出新方法。所以他們比較不看重表現如何，而是希望能帶給他們新觀點。

## 計畫內容

### 與上一屆的銜接
![](https://i.imgur.com/jxGcQEm.png)
大致上是用深度學習的方式去**預測客戶是否購買外匯**。上方圖片是當時的網路架構，EDM features 後來認為可有可無。這個網路特點是為了接收不一樣種類的資料，所以有不一樣的**頭部**。
> [name=淮蔚彭]
之前玉山那邊是用別種的機器學習方式。
---
![](https://i.imgur.com/SnnusWp.png)
上方圖片為這一次的基準模型，基本是上一屆使用的模型，不過資料種類更多。

### 此計畫新架構
![](https://i.imgur.com/Sj3p0oh.png)

### 資料集 & 標籤
* 輸入
    * 當月客戶相關資料
    * 當日往前三個月客戶的交易紀錄
    * 前三個月客戶的帳戶紀錄
    * 前三個月客戶的 AUM 紀錄
    * 前六個月各個外匯對台幣和美金的匯率
    * EDM 編號 
> [name=淮蔚彭] EDM 編號後來沒用了

|  | Training set | Validation set |
| -------- | -------- | -------- |
| 時間 | 2017/04-2017/11 | 2017/12 |
| 筆數 | 10,452,024 | 1,604,004 |
| 購買外匯的比例 | 0.0759 | 0.2341 |
* 標籤(共13個)
    1. 預測顧客未來14天是否購買外匯 `Binary Classification Task` `主要任務`
    2. 預測顧客未來十四天之內花了多少新台幣購買外匯 `Regression Task`
    3. 預測顧客下個月帳戶的折合台幣現值 `Regression Task`
    4. 預測顧客下個月的 AUM 餘額 `Regression Task`
    5. 預測顧客下個月的 AUM 現值 (包含保險、黃金存褶) `Regression Task`
    6. 預測顧客外來十四天內購買外匯的通路來源 `Regression Task`
    7. 預測多個幣別*未來十四天對新台幣匯率的平均 `Regression Task`
    8. 預測多個幣別*未來十四天對美金匯率的平均 `Regression Task`
    9. 預測顧客的婚姻狀態代碼 `Classification Task (3)`
    10. 預測顧客的年收入 `Regression Task`
    11. 預測顧客的職位代號 `Classification Task (3)`
    12. 預測顧客的顧客風險屬性代碼 `Classification Task (5)`
    13. 預測顧客的理財 CLUB 等級 `Classification Task (12)`

### 為什麼要多任務學習
在多任務學習中，因為使用了多個目標函數，在取完微分、對整體網路的做更新的時候，較不容易對某個目標函數有所偏頗，造成正規化的現象，而此往往可以幫助神經網路避免過度擬合的問題，達到在訓練資料集之外的情況時，有更好的表現。

### 參考的論文
* Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
https://arxiv.org/abs/1705.07115
    * 內容大致是，假設任務中有自己的 uncertainty，應該用這個來決定每個任務損失函數的重要性(scaling or weighting)。而用數學推出來 uncertainty 該放在損失函數的哪裡後，再用反向傳播的方式去求出之。所以 uncertainty 這個可學習參數就更像是模型中的一個參數，但出發點還是調整損失函數的權重。
在定義模型的程式碼裡，除了一般模型的配置，還有設幾個可學習的參數，那個就是這篇論文中說的 uncertainty。有幾個任務，就有幾個 uncertainty。
* AutoSeM: Automatic Task Selection and Mixing in Multi-Task Learning
https://arxiv.org/abs/1904.04153
    * 這篇論文是在介紹 task selection 跟 training ratio mixing 的新方法。而我們只使用其中前半部。因為這計畫中沒有使用跨資料集的訓練，並且在不跨資料集的情況下，第一篇論文的作用和這篇論文的後半部差不多。
我們實作的部分，跟原本論文的差不多，內容可以直接看論文。但有一些差異；
        1. 每次嘗試時，主任務都會一起訓練，輔助任務則是挑其中一樣。原因是因為我們沒有預訓練好的模型，訓練輔助任務的時候對主任務的影響較大。
        2. batch size 較大。因為資料數量非常多。
        3. decay rate 較小，因為我們的輔助任務較多。
* Many Task Learning with Task Routing
https://arxiv.org/abs/1903.12117
    * 由於尋找 Multi-task learning 中任務和共享資源的最佳組合會隨著模型深度越複雜變得越難找，因此本篇論文目標是使用 Task routing 來配置共享/特定的神經元，Task routing 是透 0/1 的遮罩來將限制下一層的輸入。每個神經元會分配給可以使用他的任務，也可以視作為每個任務創建專門的子網路。

### 環境操作
* 如果需要新的 python package，可以直接在終端機安裝，不用聯絡玉山人員。
* DB 的密碼和登入遠端的密碼不同。

### 困難點
* 資料處理
    * 學校通常學不到 pandas，但用 python 處理 mysql 資料，得學一下 pandas。
    * 資料量非常大。如果發現整理的有錯，重新整理非常耗時，也要注意程式的複雜度，可能有更快或用較少記憶體的寫法。
* 玉山電腦
    * 玉山那邊的電腦應該是每次開機，都會配一個 windows 的電腦，讓你去遠端操控它，然後你再用瀏覽器去(可能)另一個電腦開啟 container 跑那些計畫用的東西。
    * 在我們使用時，windows 上面設定，十五分鐘進入螢幕保護程式。但是我們沒有 windows 上面的密碼，所以我們不能修改時間，而且一旦跳出也回不去桌面。因此，在辦公室內等待程式結果的時候，記得偶而動一下滑鼠鍵盤。
    * 如果要跑數個小時的程式，可以將它放置並讓螢幕鎖住，跑完之後再去查看。如果在還沒跑完的時候打開，會看不到原本程式的輸出(輸出的是檔案的話沒差)，並且 python 的 kernel 會需要重新開啟，記憶體裡的東西會不見。
    * 晚上十二點，所有電腦會被關機。
> [name=淮蔚彭] 以上都是經驗推出來的，具體情況不確定。但確定密碼他們不會給我們。






