Data Analyst › Business metrics
Cohort และ retention
ประมาณ 30 นาที
เป้าหมายของบท
- นิยาม cohort (กลุ่มลูกค้าตามเดือนที่สมัคร) และ retention
- อ่านค่า retention ที่ต่ำผิดปกติแล้วสืบสาเหตุถึงต้นตอ
- เชื่อมโยง cohort กับคุณภาพของช่องทางที่พาลูกค้าเข้ามา
cohort คืออะไร
Cohort คือกลุ่มลูกค้าที่เข้าร่วม (ในที่นี้คือสมัครสมาชิก) ในช่วงเวลาเดียวกัน — ใช้เปรียบเทียบพฤติกรรมของกลุ่ม ต่างๆ ข้ามช่วงเวลาได้ เช่น “คนที่สมัครเดือน มิ.ย. กลับมาซื้อซ้ำมากน้อยแค่ไหนเทียบกับคนที่สมัครเดือน ก.ค.”
c = customers.assign(cohort=lambda d: d.signup_date.str[:7])
retention คืออะไร
ในบทนี้นิยาม retention ว่าคือสัดส่วนลูกค้าที่สั่งซื้อตั้งแต่ 2 ครั้งขึ้นไป นับทุกสถานะออเดอร์ (ต่างจากบทที่แล้ว
ที่นับเฉพาะออเดอร์ completed เพราะคำถามคือ “ลูกค้ากลับมาลองซื้ออีกไหม” ไม่ใช่ “ลูกค้าซื้อสำเร็จซ้ำไหม”):
k = orders.groupby('customer_id').size().rename('n_orders')
merged = customers.merge(k, on='customer_id', how='left').fillna({'n_orders': 0})
retention = (merged['n_orders'] >= 2).mean()
เจอ retention ต่ำผิดปกติ — อย่ารีบสรุป
ถ้า cohort เดือนหนึ่งมี retention ต่ำกว่าเดือนข้างเคียงมาก ขั้นแรกที่ควรทำคือ ตรวจดูองค์ประกอบของ cohort นั้น ก่อนสรุปว่าเป็นปัญหาของช่วงเวลานั้นเอง เช่น เช็คว่าคนกลุ่มนั้นมาจากช่องทางไหนบ้าง:
june = c[c['cohort'] == '2025-06']
june['channel'].value_counts()
บ่อยครั้งที่ retention ต่ำผิดปกติของ cohort หนึ่ง แท้จริงแล้วเป็นปัญหาของช่องทางที่พาลูกค้าเข้ามา ไม่ใช่ปัญหาของ ช่วงเวลานั้นเอง — cohort นั้นแค่บังเอิญมีคนจากช่องทางที่มีปัญหาเข้ามาเยอะเป็นพิเศษ
ตัวอย่างแก้โจทย์
กด "ขั้นต่อไป" ทีละขั้น ลองรันและแก้โค้ดในแต่ละขั้นได้
cohort ตามเดือนสมัคร มี retention ต่างกันแค่ไหน
อยากรู้ว่าลูกค้าที่สมัครในแต่ละเดือนของปี 2025 กลับมาซื้อซ้ำมากน้อยแค่ไหน
แบ่งลูกค้าเป็น cohort ตามเดือนที่สมัคร (signup_date) แล้วหา retention (สั่งซื้อตั้งแต่ 2 ครั้งขึ้นไป นับทุกสถานะ)
สืบสาเหตุ — cohort มิ.ย. มีองค์ประกอบต่างจากปกติ
ทำไม cohort มิ.ย. 2025 ถึง retention ต่ำผิดปกติ
เช็คสัดส่วนช่องทางสมัคร (channel) ของคนที่สมัครเดือน มิ.ย. 2025 เทียบกับภาพรวมทั้งหมด
เติมช่องว่าง
แทน ___ ด้วยโค้ดที่ถูกต้อง แล้วกดตรวจคำตอบ
แบ่งลูกค้าเป็น cohort ตามเดือนที่สมัคร เก็บไว้ในคอลัมน์ cohort เติม ___ ให้ครบ
แบบฝึกท้ายบท
บทนี้จะนับว่าเสร็จเมื่อผ่านข้อพื้นฐานและประยุกต์ครบ ข้อท้าทายได้ดาวเพิ่ม
🟢 พื้นฐาน
retention rate (%) ของ cohort เดือน ม.ค. 2025 เก็บไว้ในตัวแปร retention_jan
retention rate (%) ของ cohort เดือน มิ.ย. 2025 เก็บไว้ในตัวแปร retention_jun
cohort มิ.ย. 2025 มี retention ต่ำกว่า cohort ม.ค. 2025 ไหม (bool) เก็บไว้ในตัวแปร jun_lower
สัดส่วนช่องทางสมัคร (channel) ของลูกค้าที่สมัครเดือน มิ.ย. 2025 (Series) เก็บไว้ในตัวแปร result
🟡 ประยุกต์
% ของลูกค้าที่สมัครเดือน มิ.ย. 2025 ที่มาจากช่องทาง promo เก็บไว้ในตัวแปร pct_promo_june
% ของลูกค้าทั้งหมด (ทุกเดือน) ที่มาจากช่องทาง promo เก็บไว้ในตัวแปร pct_promo_overall
retention rate (%) แยกตามช่องทางสมัคร ทุกช่องทาง เรียงมากไปน้อย (Series) เก็บไว้ในตัวแปร result
🔴 ท้าทาย
ช่องทางไหนมี retention สูงที่สุด และต่ำที่สุด (สองตัวแปร, string) เก็บไว้ในตัวแปร best_channel, worst_channel
retention rate (%) ของ cohort 3 เดือนติดกัน (พ.ค./มิ.ย./ก.ค. 2025) เรียงตามเดือน (ไม่ใช่เรียงตามค่า) เก็บไว้ในตัวแปร result
Quiz
สรุป
- cohort คือกลุ่มลูกค้าที่สมัครในช่วงเวลาเดียวกัน ใช้เปรียบเทียบพฤติกรรมข้ามช่วงเวลาได้
- retention ต่ำผิดปกติของ cohort หนึ่ง มักมีสาเหตุจากองค์ประกอบของ cohort นั้น (เช่น ช่องทางสมัคร) ไม่ใช่ตัวช่วงเวลาเอง
- cohort มิ.ย. 2025 retention ต่ำเพราะ 70.59% มาจากช่องทาง promo (เทียบกับ 9.09% โดยรวม) — promo channel มี retention ต่ำสุดในทุกช่องทาง (10.33%)
คำถามสัมภาษณ์
เจอ cohort หนึ่งมี retention ต่ำกว่าปกติมาก จะสืบสาเหตุยังไง
เริ่มจากตรวจสอบองค์ประกอบของ cohort นั้นก่อน เช่น ช่องทางสมัคร กลุ่มอายุ พื้นที่ หรือแคมเปญที่พาเข้ามา แล้วเทียบสัดส่วนกับภาพรวมทั้งหมดว่าต่างกันชัดเจนไหม ถ้าพบว่า cohort นั้นมีองค์ประกอบเฉพาะที่ต่างจากปกติ (เช่น ส่วนใหญ่มาจากแคมเปญเดียว) ให้ตรวจ retention ของแต่ละองค์ประกอบแยกกันเพื่อยืนยันว่าปัญหาจริงๆ อยู่ตรงไหน
ทีมการตลาดอยากรู้ว่าแคมเปญ promo คุ้มไหม จะตอบยังไงโดยใช้ทั้งจำนวนลูกค้าใหม่และ retention ประกอบกัน
ต้องดูสองด้านคู่กัน: (1) แคมเปญพาลูกค้าใหม่เข้ามาได้เท่าไร (ในกรณีนี้ 300 คน เป็นสัดส่วนใหญ่ของ cohort มิ.ย.) (2) ลูกค้ากลุ่มนั้นกลับมาซื้อซ้ำมากแค่ไหน (promo channel มี retention แค่ 10.33% ต่ำที่สุดในทุกช่องทาง) แล้วเทียบ ต้นทุนแคมเปญกับมูลค่าที่ได้จากลูกค้ากลุ่มนี้ในระยะยาว — ถ้าต้นทุนสูงแต่ลูกค้าส่วนใหญ่ไม่กลับมาซื้อซ้ำเลย แคมเปญนี้อาจไม่คุ้มในระยะยาวแม้จะได้ลูกค้าใหม่เยอะในระยะสั้น