การแบ่งกลุ่มลูกค้าในห้างสรรพสินค้า ด้วย KMeans Clustering

จากข้อมูล ลูกค้าในห้างสรรพสินค้า https://www.kaggle.com/vjchoudhary7/customer-segmentation-tutorial-in-python/version/1

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

จากชุดข้อมูลที่ ดาวน์โหด มาชื่อ Mall_Customers.csv ซึ่งหาดูจากการกระจายต้ว ก็จะพบว่า มีการเกาะกลุ่มกันชัดเจน

โจทย์

จากข้อสังเกต ดังกล่าว จงแบ่งกลุ่มลูกค้าจาก รายได้ และ คะแนน Spending_Score ของพวกเขา ว่ามีกี่กลุ่มที่แตกต่างกัน

มาเริ่มกันเลย

ขั้นตอนที่ 1: อ่านไฟล์ Mall_Customers.csv ด้วย pandas และ ทำการ rename เพื่อให้อ้างง่ายขึ้น ดังภาพ รูปที่ 1

รูปที่ 1

ขั้นตอนที่ 2: ทำการรัน KMeans ระหว่างจำนวน 2 ถึง 9 กลุ่ม เพื่อหาค่า Inertia โดยใช้ Kmeans algorithm

รูปที่ 2

ขั้นตอนที่ 3: จาก ตาราง (data frame) ที่สร้างขึ้นชื่อ dd จะใช้เก็บค่า ของ inertia ในแต่ละค่า k

รูปที่ 3

ขั้นตอนที่ 4: ทำการหา percent of change โดยเก็บไว้ใน คอลัมน์ ชื่อ pct_chg

รูปที่ 4

ขั้นตอนที่ 5: ทำการสร้างกราฟของแต่ละ k เพื่อหา optimal point โดยแสดง percent of change ของ k ก่อนหน้าทุกจุด

รูปที่ 5

จากขั้นตอนที่ 5 นี้จะเห็นได้ชัดว่า จุด optimal point จะเป็น k=5 เพราะ percent of change (png) เกือบไม่เปลี่ยนแปลงเป็นครั้งแรก หลังจาก k=5 เราจะเอา จุดแรกที่ค่า png ไม่เปลี่ยนแปลงเป็นครั้งแรก เป็นจุด optimal point ดังนั้น k=5

ขั้นตอนที่ 6: เรียก sklearn.cluster และ สร้าง kmeans model ที่มี จำนวนกลุ่ม n_cluster=5 จากนั้นทำการ เทรด โดยใช้คำสั่ง fit บน Spending_Score และ Income

รูปที่ 6

ขั้นตอนที่ 7: สร้าง กราฟ scatter point และทำการสร้างจุดศูนย์กลางของกลุ่ม ด้วย kmeans.cluster_centers_[:, 0] ซึ่งคือ x และ kmeans.cluster_centers_[:, 1] ซึ่งคือ y เพื่อดูจำนวนกลุ่ม

รูปที่ 7

จากรูปที่ เห็นชัดเจนว่ามี 5 กลุ่ม แสดงว่า วิธี elbow method ใช้ได้ผล โดยหาจุด optimal point ก่อน แล้วจึงทำการ จัดกลุ่ม

--

--

รศ. ดร. เชฏฐเนติ ศรีสอ้าน
รศ. ดร. เชฏฐเนติ ศรีสอ้าน

Written by รศ. ดร. เชฏฐเนติ ศรีสอ้าน

รองอธิการบดีฝ่ายเทคโนโลยี มหาวิทยาลัยรังสิต

No responses yet