---
# System prepended metadata

title: icook recommandation

---

# icook recommandation

## 專案目的

建立超越前個禮拜的rule-base方法，且實作content based filtering


## 推薦思路
* 建立rule based方法
    * 使用不同時間維度並搭配
    * 依據過往使用頻率推薦不同熱門食譜
* 針對高頻率用戶使用collabrative filtering方法推薦，以期利用較豐富的歷史資料找到用戶可能偏好的食譜

## 實際推薦方法

* rule base
    * 1. 使用全部資料，計算favorites_df中最多人收藏的前k個食譜
    * 2. 使用特定月份，計算favorites_df中最多人收藏的前k個食譜
    * 3. 使用特定月份，計算favorites_df中最多(高/低頻率)使用者收藏的前k個食譜
    * 5. 使用特定月份，計算recipes_df中最多人跟著做的前k個食譜
    * 4. 使用特定月份，計算recipes_df中最多(高/低頻率)使用者跟著做的前k個食譜

* collabrative filtering
    * 使用surprise實作 collabrative filtering 針對高頻用戶推薦商品

## 結果

* 有依據設想規則產生推薦結果,但實際效果跟預想中不同。
* 最後選用12月發布的recipe_df中，最多人跟著做的前k個食譜做為此次baseline，此推薦分數為0.0067591
* 使用collabrative filtering對12月有使用紀錄的高頻率用戶推薦食譜後，一般用戶推薦baseline方法後，推薦分數降為0.0057459


## 反思

* 此次專案有遇到surprise套件因為記憶體爆掉，計算不完相似度的狀況，因此有些參數組合並沒有加入最後的變量，算是比較可惜的一點
* 有嘗試將使用者區分高低頻率，推薦不同食譜，但效果似乎不佳，或許這不是個好的變數
* 沒有使用到ingredients做為推薦參數的一環
* 此次測試資料的用戶皆是有收藏食譜紀錄的用戶，但完全套用collabrative filtering與content based filtering 最後的分數會比rule base方法來的差，可以想見這是在利用測試資料的狀況印證演算法會發生的事，因為實際應用應該是根據使用者使用時點選的食譜，接著推薦content base或collabrative filtering方法所篩選出的食譜。
* 測試資料與評量方式如果有該用戶此次搜尋的食譜名或材料，或許能更好評量推薦系統的成效
