สวัสดีครับ สำหรับบทความนี้จะให้ความสนใจเกี่ยวกับการหาปัจจัยที่ทำให้ลูกค้ายกเลิกการใช้บริการของบริษัมคมนาคมแห่งหนึ่งนะครับ โดยจะใช้เครื่องมือ Google Colab สำหรับการเขียนโปรแกรมภาษา Python เพื่อการจัดการข้อมูล วิเคราะห์ข้อมูลและนำเสนอข้อมูลนะครับ
โดยชุดข้อมูลที่จะนำมาวิเคราะห์จะมีข้อมูลหลายคอลัมน์ สามารถเข้าไปดูคำอธิบายแต่ละคอลัมน์ได้จากลิ้งต่อไปนี้ครับ –> คำอธิบายคอลัมน์ต่างๆของข้อมูล
สามารถดูตารางข้อมูลได้โดยกดลิ้งดังต่อไปนี้ –> ตารางข้อมูล
โดยแต่ละแถวจะเป็นข้อมูลของลูกค้า 1 คน
ตัวแปรเป้าหมายที่เราจะให้ความสนใจคือ Churn การยกเลิกการใช้บริการของลูกค้า (yes ยกเลิกการใช้บริการ , no ยังไม่ยกเลิกการใช้บริการ)
บทความนี้ผมจะค่อยๆอธิบายโดยเรียงลำดับดังต่อไปนี้ครับ
- การ Import Library และ Import Data
- Data Cleansing: การตรวจสอบและทำความสะอาดข้อมูล(ถ้าข้อมูลยังไม่พร้อมใช้)
- Descriptive Analysis : วิเคราะห์และนำเสนอข้อมูลเบื้องต้น
- Hypothesis Testing: ทดสอบสมมติฐานทางสถิติ
- สรุปข้อมูลเชิงลึก (Insight)
สำหรับไฟล์ชุดข้อมูลและการเขียนโปรแกรมเพื่อทำโปรเจคสำหรับการวิเคราะห์เกี่ยวกับ Churn จะขอแปะลิ้ง Github ไว้ด้านล่างนี้นะครับ
Project : Customer Churn Analysis with Python
โดยในส่วนของลิ้ง Colab จะแปะอยู่ในส่วนของ README.md นะครับ
Import Library and Dataset
ก่อนอื่นเปิด Google Colab สร้างไฟล์ใหม่ แล้วทำการ Import Library ที่จำเป็นต้องใช้ได้แก่
- pandas สำหรับการจัดการข้อมูล วิเคราะห์ข้อมูลและสร้างกราฟเบื้องต้น
- matplotlib.pyplot และ seaborn สำหรับการกราฟโดยเฉพาะเพื่อนำเสนอข้อมูล
- scipy stats สำหรับทดสอบสมมติฐานทางสถิติ

จากนั้น Import Dataset ที่จะใช้ในการวิเคราะห์ข้อมูล ในที่นี้ไฟล์ดังกล่าว นามสกุล csv จะสามารถเขียนโค้ดเพื่อ Import Dataset File ได้ดังนี้

ต่อไปจะทำการตรวจสอบความพร้อมของข้อมูลกันนะครับ
Data Cleansing
ก่อนจะเริ่มวิเคราะห์ข้อมูลจะทำความเข้าใจข้อมูลและเช็คเรื่องความสะอาดของข้อมูลก่อน ไม่ว่าจะเป็นค่าว่าง หรือ ข้อมูลซ้ำกันมากกว่า 1 แถวและเช็คประเภทของข้อมูลครับ
โดยที่ใช้คำสั่ง df.info() เพื่อดูว่ามีข้อมูลเกี่ยวกับอะไรบ้างและเช็คจำนวนคอลัมภ์และจำนวนรายการของข้อมูล

