Recommendation System — รวม Machine Learning แนะนำสินค้าและการบริการวิธีการต่าง ๆ เข้ามาอ่านกันได้เลย EP.1

Naratip Boonbanyen
Super AI Engineer
Published in
5 min readMar 27, 2021

หลายๆ บริษัทที่ประสบความสำเร็จเช่น Amazon, Netflix, Spotify หรือ บริษัทในไทยอย่าง 425Degree, Notebookspec, Bigcamera ทุกบริษัทต่างใช้ ระบบที่เรียกว่า Recommender Systems มาช่วยแนะนำลูกค้าในด้านต่าง ๆ ไม่ว่าจะเป็นสินค้าใหม่ สินค้าใกล้เคียง (หนัง เพลง แฟชั่น อุปกรณ์อิเล็กทรอนิกส์ etc.) เพื่อเป็นการสร้างประสบการณ์ที่ดีให้กับลูกค้า เพิ่มความพึงพอใจ รวมไปถึงเพิ่มยอดขายได้อย่างเห็นผลจริง

ตัวอย่าง Recommendation System ของ Amazon

ตัวอย่าง Recommendation System ของ Netflix

ตัวอย่าง Recommendation System ของ Spotify

ตัวอย่าง Recommendation System ของ 425Degree

https://www.425degree.com/

ตัวอย่าง Recommendation System ของ Notebookspec

https://notebookspec.com/web/

ตัวอย่าง Recommendation System ของ Bigcamera

https://www.bigcamera.co.th/

ก่อนที่เราจะลงลึกเรื่อง Coding เรามาเล่าถึงทฤษฎีกันก่อน

โมเดลในการทำ recommendation system โดยส่วนใหญ่แล้ว จะมีได้หลายวิธีการโดยที่มีข้อดีข้อเสียแตกต่างกันออกไป แต่ทั้งนี้ทั้งนั้น ในหลายๆวิธีการนี้ โมเดลก็มักจะอยู่ในรูปแบบของ utility function ของผู้ใช้ และ สินค้า

utility function คือ ฟังก์ชั่นที่แสดงถึงความพอใจที่ผู้บริโภคได้รับ ซึ่งความพึงพอใจนี้ก็คือ Rating ของสินค้าและ บริการนั้นเอง

โดยลักษณะของ rating นั้นก็จะมี 2 ประเภท คือ Explicit Rating คือ สิ่งที่ผู้ใช้บอกเราตรงๆเลยว่า เค้าชอบหรือไม่ชอบอะไร เช่น คะแนนรีวิว การให้ดาวสินค้า และ Implicit Rating คือสิ่งที่ลูกค้าไม่ได้บอกเราตรง ๆ แต่เป็นสิ่งที่สามารถเก็บได้จาก พฤติกรรมการใช้งาน Platform เช่น การคลิกเข้าไปดูสินค้านั้น ระยะเวลาการใช้งานในหน้าเว็ปไซต์สินค้านั้นๆ หรือการที่ผู้ใช้กด favorite/การเพิ่มสินค้าลงตระกร้า เป็นต้น

สำหรับประเภทของโมเดลนั้น ก็สามารถแบ่งได้คร่าวๆ ดังนี้

