Data Science Essential week 7: Recommendation system(สรุปเนื้อหา)

Krirk Arunoprayote
botnoi-classroom
Published in
3 min readOct 2, 2020

บทความนี้จะสรุปเนื้อหาอย่างย่อจากคลาส DSE by BotNoi week 7เรื่อง Recommendation system ครับ

Recommendation system คืออะไร?

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

ตัวอย่าง platform ที่ใช้ recommendation system

Recommendation system ทำงานอย่างไร?

ก็มี algorithm เบื้องหลังอยู่หลายแบบ ในคลาสนี้จะพูดถึง 4 ตัวหลักๆ ที่ใช้กันแพร่หลาย ได้แก่ Content-based filtering, Collaborative filtering, Knowledge-Based Filtering และ Hybrid recommender systems

  1. Content-based filtering

ระบบที่ใช้ algorithm นี้จะแนะนำสินค้าใหม่ ตามคุณลักษณะของสินค้าเดิมที่ลูกค้าเคยเลือก (user profile) ก็จะเหมาะกับในกรณีที่เรามีข้อมูลคุณลักษณะของสินค้า แต่ยังไม่มีข้อมูลความชอบของลูกค้า

ตัวอย่างที่เห็นได้ชัดเช่น การแนะนำ app ใน google play : นายดำ เคยโหลดเกม rov ไปเล่น ระบบมีข้อมูลว่าเกม rov เป็นเกมประเภท moba / strategy ระบบก็จะแนะนำเกมที่คล้ายกับ rov ก็คือ เกมประเภท moba/strategy เกมอื่นๆ เช่น Marvel superwar ไปให้นายดำ เป็นต้น

ข้อจำกัดของระบบนี้คือ จะไม่สามารถแนะนำสินค้าใหม่ๆ นอกเหนือจากสินค้าที่ใกล้เคียงกับของเดิมที่ลูกค้าเคยซื้อไปได้

2. Collaborative filtering

ระบบแบบนี้มีสมมติฐานว่ากลุ่มคนที่เคยชอบสินค้ากลุ่มหนึ่งเหมือนๆ กัน น่าจะมีรูปแบบความชอบที่เหมือนกัน ก็จะแนะนำสินค้าตามที่กลุ่มนั้นๆ เคยซื้อมาให้ ระบบนี้จะเหมาะกับกรณีที่เรามีข้อมูลความชอบของลูกค้ามาแล้ว

ตัวอย่างที่เห็นได้ชัด คือ ระบบแนะนำสินค้าของ Amazon ที่บอกว่า คนที่เคยซื้อสินค้าตัวนี้มักจะซื้อสิ่งนี้ไปพร้อมกันด้วย เช่น นายแดง ซื้อหนังสือ Harry potter เล่ม 1 ไป ระบบก็จะแนะนำว่า คนที่เคยซื้อเล่ม 1 ไป มักจะซื้อ เล่ม 2–7 ไปด้วย เป็นต้น

ข้อจำกัดของระบบนี้คือ จะต้องมีข้อมูลความชอบของลูกค้าที่มากพอ จึงจะสามารถแนะนำได้แม่นยำ ในช่วงแรกๆ ที่ยังไม่มีข้อมูลมากพอ ก็จะไม่สามารถทำนายได้ดี เรียกว่าปัญหา cold start

นอกจากนี้ยังมีปัญหา scalability เนื่องจากต้องเก็บข้อมูลความชอบของลูกค้ากับสินค้าทุกตัว ทำให้ข้อมูลที่ต้องจัดเก็บมีลักษณะ sparse และมีขนาดใหญ่ ซึ่งตรงนี้จะแก้ปัญหาได้โดยการใช้เทคนิค Matrix factorization ซึ่งจะกล่าวถึงต่อไป

3. Knowledge-Based Filtering

ในบางสินค้าที่ไม่ได้มีการซื้อขายกันบ่อยและมีเงื่อนไขซับซ้อน เช่น รถยนต์ อพาร์ทเมนต์ เวลาลูกค้าตัดสินใจซื้อ มักจะมีเงื่อนไขที่ซับซ้อนและเฉพาะตัว เช่น อยากได้รถยนต์กึ่ง SUV มีถุงลมนิรภัยรอบคัน ราคาไม่เกิน 9แสน เป็นต้น การจะอาศัยแค่เรทติ้งความชอบของลูกค้ามักจะไม่เพียงพอ จึงไม่สามารถใช้ Content-based filtering หรือ Collaborative filtering มาแนะนำได้ ก็จำเป็นต้องพัฒนา Knowledge-based filtering ขึ้นเพื่อแนะนำสินค้าให้ตรงกับเงื่อนไขของลูกค้าได้ดีที่สุด

