วิเคราะห์พฤติกรรมลูกค้าด้วย Association Rules แบบ Step-by-Step ด้วย Python
การเข้าใจพฤติกรรมของลูกค้าไม่ใช่แค่เรื่องของสัญชาตญาณหรือความรู้สึกอีกต่อไป ในยุคที่ธุรกิจมีข้อมูลมากมาย การใช้ เทคนิควิเคราะห์ข้อมูล (Data…
วิเคราะห์พฤติกรรมลูกค้าด้วย Association Rules แบบ Step-by-Step ด้วย Python
การเข้าใจพฤติกรรมของลูกค้าไม่ใช่แค่เรื่องของสัญชาตญาณหรือความรู้สึกอีกต่อไป ในยุคที่ธุรกิจมีข้อมูลมากมาย การใช้ เทคนิควิเคราะห์ข้อมูล (Data Analytics) เพื่อหาความเชื่อมโยงระหว่างสินค้าแต่ละชิ้นในตะกร้าของลูกค้า จึงกลายเป็นเครื่องมือที่ทรงพลัง โดยเฉพาะเทคนิคที่เรียกว่า Market Basket Analysis หรือ Association Rule Mining
ในบทความก่อนหน้านี้ เราได้ปูพื้นฐานไปแล้วว่า Market Basket Analysis คืออะไร และมันช่วยให้เรารู้ว่าลูกค้ามักจะซื้ออะไรคู่กับอะไรได้อย่างไรบ้าง ซึ่งในบทความนี้ เราจะพาทุกคนลงมือทำจริง เรียนรู้การวิเคราะห์ Association Rules แบบ Step-by-Step ด้วย Python ตั้งแต่
- เตรียมข้อมูล
- ใช้อัลกอริธึม Apriori
- หา Frequent Itemsets
- สร้างกฎความสัมพันธ์ (Rules)
และที่สำคัญตีความผลลัพธ์ อย่างเข้าใจง่าย พร้อมแนวคิดการนำไปใช้จริงในธุรกิจ ไม่ว่าจะเป็นนักวิเคราะห์ข้อมูล เจ้าของร้านค้าออนไลน์ หรือสาย Marketing ที่อยากใช้ Data มาช่วยตัดสินใจ บทความนี้จะช่วยให้คุณเริ่มต้นทำ MBA ได้ด้วยตัวเองได้อย่างแน่นอนครับ
Step 1 : เริ่มต้นด้วยการเตรียมข้อมูล (Data Preparation)
ก่อนที่เราจะใช้เทคนิควิเคราะห์ใดๆ ข้อมูลของเราต้องอยู่ในรูปแบบที่ถูกต้องเสียก่อน ในไฟล์ Notebook นี้ เราเริ่มต้นด้วยการใช้ pandas ซึ่งเป็น Library ยอดนิยมในการจัดการข้อมูลเพื่ออ่านไฟล์ orders_data_market_basket_analysis.csv
ข้อมูลดิบของเราเป็นรายการสั่งซื้อยาวๆ แต่หัวใจของ Market Basket Analysis คือ ตะกร้า หรือ Transaction ดังนั้นขั้นตอนที่สำคัญที่สุดคือการจัดกลุ่มข้อมูลตาม Order ID เดียวกัน จากนั้นรวมรายการสินค้า (Product Subcategory) ทั้งหมดในคำสั่งซื้อนั้นๆ ให้มาอยู่ในรูปแบบของลิสต์ หรือ "ตะกร้า" หนึ่งใบนั่นเอง

raw data ของ orders_data_market_basket_analysis.csv

แปลงข้อมูลจากในรูปของ transaction ให้อยู่ในรูปของ basket
เมื่อเราได้ข้อมูลตะกร้าสินค้ามาแล้ว เราต้องแปลงมันให้อยู่ในรูปแบบที่อัลกอริธึมจะเข้าใจได้ นั่นคือตารางที่แต่ละแถว(row)แทน 1 ตะกร้า และแต่ละคอลัมน์แทนสินค้า 1 ชนิด ซึ่งในโค้ดจะใช้ TransactionEncoder จาก mlxtend เพื่อทำสิ่งนี้ โดยผลลัพธ์จะเหมือนกับตารางเช็กลิสต์ขนาดใหญ่ที่บอกว่าในแต่ละตะกร้ามีสินค้าอะไรอยู่บ้าง (True) หรือไม่มี (False) นั่นเองครับ

ข้อมูลแต่ละ basket โดยแบ่งตามชนิดของสินค้า
Step 2 : Apriori Algorithm (เฟ้นหาสินค้าที่มักถูกซื้อพร้อมกัน)
เมื่อข้อมูลพร้อมแล้ว ก็ถึงหน้าที่ของ Apriori Algorithm ที่จะมาช่วยเราค้นหา “ชุดสินค้าที่ถูกซื้อพร้อมกันบ่อยๆ หรือที่เรียกกันว่า (Frequent Itemsets) กันครับ
โดยหลักการทำงานของ Apriori คือการใช้ค่าที่เรียกว่า Support ซึ่งเปรียบเสมือน “คะแนนความนิยม” ของชุดสินค้านั้นๆ
- Support : คือสัดส่วนของจำนวนตะกร้าที่มีชุดสินค้านั้นๆ อยู่ ต่อจำนวนตะกร้าทั้งหมด เช่น ถ้ามี Support ของ {ขนมปัง, นม} เท่ากับ 0.1 หมายความว่า 10% ของตะกร้าทั้งหมดมีการซื้อขนมปังและนมพร้อมกัน
ในโค้ด เรากำหนด min_support=0.01 (หรือ 1%) เป็นการบอกอัลกอริธึมว่าเราสนใจเฉพาะชุดสินค้าที่ฮิตจริงๆ คือต้องปรากฏในตะกร้าอย่างน้อย 1% ขึ้นไปเท่านั้น ชุดสินค้าที่ไม่ค่อยมีคนซื้อพร้อมกัน เราจะยังไม่ให้ความสำคัญ

Apriori alogorithm to find freq itemmsets (min_sup = 1%)

ค่า support ที่ได้จากการวัด 2-pair itemset

Top 10 Frequent 1-Itemsets by Support

Top 10 Frequent 2-Itemsets by Support

Top 3 Frequent 3-Itemsets by Support
Step 3 : สร้างกฎความสัมพันธ์ (Generating Association Rules)
เมื่อเรารู้แล้วนั้นว่าสินค้ากลุ่มไหนขายคู่กันบ่อย ในขั้นต่อไปเราจะเจาะลึกลงไปอีกว่า มีความสัมพันธ์เชิงเหตุผลระหว่างสินค้าหรือไม่ เช่น ถ้าลูกค้าซื้อสินค้า A แล้ว เขาจะซื้อสินค้า B ด้วยหรือไม่อย่างไร ในขั้นตอนนี้ เราจะใช้ค่าชี้วัดที่สำคัญ 3 ตัวเพื่อประเมินความน่าสนใจของแต่ละกฎ
- Support : ความนิยมรวมๆ ของชุดสินค้า
- Confidence : ความน่าจะเป็นที่ลูกค้าซื้อ A แล้วจะซื้อ B ด้วย เช่น Confidence(A → B) = 0.6 หมายถึง 60% ของลูกค้าที่ซื้อ A จะซื้อ B ด้วย
- Lift : คือค่าที่สำคัญที่สุดในการวิเคราะห์นี้โดย Lift จะบอกเราว่า การที่ลูกค้าซื้อสินค้า B หลังจากซื้อ A ไปแล้วนั้น สูงกว่าโอกาสที่ลูกค้าจะซื้อสินค้า B แบบปกติ (โดยไม่สนใจ A) กี่เท่า โดยที่
Lift > 1: หมายความว่าการซื้อ A ช่วยส่งเสริมการซื้อ B จริงๆ (น่าสนใจ)Lift = 1: หมายความว่าการซื้อ A และ B ไม่เกี่ยวข้องกันเลย (อาจเป็นแค่เรื่องบังเอิญ)Lift < 1: หมายความว่าการซื้อ A อาจลดโอกาสการซื้อ B (อาจเป็นสินค้าทดแทนกัน)

association_rules โดยการตั้ง lifi > 1
ในโค้ด เราจะใช้ฟังก์ชัน association_rules โดยกำหนดให้กรองเฉพาะกฎที่มีค่า lift มากกว่า 1 ขึ้นไป เพื่อให้ได้เฉพาะกฎที่มีความสัมพันธ์กันจริงๆ
Step 4 : ตีความผลลัพธ์และนำไปใช้จริง (Interpreting the Results)
เมื่อได้กฎความสัมพันธ์มาแล้ว สิ่งสำคัญที่สุดคือการตีความเพื่อนำไปใช้ประโยชน์ทางธุรกิจ ในไฟล์ Notebook นี้มีการจัดเรียงกฎตามค่า Lift จากสูงไปต่ำ เพื่อให้เราเห็นความสัมพันธ์ที่น่าสนใจที่สุดก่อน นอกจากนี้ยังมีการสร้างกราฟแท่งแนวนอนเพื่อแสดง 10 อันดับกฎที่มีค่า Lift สูงสุด ทำให้เห็นภาพและเข้าใจผลลัพธ์ได้ง่ายขึ้น
ตัวอย่างเช่น จากผลลัพธ์ในตาราง เราอาจเจอกฎที่น่าสนใจอย่างเช่น ถ้าลูกค้าซื้อที่เก็บเอกสาร (Storage) จะมีแนวโน้มซื้อแฟ้ม (Binders) และกระดาษ (Paper) ด้วย ซึ่งมีค่า Lift เท่ากับ 1.24 ซึ่งข้อมูลเชิงลึกเช่นนี้สามารถนำไปต่อยอดได้หลากหลาย ไม่ว่าจะเป็น
- การจัดโปรโมชั่น : จัดโปรโมชั่นซื้อที่เก็บเอกสาร แถมส่วนลดสำหรับแฟ้มและกระดาษ
- การจัดวางสินค้า : วางสินค้าเหล่านี้ไว้ใกล้กันบนเว็บไซต์หรือในร้านค้า เพื่อกระตุ้นการซื้อ
- การทำ Recommendation : แนะนำสินค้าที่เกี่ยวข้องกันบนหน้าสินค้าออนไลน์
ตัวอย่าง association rules
- Rule :
{Storage} -> {Binders, Paper} - Lift : 1.24
ซึ่งสามารถตีความได้ว่า : “ถ้าลูกค้าซื้อสินค้าหมวดที่เก็บเอกสาร (Storage) แล้ว พวกเขามีแนวโน้มที่จะซื้อสินค้าหมวดแฟ้ม (Binders) และกระดาษ (Paper) พร้อมกันไปด้วย สูงกว่าปกติถึง 24%” (มาจากค่า Lift 1.24 คือสูงกว่าปกติ 0.24 หรือ 24%)

top 10 rules by lift
กล่าวโดยสรุปแล้วนั้น การทำ Market Basket Analysis ด้วย Python ไม่ใช่แค่เรื่องของการวิเคราะห์ข้อมูล แต่คือการเปลี่ยนลิสต์รายการสั่งซื้อธรรมดาให้กลายเป็นข้อมูลเชิงลึกที่ธุรกิจนำไปใช้ได้จริง ไม่ว่าจะเป็นการออกแบบโปรโมชัน ระบบแนะนำสินค้า หรือกลยุทธ์การจัดร้าน ทุกอย่างเริ่มต้นจากการเข้าใจว่าลูกค้าซื้ออะไรพร้อมกับอะไรและซื้อทำไมนั่นเองครับ ;>
Source
메타데이터
- post_id
- 9d0bfbbd3bd2
- slug
- วิเคราะห์พฤติกรรมลูกค้าด้วย-association-rules-แบบ-step-by-step-ด้วย-python-9d0bfbbd3bd2
- url
- https://medium.com/@4ommyx/%E0%B8%A7%E0%B8%B4%E0%B9%80%E0%B8%84%E0%B8%A3%E0%B8%B2%E0%B8%B0%E0%B8%AB%E0%B9%8C%E0%B8%9E%E0%B8%A4%E0%B8%95%E0%B8%B4%E0%B8%81%E0%B8%A3%E0%B8%A3%E0%B8%A1%E0%B8%A5%E0%B8%B9%E0%B8%81%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-association-rules-%E0%B9%81%E0%B8%9A%E0%B8%9A-step-by-step-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-python-9d0bfbbd3bd2
- canonical_url
- https://medium.com/@4ommyx/%E0%B8%A7%E0%B8%B4%E0%B9%80%E0%B8%84%E0%B8%A3%E0%B8%B2%E0%B8%B0%E0%B8%AB%E0%B9%8C%E0%B8%9E%E0%B8%A4%E0%B8%95%E0%B8%B4%E0%B8%81%E0%B8%A3%E0%B8%A3%E0%B8%A1%E0%B8%A5%E0%B8%B9%E0%B8%81%E0%B8%84%E0%B9%89%E0%B8%B2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-association-rules-%E0%B9%81%E0%B8%9A%E0%B8%9A-step-by-step-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-python-9d0bfbbd3bd2
- author_url
- https://medium.com/@4ommyx
- status
- ok
- fetched_at
- 2026-06-13 07:35:29