https://www.jie-tao.com/brief-analysis-on-recommendation-system-of-netflix-youtube/
  • Popularity เป็นวิธีการที่ง่ายที่สุดในการทำ Recommendation System โดยจะใช้คะแนน Rating ที่ผู้ใช้ทุกคนในระบบสนใจ มาทำ operation ต่าง ๆ เพื่อหาสินค้าที่เป็น Best Seller หรือ Most Review วิธีการนี้เหมาะสำหรับลูกค้าใหม่ แต่ในขณะเดียวกันวิธีการนี้ก็ไม่เหมาะกับการแนะนำสินค้ารายบุคคล (personalized recommendation) เป็นการแสดงให้ลูกค้าเห็นกว้างๆ ว่าลูกค้าส่วนใหญ่ สนใจในสินค้าแบรนไหน รุ่นอะไรเท่านั้น
  • Collaborative filtering (CF) หลักการของ collaborative filtering คือ การพยายามเอาข้อมูลจากคนหมู่มากหลายๆคนมาช่วยๆ กันในการเดาดูว่าผู้ใช้คนนี้จะชอบอะไร ซึ่งก็สามารถทำได้หลายแบบ โดยส่วนใหญ่จะแบ่งออกเป็น 2 วิธีคือ Memory-based และ Model-based.
  • Content-Based (CB) สำหรับวิธีการนี้เราก็ดูโปรไฟล์ย้อนหลังของผู้ใช้แต่ละคนว่าเค้าเคยซื้อของมาแบบไหนบ้าง ตัวอย่างเช่น ผู้ใช้ A มักจะเข้าไปดูหนังแนว sci-fi fantasy อยู่เสมอ เราก็อาจจะแนะนำหนังแนวนั้นให้กับผู้ใช้ A เพิ่มเติม เป็นต้น
  • Hybrid วิธีการนี้จะเป็นการผสมระหว่าง CF และ CB เราสามารถใช้หลักการทั้ง 2 วิธีเข้าด้วยกัน หรือเซ็ทค่าน้ำหนักเพื่อเลือกใช้โมเดลในการแนะนำสินค้าให้กับลูกค้า
  • Deep Learning เป็นการทำ extreme multi-class classification โดยมองว่าสินค้าแต่ละอย่างนั้นเป็นเหมือนคลาสๆหนึ่ง และเราต้องการจะหาคลาสที่มีความน่าจะเป็นที่ผู้ใช้จะซื้อมากที่สุด โดยสำหรับวิธีการนี้ มี Paper ที่น่าสนใจคือ “Deep Neural Networks for YouTube Recommendations”

สำหรับส่วน Coding นั้น ในบทความนี้จะขอพูดถึง การใช้วิธี Popularity ที่เหมาะสำหรับแนะนำสินค้าสำหรับลูกค้าใหม่ และ วิธี Collaborative filtering:Model-based ซึ่งเหมาะสำหรับลูกค้าเดิม

สำหรับ Dataset ที่เราจะนำมาใช้เพื่ออธิบาย เราจะใช้ Dataset ของ Amazon Product Reviews ซึ่งมีแชร์ไว้อยู่ใน Kaggle

เรามาเริ่มส่วนที่สนุกที่สุด คือการ Coding กันดีกว่า

1. EDA

ก่อนที่เราจะเริ่มทำโมเดล เราจะต้องสำรวจข้อมูลก่อน Amazon Product Reviews คือ ชุดข้อมูลที่คัดมาแล้วอย่างดี มีมากกว่า 7,000,000 ratings ไม่มี Missing Value ซึ่งตัวอย่างนี้เราจะขอตัดมาแค่ 1,048,576 Rating(คะแนน 1–5 ดาว) โดยมี 786,330 User และ 61,894 Products

เนื่องจาก Data ไม่ได้มีหัวตารางมาให้เราเลยต้องกำหนดหัวตารางเอง

เลือกช่วงข้อมูลออกมาแค่ 1,048,576 แถว และ Drop คอลัม “timestamp” ทิ้ง

ตรวจสอบค่าสูงสุด-ต่ำสุดของ Rating และ ตรวจสอบจำนวน User ที่ซ้ำกัน และ Product ที่ซ้ำกันว่ามีทั้งสิ้นกี่หน่วย

ตรวจสอบ Missing Value ใน dataset ซึ่งจากข้อมูลชุดนี้ จำนวน Missing Value = 0

Plot Histogram ดูจำนวน Rating ในแต่ละ class

2. เริ่มทำโมเดล Popularity Based Recommendation

ตามที่ได้อธิบายข้างต้น Popularity Based เป็นการทำระบบ Recommendation System เพื่อให้ลูกค้าใหม่ได้เห็นว่าสินค้าชิ้นไหนถูกพูดถึงบ่อย แต่ไม่สามารถใช้ในการทำ personalized recommendation นะครับ

Filter Data เลือก Product ที่มีคนโหวต Rating ให้มากกว่า 50 ครั้งขึ้นไป ซึ่งจะเหลือข้อมูลทั้งสิ้น 677,947 rows และเหลือจำนวน Product ทั้งสิ้น 3,813 รายการ

Group productID หาค่าเฉลี่ยของ Rating ใน Product แต่ละชนิด และ สร้างคอลัมใหม่นับค่าความถี่ที่ product โดนให้คะแนน