ตัวอย่างที่เห็นได้ชัด คือ ระบบแนะนำตั๋วเครื่องบินราคาถูกของ Expedia/Traveloka ลูกค้าจะต้องระบุเงื่อนไขว่าต้องการไฟลท์วันไหน ตั๋วประเภทไหน เดินทางไปที่ไหน ต้องการบินตรงหรือต่อเที่ยวบินก็ได้ เมื่อได้ข้อมูลครบ ระบบก็จะพยายามแนะนำตั๋วที่ราคาถูกที่สุดและตรงเงื่อนไขที่สุดไปให้

4. Hybrid recommender systems

ก็เป็นการรวมระบบรูปแบบต่างๆ เข้าด้วยกัน จึงมีชื่อว่า Hybrid นั่นเอง ก็เป็นการรวมข้อดีของแต่ละระบบเข้าด้วยกัน ทำให้แนะนำสินค้าได้แม่นยำมากยิ่งขึ้น

ตัวอย่างที่เห็นได้ชัด คือ ระบบแนะนำหนังหรือซีรีส์ของ Netflix ก็ใช้ทั้ง Content-based filtering และ Collaborative filtering

ตอนที่ Netflix ใช้ Content-based filtering ก็จะแนะนำหนังโดยดูข้อมูลว่าเราเคยดูเรื่องอะไรมาก่อน เช่น เราเคยดู Iron man ภาค 1 ก็อาจแนะนำ Iron man ภาค 2 ซึ่งเป็นหนังที่คล้ายกับ Iron man ภาค 1 มาให้เรา

และตอนที่ Netflix ใช้ Collaborative filtering ก็จะแนะนำหนังโดยดูข้อมูลว่าคนที่เคยดูเรื่องนี้มามักจะดูเรื่องไหนอีก เช่น เราเคยดู Crash landing on you ก็ไปดูข้อมูลแล้วพบว่า กลุ่มคนที่ดูเรื่องนี้มักจะดู Itaewon class ด้วย ก็เลยแนะนำ Itaewon class มาให้เรา

Collaborative filtering — Matrix Factorization

จากที่ได้เกริ่นไว้ข้างต้นว่ามีวิธีการลดขนาดของข้อมูลเมื่อเราจะใช้ระบบ Collaborative filtering ก็จะมาอธิบายเพิ่มเติมตรงนี้ครับ

เพื่อให้เห็นภาพ เรามาลองดูก่อนว่า ตอนที่จะทำระบบ Collaborative filtering เราจะต้องการเก็บข้อมูลอะไรบ้าง สมมติเป็นระบบแนะนำหนัง เราก็ต้องเก็บข้อมูลของ user แต่ละคนว่าให้คะแนนหนังแต่ละเรื่องเท่าไหร่ (เช่น 1–5) ก็อาจจะเก็บข้อมูลมาได้ดังตาราง

ตัวอย่างตารางเก็บข้อมูลระบบแนะนำหนัง

เบื้องต้น เราเก็บข้อมูลมาได้จาก user 4 คน ซึ่งให้คะแนนหนัง 5 เรื่อง (M1:M5) ในระบบของเรา แต่จะเห็นว่า user คนที่ 3 กรอกข้อมูลมาไม่ครบ ไม่ได้ให้คะแนนหนังเรื่องที่ 5 (M5) ไว้ ซึ่งในความเป็นจริง ก็มีโอกาสสูงมากที่ข้อมูลของเราจะไม่ครบ เพราะคนแต่ละคนก็คงไม่ได้ดูหนังในระบบของเราครบทุกเรื่อง แบบนี้เราจะนำข้อมูลนี้ไปใช้ต่อได้มั้ย?

คำตอบก็คือได้ โดยการทำ Matrix factorization และใช้ machine learning technique เช่น NMF มาช่วย โดยอาศัยหลักการแตกตัวคูณจาก matrix ที่เรามีออกเป็น 2 matrix ย่อย เช่น เรามี matrix A ต้องการแตกออกเป็น matrix B และ C