จะเห็นว่าข้อมูลนี้มีทั้งหมด 12892 รายการ และแต่ละคอลัมภ์มีจำนวนค่าเท่ากันกับจำนวนแถวของข้อมูล ดังนั้น ข้อมูลชุดนี้ไม่มีค่าว่าง (Missing Values) และแต่ละคอลัมภ์ก็มีประเภทข้อมูลที่เหมาะสมอยู่แล้ว
ต่อไปจะเช็คเรื่องของการซ้ำกันของข้อมูล โดยใช้คำสั่งต่อไปนี้

ผลปรากฏว่าไม่มีข้อมูลแถวใดซ้ำกันเลย
ถัดไปจะเข้าสู่การวิเคราะห์ข้อมูลเบื้องต้นครับ
Descriptive Analysis
หัวข้อนี้จะทำการศึกษาข้อมูลตัวอย่างของลูกค้าจำนวน 12892 คน โดยจะทำการสำรวจข้อมูลพร้อมทั้งสรุปและอธิบายสิ่งที่เกิดขึ้นเกี่ยวกับปัจจัย Churn (การยกเลิกการใช้บริการของลูกค้า) นะครับ
ก่อนอื่นเราจะสำรวจข้อมูลคร่าวๆ
- ดูข้อมูลแถวแรกๆ
df.head() - ประเภทข้อมูล
df.info() - การดูค่าทางสถิติของตัวแปรที่เป็นเชิงปริมาณ
df.describe()
เมื่อสำรวจข้อมูลเบื้องต้นเรียบร้อย จะทำการวิเคราะห์เพื่ออธิบายข้อมูลเบื้องต้น
อย่างแรกหาว่าจำนวนคนในข้อมูลทั้งกลุ่ม Churn = “yes” และกลุ่ม
Churn = “no” มีอย่างละกี่คน ดังต่อไปนี้


Age of account in the months
ในหัวข้อนี้จะหาค่าเฉลี่ยอายุบัญชีแยกตามปัจจัย Churn จะโชว์โค้ดและผลลัพธ์ ดังต่อไปนี้


อายุบัญชีเฉลี่ย(ต่อลูกค้า 1 คน) ของลูกค้าทั้ง 2 กลุ่ม แทบจะพอๆกัน
User Behavior
ต่อไปจะศึกษาพฤติกรรมการใช้งานในส่วนต่างๆ ได้แก่
- ปริมาณการใช้งาน(นาที) ต่อวัน
- จำนวนการโทรออกต่อวัน
Daily Usage (Minutes)
เริ่มจากวิเคราะห์ปริมาณการใช้งาน(นาที) แยกตามแบ่งกลุ่มตาม Churn



ปริมาณการใช้งานต่อวัน (นาที) เฉลี่ยเพื่อติดต่อระหว่างประเทศ
จะสังเกตได้ว่าไม่ว่าจะช่วงเวลาใดก็ตาม รวมไปถึงการโทรระหว่างประเทศกลุ่มลูกค้าที่ Churn มีปริมาณใช้งาน(นาที) เฉลี่ยมากกว่ากว่าของกลุ่มลูกค้าที่ยังไม่ Churn สันนิษฐานได้ว่าลูกค้าในกลุ่มที่จะเลิกใช้บริการแล้ว อาจจะเพราะว่าถูกเก็บค่าบริการที่สูงกว่าอันเนื่องมาจากการใช้งานที่มากกว่า
โดยในหัวข้อย่อยอย่าง Service charge จะมีการดูความสัมพันธ์ระหว่างปริมาณการใช้งาน (นาที) กับ ค่าบริการต่อไปครับ
Total calls
ต่อไปจะดูในเรื่องของจำนวนการโทรออกต่อวันของลูกค้าแต่ละคนกันบ้าง

