วิธีการทำ Recommendation ด้วย AzureML
หลาย ๆ คนอาจสงสัยว่าทำไมเวลาเราดูหนังใน Netflix หรือแม้แต่เมื่อเราเลือกซื้อสินค้าตามแอปพลิเคชันต่างเราจะพบว่ามีสินค้าหรือหนังที่แนวที่เราสนใจแนะนำเรามาเสมอใช่ไหมล่ะคะ แล้ววิธีการเหล่านี้สามารถทำได้อย่างไร วันนี้เราจะแนะนำวิธีการ Recommendation เหล่านี้ด้วย AzureML ค่ะ
โดยการทำ Recommendation ใน AzureML จะเรียกว่า Matchbox Recommendation System ซึ่งมีพื้นฐานมาจากการทำ Recommendation แบบ Hybrid Approach ซึ่งเป็นการผสมกันระหว่างแบบ Content และแบบ Collaborative
- Content Based Filtering : จะแนะนำ item ที่คลายกับ item ที่เราซื้อหรือชอบในอดีต
- Collaborative Filtering : จะใช้พฤติกรรม กิจกรรม และสิ่งที่ชอบ ต่าง ๆ ของคนที่มีรสนิยมคล้ายกันมาแนะนำอีกคนที่ชอบเหมือนกัน เช่น เมื่อคนซื้อสินค้า x มักซื้อสินค้า y ด้วย
โดย Matchbox Recommendation System มี module ที่ใช้คือ Train Matchbox Recommendation, score Matchbox Recommendation และ Evaluate Recommender ซึ่ง Train Matchbox Recommendation จะอ่าน dataset เรียง user-item-rating
ข้อมูลตัวอย่างของเราในวันนี้คือ ข้อมูลร้านอาหารต่าง ๆ ที่ต้องการแนะนำร้านอาหารให้กับลูกค้าโดยแยกเป็น 3 ไฟล์ ดังนี้
- Restaurant customer เป็นข้อมูลรายละเอียดของลูกค้า
- Restaurant Feature เป็นข้อมูลของร้านอาหาร ทั้ง ID ของร้านต่าง ๆ และรายละเอียดอื่น ๆ
- Restaurant rating จ้อมูลที่ลูกค้าให้คะแนนร้านอาหาร
วิธีการทำ Recommendation สามารถทำได้ดังนี้
1. นำ dataset ที่ที่ชื่อ Restaurant rating, Restaurant customer data และ Restaurant Feature data จาก Sample มาวางบน workspace
2. นำ module ที่ชื่อว่า Split Data มาเชื่อมต่อกับ Restaurant rating จากนั้นเลือก Splitting mode เป็น Recommender Split และค่า Random Seed เป็น 123
3. เมื่อเรา visualize ดูข้อมูล Restaurant customer พบว่าข้อมูลมี missing คือคอลัมน์ smoker, dress_preference, ambience, transport, marital_status, hijos, activity และ budget ซึ่งทุกคอลัมน์เป็นข้อมูลแบบ string ซึ่งเราสามารถ clean missing ได้โดยใช้ module ที่ชื่อว่า Clean Missing Data มาเชื่อมกับ Restaurant customer จากนั้นเลือกคอลัมน์ทั้งหมดที่มี missing แล้วเลือก Cleaning mode เป็น Replace with mode
4. นำ module ที่ชื่อว่า Select Columns in Dataset มาเชื่อมต่อกับ Clean Missing Data เพื่อเลือกเฉพาะคอลัมน์ที่มีผลในการแนะนำ โดยคอลัมน์ที่เลือกคือ userID, latitude, longitude, smoker, drink_level , dress_preference, ambience, marital_status และ birth_year
5. นำ module ที่ชื่อว่า Select Columns in Dataset มาเชื่อมต่อกับ Restaurant Feature data เพื่อเลือกเฉพาะคอลัมน์ที่มีผลในการแนะนำ โดยคอลัมน์ที่เลือกคือ placeID ,latitude, longitude, alcohol, smoking_area, dress_code, price และ Rambience จากนั้นคลิก RUN
6. ค้นหา module ที่ชื่อว่า Train Matchbox Recommendation โดยแต่ละจุดเชื่อมต่อของ module มีวิธีการเชื่อมต่อดังนี้
โดยในตัวอย่างนี้เราจะเชื่อมต่อจุดแรกของ Split Data กับจุดแรกของ Train Matchbox และเชื่อมต่อจุดแรกของ Select Columns อันแรกกับจุดที่สองของ Train Matchbox และ จุดแรกของ Select Columns อันที่สองกับจุดที่สามของ Train Matchbox
โดย Parameter ของ Train Matchbox Recommendation มีความสำคัญดังนี้
Number of traits : จำนวน traits ที่ต้องเรียนรู้สำหรับสำหรับแต่ละ user และ item ซึ่งแต่ละ feature จะเชื่อมโยงกับเวกเตอร์ traits แฝง หากเลขมากจะมีความถูกต้องมากกว่าแต่เวลาที่ใช้ในการ train จะเพิ่มขึ้นตาม ซึ่งค่านี้ไม่ควรเกิน 20 และไม่ต่ำกว่า 2
Number of recommendation algorithm iterations : ค่าที่แสดงว่าอัลกอริทึมควรประมะมวลผล input กี่ครั้ง ซึ่งควรเป็นค่าระหว่าง 5-10 เพื่อความถูกต้องที่เพิ่มมากขึ้น
Number of training batches : จำนวนชุดสำหรับแบ่งข้อมูลระหว่างการ training
ซึ่งในตัวอย่างนี้เราจะตั้งค่า parameter ดังรูป
7. จากนั้นนำ module ที่ชื่อว่า Score Matchbox Recommendation มาวางบน workspace ซึ่ง module นี้จะมีวิธีการเชื่อมต่อ ดังนี้
โดยในตัวอย่างนี้เราจะเชื่อมต่อจุดจาก Train Matchbox มาที่จุดแรกของ Score Matchbox
จุดที่สองของ Split Data กับจุดที่สองของ Score Matchbox, เชื่อมจาก Select Columns อันแรกมาที่จุดที่สาม และเชื่อมจาก Select Columns อันที่สองมาที่จุดที่สี่ของ Score Matchbox
โดยค่า Parameter ของ Score Matchbox Recommendation แต่ละค่มีความหมายดังนี้
Recommender prediction kind
- Ratings Prediction : เป็นการคาดการณ์การให้คะแนนของ user ซึ่งข้อมูลที่ต้องมีทั้ง user และ item ไม่มีการตั้งค่า parameter อื่นอีก
- Item Recommendation : โดย input คือข้อมูล user และ item โดยใช้ความรู้เกี่ยวกับ user และ item ที่มีอยู่ เพื่อสร้างรายการที่จะดึงดูดผู้ใช้แต่ละคน ซึ่งมีค่า parameter ที่ต้องตั้งค่าเพิ่มเติมคือ
- Recommended item selection
- From All Items
- From Rated Items (for model evaluation) : ใช้สำหรับการทดสอบประสิทธิภาพโมเดล
- From Unrated Items (to suggest new items to user) : ใช้สำหรับการแนะนำสินค้าใหม่ให้กับลูกค้า
- Maximum number of items to recommend to a user : จำนวนสินค้าที่มากที่สุดที่เราต้องการแนะนำให้กับลูกค้า
- Minimum size of the recommendation pool for a single user : ขนาดที่น้อยที่สุดของคำแนะนำสำหรับลูกค้าคนเดียว
- Recommended item selection
- Related Users : ใช้สำหรับการคาดการณ์ user ที่มีลักษณะเหมือนกัน และสร้างคำแนะนำสำหรับuser ตามรายการที่จัดอันดับแล้ว
- Related Item : ใช้สำหรับการคาดการณ์ item ที่มีลักษณะเหมือนกัน และสร้างคำแนะนำสำหรับuser ตามรายการที่จัดอันดับแล้ว
โดยเราจะตั้งค่า parameter ตามรูป จากนั้นกด RUN
เมื่อเรา visualize ดูตรง Score Matchbox เราจะพบว่า user แต่ละ ID จะมี ID ของร้านอาหารหรือ itemID แนะนำอยู่ว่าลูกค้าแต่ละคนเหมาะสมกับร้านอาหารใดบ้างซึ่งแนะนำมาไม่เกิน 5 ร้านตามที่เราได้ตั้งค่า parameter ไว้
8. เราจะทดสอบประสิทธิภาพของโมเดลโดยใช้ module ที่ชื่อ Evaluate Recommender โดยนำจุดที่สองของ Split Data มาเชื่อมกับจุดแรก และเชื่อมจาก Score Matchbox มาเชื่อมกับจุดที่สอง จากนั้นกด RUN
สำหรับ Item Recommendation ค่าที่ใช้ในการวักประสิทธิภาพของโมเดลคือ Normalized Discounted Cumulative Gain (NDCG) ซึ่งหากมีค่าเข้าใกล้ 1 แสดงว่าโมเดลมีผลลัพธ์ที่ดีในการแนะนำสินค้าให้กับลูกค้า
ซึ่งในตัวอย่างของเราเมื่อเรา visualize ดูเราจะพบว่ามีค่า NDCG เท่ากับ 0.904368 ซึ่งเป็นค่าที่สูง นั้นคือโมเดลของเรามีประสิทธิภาพที่ และให้ผลลัพธ์ที่ดีแก่ลูกค้า