• Canate Dew

คุณรู้จักสุดยอดระบบแนะนำสินค้า Netflix หรือไม่ [บันทึกการอ่าน]



บันทึกการอ่าน ระบบแนะนำของเน็ตฟลิกซ์ จากงานวิจัยเรื่อง Recommendation System for Netflix


ระบบแนะนำสินค้าหรือบริการเป็นส่วนสำคัญอย่างมากในความสำเร็จของธุรกิจปัจจุบัน Netflix นับว่าเป็นแพลตฟอร์มที่สามารถแนะนำซีรีย์หรือหนังให้กับผู้ชมได้อย่างตรงตามความต้องการของพวกเขา ด้วยระบบการแนะนำที่ยอดเยี่ยมบวกกับการตลาดอันชาญฉลาดทำให้ใครหลายคนเสพติดการดู Netflix มากขึ้น จนเป็นที่นิยมทั่วโลกจนถึงทุกวันนี้ เพราะมันสามารถเข้าใจผู้ชมที่อยู่หน้าจอได้มากที่สุด


หลักการสร้างระบบการแนะนำที่นิยมมีอยู่หลักๆ 4 แบบคร่าว

  1. Popularity

  2. Collaborative filtering

  3. Content-based filtering

  4. Hybrid filtering

ความท้าทายของการสร้างระบบแนะนำคือการเลือกอัลกอริทึ่มที่สามารถแนะนำซีรี่ย์และหนังให้มีความแม่นยำมากที่สุดเพราะฉะนั้นการเลือกอัลกอริทึ่มที่เหมาะสมที่สุดจึงจำเป็นอย่างมาก เพื่อการเลือกใช้อัลกอริทึ่มอย่างชาญฉลาด เราจำเป็นต้องเรียนรู้ถึงข้อดี-ข้อเสียของแต่ละประเภท


Popularity

เป็นการแนะนำสินค้าที่มีนิยมมากที่สุดในขณะนั้นอย่างการเรียงซีรี่ย์หรือหนังยอดนิยม 10 อันดับในประเทศไทยเป็นต้น เป็นวิธีการแนะนำที่สะดวกและง่ายดาย เหมาะสำหรับผู้ชมที่ไม่เคยใช้แพลตฟอร์มมาก่อนอย่างมาก แต่ข้อเสียคือหนังใหม่หรือซีรี่ย์ใหม่อาจจะไม่ได้แนะนำเพราะความนิยมไม่เพียงพอ อันดับในการแนะนำในระยะยาวอาจจะไม่มีการเปลี่ยนแปลงมาก ขาดความหลากหลายในการแนะนำ


Collaborative filtering

เป็นการแนะนำโดยนำความชอบจากผู้ชมหลายคนในอดีตมาแนะนำให้ผู้ชมใหม่ที่มีความชอบใกล้เคียงกัน อย่างเช่นคนสองคนให้คะแนนหนัง 1 เรื่องใกล้เคียงกัน สองคนนี้ก็อาจจะมีนิสัยการดูที่คล้ายเคียงกันจึงสามารถนำข้อมูลของสองคนนี้แนะนำให้กันแหละกันได้หรือแนะนำให้คนอื่นที่ชอบหนังแบบเดียวกันได้ ซึ่งหลักการแบบแบบนี้แบ่งได้อีกเป็นตาม Memory-Based(User-Based, Item-Baed) ในแบบนี้ใช้ได้ง่ายและมีประสิทธิภาพืที่ดีแต่ติดปัญหา Sparsity และ Scalability อีกแบบหนึ่งคือ Model-Based ที่สามารถแก้ปัญหาทั้งสองอย่างได้แต่จะช้าและเสียเวลาคำนวนเยอะ (Computationally Expensive)


Content-based filtering

เป็นการแนะนำซีรี่ย์หรือหนังจากประวัติการดูของผู้ชมเพียงคนเดียว ไม่ได้นำความชอบของผู้ชมคนอื่นมาเปรียบเทียบ เหมาะสำหรับแก้ปัญหา Cold Start หรือข้อมูลเริ่มต้นมีไม่มากพอสำหรับการคำนวน ใช้เวลาสั้นในการแนะนำและผู้ชมจะได้รับการแนะนำแบบส่วนตัวไม่เหมือนใคร และไม่ต้องแชร์ข้อมูลกับผู้ชมคนอื่นอีกด้วย แต่ของเสียของมันคือผู้ชมอาจจะได้รับการแนะนำหนังแบบเฉพาะเจาะจงมากเกินไปนั้นเอง


Hybrid filtering

เป็นการนำระบบแนะนำข้อ 1-3 มาผสมผสานกันเพื่อสร้างอัลกอริทึ่มใหม่ เพื่อให้ระบบแนะนำมีความแม่นยำและตอบโจทย์มากขึ้นอาจจะเป็นการนำ Content-based filtering รวมกับ Collaborative filtering เพื่อดึงเอาจุดเด่นของแต่ละประเภทเป็นต้น