จำนวนการโทรออกเฉลี่ย ในช่วงเวลาต่างๆ (ระหว่างวัน, เย็น, กลางคืน) รวมไปถึง
จำนวนการโทรออกเฉลี่ย ระหว่างประเทศ
พบว่าไม่ว่าจะเป็นลูกค้าที่ Churn หรือลูกค้าที่ยังไม่ Churn มีจำนวนการโทรออกต่อวันโดยเฉลี่ยเกือบเท่ากัน ไม่ว่าจะช่วงระหว่างวัน ช่วงเย็น ช่วงกลางคืน รวมไปถึงการโทรออกระหว่างประเทศ
Service Charge
จากหัวข้อพฤติกรรมการใช้งานต่างๆ ในส่วนของปริมาณการใช้งานหน่วยนาทีต่อวันเฉลี่ย เราทราบว่าลูกค้ากลุ่มที่ Churn ใช้งานโดยเฉลี่ยต่อวันมากกว่าของกลุ่มลูกค้าที่ไม่ Churn ทุกช่วงเวลา รวมไปถึงการโทรระหว่างประเทศด้วย เราจึงสันนิษฐานว่ายิ่งใช้งานนาน ทำให้ค่าบริการสูงขึ้น
ดังนั้นถัดไปจะพล็อตกราฟเพื่อหาความสัมพันธ์ระหว่าง ปริมาณการใช้งานและค่าบริการว่ามีความสัมพันธ์อย่างไร (ผมจะโชว์เฉพาะของ ช่วงเวลาเช้านะครับ เพราะข้อมูลของช่วงเวลาอื่น ความสัมพันธ์จะคล้ายกันมากๆ)


ผลปรากฏว่ามีความสัมพันธ์กันแบบเส้นตรงอย่างชัดเจนมากนั่นแปลว่า ยิ่งใช้บริการมากเท่าไหร่ก็ยิ่งต้องเสียค่าบริการมากขึ้นเท่านั้น
จากนั้นจะหาค่าบริการเฉลี่ยของลูกค้าที่ Churn และไม่ Churn นะครับ โดยวิธีการเขียนโค้ดนั้นจะคล้ายกับการเขียนโค้ดแสดงปริมาณการใช้งานต่อวันครับ ดังนั้นจะโชว์เฉพาะผลลัพธ์นะครับ

เราจึงสรุปได้ว่า ลูกค้าที่ตัดสินใจ Churn ส่วนหนึ่งเป็นเพราะถูกเก็บค่าบริการที่สูงกว่าถ้าเทียบกับลูกค้าที่ไม่ Churn โดยมีสาเหตุจากพฤติกรรมที่ลูกค้ากลุ่มที่ Churn นั้นมีปริมาณการใช้งานปริมาณ(นาที) สูงกว่าลูกค้าที่ไม่ Churn
Packages
ในหัวข้อนี้จะวิเคราะห์ข้อมูลตามปัจจัยเรื่องแพ็จเกจบ้างร่วมกับปัจจัย Churn
ต่อไปจะวิเคราะห์ในส่วนของโปรโมชั่นบ้างจะแบ่งเป็น 2 อย่างตามข้อมูลที่มีได้แก่
- international_plan แพ็กเกจการโทรต่างประเทศ (yes มี / no ไม่มี)
- voice_mail_plan แพ็กเกจฝากข้อความเสียง (yes มี / no ไม่มี)
โดยทั้ง 2 คอลัมภ์นี้ที่เป็นข้อมูลเรื่องการมีแพ็จเกจของลูกค้า ผมจะทำการหาสัดส่วนการเลิกใช้บริการของลูกค้า ทั้งกรณีที่ลูกค้ามีแพ็กเกจ หรือ กรณีที่ลูกค้าไม่มีแพ็กเกจดังกล่าวก็ตาม
International Plan
เราจะแบ่งเป็น 2 กรณี เพื่อวิเคราะห์หาสัดส่วนการ Churn
- กรณีที่ 1 ลูกค้ามีแพ็กเกจดังกล่าว (international_plan = “yes”)
- กรณีที่ 2 ลูกค้าไม่มีแพ็กเกจดังกลาว (international_plan = “no”)

ลูกค้ามีแพ็กเกจการโทรต่างประเทศ

