person in blue shirt writing on white paper

สร้าง Customer360 dashboard ด้วย Python (Part1)

Machine Learning By ต.ค. 15, 2022 1 Comment

Customer360 คือ การที่เรารวบรวมข้อมูลของลูกค้า จากทุกข้อมูลที่เรามี เพื่อสร้างเป็น Profile ที่ช่วยให้เราเห็นข้อมูลของลูกค้าทั้งหมด แบบภาพรวม 360 องศา ซึ่งเป็นสิ่งที่จำเป็นมากที่จะช่วยให้เราเข้าใจลูกค้ามากยิ่งขึ้น และสามารถวิเคราะห์ถึง action ที่เราจะทำขึ้นมาด้วย วันนี้เราจะมาลองสร้าง Customer360 Dashboard ด้วย Library ecommercetools ของ Matt Clarke จาก https://practicaldatascience.co.uk/ ซึ่งเป็น Python Library ที่ช่วยให้เราเขียน Code ในการสร้าง customer360 dashboard ได้อย่างง่ายๆ เลยครับ วันนี้เราจะมาลองทำกันเลย

# ติดตั้ง Library

โดยผมใช้ command –quiet เพื่อที่จะติดตั้งแบบไม่โชว์ command หรือ silent install นะครับ

!pip install ecommercetools --upgrade --quiet

Load library ที่จำเป็น

Load ecommercetools library

Step 2: Load Sample Data

โดยในตัวอย่างนี้เราจะใช้ข้อมูล Retail Dataset จาก UCI นะครับ ซึ่งเมื่อ load มาแล้วเราต้องทำการ เปลี่ยนชื่อ column ให้พร้อมก่อนที่จะใช้ใน ecommercetools lib นะครับ

คำอธิบายข้อมูล

  • order_id: เลขที่ใบสั่งซื้อสินค้า ถ้าขึ้นต้นด้วย c คือเป็นรายการที่ยกลิก
  • sku: รหัสสินค้า
  • Description: ชื่อสินค้า
  • quantity: จำนวนสินค้าที่สั่งซื้อในรายการนั้น
  • order_date: วันที่สั่งซื้อสินค้า
  • unit_price: ราคาสินค้าที่สั่งซื้อ
  • customer_id: รหัสลูกค้า
  • Country: ประเทศที่ทำการสั่งซื้อ
  • line_price: ยอดสั่งซื้อสินค้ารายการนั้น

Step 3: สรุปข้อมูลลูกค้า

จะเห็นว่าเพียงแค่เขียนโค้ดไม่กี่บรรทัด เราก็ได้ข้อมูลสรุปลูกค้าออกมาแล้วนะครับ สะดวกมากๆ เลยใช่มั้ยครับ โดยข้อมูลที่ได้สามารถอธิบายได้ดังนี้

  • customer_id: รหัสลูกค้า
  • revenue: ยอดสั่งซื้อรวม
  • orders: จำนวนคำสั่งซื้อทั้งหมด
  • sku: จำนวนสินค้าที่ซื้อ
  • items: จำนวนชิ้นที่ซื้อ (qty)
  • first_order_date: วันที่ซื้อสินค้าครั้งแรก
  • last_order_date: วันที่ซื้อสินค้าล่าสุด
  • avg_items: จำนวนชิ้นต่อคำสั่งซื้อ (qty)
  • avg_order_value: ค่าเฉลี่ยในการสั่งซื้อแต่ละครั้ง
  • tenure: อายุของลูกค้า
  • recency: สั่งซื้อล่าสุดผ่านมาแล้วกี่วัน
  • cohort: เดือนที่เป็นลูกค้าครั้งแรก

** หมายเหตุ เนื่องจากว่าข้อมูลใน Dataset ค่อนข้างเก่า การคำนวณ tenure, recency ใช้วันที่ปัจจุบันเทียบ เลยทำให้ข้อมูลค่อนข้างนานผิดปกติ เรามาลองปรับวันที่ให้เป็นวันที่ล่าสุดของข้อมูลแทนนะครับ

Step 4: สร้าง RFM dataset

RFM เป็นการจัดกลุ่มลูกค้าจากพฤติกรรมการสั่งซื้อของลูกค้า โดยมา มาจากคำว่า

  • Recency ลูกค้าซื้อสินค้าล่าสุดนานหรือยัง
  • Frequency ลูกค้าซื้อสินค้าไปกี่ครั้งแล้ว
  • Monetary ลูกค้าซื้อสินค้าไปเป็นเงินเท่าไหร่แล้ว

จริงๆ RFM เป็นที่นิยมเพื่อให้เราจะได้นำเสนอสินค้าได้ตรงกับพฤติกรรมของลูกค้าแต่ละคน ลองมาดูครับ

Boom! ไม่กี่บรรทัดเราก็ได้ออกมาแล้ว จะเห็นได้ว่า ผลลัพธ์ที่ได้ออกมาค่อนข้างน่าพอใจ เราสามารถสร้าง RFM dataset ออกมาได้ทั้งหมด 5 กลุ่ม ได้แก่

  • Star ลูกค้าแฟนพันธ์แท้ มีการสั่งซื้อสูงมาก และพึ่งทำการสั่งซื้อไปไม่นาน
  • Loyal ลูกค้าชั้นดี มีการสั่งซื้อเยอะ มีความถี่ในการสั่งซื้อที่ดี
  • Potential loyal ลูกค้าที่มีการสั่งซื้อปานกลาง มีโอกาสเป็นลูกค้าชั้นดีได้
  • Hold and improve กลุ่มลูกค้าที่มีการสั่งซื้อที่น้อย และไม่ได้ซื้อมาสักระยะแล้ว
  • Risky กลุ่มลูกค้าที่มีการสั่งซื้อที่น้อยที่สุด และแทบไม่ได้กลับมาซื้ออีกเลย

