Association Rule with Apriori Algorithm

Pawit Dev
4 min readMay 5, 2022

--

Association rule คือกฏที่สร้างขึ้นมาเพื่อบอกว่า หากลูกค้าเลือกซื้อสิ่งนี้แล้ว มีความเป็นไปได้ที่จะเลือกซื้อสินค้าไหนคู่กันบ้าง…โดยการได้มาซึ่งกฏเหล่านี้ จะมี
- Metrics(Support) ในการดูว่าสินค้านี้ถูกซื้อบ่อยแค่ไหนจากการซื้อขายทั้งหมด
- Metrics(Confidence) เพื่อดูว่าในการตะกร้าการซื้อขายที่มีกลุ่มสินค้า A จะมีสินค้า B อยู่ด้วยเป็นสัดส่วนเท่าไร
- Metrics(Lift) บอกถึงโอกาสที่เมื่อหยิบกลุ่มสินค้า A แล้ว จะเพิ่มโอกาสที่ต้องหยิบ กลุ่มสินค้า B เข้าไปด้วย

แต่ในความเป็นจริงสินค้าในร้านเราอาจมีเป็นหลักร้อยหรือมากกว่า หากเราจะมาคำนวณทุก ๆ Metrics ในทุกสินค้าจะเกิด combination ของกลุ่มสินค้าที่แตกต่างกันถึง (2^N)-1 รูปแบบเลยทีเดียว

ดังนั้นจึงมี Apriori Algorithm ที่มาช่วยลดจำนวนชนิดสินค้าที่เราจะคำนวณหากฏต่าง ๆ ด้วย Concept “ถ้า itemset ใดเกิดไม่บ่อย superset ทั้งหมดของ itemset นั้น ก็จะเกิดไม่บ่อยด้วยเช่นกัน” หรือเรียกอีกอย่างว่าการ Pruning ด้วยการพิจารณา Support Count(ความถี่สินค้านั้น) > minimun support count หรือไม่ ซึ่งจะเรียกว่า frequent_itemsets แล้วเราก็ทำการสร้าง Association rule จาก frequent_itemsets

https://towardsdatascience.com/underrated-machine-learning-algorithms-apriori-1b1d7a8b7bc

เรามาลองจินตนาการว่า “เราเปิดห้างสรรพสินค้าเป็นของเราเอง ทีนี้ เราจะเลือกวางสินค้าอะไรคู่กับอะไรดีล่ะ เพื่อให้เกิดกำไรสูงที่สุด หรือเราจะแนะนำ Promotion อะไรให้ลูกค้าดี”

Association rule หรือ กฎความสัมพันธ์ เป็นหนึ่งในเครื่องมือเพื่อการวิเคราะห์ตะกร้าตลาด (Market basket analysis) ที่สามารถเข้ามาช่วยตอบคำถามเหล่านี้ได้

Market Basket Analysis หรือ การวิเคราะห์ตะกร้าตลาด เพื่อศึกษาพฤติกรรมการซื้อสินค้าของลูกค้า และหาความสัมพันธ์ของสินค้าที่ลูกค้าซื้อ โดยผลลัพธ์ที่ได้จะแสดงในรูปของกฎที่บ่งบอกถึงความเป็นไปได้ในการซื้อสินค้าต่าง ๆ ร่วมกัน

โดยเราได้มี Code ตัวอย่างการนำ Association rule มาใช้งานด้วย mlxtend

และผมขอยกตัวอย่างตามบทความนี้ พร้อมกับอธิบาย Code ประกอบ

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

สมมติว่าในร้านค้าของเรามีสินค้าอยู่ 5 ชนิด ได้แก่ Bread Egg Butter Water และ Rice โดยมีการซื้อขายทั้งหมด 4 ตะกร้า ดังต่อไปนี้

https://bigdata.go.th/big-data-101/data-science/what-is-association-rule
dataset = [[‘Bread’, ‘Egg’, ‘Butter’],
[‘Bread’, ‘Butter’, ‘Water’],
[‘Bread’, ‘Water’, ‘Rice’],
[‘Egg’, ‘Water’]]

แล้วเราจะทำการแปลง Dataset นี้ให้อยู่ในรูปของ DataFrame

Row index ที่ 0, 1, 2, 3 จะหมายถึง Transaction(การซื้อขาย) ที่ครั้งที่ N
Column จะบอกว่ามีสินค้านี้ใน Transaction ไหนบ้าง

https://bigdata.go.th/big-data-101/data-science/what-is-association-rule

Metrics(Support)

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

https://bigdata.go.th/big-data-101/data-science/what-is-association-rule
https://bigdata.go.th/big-data-101/data-science/what-is-association-rule
https://bigdata.go.th/big-data-101/data-science/what-is-association-rule

Metrics(Confidence)

เพื่อดูว่าในการตะกร้าการซื้อขายที่มีกลุ่มสินค้า LHS จะมีสินค้า RHS อยู่ด้วยเป็นสัดส่วนเท่าไร

Metrics(Lift)

บอกถึงโอกาสที่เมื่อหยิบกลุ่มสินค้า LHS แล้ว จะเพิ่มโอกาสที่ต้องหยิบ กลุ่มสินค้า RHS เข้าไปด้วย

ทีนี้เราจะมาใช้ Apriori ในการเลือก frequent_itemsets ตามตัวอย่างโดยกำหนด minimum support = 0.5

itemset เหล่านี้ปรากฏบ่อยใน Transaction (support ≥ minimun support) เรียกว่า frequent_itemsets

เมื่อเราได้ frequent_itemsets มาแล้ว เราจะเอา frequent_itemsets เหล่านี้ไปคำนวณ confidence และ lift เพื่อสร้าง Association Rule

โดยจะเลือก rule ที่มีค่า confidence ≥ 0.3 และ filter ออกมาเฉพาะ [‘antecedents’, ‘consequents’, ‘support’, ‘confidence’, ‘lift’]

จากตรงนี้จะเห็นว่าแม้ค่า Confidence ใน Bread → Water กับ Water → Bread confidence ≥ 0.3 ซึ่งมีค่า Confidence ถึง 0.67 หรือ Confidence ของ Rice → Water ที่มีค่าเท่ากับ 1 จะสรุปว่า Rule จะมีประสิทธิภาพจริงหรือ?

หาก RHS เป็นกลุ่มของสินค้าที่พบเจอในแทบทุกตะกร้าการซื้อขาย (a very frequent itemset) ไม่ว่า LHS จะเป็นกลุ่มของสินค้าใดก็ตาม Confidence(LHS => RHS) จะมีค่าค่อนข้างสูงเสมอ

ดังนั้นเราจึงต้องมีค่า lift วัดประสิทธิภาพสำหรับ association rule ที่ทำการเปรียบเทียบ ความน่าจะเป็นที่จะพบกลุ่มของสินค้า RHS ในตะกร้าที่มีการซื้อขายกลุ่มของสินค้า LHS กับ ความน่าจะเป็นที่จะพบกลุ่มของสินค้า RHS ในตะกร้าทั้งหมด

หากค่า Lift > 1 (เท่า) แสดงว่า การที่ภายในตะกร้ามีกลุ่มสินค้า LHS อยู่ ทำให้ความน่าเป็นที่ลูกค้าจะหยิบ RHS มาใส่ตะกร้ามีค่าเพิ่มขึ้น

แต่ใน rule ของ Bread →Water และ Water →Bread ค่า Lift ≤ 1 แสดงว่า กลุ่มสินค้า LHS และ กลุ่มสินค้า RHS ไม่ขึ้นต่อกัน (independent)

หากลูกค้าซื้อ Bread มีความเป็นไปได้สูงที่จะเลือกซื้อ Butter ตามมา ในทางเดียวกันถ้าซื้อ Butter แล้วก็อาจจะซื้อ Bread ด้วยนั่นเอง

ครั้งนี้อาจเป็นการเขียนบทความแบบรีบ ๆ ไปนิดนึง ก็หวังว่าจะเป็นประโยชน์ต่อทุกคนได้บ้าง…ไว้พอมีเวลา ผมจะกลับมาขยายความบางส่วนและยกตัวอย่างขึ้นนะครับ

--

--

Pawit Dev

Super AI Engineer student who fascinated with AI technology such as NLP, Computer vision and especially in the field of TTS and Chatbot.