ลูกค้าไม่มีแพ็กเกจการโทรต่างประเทศ
จาก 2 รูปภาพนี้บอกได้เลยว่าแพ็กเกจการโทรต่างประเทศอาจจะมีปัญหาบางอย่างที่ทำให้ลูกค้าไม่พอใจ เนื่องจากกลุ่มลูกค้าที่ไม่มีแพ็กเกจนั้น มีคนเลิกใช้บริการ (Churn) เพียง 11% เท่านนั้น ในขณะที่กลุ่มลูกค้าที่มีแพ็กเกจนั้น มีคนเลิกใช้บริการ (Churn) พุ่งสูงถึง 41.8%
ด้านล่างจะโชว์วิธีการเขียนโค้ดต่อไปนี้






ในกรณีสำหรับคนที่มีแพ็กเกจต่างประเทศ (international = “yes”)

การเขียนโปรแกรมเพื่อแสดงสัดส่วนของจำนวนคนที่ Chrun / ยังไม่ Chrun
ในกรณีสำหรับคนที่ไม่มีแพ็กเกจต่างประเทศ (international = “no”)
Voice mail plan
เราจะแบ่งเป็น 2 กรณี เพื่อวิเคราะห์หาสัดส่วนการ Churn
- กรณีที่ 1 ลูกค้ามีแพ็กเกจดังกล่าว (voice_mail_plan = “yes”)
- กรณีที่ 2 ลูกค้าไม่มีแพ็กเกจดังกลาว (voice_mail_plan = “no”)

ลูกค้ามีแพ็กเกจการการฝากข้อความเสียง

ลูกค้าไม่มีแพ็กเกจการการฝากข้อความเสียง
จาก 2 รูปภาพนี้ จะเห็นว่าแพ็กเกจนี้ไม่ค่อยมีผลต่อการยกเลิกการใช้บริการของลูกค้า เนื่องจากพบว่ากลุ่มลูกค้าที่ไม่มีแพ็กเกจนั้น มีคนเลิกใช้บริการ (Churn) เพียง 16.3% ในขณะที่กลุ่มลูกค้าที่มีแพ็กเกจนั้น มีคนเลิกใช้บริการ (Churn) เพียง 8.3% ซึ่งถือว่าสัดส่วนของทั้งลูกค้าทั้ง 2 กลุ่มมีลูกค้าที่เลิกใช้บริการไม่มากนักเมื่อเทียบกับจำนวนลูกค้าทั้งหมดของแต่ละกลุ่ม
สำหรับวิธีการเขียนโค้ดนั้นจะคล้ายๆกับกรณีของการวิเคราะห์ Chrun แบ่งกรณีตามตัวแปร international_plan ทุกประการ
Number customer service calls
สำหรับหัวข้อนี้จะอธิบายการวิเคราะห์เกี่ยวกับจำนวนครั้งที่ลูกค้าติดต่อสอบถามผ่านระบบตอบรับอัตโนมัติ (IVR) ของฝ่ายบริการลูกค้า โดยธรรมชาติในโลกตามเป็นจริงนั้น ถ้าลูกค้าไม่ว่าคนไหนที่โทรสอบถามฝ่ายบริการบ่อยๆ มักสะท้อนว่าลูกค้ากำลังประสบปัญหา และมีความเสี่ยงในการยกเลิกการใช้บริการได้
ผมจะใช้ข้อมูลที่มีเพื่อหาค่าเฉลี่ยของจำนวนครั้งที่ลูกค้าโทรสอบถามฝ่ายบริการของทั้งกลุ่มที่ลูกค้า Churn และกลุ่มที่ลูกค้ายังไม่ Churn ครับ ดังต่อไปนี้