ที่มา https://dergipark.org.tr/tr/download/article-file/2343280

Step 5: Latency

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

เพียงแค่ไม่กี่บรรทัดเราก็ได้ข้อมูลระยะเวลาเฉลี่ยต่อการสั่งซื้อออกมาแล้ว แต่เนื่้องจากว่าชุดข้อมูลอาจจะเก่า เดี๋ยวเรามาลองปรับข้อมูลดูนะครับ

จากข้อมูลเราก็ได้ข้อมูลลูกค้าแบ่งตามกลุ่มว่า

  • Not sure คือกลุ่มลูกค้าที่อาจจะยังจับรูปแบบไม่ได้
  • Order due soon คือกลุ่มที่ใกล้ถึงวันที่ควรจะต้องสั่งซื้อแล้ว
  • Order not due คือกลุ่มที่ยังไม่ถึงรอบในการสั่งซื้อ
  • Order overdue คือกลุ่มที่เลยรอบสั่งซื้อแล้วแต่ไม่ได้ทำการสั่งซื้อ

เพียงเท่านี้เราก็ได้ข้อมูลมาใช้ในการทำการตลาดเพื่อเพิ่มยอดสั่งซื้อแล้ว

Step 6: ABC Customer segment (Pareto principle)

มาครับ รอบนี้เรามาสร้าง Customer segment ตามหลักการ Pareto Principle 80/20 ครับ เรามาทำความเข้าใจ Pareto principle กันก่อนนะครับ

ตามหลักการของ Pareto จะมีเพึยง Customer 20% (โดยประมาณ) เท่านั้นที่สร้างยอดขาย 80% ของยอดขายทั้งหมด น่าแปลกใจใช่มั้ยล่ะครับ เรามาลองดูกันดีกว่า

  • Class A คือลูกค้าที่มียอดขายรวมกันได้ 80%,
  • Class B คือลูกค้าที่มียอดขายรวมแล้วอยู่ในช่วง 80% ถึง 90%
  • Class C ลูกค้าที่เหลือ

จากข้อมูลจะเห็นได้ชัดเลยใช่มั้ยครับว่ามีเพียง 1160 คน จากลูกค้า 4372 หรือเพียง 26.53% (pc_customers) ที่สร้างรายได้ เป็น 79.8% (pc_revenue) ของยอด revenue ทั้งหมด 6,623,535.61 พระเจ้าช่วยเลยใช่มั้ยครับ คราวนี้เราจะได้ focus ได้ถูกว่าเราควรที่จะ focus ลูกค้าคนไหนก่อนดี

Step 6: Predict Customer AOV, CLV, Orders

มาถึงส่วนที่ผมว่ามันเจ๋งมากๆ เลยคือการ Prediction ครับ ตัว Lib ตัวนี้สามารถช่วยให้เรา predict ว่าลูกค้้าจะมีพฤติกรรมที่เปลี่ยนไปอย่างไรในอนาคต เช่น ภายใน 3 เดือนข้างหน้า ใครจะสั่งซื้อสินค้ามากที่สุด เป็นจำนวนเงินเท่าไหร่ สุดยอดไปเลยใช่มั้ยครับ มาลองดูกันเลย

  • predicted_purchases : จำนวนคำสั่งซื้อที่อาจจะเกิดขึ้น
  • aov : ค่าเฉลี่ยต่อการสั่งซื้อแต่ละครั้ง
  • clv : ยอดที่ลูกค้าจะทำการสั่งซื้อ

และนี่คือ ลูกค้า 10 รายแรกที่มียอดที่มีแนวโน้มจะสั่งซื้อสูงที่สุด คราวนี้เรามาลองสร้าง abc segment จาก predicted_clv กันดูบ้างนะครับ


จะเห็นว่าในอีก 90 วันข้างหน้าจะมีการซื้อขายเกิดขึ้นทั้งหมดเป็นยอดรวม 2,043,789.39 โดยประมาณการ ไม่เลวเลยใช่มั้ยครับ

Step 7: รวมข้อมูลทั้งหมดเข้าด้วยกัน

จะเห็นว่า ecommercetools นั้นเป็น Lib ที่ใช้งานได้ง่ายมากๆ เลยนะครับ สามารถลองนำไปใช้กับข้อมูลของเราดูนะครับ ว่าสามารถปรับประยุกต์ใช้ได้หรือไม่ ซึ่งจริงๆ แล้วตัว Library ยังมี Function อื่นๆ ที่วิเคราะห์ข้อมูลได้อีกนะครับ ลองดูข้อมูลเพิ่มเติมได้ที่ Link ข้างล่าง จริงๆ ก็ต้องยก credit ให้กับคุณ Matt Clarke ที่พัฒาน Library ดีๆ ให้เราได้ใช้ด้วยนะครับ เดี๋ยวตอนหน้าเรามาลองสร้าง customer360 Dashboard จากข้อมูลนี้ด้วย Google Data Studio กันดีกว่านะครับ

สำหรับคนที่สนใจดู code เพิ่มเติมก็ดูได้ที่ github ผมเช่นเคยนะครับ

https://colab.research.google.com/gist/apiasak/7c51cea085ebf4011104770939ceb956/customer360-retail-dataset.ipynb

Reference:

Author

Data Engineer, Data Strategist, Data Analyst, Data Scientist

1 Comment

Leave a comment

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *