วิธีการทำ 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 เป็นข้อมูลรายละเอียดของลูกค้า
![023-1](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-1.png)
- Restaurant Feature เป็นข้อมูลของร้านอาหาร ทั้ง ID ของร้านต่าง ๆ และรายละเอียดอื่น ๆ
![023-2](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-2.png)
- Restaurant rating จ้อมูลที่ลูกค้าให้คะแนนร้านอาหาร
![023-3](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-3.png)
วิธีการทำ Recommendation สามารถทำได้ดังนี้
1. นำ dataset ที่ที่ชื่อ Restaurant rating, Restaurant customer data และ Restaurant Feature data จาก Sample มาวางบน workspace
![023-4](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-4.png)
2. นำ module ที่ชื่อว่า Split Data มาเชื่อมต่อกับ Restaurant rating จากนั้นเลือก Splitting mode เป็น Recommender Split และค่า Random Seed เป็น 123
![023-5](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-5.png)
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
![023-6](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-6.png)
4. นำ module ที่ชื่อว่า Select Columns in Dataset มาเชื่อมต่อกับ Clean Missing Data เพื่อเลือกเฉพาะคอลัมน์ที่มีผลในการแนะนำ โดยคอลัมน์ที่เลือกคือ userID, latitude, longitude, smoker, drink_level , dress_preference, ambience, marital_status และ birth_year
![023-7](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-7.png)
5. นำ module ที่ชื่อว่า Select Columns in Dataset มาเชื่อมต่อกับ Restaurant Feature data เพื่อเลือกเฉพาะคอลัมน์ที่มีผลในการแนะนำ โดยคอลัมน์ที่เลือกคือ placeID ,latitude, longitude, alcohol, smoking_area, dress_code, price และ Rambience จากนั้นคลิก RUN
![023-8](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-8.png)
6. ค้นหา module ที่ชื่อว่า Train Matchbox Recommendation โดยแต่ละจุดเชื่อมต่อของ module มีวิธีการเชื่อมต่อดังนี้
![023-9](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-9.png)
โดยในตัวอย่างนี้เราจะเชื่อมต่อจุดแรกของ Split Data กับจุดแรกของ Train Matchbox และเชื่อมต่อจุดแรกของ Select Columns อันแรกกับจุดที่สองของ Train Matchbox และ จุดแรกของ Select Columns อันที่สองกับจุดที่สามของ Train Matchbox
![023-10](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-10.png)
โดย 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 ดังรูป
![023-11](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-11.png)
7. จากนั้นนำ module ที่ชื่อว่า Score Matchbox Recommendation มาวางบน workspace ซึ่ง module นี้จะมีวิธีการเชื่อมต่อ ดังนี้
![023-12](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-12.png)
โดยในตัวอย่างนี้เราจะเชื่อมต่อจุดจาก Train Matchbox มาที่จุดแรกของ Score Matchbox
จุดที่สองของ Split Data กับจุดที่สองของ Score Matchbox, เชื่อมจาก Select Columns อันแรกมาที่จุดที่สาม และเชื่อมจาก Select Columns อันที่สองมาที่จุดที่สี่ของ Score Matchbox
![023-13](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-13.png)
โดยค่า 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
![023-14](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-14.png)
เมื่อเรา visualize ดูตรง Score Matchbox เราจะพบว่า user แต่ละ ID จะมี ID ของร้านอาหารหรือ itemID แนะนำอยู่ว่าลูกค้าแต่ละคนเหมาะสมกับร้านอาหารใดบ้างซึ่งแนะนำมาไม่เกิน 5 ร้านตามที่เราได้ตั้งค่า parameter ไว้
![023-15](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-15.png)
8. เราจะทดสอบประสิทธิภาพของโมเดลโดยใช้ module ที่ชื่อ Evaluate Recommender โดยนำจุดที่สองของ Split Data มาเชื่อมกับจุดแรก และเชื่อมจาก Score Matchbox มาเชื่อมกับจุดที่สอง จากนั้นกด RUN
![023-16](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-16.png)
สำหรับ Item Recommendation ค่าที่ใช้ในการวักประสิทธิภาพของโมเดลคือ Normalized Discounted Cumulative Gain (NDCG) ซึ่งหากมีค่าเข้าใกล้ 1 แสดงว่าโมเดลมีผลลัพธ์ที่ดีในการแนะนำสินค้าให้กับลูกค้า
ซึ่งในตัวอย่างของเราเมื่อเรา visualize ดูเราจะพบว่ามีค่า NDCG เท่ากับ 0.904368 ซึ่งเป็นค่าที่สูง นั้นคือโมเดลของเรามีประสิทธิภาพที่ และให้ผลลัพธ์ที่ดีแก่ลูกค้า
![023-17](https://www.cloudilar.com/wp-content/uploads/sites/2/2020/10/023-17.png)