Data Science

DAY 02 – Jaccard Similarity

#BigDataRPG #DataScienceวันละตอน #JaccardSimilarity

เกริ่นนำ :

ลองเขียน Data Series วันละตอนเนาะ
ครบ 1 ปีน่าจะมี 365 เรื่อง ^^
เป็นเรื่องสั้นๆ อาจจะไม่ยาวมากนะครัช
แต่อ่านแล้วน่าจะเห็นภาพ และการนำไปใช้งานได้บ้าง

=========================
ว่าด้วยการวัดข้อมูลที่เป็น Set กันบ้าง
=========================

ในงานด้าน Data Science หรือด้าน Data ที่เกี่ยวข้องหลายคน
อาจจะรู้จักเครื่องมือ หรือ ฟังก์ชันที่ใช้วัดระยะมาหลากหลายตัว
บางตัวสามารถวัดระยะกับข้อมูลที่เป็น ตัวเลขได้
บางตัวสามารถวัดระยะกับข้อมูลที่ไม่ใช่ตัวเลขได้
อย่างเช่นที่เรารู้จักไปก่อนหน้า
นั่นคือ Hamming Distance
ซึ่งช่วยเราวัดระยะ หรือวัดความเหมือน หรือความแตกต่างของแต่ละคนได้
แต่ Hamming Distance นั้นเราต้องแปลงข้อมูลให้เป็น Binary
และข้อมูลที่เปรียบเทียบนั้นต้องมีขนาดเท่ากัน
หลังจากนั้นถึงสามารถทำข้อมูลมาวัดความเหมือน หรือความแตกต่างกันได้

แต่ถ้าข้อมูลของเราไม่ได้เป็น Binary ล่ะ !???

ยกตัวอย่างเช่น
หากข้อมูลที่เรามีเป็นแบบนี้
นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }
(คล้ายๆ เดิมเลยเนาะ) ! 🤨

============
Jaccard Similarity
============


ทีนี้เวลาเราหาระยะห่างโดยใช้ Jaccard Similarity
เราจะใช้เรื่องของ Set เข้ามาช่วยในการคำนวนจากสูตร
J(A,B) = | Intersect(A, B) | / | Union(A, B) |

ทำความเข้าใจสูตรกันก่อน
| Intersect(A, B) |
คือดูว่าข้อมูลของนาย A และนาย B มีสินค้าไหนที่เหมือนกันบ้าง
และมีจำนวนกี่ชิ้น โดยนับแบบ Unique item คือไม่นับตัวซ้ำ

| Union(A, B) |
คือดูว่าข้อมูลของนาย A และนาย B มีข้อมูลรวมกันจำนวนกี่ชิ้นโดยนับแบบ Unique item คือไม่นับตัวซ้ำ และมีจำนวนกี่ชิ้นหลังจากนั้นจึงนำค่าที่ได้จากทั้งคู่มาหารกันเพื่อได้ค่า Jaccard Similarity !!!
แท่น แท่น แท๋นนนนน 😀

มาลองคำนวนกันดู 🙂

นาย A ซื้อสินค้า { แอปเปิ้ล }
นาย B ซื้อสินค้า { ส้ม, กล้วย }
นาย C ซื้อสินค้า { แอปเปิ้ล, ส้ม }


คิดนาย A และ B
| Intersect(A, B) | = 0 (ไม่มีอะไรตรงกันเลย)
| Union(A, B) | = 3 (พบ item 3 ชนิด)
J(A, B) = 0/3 = 0 (นาย A เหมือน นาย B 0%)

คิดนาย A และ C
| Intersect(A, C) | = 1 (ตรงกันแค่แอปเปิ้ล)
| Union(A, C) | = 2 (พบ item 2 ชนิด)
J(A, C) = 1/2 = 0.5 (นาย A เหมือน นาย C 50%)

คิดนาย B และ C
| Intersect(B, C) | = 1 (ตรงกันแค่ส้ม)
| Union(B, C) | = 3 (พบ item 3 ชนิด)
J(B, C) = 1/3 = 0 (นาย B เหมือน นาย C 33.3%)

ถึงจุดนี้มาลองดูผลลัพธ์อีกทีครับ

นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 50.0 % 🤨!!
นาย B, นาย C เหมือนกัน = 33.3 %

เห็นความแตกต่างของผลลัพธ์เมื่อเทียบกับ Hamming ไหมเอ่ยครับ !!!

ให้เวลาเพื่อนๆนึกก่อน !!

อันนี้ผลของ Hamming Distance ครับ
นาย A, นาย B เหมือนกัน = 0.00 %
นาย A, นาย C เหมือนกัน = 66.6 %
นาย B, นาย C เหมือนกัน = 33.3 %

นึกออกหรือยังเอ่ย !!

.

.

.

.

งั้นเฉลยละน้าาาา

