Data Analyst › Business metrics
วิเคราะห์ funnel
ประมาณ 30 นาที
เป้าหมายของบท
- อ่าน funnel ทีละขั้นด้วย step-over-step conversion
- แยกความต่างระหว่าง absolute drop-off กับ relative step-conversion
- เปรียบเทียบ funnel ระหว่างกลุ่มย่อย เช่น device
funnel คืออะไร
funnel คือลำดับขั้นที่ผู้ใช้ต้องผ่านก่อนจะถึงเป้าหมาย เช่นร้านค้าออนไลน์นี้มี funnel:
visit → view_product → add_to_cart → checkout → purchase (ข้อมูลอยู่ใน events.csv, นับที่ระดับ session_id)
import pandas as pd
events = pd.read_csv("data/events.csv")
FUNNEL = ["visit", "view_product", "add_to_cart", "checkout", "purchase"]
counts = events.groupby('event_type')['session_id'].nunique()
หมายเหตุ: events.csv เป็นคนละแหล่งข้อมูลกับ orders/order_items ที่ใช้คำนวณรายได้ในบทก่อนๆ — events
วัดพฤติกรรมระดับ session (การเข้าชม คลิก ไปจนถึงกดซื้อ) ส่วน orders วัดออเดอร์ที่เกิดขึ้นจริง ทั้งสองเกี่ยวข้องกัน
แต่ไม่ใช่ตารางเดียวกัน
step-conversion ต่างจาก absolute drop-off
Absolute drop-off คือจำนวนคนที่หายไประหว่างสองขั้น (ขั้นก่อน − ขั้นถัดไป)
Step-conversion คือสัดส่วน (%) ของคนที่ผ่านขั้นนั้นได้ เทียบกับฐานของขั้นก่อนหน้า:
step_conv_pct = round(counts['add_to_cart'] / counts['view_product'] * 100, 2)
ขั้นที่มี absolute drop-off เยอะที่สุดไม่จำเป็นต้องเป็นขั้นที่แย่ที่สุด — ขั้นต้นๆ ของ funnel มักมีคนเยอะอยู่แล้ว ดรอปเป็นตัวเลขเยอะเป็นเรื่องปกติ ต้องดู step-conversion (%) ประกอบเสมอเพื่อรู้ว่าขั้นไหนควรแก้ก่อนจริงๆ
แบ่ง funnel ตาม segment
การดู funnel รวมอย่างเดียวอาจกลบปัญหาของ segment ใดๆ ไว้ ลองแบ่งตาม device (mobile/desktop) ดู:
mobile = events[events['device'] == 'mobile']
desktop = events[events['device'] == 'desktop']
แล้วคำนวณ funnel/conversion แยกกัน — ถ้า conversion รวมใกล้เคียงกันแต่ step ใดขั้นหนึ่งต่างกันมาก แปลว่ามีจุดที่ควร โฟกัสเฉพาะ segment นั้น
ตัวอย่างแก้โจทย์
กด "ขั้นต่อไป" ทีละขั้น ลองรันและแก้โค้ดในแต่ละขั้นได้
อ่าน funnel ทีละขั้น
อยากรู้ว่าขั้นไหนของ funnel (visit → view_product → add_to_cart → checkout → purchase) ที่คนหลุดออกเยอะที่สุด
นับจำนวน session ต่อขั้นของ funnel ทั้งหมด
เทียบ funnel ระหว่าง device
อยากรู้ว่า funnel ของคนที่ใช้มือถือกับคอมพิวเตอร์ต่างกันไหม
นับจำนวน session ต่อขั้นของ funnel แยกตาม device
เติมช่องว่าง
แทน ___ ด้วยโค้ดที่ถูกต้อง แล้วกดตรวจคำตอบ
คำนวณ step-conversion (%) จาก view_product ไป add_to_cart เก็บไว้ในตัวแปร step_conv_pct เติม ___ ให้ครบ
แบบฝึกท้ายบท
บทนี้จะนับว่าเสร็จเมื่อผ่านข้อพื้นฐานและประยุกต์ครบ ข้อท้าทายได้ดาวเพิ่ม
🟢 พื้นฐาน
จำนวน session ต่อขั้นของ funnel ทั้งหมด (Series, index ตามลำดับ visit, view_product, add_to_cart, checkout, purchase) เก็บไว้ในตัวแปร result
อัตราการเปลี่ยนเป็นลูกค้ารวม (%) จาก visit ไปถึง purchase เก็บไว้ในตัวแปร overall_conversion_pct
step conversion (%) จาก view_product ไป add_to_cart เก็บไว้ในตัวแปร step_conv_pct
ขั้นไหนของ funnel (ไม่นับ visit) มี step-conversion ต่ำที่สุด (string เช่น 'add_to_cart') เก็บไว้ในตัวแปร worst_step
🟡 ประยุกต์
จำนวนคนที่หายไป (absolute drop-off) ในแต่ละคู่ขั้นของ funnel เก็บไว้ในตัวแปร result (Series, index เป็น 'visit_to_view_product', 'view_product_to_add_to_cart', 'add_to_cart_to_checkout', 'checkout_to_purchase')
จำนวน session ต่อขั้นของ funnel เฉพาะ device เป็น mobile (Series) เก็บไว้ในตัวแปร result
จำนวน session ต่อขั้นของ funnel เฉพาะ device เป็น desktop (Series) เก็บไว้ในตัวแปร result
🔴 ท้าทาย
overall conversion ของ mobile สูงกว่า desktop ไหม (bool) เก็บไว้ในตัวแปร mobile_higher
step-conversion (%) ของขั้น add_to_cart (view_product→add_to_cart) เทียบระหว่าง mobile กับ desktop (สองตัวแปร) เก็บไว้ในตัวแปร conv_mobile, conv_desktop
Quiz
สรุป
- อ่าน funnel ทีละขั้นด้วย step-conversion (%) ไม่ใช่แค่ดูจำนวนคนที่หายไป
- absolute drop-off เยอะไม่ได้แปลว่าขั้นนั้นแย่ที่สุด ต้องดู % เทียบกับฐานของขั้นนั้นเสมอ
- แบ่ง funnel ตาม segment (เช่น device) ช่วยเจอปัญหาที่ภาพรวมอาจกลบไว้
คำถามสัมภาษณ์
เจอ funnel ที่ conversion ตกฮวบขั้นหนึ่ง จะสืบสาเหตุต่อยังไง (ไม่ใช่แค่รายงานตัวเลข)
ควรแยกดูว่าปัญหากระจุกอยู่ที่ segment ไหน (device, channel, ช่วงเวลา) แล้วดูข้อมูลเชิงคุณภาพประกอบ เช่น รีวิวผู้ใช้ หรือทดลองใช้งานจริงในขั้นนั้นด้วยตัวเอง ก่อนจะสรุปว่าสาเหตุคืออะไร ตัวเลขบอกแค่ "ตรงไหน" ที่มีปัญหา แต่ไม่บอก "ทำไม" — ต้องหาข้อมูลเพิ่มเพื่อตอบ "ทำไม"
ทำไมการแบ่ง funnel ตาม segment (เช่น device, channel) ถึงสำคัญกว่าดู funnel รวมอย่างเดียว
เพราะตัวเลขรวมอาจกลบปัญหาของ segment หนึ่งไว้ด้วยผลงานที่ดีของอีก segment เช่น ถ้า mobile กับ desktop มี conversion รวมใกล้เคียงกัน อาจดูเหมือนไม่มีปัญหา ทั้งที่จริงขั้นใดขั้นหนึ่งของ device หนึ่งแย่กว่าอีก device มากอย่างมีนัยสำคัญ การแบ่ง segment ช่วยให้เจอจุดที่ควรแก้ไขได้ตรงกว่า