เผยเบื้องหลัง เทคนิคการแนะนำคู่เดทของแอพ OkCupid

สตาร์ทอัพบริการหาคู่ในเมืองนอกเป็นที่นิยมมากครับ ในการช่วยหาคู่เดท หรือคู่ชีวิตให้กับผู้ใช้ และก็มีคนยอมจ่ายเงินให้บริการเหล่านี้เยอะเสียด้วยสิ ผมคิดว่าคงมีหลายคนเคยลองเล่นแอพหาคู่เดทบนมือถือ ที่ผมเห็นคนไทยเล่นเยอะก็จะมี OkCupid กับ Tinder แอพเหล่านี้จะแนะนำคนที่คุณอาจสนใจให้ เบื้องหลังการแนะนำผู้พัฒนาใช้วิธีอะไร อย่าง OkCupid รู้ได้อย่างไรว่าเรา Match กับคนนี้กี่ % บทความนี้เราจะพูดถึงเบื้องหลังที่ว่านี้กันครับ

มาทำความรู้จักระบบแนะนำข้อมูล (Introducing Recommender System)

ระบบแนะนำข้อมูล หรือ Recommender System เป็นสาขาทางคอมพิวเตอร์สาขาหนึ่งที่ผมเชี่ยวชาญ ทุกวันนี้เราทุกคนคุ้นเคยกับเจ้าระบบนี้ดีอยู่แล้ว ตั้งแต่เปิด Facebook มาคุณก็เจอแนะนำ Post อะไรต่อมิอะไรเยอะแยะ และคุณก็สนใจเข้าไปอ่านเสียด้วย หรือถ้าเล่น Twitter ระบบก็แนะนำให้เราไป Follow คนโน้นคนนี้ ไหนจะมีเว็บแนะนำที่เที่ยว ร้านอาหาร หนังสือ เพลง หนัง and so on

ความสามารถหลักของระบบแนะนำข้อมูลคือ การวิเคราะห์ข้อมูลความสนใจของผู้ใช้ (personal interests) เอาไปประมวลผล เพื่อแนะนำข้อมูลที่คิดว่าคุณน่าจะสนใจให้จากตัวเลือกจำนวนมหาศาล

ตัวอย่างเช่น ระบบแนะนำสถานที่ท่องเที่ยวมีข้อมูลสถานที่ 1 ล้านแห่ง แทนที่จะนำเสนอ 1 ล้านแห่ง ระบบนำข้อมูลการท่องเที่ยวของผู้ใช้ในอดีตมาวิเคราะห์หาความสนใจ ก่อนที่จะนำเสนอเพียง 10 แห่งที่คิดว่าผู้ใช้คนนั้นน่าจะสนใจ

แอพหาคู่เดทก็เป็นระบบแนะนำข้อมูลประเภทหนึ่ง เพียงแต่ข้อมูลที่แนะนำให้กับเรา คือ คน บทความนี้ผมขอยก OkCupid มาเป็น Case study เพื่อแสดงให้เห็นเบื้องหลังที่แอพบอกเราได้ว่า เรา Match กับผู้ใช้คนอื่นกี่ % ส่วน Tinder ถ้ามีโอกาสผมจะเขียนให้อ่านในคราวถัดไป

หมายเหตุ!! ย้ำบทความนี้เน้นให้ความรู้ทางด้านไอทีและสตาร์ทอัพ ไม่ได้สอนเทคนิคการจีบสาวหรือการหาคู่เดทนะครับ

เทคนิควิธีการแนะนำคู่เดทของแอพ (Recommendation Technique)

เทคนิควิธี หรืออัลกอริทึม (algorithm) คือ ไฮไลท์ของบทความนี้ ซึ่งมีกระบวนการดังต่อไปนี้

1. การกรองข้อมูล (Filtering)

มีไว้เพื่อลดปริมาณข้อมูล (คู่เดท) ที่แนะนำแก่ผู้ใช้ในเบื้องต้น โดยกรองจากความสนใจของผู้ใช้ (personal interests) เช่น คุณสนใจเพศชายหรือหญิง ช่วงอายุเท่าไหร่ ส่วนสูง ตำแหน่งที่อยู่ทั่วโลก หรืออยู่ใกล้ ๆ คุณ สถานะโสด แต่งงาน หรือม่าย รวมถึงคู่ที่แนะนำต้องมีรูปโปรไฟล์หรือไม่

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

2. การคำนวณ % Match ของคู่เดท (Similarity Computation)

เมื่อกรองข้อมูลเสร็จ ระบบจะนำข้อมูลที่ผ่านการกรองมาคำนวณหา % Match และแสดงให้ผู้ใช้เห็นบนแอพ แต่ก่อนที่จะพูดถึงการคำนวณ % Match เนื้อหา 2.1 และ 2.2 คือสิ่งที่คุณควรรู้ครับ

2.1 ความคล้าย (Similarity)

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

ในแอพ OkCupid % Match คือ การบอกว่าคู่เดทคนนี้เข้ากับคุณได้กี่ % โดยนำข้อมูลจากผู้ใช้แอพมาคำนวณ ข้อมูลนั้นมาจากการตอบแบบสอบถาม (questionnaire) ดังนั้นถ้าคุณเห็นคู่เดท 0 % Match ไม่ได้หมายความว่าเขาหรือเธอเข้ากันกับคุณไม่ได้ เพียงแต่ผู้ใช้เหล่านี้ยังไม่ได้ตอบแบบสอบถามในแอพ ส่วนคู่เดทที่มี % สูงนั่นคือมีการตอบแบบสอบถามข้อเดียวกันกับเรา และเลือกคำตอบที่คล้ายกับเรานั่นเอง