เราจะเห็นว่า Hamming Distance
เราต้องทำการเรียงข้อมูลแต่ละ item ให้ตรงก่อน
ถูกไหมเอ่ย !
และทำการเช็คแต่ละตำแหน่งว่าตรงกันหรือไม่
ถึงนับเป็นคะแนนความแตกต่าง
และการวัด Hamming Distance นั้นจะต้องวัดจากจำนวน item ที่เท่ากัน
เช่นในระบบของเรามีสินค้า 5 ชิ้น
Array เราก็จะมีขนาด 5
ดังนั้น ส่วนของการคตำนวนจึงเท่ากับ 5
เป็นการคิดความเหมือนโดยอิงจากระบบ Global
หรือมองภาพรวมของระบบ

ส่วน Jaccard Similarity นั้นจะเห็นว่าเป็นการคิดแบบ Set แบบ Pair คู่ จากตัวอย่าง
คิดนาย A และ C | Intersect(A, C) | = 1 (ตรงกันแค่แอปเปิ้ล)
| Union(A, C) | = 2 (พบ item 2 ชนิด)
J(A, C) = 1/2 = 0.5 (นาย A เหมือน นาย C 50%)

จะเห็นว่าพบ item เพียงแค่ 2 ชนิดทำให้ตัวหารมีค่าขนาด Array เพียงแค่ 2
ซึ่งไม่ได้ Represent หรือสื่อถึงจำนวนที่แท้จริงทั้งหมดของระบบ
เช่นถ้าเรามี 5 ก็จะคิดแค่ 2
ซึ่งจริงๆ ถ้าเรารู้ว่าระบบเรามี 5 items
ก็อาจจะ modify สมการของ Union ให้เป็น 5 ได้
(Math ไม่ยากงับ ถ้าเราเข้าใจที่มาก็ modify ได้แบบเข้าใจ)

ทีนี้เราจะเห็นว่า Hamming Distance ข้อมูลต้องจัดในรูป Binary Vector ก่อนส่วน Jaccard Similarity นั้นสามารถคิดได้จาก Set ของ Item โดยตรงเลย
แล้วถ้า Set ของเราไม่ได้เป็นข้อมูลชนิด Discrete ได้ไหม

* Discrete คือข้อมูลที่ไม่ได้เป็นตัวเลขที่หา Ratio ได้
เช่น
จำนวนนักศึกษาในห้อง (นักศึกษาเป็นเศษส่วนไม่ได้)
หรือหน้าของลูกเต๋าที่ทอยออกมาได้ (หน้าลูกเต๋าออกมาเป็น 1/9 ไม่ได้ ถ้าไม่ได้ทอยแรงจนลูกเต๋าแตกอะนะ !)

สำหรับเจ้า Jaccard Similarity
ยังสามารถคำนวนหาความเหมือน หรือแตกต่างกันจากข้อมูลที่เป็น Ratio
ได้ด้วยนะเออ เรียกว่า Probability Jaccard
Link Paper: https://academic.oup.com/sysbio/article-pdf/45/3/380/19501760/45-3-380.pdf
และเจ้าฟังก์ชันวัดความเหมือนนี้ยังมีแตกแยกย่อยอีกมากมายเลยล่ะ 😀

====================
ประโยชน์ของ Jaccard Similarity
====================

อาทิเช่น
– การจัดกลุ่มลูกค้า
– หาความคล้ายกันของชื่อคน
– เช็คคุณภาพของข้อความ
– การค้นหาเอกสาร
– การค้นหา Intent ของ Chatbot
– เช็คความเหมือนกันของรูปภาพ
– การค้นหาคนที่มีพฤติกรรมเหมือนกลุ่มใดกลุ่มหนึ่ง
– การนำเสนอสินค้าที่ใกล้เคียงกับคนแต่ละกลุ่ม
– การแนะนำสินค้าโดยอิงจากความใกล้เคียงกันของกลุ่ม
– การส่งแคมเปญการตลาดให้แต่ละกลุ่ม
– การทำโปรไฟลล์ลูกค้า
– ใช้เป็น 1 ใน ตัววัดประสิทธิภาพโมเดลในโจทย์ปัญหา Multilabel-Classification
– และอื่นๆอีกมากมาย

=========================
ขอบคุณทุกท่านที่ติดตามครับ
ฝากไลค์ แชร์ คอมเมนท์ เพื่อเป็นกำลังใจ
Made with Love ❤️ by Boyd
=========================

Series นี้ออกแบบมาให้เพื่อนๆที่สนใจในเรื่องของ Data
หรือเพื่อนๆที่ทำงานสาย Data แต่มีเวลาจำกัดได้อ่านกันครับ
โดยเนื้อหาอาจจะมีสลับกันไปทั้งในเรื่องของความง่าย และยาก
รวมถึงเนื้อหาที่หลากหลายทั้ง Coding, Math, Data, Business, และ Misc-

Feedback กันเข้ามาได้นะครับ ว่าชอบหรือไม่ชอบอย่างไร
เพื่อการปรับปรุง Content ให้ดียิ่งขึ้น

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

#BigDataRPG #DataScienceวันละตอน #JaccardSimilarity

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

%d bloggers like this: