---
marp: true
theme: gaia
paginate: true
style: table{font-size: 25px} section.small{font-size: 27px} section.medium{font-size: 30px} section.ultrasmall{font-size: 22px} section.twoc{columns:2 } section{font-family:Roboto, Noto Sans TC; font-weight: 300;} black{color: yellow; }
backgroundColor: #ECF0F1
headingDivider: 2
---
- PaddleRec提供的測試結果
| 模型 | auc | batch_size | epoch_num | Time of each epoch |
| :-------: | ---- | ---------- | --------- | ------------------ |
| FFM | 0.79 | 4096 | 10 | 約 14.3 小時 |
| FM | 0.78 | 4096 | 10 | 約 2.5 小時 |
| deepFM | 0.78 | 512 | 1 | 約 2 小時 |
| wide_deep | 0.79 | 512 | 4 | 約 2 小時 |
<!--FM 和 FFM 更新應差 39倍,不是因平行化,也不是因embedding -->
- 自行跑的結果(without GPU)
| 模型 | auc | batch_size | epoch_num | Time | Time Per Epoch |
| :-------: | ------ | ---------: | --------: | ----------------: | ----------------: |
| FM | 0.7060 | 512 | 10 | 30.0 小時 | 3.00 小時 |
| DeepFM | 0.7649 | 512 | 10 | 30.77 小時 | 3.08 小時 |
| FFM(k=9) | 未完成 | 512 | 1 | 253.44 小時(預估) | 253.44 小時(預估) |
| wide_deep | 0.7899 | 512 | 10 | 32.6 小時 | 3.26 小時 |
<!-- _class: small -->
---
- 自行跑的結果(with GPU)
| 模型 | auc | batch_size | epoch_num | Time | Time Per Epoch |
| :-------: | ------ | ---------: | --------: | ---------- | -------------: |
| FM | 0.7658 | 512 | 10 | 10.46 小時 | 1.04 小時 |
| DeepFM | 0.7653 | 512 | 10 | 10.68 小時 | 1.06 小時 |
| FFM(k=1) | 0.7801 | 512 | 10 | 37.3 小時 | 3.73 小時 |
| FFM(k=9) | 0.7604 | 512 | 10 | 81.85 小時 | 8.19 小時 |
| wide_deep | 0.7895 | 512 | 10 | 15.33 小時 | 1.53 小時 |
以上皆於Criteo資料集測試
<!-- _class: small -->
## 時間估計
$k$:隱向量長度, $N$:輸入特徵個數, $N'$:非零輸入特徵個數
| 方法 | 更新時間 | 模型大小 |
| ---- | ---------- | -------- |
| FFM | $O(kN'^2)$ | $O(fkN)$ |
| FM | $O(kN')$ | $O(kN)$ |
### 執行10Epoch的時間
| Dataset | 非零特徵 | 資料筆數 | FM | FFM | Wide and Deep |
| -------------- | -------- | ----------: | ---------- | ---------- | ------------- |
| Criteo | 39 | 44,000,000 | 12.45 小時 | 81.85 小時 | 16.33 小時 |
| 同學會(275 天) | 647 | 165,966,307 | | | |
| 同學會(5 天) | 647 | 1,179,916 | 19.43 分鐘 | | 19.04 分鐘 |
<!--_class: small-->
## GBDT + LR
- Facebook, 2014
- GBDT(Gradient Boosting Decision Tree)產生特徵Embedding
- LR(Logistic Regression)學習
- 歷史定位:特徵工程的模型化
- 缺點:GDBT難平行化,LR模型太簡單

## 新聞推薦(NRMS)
- 特徵
- 新聞標題
- Glove embedding, 長度為 300
- 標題平均11.29字
- 用戶觀看記錄

## 新聞推薦(NRMS)
| 非零特徵 | 資料筆數 | 時間 |
| --------------------------------- | --------: | -------- |
| $(300 \times 11.29) \times (N+1)$ | 1,000,000 | 7.3 分鐘 |

<span style="font-size:40%">Xeon E5-2620 v4 CPU, GTX1080Ti GPU</span>
## Money錢 資料
沒有瀏覽記錄
- 文章資料
- 分類
- ~~來源~~
- 標題
- ~~內文~~
- ~~發布時間~~
- 作者
- 標籤、keyword
- 點擊數
- 使用者資料
- ~~性別、居住地區、教育程度~~
- 行為資料
- 購買記錄
<!-- _class: twoc -->
## 同學會資料
以 2021/2/8 ~ 2021/11/10(275天) 的資料計算
- 共有 165,966,307 次行為(603,513/日)
- 用戶數 U
- 參與互動行為人數共 1,365,232人
- 文章數 A
- 有互動行為的文章共 4,202,055篇(15,280/日)
## 所有同學會資料
- 文章資料
- ~~文章頻道類型(101:個人公開頻道,102:個人私訊頻道……)~~
- ~~文章類型 (1:一般文 2: 問答文 3: 一般回文 4:問答回文 5: 轉推文)~~
- 作者
- 股票標籤(最多5個)
- 文章標題(前56個字)
- ~~文章內容~~
- ~~發布時間~~
- 使用者資料
- 頻道等級
- ~~性別、居住地區、教育程度~~
- 自選股
- ~~股票庫存~~<!-- 註:看不到股票庫存 -->
- 行為資料
- 行為類型(文章被~~閱讀~~/點擊/按噓/按讚/轉推/回應/打賞)
<!-- _class: ultrasmall -->
## 使用的同學會資料1
- 文章資料
- 作者(one-hot)
- 股票標籤(multi-hot)
- 文章標題(BERT embedding)
- 使用者資料
- 頻道等級(number)
- 自選股(multi-hot)
- 行為(文章被~~閱讀~~/點擊/按噓/按讚/轉推/回應/打賞) → 行為分數(number)
<!--
- 資料庫
- `CMOceanDB_V2.dbo.Article`(一年份資料)
- ...
- 文章資料
- 作者(`CMOceanDB_V2.dbo.Article`)
- 股票標籤()
- 文章標題(`CMOceanDB_V2.dbo.Article`)
- 使用者資料
- 頻道等級
- 自選股
- 行為資料
- 行為類型(文章被~~閱讀~~/點擊/按噓/按讚/轉推/回應/打賞)
-->
## FM 輸入結構1

- BERT: 預設 embedding 長度為 768
- 共 1601 個非零特徵
1. 用戶特徵(51)
- 頻道等級(1)、自選股(50)
2. 候選文章特徵(775)
- 標題(768)、作者(1)、股票標籤(5)
3. 用戶行為記錄(775)
- [文章特徵]$\times$[對文章的行為分數] 加權和
<!--TODO: 股票還可以做EMBEDDING,如上漲、下跌-->
<!-- _class: small -->
## 使用的同學會資料2
- 文章資料
- 作者
- 股票標籤
- 文章標題
- 使用者資料
- 頻道等級
- 自選股
- 行為(文章被~~閱讀~~/點擊/按噓/按讚/轉推/回應/打賞) → 行為分數(number)
## FM 輸入結構2

- 共 647 個非零特徵
1. 用戶特徵(35)
- 頻道等級(1)、自選股(34)
2. 候選文章特徵(306)
- 標題(300)、作者(1)、股票標籤(5)
3. 用戶行為記錄(306)
- [文章特徵]$\times$[對文章的行為分數] 加權和
<!--TODO: 股票還可以做EMBEDDING,如上漲、下跌-->
<!-- _class: small -->
## 資料處理
使用新DB(`MongoDB`和`ForumOcean`)的資料取代舊DB(`CMOceanDB_V2`)
新增資料
- 用戶行為:文章被感興趣、收藏、投票、回文
只有舊DB有的資料
- 用戶行為:文章被點擊(Table `ArticleCourse`)
- 用戶資料:頻道等級(Table `Level`)
移除沒有正確記錄的資料
- 用戶行為:文章被瀏覽
<!--_class: small-->
---
### 目標(研究中)
最終目標:用戶使用時間⬆️
1. ~~行為分數⬆️~~
4. 點讚/點擊/回應率⬆️
- 有點讚/點擊/回應 = 1,(有行為)$\cap$(未點讚/點擊/回應) = 0
- 有點讚/點擊/回應占總行為的61.4%/12.2%/10.2%
### 架構

- 如右圖,使用**點讚/點擊/回應**文章的特徵**平均**來表示用戶點擊記錄
<!--
SELECT ArticleId, MemberChannelId, BehaviorPopularity
FROM [CMOceanDB_V2].[dbo].[ArticleCourse] where timestamp between '2021-12-21' and '2022-01-09' GROUP BY ArticleId, MemberChannelId, BehaviorPopularity
having behaviorPopularity=?
-->
<!--_class: small-->
<!--
| 天數 | 文章數 | 行為數 | 用戶數 |
| ---- | -----: | -------: | -----: |
| 14 | 126091 | 2981389 | 246510 |
| 28 | 259001 | 6219009 | 335929 |
| 5 | 58102 | 1176429 | 152326 |
| 7 | 61156 | 1357516 | 163479 |
| 90 | 785454 | 18383413 | 536865 |
-->
---
##### 同學會資料3
| 特徵 | 原始資料 | 處理方式 | 結構 | 長度 | 非零長度 |
| -------- | --------------------------------------- | ------------------------------------------------------------------------------------------- | --------- | ---- | -------- |
| 作者 | 頻道 ID | 追蹤人數>1500 的非股票頻道,其餘頻道為同一類 | one-hot | 884 | 1 |
| 文章標題 | 文章內文 | 取前 56 個字做 word2vec embedding | embedding | 300 | 300 |
| 股票標籤 | 股票代號(如 0050)最多 5 個 ❓ | 依[產業別](https://data.gov.tw/dataset/18419)分類(共 29 類),各標籤有看多/看空/不指定三種 ❓ | multi-hot | 87 | <=5 |
| 自選股 | 股票代號(如 0050)最多 50 個 | 依[產業別](https://data.gov.tw/dataset/18419)分類(共 29 類) | multi-hot | 29 | <=29 |
| 行為 | 同上 | 不處理 | multi-hot | 7 | <=7 |
| 行為分數 | 文章是否被點擊/按噓/按讚/轉推/回應/打賞 | 各行為有一分數,加總有執行行為的分數 | number | 1 | 1 |
| 頻道等級 | 含 0 正整數 | 不處理 | number | 1 | 1 |
<!--_class: small-->
## 使用的同學會資料3
- Input: 共 U + 2A 個特徵
1. 用戶特徵(U)
- 頻道等級、自選股
2. 候選文章特徵(A)
- 標題、作者、股票標籤
3. 用戶行為記錄(A)
- 使用**點讚/點擊/回應**文章的特徵**平均**
- Output: 是否有**點讚/點擊/回應**
## 目標
<!--最上層: 推薦使用者喜歡的,但因為喜歡太難衡量,用ctr, 評分,停留時間來代替喜歡 → ctr, 評分… -->
- `大部份推薦系統`:點擊率(CTR, Click Through Rate)、點擊成本(CPC, Click Per Cost)
- `電商`:轉換(Conversions)
- 完成某目標,如購買
- TODO: 看DIN, DIEN
- `雙邊市場`:正確訂單於搜尋結果的排名
- Evaluation: NDCG
- Airbnb, Uber, Shopee
- `評分(Movielens)`:接近真實評分
- `Youtube`、`同學會`:使用者參與度
- 使用時間
同學會沒有記錄使用時間
<!-- 和強化學習的reward不同的地方是,因為推薦系統沒有明確的目標,所以需要人來訂分 -->
## 推薦好文章
與其推薦好文章,不如消除或隱藏爛文章,以提高文章的平均水準
- 一天約22000篇文章
- 0個讚文章占 ❓ %
## 推薦好文章
與其推薦好文章,不如消除或隱藏爛文章,以提高文章的平均水準
- 一天約22000篇文章
- 0個讚的文章占 62% (13702)

## 問題
1. User Behaviour Model
- ~~行為分數~~
- 研究中
3. Label、目標
- ~~行為分數~~
- 長期目標為觀看時間
- 目前暫以特定行為代替,如點讚/回應
- 點讚數量約為回應4倍
- 點讚=1,未點讚=0
## 使用的同學會資料 Ver. 4
- Input Feature: 共 U + 2A 個特徵
1. 用戶特徵(U)
- 頻道等級、自選股
3. 用戶行為記錄(A)
- 用戶**點讚**過的文章特徵的**平均**
2. 候選文章特徵(A)
- 標題、作者、股票標籤
- Output Label: 若用戶有對候選文章**點讚**=1,其他=0
## FM 與 Wide and Deep 的特徵比較
In every model, FM and Wide & Deep **use the same feature**
- NFM(Neural Factorization Machines)
- Categorical feature only
- AFM(Attentional Factorization Machines)
- Categorical feature only
- LSTUR(Long-and Short-term User Representations)
- TF-IDF features from news title
- DKN(Deep Knowledge-Aware Network)
- TF-IDF features
- Averaged entity embeddings
<!--_class: small-->
---
### FM修正
- 修改 FM 的 Input
- 文章標題
1. 使用TF-IDF Vector
2. 將Embedding轉換成Categorical feature
## 同學會新資料
- 文章資料:MongoDB
- 頻道和文章的關聯
- 包含行為資料
- 一天更新一次
- 行為資料:ELK
- 30萬/天
- 即時更新
- 大約存放10天的記錄
- 其他:SQL
## 文章標籤數

## 輸入資料
- 閱讀記錄之後會記
- 其他行為(感興趣、檢舉…)的時間可以順便請後端記錄

## 資料處理
1. 以時間區分
- (N天內發表的文章A) → (N天內對A的行為資料B) → (有參與行為的用戶U)
- → N天內用戶對N天內的文章的行為
- Train data:第1~N天,共N天
- Test data:第N+1~N+n天,共n天
2. 以使用者區分
- 從用戶資料U中隨機抽出用戶,用戶累計約20%的行為資料為Test data,其餘為Train data
## 流程 - 產生推薦文章

## 流程 - Candidate Generation
用多種方法取得候選文章
- 已實作方法
1. Collaborative Filtering
2. 股票標籤推薦
3. K-means分群
- 取得用戶相關文章
- 取得追蹤作者的文章
- 取得自選股相關文章
- 取得熱門文章
## 流程 - Ranking
#### Model - Wide and Deep
- Input Feature: 共 U + 2A 個特徵
1. 用戶特徵(U)
- 頻道等級、自選股
3. 用戶行為記錄(A)
- 用戶**留言**過的文章特徵的**平均**
2. 候選文章特徵(A)
- 標題、作者、股票標籤
- Output Label: 若用戶有對候選文章**留言**=1,其他=0
## Candidate Generation1

## Candidate Generation2

## 新聞推薦 AUC
- 
- https://paperswithcode.com/sota/click-through-rate-prediction-on-criteo
## 結果
- 以留言為目標做Classification
- Wide and Deep
- Train: `2021/12/20`~`2021/12/27`(297564筆, 3.03GB)
- Test: `2021/12/27`~`2021/12/29`(87335筆, 942MB)
- 只取活躍行為者(約占有行為的使用者30%、占所有行為的84%)
## 結果
| 方法 | 參數 | 預測結果 | 標籤 | 訓練時間 | 預測時間 |
| ------------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------------------- | -------------------------------------------------------- | ------------------------------- |
| Wide and Deep | Batchsize:32<br>Epoch:200<br>Fully Connected:[1024, 512, 256, 128, 64, 16] with ReLU/Sigmoid<br>Adagrad:0.000001 | <span style="color:red">auc:0.7810</span> | 對文章點讚=1,有其他行為但不點讚=0 | | |
| Wide and Deep | 同上 | auc:0.8213 | 對文章留言=1,有其他行為但不留言=0 | 7.18Hour/200Epoch<br>2.15Minute/Epoch<br>2306Data/Second | 17.36 Second<br>5031Data/Second |
## 取得資料
- 機器人文章、新聞文章不推薦
- Kafka: 即時接收資料,暫時用不到
## 計算特徵重要性
#### 方法
1. 一次移除一個特徵並重新訓練模型,確認模型預測正確降低程度
2. 計算Gradient Descent
## Candidate Generation
輸入:兩日內文章
- 優先取
- 追蹤的人發的文章
- 自選股相關文章
- 熱門文章
- 再用其他方法評分
1. 計算User和Item的Embedding
2. 非學習方法
## Candidate Generation
- 熱門文章取法
1. 依行為計分,計算文章總分
2. 目前實作的「最熱」算法
- 計算Embedding方法
1. FM: 輸入為UserID和ItemID
1. Graph Embedding
2. 其他: DSSM...
- 非學習方法
1. Collaborative Filtering協同過濾
1. KMeans分群
2. Stock Prefer股票標籤
- 最多隨機取1000篇以避免計算時間太長
<!--_class: small-->
## 預測時間
兩天總文章數: 48289
- 48289 Items / 497s → 130s
- 預測時間: 38.99s
- 1000 Items / 6.12s
- 預測時間: 2.02s
- 目標
- Candidate Generation: 最多 1000 篇文章
- 降低總預測時間
<!--簡化模型、簡化input、換框架-->
## 目前同學會特徵
| 特徵 | 原始資料 | 處理方式 | 結構 | 長度 | 非零長度 |
| -------- | ------------------------------------------------- | ------------------------------------------------------------------------------- | --------- | ---- | -------- |
| 作者 | 頻道 ID | 追蹤人數>1500 的非股票頻道,其餘頻道為同一類 | one-hot | 884 | 1 |
| 文章標題 | 文章內文 | 取前 56 個字做 word2vec embedding | embedding | 300 | 300 |
| 自選股 | 股票代號(如 0050)最多 50 個,可以有多個自選股清單 | 依[產業別](https://data.gov.tw/dataset/18419)分類(台股 29 類、美股 16 類) | multi-hot | 45 | <=45 |
| 股票標籤 | 股票代號(如 0050)最多 5 個 | 依[產業別](https://data.gov.tw/dataset/18419)分類,各標籤有看多/看空/不指定三種 | multi-hot | 135 | <=5 |
| 頻道等級 | 含 0 正整數 | 不處理 | number | 1 | 1 |
## 特徵改進(預定)
- 個股Input Feature
- 台股[1744支](https://www.sfb.gov.tw/ch/home.jsp?id=1010&parentpath=0%2C4%2C109)、美股[>4000支](https://www.nasdaq.com/market-activity/stocks/screener),若做multi-hot有點多
- 可做Embedding
- 清理Word Embedding資料
- Emoji
- URL連結
- Stop words
- 簡體字
- 使用全文而非前56字
<!--_class: medium-->
## 資料改進
- Test data 使用 train data 的行為記錄
- 限制每個使用者的資料筆數
## 實例
http://localhost:9526/docs/
- candidate generation篇數
- 計算有行為的文章的auc和logloss
- 推薦所有文章(依文章分數排列)
| uid | auc | logloss | candidate generation | 所有文章 |
| ------- | ---- | ------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| 3752240 | 0.45 | 0.9629 | 100篇(全為熱門) [檔案](../../../../../Code/Recommendation/candidate3752240.json) | [檔案](../../../../../Code/Recommendation/predict3752240.json) |
| 6259921 | 1 | 0.1675 | 126篇(熱門+追蹤) [檔案](../../../../../Code/Recommendation/candidate6259921.json) | [檔案](../../../../../Code/Recommendation/predict6259921.json) |
| 1278106 | 0 | 0 | 389篇(熱門+追蹤+自選) [檔案](../../../../../Code/Recommendation/candidate1278106.json) | [檔案](../../../../../Code/Recommendation/predict1278106.json) |
| 467903 | 1 | 1.317 | 221(熱門+追蹤+自選) [檔案](../../../../../Code/Recommendation/candidate467903.json) | [檔案](../../../../../Code/Recommendation/predict467903.json) |
| 2051501 | 1 | 0.1427 | 242篇(熱門+追蹤+自選) [檔案](../../../../../Code/Recommendation/candidate2051501.json) | [檔案](../../../../../Code/Recommendation/predict2051501.json) |
<!--TODO: start-->
## 修正
- 修正Test Data會使用Train Data之後才發生的行為的錯誤
- auc: 0.79747
## Abalation Study
- 參數Batchsize:32, Epoch:200, Fully Connected:[1024, 512, 256, 128, 64, 16] with ReLU/Sigmoid, Adagrad:0.000001
- 對文章留言=1,有其他行為但不留言=0
| 方法 | 預測結果 | 相差 |
| ---------------- | ----------- | -------- |
| 所有特徵 | auc:0.79747 | |
| 移除文章標題 | auc:0.79275 | -0.00472 |
| 移除用戶等級 | auc:0.79269 | -0.00478 |
| 移除自選股 | auc:0.79206 | -0.00541 |
| 移除文章股票標籤 | auc:0.78456 | -0.01291 |
| 移除文章作者 | auc:0.76114 | -0.03633 |
## 廣告文處理
- 預先處理
- Rule-based
- 額外train一個model
- 推薦的模型無法處理詐騙
- 文章特徵比較
- 作者不同
- 文字embedding幾乎相同
- 文章股票標籤相同
- 用戶行為(互動)較少
- 可加上檢舉次數作為feature
<!--人類惡意攻擊 adverseral attack -->
## 案例分析
- simple case: 只看一支股票A的人
- 用戶 有/無 將A放入自選股
- 假設用戶只對所有包含A的文章有行為
- 全留言(全1)/一半留言(半1半0)/全不留言(全0)
預期
- 全留言: 會推相同產業股票的文章
- 一半留言: ❓
- 不留言: 不會推相同產業股票的文章
## 案例分析
<!--
2022-03-11 13:56:22.653 | WARNING | __main__:generateFakeUserByStock:878 - stock 6111 shape (275, 5)
2022-03-11 13:56:47.589 | WARNING | __main__:generateFakeUserByStock:878 - stock 2718 shape (2, 5)
2022-03-11 13:56:47.812 | WARNING | __main__:generateFakeUserByStock:878 - stock 3512 shape (4, 5)
2022-03-11 13:56:48.218 | WARNING | __main__:generateFakeUserByStock:878 - stock 1802 shape (73, 5)
2022-03-11 13:56:54.493 | WARNING | __main__:generateFakeUserByStock:878 - stock 1229 shape (20, 5)
-->
6111(): 共275篇文章
| 有自選股 | | | |
| 無自選股 | | | |
---
###### 案例分析
| UID=3752240 | 正樣本 | 負樣本 | 預測結果 | 預測結果(加權) |
| ----------- | ----------------------- | ----------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| 作者 | '702': 13 | '702': 14 | '702': 9<br>'645': 8<br>'442': 8<br>'508': 4<br>'403': 3 | '702': 6.017127633094788<br>'645': 5.6935224533081055<br>'442': 5.296189486980438<br>'508': 2.533134341239929<br>'403': 2.059164583683014 |
| 股票產業 | '28': 10<br>'13': 3 | '28': 13<br>'13': 1 | '21': 16<br>'28': 14<br>'0': 7<br>'9': 6<br>'15': 4 | '28': 8.96494323015213<br>'21': 7.161814332008362<br>'0': 4.164242267608643<br>'24': 2.012532353401184<br>'5': 1.5356134176254272 |
| 個股 | '1785': 10<br>'2610': 3 | '1785': 13<br>'2610': 1 | 'TWA00': 6<br>'2317': 3<br>'2105': 3<br>'2014': 3<br>'2482': 2 | 'TWA00': 3.5340999960899353<br>'2317': 1.6003779768943787<br>'2482': 1.48931086063385<br>'2105': 1.4488155245780945<br>'2461': 1.3094945549964905 |
---
###### 案例分析
| UID=6259921 | 正樣本 | 負樣本 | 預測結果 | 預測結果(加權) |
| ----------- | --------- | ------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| 作者 | '702': 1 | '702': 13<br>'640': 1 | '702': 31<br>'564': 3<br>'337': 2<br>'442': 2<br>'663': 2 | '702': 21.59288078546524<br>'564': 2.3949829936027527<br>'337': 1.7035017013549805<br>'442': 1.6563262343406677<br>'663': 1.5618103742599487 |
| 股票產業 | '21': 1 | '21': 9<br>'28': 8<br>'22': 3<br>'24': 3<br>'23': 2 | '21': 60<br>'0': 4<br>'24': 3<br>'25': 3<br>'23': 3 | '21': 23.051762223243713<br>'24': 2.2469388246536255<br>'23': 2.0688310265541077<br>'9': 1.5870697498321533<br>'25': 1.5757833123207092 |
| 個股 | '6104': 1 | '3305': 8<br>'6104': 3<br>'2376': 2<br>'3588': 2<br>'2409': 1 | '2303': 4<br>'5483': 4<br>'3035': 4<br>'TWA00': 3<br>'6182': 3 | '5483': 2.844673454761505<br>'2303': 2.4573071002960205<br>'6182': 2.150454819202423<br>'6488': 2.1019363403320312<br>'2498': 1.5370911955833435 |
---
###### 案例分析
| UID=1278106 | 正樣本 | 負樣本 | 預測結果 | 預測結果(加權) |
| ----------- | ------------------------------------------------------------- | ------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| 作者 | '700': 4 | '700': 4 | '645': 8<br>'442': 6<br>'205': 5<br>'403': 4<br>'508': 4 | '645': 6.137364029884338<br>'442': 4.017549097537994<br>'205': 3.295173227787018<br>'508': 2.7215352058410645<br>'403': 2.718760311603546 |
| 股票產業 | '13': 16<br>'23': 4 | '13': 16<br>'23': 4 | '21': 16<br>'13': 13<br>'0': 10<br>'9': 9<br>'23': 6 | '21': 6.203213393688202<br>'13': 4.955893874168396<br>'9': 4.953993439674377<br>'0': 3.4948708415031433<br>'5': 3.107422649860382 |
| 個股 | '2603': 4<br>'2609': 3<br>'2615': 3<br>'2636': 2<br>'2409': 2 | '2603': 4<br>'2609': 3<br>'2615': 3<br>'2636': 2<br>'2409': 2 | 'TWA00': 7<br>'2603': 5<br>'2609': 4<br>'2014': 3<br>'4132': 3 | 'TWA00': 3.4948708415031433<br>'2609': 2.115208923816681<br>'2603': 2.110948145389557<br>'1529': 1.6582815647125244<br>'2105': 1.556811273097992 |
---
###### 案例分析
| UID=467903 | 正樣本 | 負樣本 | 預測結果 | 預測結果(加權) |
| ---------- | -------------------------------------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| 作者 | '702': 2 | '702': 6 | '702': 13<br>'645': 8<br>'442': 5<br>'205': 5<br>'403': 4 | '702': 6.590899646282196<br>'645': 4.709285944700241<br>'442': 2.82102569937706<br>'205': 2.687421202659607<br>'403': 2.5931748747825623 |
| 股票產業 | '0': 2<br>'26': 1<br>'15': 1<br>'5': 1<br>'23': 1 | '21': 4<br>'0': 2<br>'26': 1<br>'15': 1<br>'5': 1 | '0': 25<br>'21': 12<br>'13': 9<br>'9': 7<br>'6': 5 | '0': 8.7772196829319<br>'21': 4.45562806725502<br>'9': 2.5705286860466003<br>'15': 2.048224985599518<br>'6': 1.6637003719806671 |
| 個股 | '00900': 2<br>'2347': 1<br>'2883': 1<br>'1580': 1<br>'3008': 1 | '00900': 2<br>'3711': 2<br>'2347': 1<br>'2883': 1<br>'1580': 1 | 'TWA00': 18<br>'4132': 5<br>'1611': 3<br>'2603': 3<br>'2014': 3 | 'TWA00': 7.202548027038574<br>'4132': 1.5746716558933258<br>'1611': 1.0583577454090118<br>'2504': 1.0369415879249573<br>'6118': 0.7090867757797241 |
---
###### 案例分析
| UID=2051501 | 正樣本 | 負樣本 | 預測結果 | 預測結果(加權) |
| ----------- | -------------------------------------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| 作者 | '662': 1 | '604': 4 | '442': 11<br>'645': 6<br>'205': 6<br>'403': 4<br>'376': 3 | '442': 10.089585959911346<br>'205': 5.651042819023132<br>'645': 5.578168570995331<br>'403': 3.741880416870117<br>'376': 2.8349897265434265 |
| 股票產業 | '22': 2<br>'23': 1<br>'0': 1<br>'25': 1 | '13': 7<br>'21': 5<br>'23': 4<br>'0': 3<br>'24': 1 | '0': 19<br>'21': 12<br>'23': 11<br>'22': 7<br>'24': 6 | '0': 12.17797976732254<br>'21': 6.52028614282608<br>'22': 6.477800250053406<br>'23': 5.498333692550659<br>'25': 3.732504725456238 |
| 個股 | '2374': 1<br>'2417': 1<br>'6235': 1<br>'TWA00': 1<br>'6158': 1 | '2603': 4<br>'TWA00': 3<br>'2303': 3<br>'2340': 2<br>'2610': 2 | 'TWA00': 12<br>'4132': 4<br>'2409': 4<br>'6150': 3<br>'3138': 3 | 'TWA00': 9.338282227516174<br>'4132': 2.839697539806366<br>'6150': 2.832429051399231<br>'2465': 1.8704217076301575<br>'2409': 1.8368200063705444 |
## 案例分析
- cold-start: 一篇都沒看,等級=0,但有自選股的人
- all-positive: 全部都留言的人(隨機文章)
- all-negative: 全部都不留言的人(隨機文章)
<!--
## 案例分析
- spam: 文章相似,但後面加上`+line`等文字,查看分數
- 作者不同
- 文章內容幾乎相同
- 股票標籤相同
-->
## TODO
- 降低推薦所需時間
- Wide & Deep debug
- 台股分類變多(71種)
- 案例不夠多: 增加Train Data的時間範圍

<!--TODO: end-->
<!--
## 行為分數
1. Airbnb: 設行為分數
3. 目前的方法是行為分數的特例
```
{
SEE: 0,
REPLY: 1,
LIKE: 0,
BOO: 0,
SHARE: 0,
...
}
```
## 制定行為分數
假設目標是回應數,令其分數$S_{Reply}=1$。
而觀看分數為
→ $S_{See}=S_{Reply} \times P(Reply|See) = P(Reply|See)$
制定其他的行為$X$的分數
$Score_{X}=P(Reply|X)$
-->