ก็อาศัยการคูณกันของ matrix (คูณแบบ dot) สมมติว่า Matrix A มีมิติ (m,n) ต้องการแตกให้ได้ Matrix ย่อย B กับ C
ตัว Matrix B กับ C ก็จะต้องมีมิติที่สอดคล้องกัน โดยอาจเป็นมิติ (m,f) คูณกับ (f,n) เพื่อให้ B x C แล้วได้ผลลัพธ์ออกมามีมิติเท่ากับ A (m,n) นั่นเอง

A(m,n) = B(m,f) x C(f,n)

โดยตารางข้อมูลของเรามีมิติของข้อมูลเท่ากับ (จำนวน user, จำนวน Movie) ก็คือ (4,5) เราอาจแบ่งเป็น matrix ย่อยได้หลายแบบเช่น A(4,5) = B(4,1) X C(1,5) หรือ A(4,5) = B(4,2) X C(2,5) etc. แล้วแต่จะกำหนดให้ f เป็นเท่าไหร่

เบื้องต้นเราอาจทดลองให้ f = 2 เราก็จะแตกตัวคูณออกมาได้เป็น 2 matrix ดังนี้

matrix แรกเป็น matrix ระหว่าง user กับ feature ก็จะมีมิติของข้อมูลเท่ากับ (4,2)
matrix ที่ 2 เป็น matrix ระหว่าง feature กับ หนัง ก็จะมีมิติของข้อมูลเท่ากับ (2,5)
เมื่อนำ matrix มาคูณกัน ก็จะได้มิติของข้อมูลเท่ากับ (4,5) เท่ากับมิติของ matrix ตั้งต้นของเรา

ก็จะเริ่มกำหนดค่า random ให้กับ matrix แรก แล้วให้ machine หาค่าใน matrix ที่สอง ที่ทำให้ผลคูณออกมา ได้ผลลัพธ์ใกล้เคียงกับค่าใน matrix ตั้งต้นมากที่สุด แล้วก็อัพเดทค่า เพื่อให้ error ลดลงเรื่อยๆ

เมื่อ machine learn ไปได้ถึงจุดหนึ่ง ก็อาจได้ผลลัพธ์ออกมาดังนี้

เห็นว่าพอเราคูณ matrix ย่อยเข้าด้วยกันแล้ว ได้ค่าตรงกับข้อมูลจริงใน matrix ตั้งต้น ก็คือได้ error = 0 แสดงว่า ค่า f = 2 นี้ เป็นจำนวน f ที่เหมาะสมแล้ว

นอกจากนี้ เรายังได้ค่า rating ของ user คนที่ 3 (นาย C) กับหนัง M5 ที่เดิมไม่มีข้อมูล ตอนนี้เรารู้แล้วว่าน่าจะมีค่าเท่ากับ 1 ก็ช่วยให้เราได้ข้อมูลเพิ่มขึ้น

การทำ Matrix Factorization แบบนี้ยังช่วยลดขนาดของข้อมูลที่ต้องจัดเก็บได้ด้วย โดยจากเดิม matrix ตั้งต้นมีขนาด (4,5) = 20 ข้อมูล แต่พอเราแตกเป็น matrix ย่อย (4,2) กับ (2,5) ข้อมูลก็จะเหลือแค่ 4x2 = 8 และ 2x5 = 10 รวมเหลือเพียง 18 ข้อมูล ประหยัดไปได้ 2 ข้อมูล

feature ที่ได้มามีความหมายหรือไม่?

สมมติฐานของวิธี Matrix factorization ก็คือ ในหนังแต่ละเรื่องน่าจะมี feature บางอย่างร่วมกันอยู่ ถ้าเราเลือกจำนวน feature ที่เหมาะสมได้ (เลือกค่า f ) ก็จะสามารถแตก matrix ย่อยออกมาได้ แล้วทำให้ error น้อยที่สุดนั่นเอง

ในตัวอย่างอาจอธิบายได้ว่า feature 2 ตัวนั้นหมายถึงประเภทหนัง ว่าเป็นหนังตลก หรือ หนัง action ซึ่งก็ดูสมเหตุสมผลดี

แต่ในบางครั้งเราอาจไม่ทราบชัดเจนว่า feature ที่เราแบ่งมาได้นั้นมีความหมายอย่างไร เพราะข้อมูลมีมากมายมหาศาล และตัว machine เองเพียงแค่พยายาม learn ให้ได้ error น้อยที่สุด แต่อาจไม่ได้ feature ที่มีความหมายชัดเจนเสมอไป

--

--

Krirk Arunoprayote
botnoi-classroom

AI enthusiast, currently working as Data Scientist at Botnoi Consulting Co., Ltd.