จากข้อมูลตัวอย่างนี้พบว่า ลูกค้ากลุ่มที่ Churn มีการโทรสอบถามหาฝ่ายบริการด้วยจำนวนครั้งเฉลี่ย(ต่อลูกค้า 1 คน) มากกว่าของลูกค้ากลุ่มที่ไม่ Churn
เนื่องจากหัวข้อที่แล้วเราได้ทำการหาค่าต่างๆ ไม่ว่าจะเป็นจำนวนลูกค้าแยกตามคอลัมน์ Churn หรือ ค่าเฉลี่ยต่างๆของตัวแปรเชิงปริมาณทั้งกลุ่มลูกค้าที่ Churn และกลุ่มลูกค้าที่ไม่ Churn ไปแล้ว แต่นั่นเป็นการที่แค่ศึกษาเฉพาะข้อมูลตัวอย่างเท่านั้น ไม่ได้ครอบคลุมข้อมูลระดับประชากร เราจะยังไม่สามารถบอกได้ว่าตัวแปรเชิงปริมาณเหล่านั้นมีความเกี่ยวข้องกับการยกเลิกการบริการ (Churn) ดังนั้น ในหัวข้อถัดไปจะทำการทดสอบสมมติฐานทางสถิติครับ
Hypothesis Testing
ในหัวข้อนี้ เราจะทำการทดสอบสมมติฐานเพื่อศึกษาว่ามีตัวแปรเชิงปริมาณตัวใดบ้างที่มีความสัมพันธ์กับการยกเลิกบริการ (Churn) โดยเราจะเปรียบเทียบค่าเฉลี่ยของกลุ่มลูกค้าที่ Churn (กลุ่ม yes) และไม่ Churn (กลุ่ม no) ว่ามีความแตกต่างกันอย่างมีนัยสำคัญทางสถิติหรือไม่ โดยในที่นี้จะทดสอบที่นัยสำคัญ alpha = 0.05
ต่อไปนี้แสดงการเขียนโปรแกรมภาษา Python และผลการทดสอบสมมติฐานด้วย t-test ดังต่อไปนี้


หมายเหตุ: ข้อมูลตัวแปรเชิงปริมาณที่นำมาทดสอบความแตกต่างกันของค่าเฉลี่ยได้แก่ ปริมาณการใช้งาน(นาที) ต่อวัน , จำนวนการโทร , ค่าบริการ, อายุบัญชีของลูกค้า และจำนวนการโทรสอบถามหาฝ่ายบริการ โดยจะเปรียบเทียบระหว่าง 2 กลุ่มได้แก ลูกค้าที่ Chrun และไม่ Chrun ว่า 2 กลุ่มนี้มีความแตกต่างกันของค่าเฉลี่ยหรือไม่