2.2 วิธีเก็บข้อมูลนำมาใช้คำนวณความคล้าย (Data Acquisition)

วิธีเก็บข้อมูลจากผู้ใช้เพื่อนำมาคำนวณความคล้ายของระบบแนะนำข้อมูล โดยทั่วไปมี 2 วิธี คือ

Explicit method เป็นการเก็บข้อมูลจากผู้ใช้โดยตรง เช่น การตอบแบบสอบถาม หรือการสัมภาษณ์

ข้อดี คือ ได้ข้อมูลจากผู้ใช้โดยตรง ข้อมูลมีความถูกต้องน่าเชื่อถือกว่าวิธี Implicit

ข้อเสีย คือ ผู้ใช้ต้องมาเสียแรงเสียเวลาในการให้ข้อมูลแก่ระบบ

Implicit method เป็นการเก็บข้อมูลจากผู้ใช้โดยอ้อมหรือโดยนัย วิธีนี้อาศัยการสังเกตพฤติกรรม หรือดึงข้อมูลการใช้งานระบบในอดีตของผู้ใช้มาวิเคราะห์

ข้อดี คือ ผู้ใช้ไม่ต้องทำอะไรเลย ระบบเป็นผู้รวบรวมข้อมูลจากผู้ใช้

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

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

แอพ OkCupid ใช้วิธีการ Explicit คือ ใช้แบบสอบถามเก็บข้อมูลจากผู้ใช้ ซึ่งเป็นชุดคำถามแนวทัศนคติและจิตวิทยาในการใช้ชีวิตคู่ ต่างจากแอพ Tinder จะใช้วิธี Implicit คือการดึงข้อมูลการใช้งาน Facebook ของผู้ใช้มาวิเคราะห์เพื่อแนะนำคู่เดทให้

2.3 วิธีการคำนวณความคล้าย (Similarity Computation)

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

Paul หยิบมือถือเปิดแอพ OkCupid ขึ้นมา เขาพบว่าแอพแนะนำหญิงสาวให้แก่เขา 3 คนได้แก่ Alexis, Rhina และ Jennie แต่ละคน Match กับเขาใน % ที่ต่างกัน Paul จำได้ว่าเขาตอบแบบสอบถามในแอพไปประมาณ 5 ข้อ แต่ละข้อมีคำตอบให้เลือก 5 ตัว

จากกรณีของ Paul ถ้าเรานำข้อมูลการตอบแบบสอบถามในแอพมาแปลงให้อยู่ในรูปแบบของตารางจะได้หน้าตาประมาณนี้ จริง ๆ มันคือการแปลงข้อมูลให้เป็นเวกเตอร์ (vector) เพื่อให้เหมาะตอนนำไปเข้าสูตรคำนวณ

จากตาราง Paul คือ ผู้ใช้งานแอพอยู่ ณ ขณะนั้น (active user) แอพ OkCupid จะนำข้อมูลการตอบแบบสอบถามของ Paul ไปคำนวณหาความคล้ายกับผู้ใช้คนอื่นเป็นคู่ ๆ โดยเริ่มจาก Paul-Alexis ไล่มา Paul-Rhina และจบด้วย Paul-Jennie โดยใช้สูตรคำนวณความคล้ายอย่าง Cosine Similarity

Cosine Similarity

ใครเจอสมการอย่าเพิ่งหนีกันนะครับ เห็นอย่างนี้คำนวณจริงไม่ยาก ผมจะแสดงตัวอย่างการคำนวณความคล้ายระหว่าง Paul (x) กับ Alexis (y) ให้ดูจากรูปต่อไปนี้

Cosine Similarity เป็นการนำเวกเตอร์ข้อมูล 2 ตัว คือ x (ข้อมูล Paul) และ y (ข้อมูล Alexis) มาคำนวณ ผลลัพธ์ที่ได้คือความคล้ายระหว่าง Paul-Alexis อยู่ที่ 81% เราสามารถใช้สูตรเดิมกับคู่ Paul-Rhina และ Paul-Jennie ได้ และนี่คือผลลัพธ์ทั้งหมดที่ได้จากการคำนวณครับ

Paul กับ Alexis Match 81%

Paul กับ Rhina Match 57%

Paul กับ Jennie Match 18%

จากผลลัพธ์เราสามารถสรุปได้ว่าคู่ Paul กับ Alexis น่าจะเข้ากันได้ดีที่สุดเมื่อเทียบกับคู่เดทคนอื่น ๆ เพราะทั้งคู่มีความคล้ายกันหรือ Match กันถึง 81% รองลงมาคือ Rhina และ Jennie ตามลำดับ

มาถึงตรงนี้ผมไม่ฟันธงว่า OkCupid ใช้สูตรอะไรคำนวณความคล้าย ในตัวอย่างที่ยกมาเป็นเทคนิคกว้าง ๆ ที่แอพนำมาใช้หา % Match โดยใช้สูตร Cosine Similarity ที่เรียบง่ายและได้ผลดีมาอธิบาย

ในโลกของระบบแนะนำข้อมูลยังมีอีกหลายสูตรที่นิยมใช้ เช่น Pearson Correlation Coefficient หรือ Jaccard Coefficient การเลือกใช้สูตรเหล่านี้ขึ้นอยู่กับประเภทของข้อมูล ใครสนใจลองไปศึกษาหาความรู้เพิ่มเติมได้ครับ

สรุป

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