--- 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模型太簡單 ![bg right:50% fit](../../img/notused/GBDTLR.png) ## 新聞推薦(NRMS) - 特徵 - 新聞標題 - Glove embedding, 長度為 300 - 標題平均11.29字 - 用戶觀看記錄 ![bg right:50% fit](../../img/recommend/NRMS.png) ## 新聞推薦(NRMS) | 非零特徵 | 資料筆數 | 時間 | | --------------------------------- | --------: | -------- | | $(300 \times 11.29) \times (N+1)$ | 1,000,000 | 7.3 分鐘 | ![bg right vertical fit](../../img/notused/NRMS-Input.png) <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 ![bg right:50% fit](../../img/notused/FM-Input.png) - BERT: 預設 embedding 長度為 768 - 共 1601 個非零特徵 1. 用戶特徵(51) - 頻道等級(1)、自選股(50) 2. 候選文章特徵(775) - 標題(768)、作者(1)、股票標籤(5) 3. 用戶行為記錄(775) - [文章特徵]$\times$[對文章的行為分數] 加權和 <!--TODO: 股票還可以做EMBEDDING,如上漲、下跌--> <!-- _class: small --> ## 使用的同學會資料2 - 文章資料 - 作者 - 股票標籤 - 文章標題 - 使用者資料 - 頻道等級 - 自選股 - 行為(文章被~~閱讀~~/點擊/按噓/按讚/轉推/回應/打賞) → 行為分數(number) ## FM 輸入結構2 ![bg right:50% fit](../../img/notused/FM-Input.png) - 共 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% ### 架構 ![bg right fit](../../img/notused/structure.png) - 如右圖,使用**點讚/點擊/回應**文章的特徵**平均**來表示用戶點擊記錄 <!-- 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) ![bg right fit](../../img/notused/x.png) ## 問題 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 ## 文章標籤數 ![width:600](../../img/notused/MicrosoftTeams-image.png) ## 輸入資料 - 閱讀記錄之後會記 - 其他行為(感興趣、檢舉…)的時間可以順便請後端記錄 ![bg right fit](../../img/notused/data.png) ## 資料處理 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 ## 流程 - 產生推薦文章 ![width:1100](../../img/notused/flow.png) ## 流程 - 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 ![](../../img/notused/flow2.png) ## Candidate Generation2 ![](../../img/notused/flow3.png) ## 新聞推薦 AUC - ![](../../img/notused/auc.png) - 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的時間範圍 ![bg right:70% width:800](../../img/notused/flow-now.png) <!--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)$ -->