ระบบแนะนำแบบไหนดีที่สุดสำหรับ Netflix


ในงานวิจัยฉบับดีได้นำข้อมูลจากเน็ตฟริกซ์มาวิเคราะห์ (หนัง 17,770 เรื่อง ผู้ชม 480,189 คนและ 100,498,277 คะแนน) จากการศึกษาวิธีแบบ Popularity จะแนะนำหนังเรื่องเดียวกันให้ผู้ชมทุกคน ในวิจัยนี้ไม่ได้ใช้ User-based ในการสร้างระบบแนะนำเพราะสัดส่วนการให้หนังกับผู้ใช้ต่างกันมากไปเสียเวลาในการคำนวนและไม่แม่นยำ ใช้เป็น Memory-based (Item-based) ด้วย Consine และ Pearson correlation ในการหาความเหมือนแทนซึ่งสามารถแนะนำได้ดีกว่าวิธี Model-based สรุปได้ว่าการใช้การแนะนำแบบ Memory-based (Item-based) ได้ผลแม่นยำที่สุด


แต่ในความเป็นจริง Model-based ควรมีประสิทธิภาพมากกว่า เพราะข้อมูลในงานวิจัยนี้มีจำนวนไม่มาทำให้ประสิทธิภาพความแม่นยำของมันลดลงไป หากแต่ใช้กับจำนวนข้อมูลที่มากกว่านี้ Model-based จะมีประสิทธิภาพเหนือกว่า Memory-based (Item-based) อย่างแน่นอน






บันทึกการอ่าน เจาะลึกระบบวิเคราะห์ของเน็ตฟริกซ์ จากบทความ Deep Dive into Netflix’s Recommender System


เมื่อก่อนในอดีตนั้น Netflix ได้มีการประกวดพัฒนาระบบแนะนำอยู่หลายครั้ง เป็นสิ่งที่เน็ตฟริกซ์ยืนยันที่จะพัฒนาเพื่อมัดใจลูกค้าด้วยระบบการแนะนำสินค้าที่มีความแม่นยำสูง โดยที่เมื่อได้เรื่องให้บริการดูหนังออนไลน์การวิเคราะห์คำนวนในแบบเดิมจึงเปลี่ยนไปอย่างสิ้นเชิง เพราะเมื่อเข้าสู่ระบบออนไลน์นักพัฒนาต้องเผชิญหน้าข้อมูลมหาศาลที่มาเพิ่มอย่าวไม่ขาดสาย จากการใช้ Regression นำไปสู่การสร้างระบบแนะนำแบบที่ต้อง Personalized


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

  • Personalised Video Ranking (PVR) เป็นการแบ่งหนังตามประเภทและความชอบ

  • Top-N Video Ranker เป็นการแนะนำหนังที่มีอันดับสูงสุดในแต่ละประเภท

  • Trending Now Ranker เป็นการแนะนำหนังที่นิยมในกระแสปัจจุบันในวันนั้น

  • Continue Watching Ranker เป็นการแนะนำหนังที่ยังดูไม่จบ

  • Video-Video Similarity Ranker ใช้ content-based ในการแนะนำหนัง


กระบวนการคัดเลือกหนังให้แต่ละแถว


เป็นการนำข้อมูลหนังและข้อมูลพวกการให้คะแนนมาคัดเลือก รูปภาพหน้าปก นักแสดง และอื่นๆมาวิเคราะห์เพื่อนำมาจัดอันดับและแนะนำให้กับผู้ชมโดยนำมาแสดงเป็นหน้าแรกให้ผู้ชมจัดเรียงกันเป็นแถว ซึ่งการจัดเรียงหน้าแรกไม่ใีความหลากหลายไม่ซ้ำกันไปมาเพื่อสร้างประสบการณ์ที่ดีให้กับผู้ชมมีดังนี้

  • Row-based Approach ใช้คะแนนนั้นการเลือกแถวเป็นวิธีที่เร็วแต่ขาดความหลากหลาย

  • Stage-wise Approach คำนวนใหม่ทุกแถวและเทียบกับแถวก่อนหน้า มีความหลากหลายขึ้น

  • Machine Learning Approach เป็นการดูว่าผู้ชมเลือกอะไรบ้างในแถวและนำไปแนะนำ


การจัดการข้อมูล Big Data

  • Offline Computation เป็นการจัดการกับข้อมูลจำนวนมากที่ไม่ต้องกาารคำนวนแบบเรียลไทม์ เป็นการคำนวนที่ยุ่งยากน้อยกว่าการคำนวนแบบเรียลไทม์ที่มีข้อมูลไหลเข้ามาเรื่อยๆ

  • Online Computation เป็นการคำนวนสำหรับการแสดงผลลัพท์ที่ต้องการความเร็วแบบเรียลไทม์เพื่อระบบแนะนำที่สามารถตอบสนองกับผู้ชมและเหตุการณ์ต่างๆได้ทันที

  • Nearline Computation เป็นการคำนวนที่เป็นตัวกลางระหว่าง Offline และ Online เพื่อให้ระบบการคำนวนไหลลื่นไม่มีสะดุด สามารถวิเคราะห์ออนไลน์ได้แบบไม่เรียลไทม์แต่สามารถช่วยให้การคำนวนแบบออนไลน์ได้มีประสิทธิภาพมากขึ้น