ผลการทดสอบพบว่าเกือบทุกตัวแปรไม่ว่าจะเป็น อายุบัญชี ปริมาณเวลาการใช้งาน(นาที) ของทุกช่วงเวลา และค่าบริการต่างๆ และค่าธรรมเนียม ของลูกค้าที่ Churn และ ไม่ Churn มีค่าเฉลี่ยแตกต่างกันอย่างมีนัยสำคัญแสดงว่า ปัจจัยต่างๆดังกล่าวมีความสัมพันธ์กับการยกเลิกการใช้บริการ (Churn) จากการได้ผลการตัดสินใจ Reject H0
มีเพียงแค่จำนวนครั้งในการ call ที่ไม่มีความสัมพันธ์กับการยกเลิกการบริการ (Churn) เลย จากการได้ผลการตัดสินใจ Fail to Reject H0
ผมจะอธิบายเพิ่มเติมเกี่ยวกับขั้นตอนการทดสอบสมมติฐานทางสถิติเพื่อให้เข้าใจมากขึ้นนะครับ
สมมติผมจะทดสอบตัวแปร ค่าบริการรายวัน (total_day_charge) มีความสัมพันธ์ต่อการยกเลิกบริการหรือไม่ผมจะตั้งสมมติฐาน 2 ส่วนคือ H0 และ H1 ดังนี้
H0 : μyes = μno หรือ μyes – μno = 0
H1 : μyes ≠ μno หรือ μyes – μno ≠ 0
โดยทดสอบด้วย t-test ที่ระดับนัยสำคัญ 0.05 ด้วยการเขียนภาษา python สามารถอ่านผลการทดสอบได้ 2 วิธีคือ อ่านค่า p-value หรือ อ่านค่า Confidence Interval(CI) โดยในที่นี้ จะอ่านค่า p-value นะครับ
p – value : เนื่องจากผลการทดสอบพบว่า p – value <= 0.05 ตัดสินใจ Reject H0 ทำให้ได้ข้อสรุปว่า μyes ≠ μno
นั่นคือกลุ่มลูกค้าที่ Chrun มีค่าบริการรายวันไม่เท่ากับของกลุ่มลูกค้าที่ยังไม่ Chrun อย่างมีนัยสำคัญทางสถิติ
Summary Insights
หลายๆตัวแปรเชิงปริมาณไม่ว่าจะเป็น
- พฤติกรรมการใช้งาน
- ค่าบริการ,
- อายุบัญชีผู้ใช้งานของลูกค้า
- จำนวนการโทรสอบถามฝ่ายบริการของลูกค้า
ล้วนแล้วแต่มีความเกี่ยวข้องกับการยกเลิกการใช้บริการของลูกค้าอย่างมีนัยสำคัญ จะมีเพียงแค่จำนวนการโทรต่อวันที่ไม่ได้มีความเกี่ยวข้องต่อการยกเลิกการใช้บริการเลย
สำหรับข้อมูลตัวอย่างของลูกค้ากว่า 12000 คนนี้ พบว่ากลุ่มลูกค้าที่ตัดสินใจยกเลิกการบริการจะทั้งในแง่พฤติกรรมการใช้งาน(นาที) ต่อวัน , ค่าบริการ, และจำนวนการโทรสอบถามฝ่ายบริการของลูกค้า โดยเฉลี่ยสูงกว่าของกลุ่มลูกค้าที่ยังไม่ยกเลิกการบริการ
ดังนั้นจากการที่หาค่าทางสถิติเพื่ออธิบายข้อมูลและการทดสอบสมมติฐานนั้นมีความเป็นไปได้สูงว่า ค่าบริการที่สูงขึ้นรวมไปถึงการโทรสอบถามฝ่ายบริการที่บ่อย อาจจะโทรไปเพราะมีปัญหาบางอย่างเกี่ยวกับการใช้บริการ เป็นส่วนหนึ่งที่มีผลต่อการยกเลิกการใช้บริการของลูกค้า
ส่วนปัจจัยเชิงกลุ่มอื่นๆนั้น ที่เป็นเรื่องแพ็กเกจ
- แพ็กเกจสำหรับการโทรต่างประเทศ คาดว่ามีปัญหาบางอย่างที่ทำให้ลูกค้าไม่พอใจจนจะนำมาซึ่งการยกเลิกบริการได้ เนื่องจาก
- กลุ่มลูกค้าที่ไม่มีแพ็กเกจนั้น มีคนเลิกใช้บริการเพียง 11%
- กลุ่มลูกค้าที่มีแพ็กเกจนั้น มีคนเลิกใช้บริการพุ่งสูงถึง 41.8%
- แพ็กเกจสำหรับฝากข้อความเสียง ไม่ค่อยมีผลต่อการยกเลิกการใช้บริการของลูกค้า เนื่องจากพบว่า สัดส่วนของทั้งลูกค้าทั้ง 2 กลุ่มมีลูกค้าที่เลิกใช้บริการไม่มากนักเมื่อเทียบกับจำนวนลูกค้าทั้งหมดของแต่ละกลุ่ม
- กลุ่มลูกค้าที่ไม่มีแพ็กเกจนั้น มีคนเลิกใช้บริการ (Churn) 16.3%
- กลุ่มลูกค้าที่มีแพ็กเกจนั้น มีคนเลิกใช้บริการ (Churn) 8.3%































































