ตรวจสอบค่าต่ำสุด — สูงสุด ของความถี่การให้คะแนน Product จากนั้น Plot Histogram ออกมาดูการกระจายตัว จะเห็นได้ว่า มีสินค้าบางชนิดเท่านั้น ที่มีความถี่ของการให้คะแนน Rating โดดเด่นออกมา

จากนั้น Plot Histogram ดูการกระจายตัวของ คะแนนเฉลี่ย Rating ซึ่งจะเห็นได้ว่า Product ส่วนใหญ่ จะได้รับคะแนนอยู่ที่ช่วง 4 — 4.5 คะแนน

ซึ่งสุดท้ายเราสามารถ เลือกใช้คำตอบในการ แนะนำสินค้าจากทั้ง 2 Feature นี้ได้ โดยจากตัวอย่างนี้เราจะเลือกใช้ สินค้าที่มีถูกให้คะแนนบ่อยเป็นตัวคำตอบ

และนี้คือ Top 30 สินค้าที่ถูกให้คะแนนสูงสุด(ได้รับการโหวตเยอะ ไม่ใช่ว่าได้ Rating ดีนะครับ แค่เป็นกลุ่มสินค้าที่มีการพูดถึงเยอะที่สุด เท่านั้น)

3. ทำโมเดล Model-based collaborative filtering system

Model-based collaborative filtering system เป็นโมเดลที่ใช้สำหรับ แนะนำลูกค้าเก่าที่เคยซื้อสินค้ามาแล้ว หรือมีข้อมูลแล้ว ไม่สามารถใช้งานกับลูกค้าใหม่ได้

Filter Data เลือก Product ที่มีคนโหวต Rating ให้มากกว่า 50 ครั้งขึ้นไป และ Filter Data เลือก UserID ที่เคยให้คะแนนมากกว่าหรือเท่ากับ 2 ครั้ง ซึ่งจะเหลือข้อมูลทั้งสิ้น 201,170 rows(เนื่องจากข้อมูลมีมากเกินไปและรันบน Colab ไม่ผ่านจึงต้องตัดข้อมูลบางส่วนทิ้งไป)

และจะเหลือ Product ทั้งสิ้น 3,813 รายการและUser 76,132 User

สร้าง Pivot Table โดยให้ Rows = Product, Columns = UserID, Values = Rating โดยที่ Value นั้น agg function default คือ mean

จากนั้นเราจะนำค่า Pivot table มาทำ SVD(Singular Value Decomposition)ซึ่งเป็นหนึ่งในกระบวนการทำ Feature reduction

จากนั้นนำผลลัพธ์ที่ได้มาหา Correlation Matrix โดยหาความสัมพันธ์ระหว่างสินค้า

เมื่อเราได้ค่าความสัมพันธ์ระหว่าง Item-Item มาแล้ว เราจะสามารถใช้งานได้ดังต่อไปนี้

สมมติว่า ลูกค้า เคยซื้อสินค้า รหัส 1400501520 ซึ่งสินค้านี้จะตรงกับข้อมูลใน index ที่ 2 ภายใน DataFrame rating_matrix

จากนั้นเลือกค่า ลำดับที่ 2 ของสินค้า ออกมาจาก DataFrame correlation_matrix ซึ่งจะได้ค่า correlation ที่เกี่ยวข้องกับสินค้าลำดับที่ 2 ออกมาทั้งหมด

จากนั้นทำการเลือกค่า correlation ที่มากกว่า 0.65 กับสินค้าลำดับที่ 2 หรือก็คือการเลือกค่าที่มีความสัมพันธ์แบบไปทางเดียวกัน(Positive correlation)กับสินค้าลำดับที่ 2 นั้นเอง และผลลัพธ์ที่ได้ออกมาคือสินค้าที่เราจะแนะนำให้กับผู้ที่เคยซื้อสินค้าในลำดับที่ 2 ไปนั้นเอง

สำหรับในส่วน Colab สามารถเข้าไปดู colab ที่ผมเขียนไว้ได้ดังลิ้งข้างล่างนะครับ

ขอบคุณที่อ่านจนจบนะครับ เดียวถ้าผู้เขียนมีเวลาว่างเพิ่มจะมาเขียน วิธีการที่เหลืออย่าง Collaborative filtering (CF) รูปแบบ memory-based, วิธี Content-Based (CB) และ วิธี Deep Learning กันต่อใน EP ถัด ๆ ไปนะครับ

Reference:

--

--