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) ที่คนหลุดออกเยอะที่สุด

  1. นับจำนวน session ต่อขั้นของ funnel ทั้งหมด

    Python

เทียบ funnel ระหว่าง device

อยากรู้ว่า funnel ของคนที่ใช้มือถือกับคอมพิวเตอร์ต่างกันไหม

  1. นับจำนวน session ต่อขั้นของ funnel แยกตาม device

    Python

เติมช่องว่าง

แทน ___ ด้วยโค้ดที่ถูกต้อง แล้วกดตรวจคำตอบ

ยังไม่ได้ทำ

คำนวณ 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

1. step-conversion กับ absolute drop-off ต่างกันยังไง
2. ทำไมขั้นที่มี absolute drop-off เยอะที่สุดไม่จำเป็นต้องเป็นขั้นที่แย่ที่สุด
3. เทียบ funnel ระหว่าง mobile กับ desktop มีประโยชน์ยังไง
4. ถ้าอยากเพิ่ม purchase โดยงบจำกัด ควรโฟกัสขั้นไหนของ funnel นี้ก่อน

สรุป

  • อ่าน 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 ช่วยให้เจอจุดที่ควรแก้ไขได้ตรงกว่า