บันทึกการอ่าน การคำนวนข้อมูลบนคลาวด์ของระบบแนะนำหนัง จากบทความ Cloud Computing for Data Analysis: Movie Recommendation System


การคำนวนข้อมูลเพื่อระบบแนะนำของเน็ตฟริกซ์บนคลาวด์ด้วยการใช้ Pearson Correlation Coefficient & Alternating Least Squares algorithms ของ PySpark และระบบที่จะใช้ในการวิเคราะห์คือ Collaborative Filtering กับข้อมูลตัวอย่างจากเน็ตฟริกซ์ เพื่อเป็นการพัฒนาระบบแนะนำหนังขึ้นมา


ข้อมูลที่ใช้ในการพัฒนา จำนวนผู้ใช้ 750 คน จำนวนหนัง 1,000 คนและจำนวนคะแนน 4,200,000 คะแนนตัวแปรสำคัญที่นำมาใช้จากข้อมูลหนัง movie_id, year_of_release, movie_title จากข้อมูลการให้คะแนน movie_id, user_id, ratings, date_of_rating


เครื่องมือที่ใช้ Amazon S3, Amazon EC2, Git, GitHub, Jupyter Notebook, pySpark


Pearson Correlation Coefficient คืออะไร

Pearson Correlation Coefficient คือการหาความสัมพันธ์ใกล้เคียงกันระหว่างตัวแปรในที่นี่คือความใกล้เคียงกับของผู้ชมแต่ละคนโดยเทียบจากการให้คะแนนหนังของแต่ละคน ถ้าคนสองคนดูหนังแล้วให้คะแนนใกล้เคียงกัน สองคนนี้จะมีความึใกล้เคียงกันสูง คะแนนมีค่าระหว่าง -1 ถึง 1 ถ้าคะแนนใกล้เลขหนึ่งหมายความว่าใกล้เคียงกันมาก หากเข้าใกล้ -1 ก็แสดงว่าสองคนมีความแตกต่างตรงกันข้ามกัน

หากเป็น 0 แสดงว่าสองคนไม่มีความใกล้เคียงหรือเกี่ยวข้องกันเลย


Alternating Least Squares คืออะไร

Alternating Least Squares (ALS) คือการวัดค่าความผิดพลาดในการทำนายผลของโมเดลที่สร้างขึ้นมาโดยนำข้อมูลที่นำหน้ามาเทียบกับข้อมูลจริง ในการเก็บข้อมูลนั้นจะเก็บเป็นตารางผู้ใช้กับหนัง (User-item Matrix) และนำมาลดขนาดด้วยการทำ Matrix Factorization จะสามารถได้ค่าทำนายเรตติ้งที่มีความใกล้เคียงกับขอมูลจริง และนำส่วนต่างระหว่างค่าที่ทำนายกับคะแนนจริงมาเป็นตัววัดความแม่นยำ และทำซ้ำเพื่อได้ค่าเออเรอร์ที่ต่ำที่สุด


ขั้นตอนการสร้างเบื้องต้น


  • นำไฟล์ทุกอย่างจัดเก็บลงใน Amazon Storage S3

  • สร้าง Spark Cluster บน Amazon EC2 และนำรายละเอียดของ Cluster มาใช้

  • สร้างการเชื่อมต่อกับ Cluster บน Amazon โดยใช้ keypair

  • เริ่มการเข้าถึง Cluster

  • นำเข้า Pandas ลงใน Cluster

  • รัน PCSalgorithm กับข้อมูลคะแนนที่เก็บอยู่ใน Amazon Storage S3 เพื่อแนะนำหนัง

  • รัน ALS กับข้อมูลคะแนนที่เก็บอยู่ใน Amazon Storage S3 เพื่อแนะนำหนัง

  • รัน ALS ด้วย Library สำหรับแนะนำหนังให้ผู้ชมทุกคน


ผลลัพท์ที่ได้ คือระบบแนะนำ User - User Based Recommendation System ที่คำนวนด้วย ALS and Pearson Correlation Coefficient ซึ่งสามารถแนะนำหนังตามความต้องการของแต่ละผู้ชมได้เพียงแค่กรอก user_id


ปัญหาที่พบ การใช้ Singular Value Decomposition ในตอนต้นไม่สำหรับเพราะมีข้อมูลที่หายมากเกินไปเลยมาใช้ ALS ในการคำนวนแทน อีกหนึ่งปัญหาคือประสบการณ์การใช้ PySpark น้อยทำให้เจอปัญหาจุกจิก และข้อมูลที่มีมากเกินไปทำให้คำนวนยากจึงต้องทำการลดขนาดของมันลง



ดู 904 ครั้ง0 ความคิดเห็น

โพสต์ล่าสุด

ดูทั้งหมด