Week 1: Data Analytics วิเคราะห์ข้อมูลการแจ้งซ่อมแซมบ้านในโครงการ

Kulyarat L.
botnoi-classroom
Published in
8 min readAug 14, 2020
กราฟแสดงเดือนกับจำนวนที่ถูก record โดยเรียงจากมากไปหาน้อย

Objective:

บทความนี้เป็นส่วนหนึ่งของ Data Science Essential ของ Botnoi Classroom หัวข้อ Data Analytic

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

เมื่อวันพุธที่ 5 สิงหาคม และวันเสาร์ ที่ 8 สิงหาคม ปี 2020 สัปดาห์แรกของคลาสเรียน Botnoi Data Science Essential ได้เริ่มต้นขึ้น พี่ ๆ ได้บอกไว้ตั้งแต่ก่อนเริ่มเรียนว่าทุกสัปดาห์จะมีงานชิ้นหนึ่งให้ทุกคนได้ลองทำกัน ดังนั้น ในสัปดาห์แรกนี้ จากหัวข้อที่พวกเราได้เรียนมา งานชิ้นแรกจึงเป็นการทำ Data Analytic จากข้อมูลที่คนในกลุ่มช่วยกันหามา…

ก่อนเริ่มคลาสเรียน พี่ ๆ บอกว่าจะแบ่งกลุ่มนักเรียนรอบนี้ออกเป็น 20 กลุ่มย่อย โดยการจัดกลุ่มอ้างอิงจากหลาย ๆ อย่าง เช่นเพศ อายุ ทักษะ จึงเกิดเป็น พวกเรากลุ่ม 3 ขึ้นมา >.<

แรกเริ่มนั้น ยังไม่มีใครรู้ว่าจะเอาดาต้าอะไรมาทำกันดี พี่ ๆ ในกลุ่ม รวมทั้ง ทีมงานของบอทน้อยต่างช่วยนำเสนอช่องทางในการหาดาต้าจากที่ต่าง ๆ… จนกระทั่ง สมาชิกในกลุ่มก็ได้เสนอ Dataset ของตัวเองเกี่ยวกับการแจ้งซ่อมบ้านของลูกค้ามา การบ้านชิ้นแรกของกลุ่มสาม จึงได้เริ่มต้นในที่สุด

Dataset ที่ใช้

ในการทำ Data Analytic นั้น Step แรกที่ต้องทำคือการหาจุดประสงค์ของการ analyze ดังนั้นสมาชิกหลาย ๆ คนจึงช่วยกันนำเสนอคำถามกันมาหลากหลาย ประกอบกับการถามพี่เจ้าของ Dataset ด้วยว่าต้องการรู้อะไรบ้าง

และข้อสรุปสุดท้ายที่ได้ออกมา จุดประสงค์ในการทำ data analytic ครั้งนี้ก็คือ…

1. การหาแนวโน้ม (Trend) ช่วงเดือนที่มีการแจ้งซ่อมบ้านเข้ามา

2. การหาแนวโน้ม (Trend) ของประเภทงานซ่อม

เมื่อเรารู้จุดประสงค์ของเรากันแล้ว Step ถัดมาก็คือการทำความเข้าใจ Dataset ที่เรามีอยู่นั่นเอง เริ่มจากหาก่อนว่าในข้อมูลนี้มี Column อะไรบ้าง

แสดง Column ของ Dataset
ลำดับต่อมาก็เป็นการตรวจสอบจำนวนแถว (record) และจำนวน Column ของ dataset อีกที

สรุปก็คือ dataset นี้มี 54 คอลัมน์ และมีจำนวนแถว 28651 แถว… โอ้โฮ…

เช็คดูหน้าตาของข้อมูลกันสักหน่อย

(ปิด Sensitive data กันนิดนึง)

กลับไปถามเจ้าของข้อมูลอีกนิดเพื่อความแน่ใจว่า column ไหน หมายถึงอะไรกันแน่

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

  1. เพื่อให้บริษัทสามารถใช้ข้อมูลเป็นข้อพิจารณาเรื่องต่างๆ เช่น งบประมาณ [คำถาม: โครงการไหนที่มีการแจ้งเรื่องซ่อมบ้านเยอะที่สุด?, เดือนไหนที่มีการแจ้งซ่อมบ้านบ่อยที่สุด?, การแจ้งซ่อมบ้านซ่อมส่วนไหนมากที่สุด?, แต่ละเดือนมีการแจ้งซ่อมส่วนไหนมากที่สุด?]
  2. เพื่อให้ทำความเข้าใจในเรื่องของการตลาด เช่น ช่องทางติดต่อที่ลูกค้าใช้มากที่สุด [คำถาม: ลูกค้าแจ้งเรื่องซ่อมบ้านจากช่องทางไหน่มากที่สุด?]
  3. สำหรับทีมงานซ่อม [คำถาม: ระยะเวลากี่ปีหลังการโอนถึงมีการซ่อม?, หาวันที่มีคนแจ้งเรื่องซ่อมบ้านเยอะที่สุด และน้อยที่สุด]

อย่าลืมตั้งสมมติฐานด้วยว่าคำตอบของคำถามน่าจะเป็นยังไง แล้วเดี๋ยวเราจะได้รุ้กันว่าสิ่งที่เราคิดไว้มันจะตรงกับสิ่งที่ข้อมูลบอกมาหรือไม่ และสมมติฐานที่เราสรุปกันมาได้ก็คือ…

เดือนที่แจ้งซ่อมเยอะหลังมักจะเป็นเดือน ก.ค. และ ธ.ค. เนื่องจากมีโปรโมชั่นโอนช่วงปิดยอดครึ่งปีกับปลายปี

อย่าเพิ่งลืมจุดประสงค์หลักของเราด้วยล่ะ… (Recall กันสักหน่อย)

  1. การหาแนวโน้ม (Trend) ช่วงเดือนที่มีการแจ้งซ่อมบ้านเข้ามา
  2. การหาแนวโน้ม (Trend) ของประเภทงานซ่อม

คราวนี้มาถึง Step สำคัญ (ก็สำคัญหมดนั่นแหละ =.=) นั่นคือการเลือกสร้างฐานข้อมูลที่จะใช้ในการวิเคราะห์ โดยที่เราจะเลือกแต่ Column ที่จำเป็นในการวิเคราะห์ข้อมูลโดยอิงจากคำถามที่ตั้งกันไว้ใน Step ก่อนหน้านี้

แต่ก่อนที่จะไปถึงตรงนั้น data ที่เรามีอยู่ มีข้อมูลบางอย่างที่เป็น privacy เราต้องมาทำการ clean sensitive information ออกไปจาก data ของเราก่อน เพื่อที่เราจะได้ analyze ได้อย่างสบายใจ ไร้ความเสี่ยงเรื่องกฏหมายความเป็นส่วนตัว (PDPA)

ข้อมูล sensitive ที่ไม่จำเป็นในการวิเคราะห์… ลบมันออก (drop ทิ้ง) ไปเลยยย ฟิ้วว!
ข้อมูลที่ต้องใช้ในการวิเคราะห์แต่ไม่สามารถเปิดเผยได้ ก็จัดการแปลงสาร… เปลี่ยนมันเป็นตัวเลข id หรืออะไรสักอย่าง โดยที่เรายังสามารถนำข้อมูลพวกนั้นมาใช้ได้อยู่
เช็คกันอีกทีว่าลบข้อมูลเสี่ยงออกไปหมดแล้วจริงๆ

ลองเล่นกราฟแสดงข้อมูลที่ถูกเปลี่ยนเป็นเลขไอดีกับจำนวนครั้งที่ถูก record (โดยเรียงจากไอดีที่มีจำนวน record มากที่สุด แสดงมา 10 index)

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

คราวนี้คำถามต่อไป… เดือนไหนที่มีคนแจ้งซ่อมบ้านบ่อยที่สุด? เรามาหาคำตอบกันเลย!!

อันดับแรก มาเปลี่ยนเลขเดือนในตารางให้เป็นชื่อเดือนดูง่าย ๆ กันก่อน โดยการสร้างฟังก์ชันขึ้นมา ในฟังก์ชันมีการวนลูปลิสต์ชื่อเดือน เรียงตามเดือน 1–12 เพื่อนำมา match กับเลขเดือนในตาราง… จากนั้นสร้างคอลัมน์ชื่อ “เดือน” เพิ่มเข้าไป เอาไว้เก็บชื่อแต่ละเดือน แล้วก็สั่งให้คอลัมน์เดือนเก็บชื่อที่ได้จากการเรียกใช้ฟังก์ชัน apply กับ คอลัมน์ “เดือนที่รับเรื่อง”

กราฟแสดงเดือนกับจำนวนที่ถูก record โดยเรียงจากมากไปหาน้อย

สร้างกราฟมาดูกันว่าเดือนไหนถูก record เยอะที่สุด ซึ่งนั่นหมายความว่าเดือนนั้นมีการแจ้งเรื่องซ่อมบ้านเยอะที่สุด ซึ่งก็คือ เดือนพฤษภาคม

[ผลสรุปเดือนที่มีการแจ้งซ่อมบ้านบ่อยที่สุด(แบบเป็นตัวเลข จากมากไปน้อย): พฤษภาคม 3325 เคส, กรกฎาคม 2881 เคส, มิถุนายน 2857 เคส, มีนาคม 2720 เคส, มกราคม 2577 เคส, กุมภาพันธ์ 2509 เคส, เมษายน 2406 เคส, สิงหาคม 2179 เคส, กันยายน 1968 เคส, ตุลาคม 1848 เคส, พฤศจิกายน 1795 เคส และ ธันวาคม 1586 เคส]

คำถามต่อไป… การแจ้งซ่อมบ้านซ่อมส่วนไหนมากที่สุด?

โดยข้อมูลหมวดหมู่ของการแจ้งซ่อม สามารถแบ่งแยกย่อยออกไปได้หลายหมวดหมู่

ตัวอย่างหมวดหมู่งานซ่อมกับจำนวนที่ถูกแจ้งให้ไปซ่อม

สำหรับคำถามของเรา แค่เราสั่งให้เรียงลำดับจำนวนที่ถูกแจ้งจากมากไปน้อย แล้วทำกราฟออกมาสักสิบหมวดหมู่ ก็รู้แล้วว่า งานผนัง เป็นหมวดหมู่ที่มีการแจ้งเรื่องเข้ามาให้ไปซ่อมเยอะที่สุด

[ผลสรุป 5 อันดับหมวดหมู่งานซ่อมที่มีการแจ้งเข้ามาเยอะที่สุด(แบบเป็นตัวเลข): 1) งานผนัง 2886 เคส, 2) งานฝ้าเพดาน 2324 เคส, 3) ร้องเรียนการปฏิบัติงานของเจ้าหน้าที่ 2243 เคส, 4) งานสี 1880 เคส, 5) งานไฟฟ้า 1801 เคส]

ทีนี้ก็อยากจะรู้ละเอียดลงไปอีกสักหน่อย ก็มาตอบคำภามที่ว่า แต่ละเดือน มีการแจ้งงานซ่อมแบบไหนเยอะที่สุด? ไปเลยดีกว่า >.<

วนลูปหาจำนวนที่ถูก record ของงานซ่อมแต่ละเดือนไปเลยยย

แล้วเราก็จะได้ข้อมูลจำนวนงานซ่อมที่ถูกแจ้งมา โดยแยกออกเป็นรายเดือน ตามนี้…

กราฟแสดงหมวดหมู่งานซ่อม กับจำนวนที่ถูกแจ้งในแต่ละเดือน โดยแต่ละกราฟเรียงลำดับงานซ่อมที่ถูกแจ้งมากที่สุดและไล่ลงมา 10 ลำดับแรก

จากตอนแรกที่เราได้คำตอบมาว่า เดือนที่ 5 หรือเดือนพฤษภาคม มีจำนวนการแจ้งเรื่องซ่อมบ้านเข้ามาเยอะที่สุด… งั้นเรามาดูเลยดีกว่า ว่าในจำนวนที่เยอะนั้น แจ้งเรื่องอะไรกันเข้ามาบ้าง แจ้งเรื่องไหนเยอะที่สุด โดยเอามาแค่ 10 ลำดับแแรกเหมือนเดิม

และนี่ก็คือผลลัพธ์ของข้อมูลในเดือนพฤษภาคม

ก่อนจะไปคำถามอื่น ๆ เรามาลงลึกกันสักหน่อย ว่าจากหมวดหมู่การซ่อมพวกนี้ รายละเอียดการซ่อมจริงมันเป็นยังไงบ้าง

คอลัมน์ที่บอกรายละเอียดงานซ่อม

เราก็ดูง่าย ๆ กันว่ารายละเอียดงานซ่อมแบบไหนถูกบันทึกไว้มากสุดเป็น 10 อันดับแรกเลยละกัน

กราฟแสดงรายละเอียดงานซ่อม กับจำนวน record

เข้าสู่พาร์ทถัดไปของคำถาม นั่นคือพาร์ทของข้อมูลการตลาด ซึ่งคำถามที่เราต้องการหาคำตอบก็คือ… ลูกค้ามีการแจ้งเรื่องซ่อมบ้านผ่านช่องทางไหนมากที่สุด?

ช่องทางการติดต่อทั้งหมดที่มี กับจำนวนที่ถูกแจ้งเข้ามา
กราฟแสดงจำนวนที่ถูกแจ้ง กับช่องทางที่ถูกแจ้ง

พอเอาจำนวนมา plot กราฟดูก็จะเห็นได้ชัดว่าจำนวนลูกค้าที่ติดต่อผ่านโทรศัพท์มาหลุดโผมาไกลกว่าช่องทางอื่น ๆ เยอะเลย… แสดงว่าอาจจะเป็นช่องทางที่สะดวก หรือใช้ง่ายที่สุด

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

เริ่มจากดูคร่าว ๆ ก่อนว่าบ้านที่ถูก record ไว้ว่ามีการแจ้งซ่อมใน dataset นี้จนถึงปัจจุบัน (วันที่ analyze) นี้ มีระยะหลังการโอนกี่ปีแล้ว

เทียบวันที่ปัจจบัน กับข้อมูลวันที่โอนเพื่อหาจำนวนปี
จะได้ว่า บ้านที่มีการแจ้งซ่อมมีอายุหลังการโอน ตั้งแต่ 1 ถึง 13 ปี

ต่อมาก็มาเทียบกับวันแรกที่มีการแจ้งซ่อมเข้ามา พิจารณาระยะหลังการโอนของแต่ละโครงการโดยเฉลี่ย

copy dataframe ออกมา แล้วแปลงคอลัมน์ วันที่รับเรื่อง กับ วันที่โอน ให้เป็น datetime
นำวันที่รับเรื่อง ลบ ด้วยวันที่โอน เพื่อหาจำนวนปีที่บ้านเริ่มมีปัญหา
เอามากรุ๊ปแยกตามโครงการ เพื่อหาค่าเฉลี่ยว่าแต่ละโครงการ เริ่มมีการแจ้งซ่อมบ้านหลังการโอนกี่ปี
เคลียร์ของที่ไม่จำเป็นออกหน่อย

ก็จะได้กราฟออกมาว่าโครงการไหนเฉลี่ยแล้วเริ่มมีการซ่อมบ้านในระยะกี่ปีหลังโอนกรรมสิทธิ์… ดูจากกราฟแล้ว บ้านโครงการหมายเลข 30 นี่แข็งแรงดีจริงๆ

เพื่อให้ง่ายต่อการสรุป ลองหา pattern แต่ละ วัน เดือน ปี ทีมีการแจ้งเรื่องซ่อมเข้ามา

แยกดูไปเลยว่าวัน ๆ หนึ่งมีเข้ามากี่เคส
ดู pattern แต่ละปีว่าเดือนไหนของปีมีการแจ้งซ่อมมากที่สุด

จากกราฟที่ได้มา เราก็พบว่าในปี 2018 และ 2020 เดือนพฤษภาคมเป็นเดือนที่มีการแจ้งเรื่องซ่อมบ้านมากที่สุด ในขณะที่ปี 2019 เป็นเดือนกันยายน

ถ้าหากเราแบ่งเดือน 12 เดือน เป็น 4 quatile โดยที่ มกราคม-มีนาคม เป็น Q1, เมษายน-มิถุนายน เป็น Q2, กรกฎาคม-กันยายน เป็น Q3 และ ตุลาคม-ธันวาคม เป็น Q4 ก็จะเห็นว่า… Q4 มีจำนวนเคสเข้ามาน้อยที่สุด

ลองดู pattern แต่ละวันในสัปดาห์ กับจำนวนเคสที่เข้ามาบ้าง

จาก Pattern นี้ เราสามารถสรุปออกมาได้ว่า วันธรรมดา จะมี case เข้ามามากกว่าวันเสาร์-อาทิตย์ และวันอาทิตย์เป็นวันที่มีเคสเข้ามาน้อยที่สุดในสัปดาห์ ในขณะที่วันพุธเป็นวันที่มีเคสเข้ามามากที่สุด

ซึ่งสอดคล้องกับสิ่งที่เจ้าของ dataset บอกมาว่า วันอาทิตย์เป็นวันที่พนักงานหยุด และลูกค้าส่วนมากก็ไม่สะดวกจะรับบริการ

ทีนี้ก็ตอบคำถามเรื่อง วันที่มีคนแจ้งเรื่องซ่อมบ้านเยอะที่สุด และน้อยที่สุด ได้แล้ว!

pattern ของจำนวนการแจ้งซ่อมกับวันที่ในเดือน

จากกราฟนี้ pattern ทั้งสามปีเป็นไปในทิศทางเดียวกัน จึงสรุปได้เช่นกันว่า วันที่ (1–31) ในเดือน ไม่มีผลกระทบกับจำนวนเคสที่เข้ามา

ในระหว่างที่ทำ analytic แล้วได้ข้อมูลใหม่ ๆ เข้ามา ก็จะเริ่มเกิดคำถามอื่นๆ ที่นอกเหนือจากคำถามที่คิดเอาไว้

คำถามแรกเกิดขึ้นมาหลังจากที่รู้ว่าเดือนพฤษภาคม เป็นเดือนที่มีจำนวนเคสเข้ามามากที่สุด เราก็เกิดสงสัยกันว่าทำไมจึงเป็นเดือนนี้นะ

ข้อมูลจาก Google Trend

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

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

ที่จริงเราพบคำตอบของคำถามนี้ไปกันก่อนหน้านี้แล้ว… ในตอนที่เราหา 10 อันดับแรกของงานซ่อมในเดือนพฤษภาคมนั่นไงล่ะ!

recall กันหน่อย

จากกราฟนี้ก็พอจะรู้ว่า 5 อันดับยอดฮิตของส่วนที่พังกันช่วงนี้ คือ ผนัง, ฝ้าเพดาน, ร้องเรียนการปฏิบัติงานของเจ้าหน้าที่, ไฟฟ้า และงานสี

เท่านี้เราก็ตอบทุกคำถามที่เราสงสัยเกี่ยวกับข้อมูลที่ได้มาหมดแล้ว!

ในเมื่อเราตอบคำถามกันไปหมดแล้ว เราก็จะมาดูรายละเอียดพวกการจัดกลุ่ม clustering ต่าง ๆ อย่างประเภทงานอื่น ๆ ในรายละเอียดงานซ่อมที่สามารถแยกลงมาได้อีก

โดยในส่วนนี้เราจะมาลองทำ K-mean กัน

ก่อนเริ่มทำ k-mean ก็มาหา unique value ในคอลัมน์ที่เราจะใช้กันก่อน ซึ่งก็คือคอลัมน์ “รายละเอียดงาน” และ คอลัมน์ “รายละเอียด” ซึ่งที่จริงแล้วสองคอลัมน์นี้มีข้อมูลคล้ายกันคือเป็นรายละเอียดว่าส่วนที่พัง พังยังไง ต้องซ่อมตรงไหน

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

ทีนี้หลังจากเรารู้แล้วว่ามีคำอะไรที่เราจะไม่ใช้บ้าง เราก็มาทำ data cleansing กันก่อน โดยเริ่มจากการเช็คอย่างง่ายว่าในคอลัมน์ ไม่มี missing value แต่ถ้ามีก็ใส่คำว่า ‘No’ ลงไปในช่องนั้นแทน

ในคอลัมน์รายละเอียด กับรายละเอียดงานลอง skim ดูจะได้คีย์เวิร์ดออกมา เป็น… [‘รั่ว’,’ซึม’,’ผนัง’,’พื้น’,’ไฟฟ้า’, ‘ไฟ’]

มาถึงตรงนี้ เราจะเลือกเฉพาะ record ที่ในคอลัมน์ รายละเอียดงาน ระบุว่าเป็น “อื่นๆ” แล้วจาก record พวกนั้น (ที่เก็บไว้ใน detail_eng) เราลองหาดูว่า row ไหนที่มีคำตามคีย์เวิร์ด ประกอบอยู่ใน คอลัมน์ที่ชื่อว่า รายละเอียด

ทำ K-mean แล้วพล็อตกราฟมาดู

k-mean เป็นวิธี simple clustering ที่ประยุกต์ใช้งานได้แพร่หลายกับข้อมูลประเภทต่าง ๆ คอนเซ็ปต์หลัก ๆ ก็คือ

  • ต้องกำหนดจำนวนกลุ่มที่จะแบ่งออกมาก่อน (ค่า K)
  • จากนั้นก็ระบุ centroid เริ่มต้น(เป็นค่าที่อยู่ตรงกลางของแต่ละกลุ่มที่แบ่งออกมาก)
  • ต่อมาก็คำนวนระยะห่างระหว่าง centroid กับข้อมูล
  • จัดกลุ่มโดยเลือก centroid ที่ห่างจากข้อมูลน้อยที่สุด

(สมมติ 1,2,3,4,5,6 เลือก 2 กับ 5 เป็น centroid 1,3 ก็จะอยู่กลุ่ม ที่ centroid = 2 และ 4,6 ก็จะอยู่กับ centroid = 5 ปล.เป็นการสมมติอย่างง่ายๆ เฉยๆนะ >.<)

  • จากนั้นก็คำนวน centroid ใหม่อีกทีจากสมาชิกในแต่ละกลุ่ม ดูว่ามีการเปลี่ยนแปลงหรือไม่ ถ้ามีก็กลับไปสเต็ปคำนวนระยะห่างอีกครั้ง ถ้าไม่ก็จบจ้า จัดกลุ่มแล้ว

ในที่นี้เราให้ python libraly ที่ชื่อ sklearn จัดการให้เราเนอะ

จากนั้นลองเอา cluster จากด้านบนมาเทียบกับคีย์เวิร์ด 6 คำนี้

จาก 5 cluster ที่ได้มา เอามาพล็อตกราฟเทียบกับคีย์เวิร์ดพวกนี้ ก็จะได้ตามนี้
จำนวน record ในแต่ละ Cluster

ทีนี้เราก็เอาคีย์เวิร์ดพวกนี้มาตั้งเป็นชื่อ cluster แล้วจัดกลุ่มตามนี้เลย

cluster_name = {0:'พื้น',1:'รั่วซึม',2:'อื่นๆ',3:'ไฟฟ้า',4:'ผนัง'}for i in cluster_name.keys() :detail_eng['Cluster'] = 
np.where(detail_eng['Cluster'].astype('str') == str(i), cluster_name[i], detail_eng['Cluster'])
detail_eng.head()

เช็คดู 20 ลำดับแรกที่ถูก record มากที่สุดในคอลัมน์รายละเอียดงาน

top_20 = dat['มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน'].value_counts().to_frame().sort_values(by = 'มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน' ,ascending = False).head(20).indexdat['มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน'].value_counts().to_frame().sort_values(by = 'มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน' ,ascending = False).head(20)
after_k = dat[['เดือนที่รับเรื่อง','มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน','มุมมองช่างตามหลักวิศวกรรม รายละเอียด']]after_k = after_k[after_k['มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน'].isin(list(top_20))]after_k = pd.concat([after_k,detail_eng[['Cluster']]],axis = 1)after_k['Type'] = np.where(after_k['มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน'] == 'อื่น ๆ (ระบุชนิดงาน และปัญหา)',after_k['Cluster'],after_k['มุมมองช่างตามหลักวิศวกรรม รายละเอียดงาน'])after_k.head()

ต่อมาก็คือการเอา dataframe original version มารวมกับที่ได้หลังทำ k-mean แล้ว โดยที่ record ในออริจินอลที่ถูกเขียนไว้ว่า อื่น ๆ จะถูกเปลี่ยนเป็นค่าที่ได้จากตาราง k-mean ส่วนอันที่ไม่ใช่อื่นๆ ก็อยู่เหมือนเดิม

ก็จะได้แบบนี้
เอาตารางที่เราเพิ่งรวมร่างกันมาลองหา unique อีกสักที

Unique ที่ได้ดูไม่ unique เท่าไหร่ มีประโยคเขียนไม่เหมือนกันแต่มีความหมายเดียวกันเยอะ

ก็เลยต้องเอา unique ที่ได้มา เอามาเปลี่ยนชื่อเป็นคีย์เวิร์ดตามในรูป เช่น ประโยคบอกว่าเป็นเรื่องเกี่ยวกับน้ำรั่ว ก็เปลี่ยนเป็นรั่วซึม ประโยคบอกเกี่ยวกับรปภ. ช่างโครงการ ก็เปลี่ยนเป็นเจ้าหน้าที่

สั่งดู result เฉพาะ คอลัมน์ month, type
เช็คยูนีคอีกที คราวนี้ดูเป็นยูนีคแล้ว และคีย์เวิร์ดพวกนี้ก็คือรายละเอียดงานซ่อมที่ส่งเข้ามา
after_k['Type'].value_counts().plot(kind = 'bar',figsize = (15,6))plt.title('รวมทั้งทั้งปี',fontsize = 20)plt.show()
for i in after_k.sort_values('Month')['Month'].unique():after_k[after_k['Month'] == i]['Type'].value_counts().plot(kind = 'bar',fontsize = 20,figsize = (15,6))plt.title('เดือนที่ ' + str(i),fontsize = 20)plt.show()

มา plot graph ดูกันหน่อย

กราฟแสดงว่าทั้งปีมีจำนวนแจ้งซ่อมเรื่องต่างๆ เท่าไหร่

ต่อไปเป็นกราฟแสดงจำนวนแจ้งซ่อมเรื่องต่าง ๆ แยกรายเดือน

จากกราฟพวกนี้ ตอนแรกที่ดูจำนวนรวมทั้งปีก็จะเห็นว่าคนซ่อมบ้านกันเพราะเรื่องน้ำรั่วซึมเยอะที่สุด แต่พอมาแยกเป็นรายเดือนแล้ว เดือนมกราคมกับธันวาคม คนนิยมซ่อมผนังกัน และเดือนกุมภาพันธ์กับเดือนมีนาคม คนจะแจ้งปัญหาเรื่องเจ้าหน้าที่เยอะที่สุด ส่วนในเดือนอื่นๆ ก็คือปัญหาน้ำรั่วซึมเป็นหลัก

ตอนนี้ก็ครบทุกสเต็ปรวมไปถึง ทำ k-mean clustering เรียบร้อยแล้ว!

In conclusion…

ในเมื่อเราทำทุก step ของ data analytic เบื้องต้น รวมไปถึง clustering เรียบร้อยแล้ว มาสรุปกันดีกว่า ว่าเราได้อะไรจากการ analyze dataset นี้บ้าง

  1. โครงการที่มีการแจ้งเรื่องเข้ามาให้ไปซ่อมบ้านมากที่สุด คือ โครงการหมายเลข 21 (สงสัยบ้านโครงการนี้จะมีอายุมากแล้วนะเนี่ย)
  2. เดือนที่มีการแจ้งเรื่องเข้ามาให้ไปซ่อมบ้านมากที่สุดคือ เดือนพฤษภาคม (สาเหตุเป็นเพราะว่ามีฝนตกมากในเดือนนี้ โดนน้ำกัดเซาะกันจนกร่อนไปหมดแล้ว >.<)
  3. เคสส่วนมาก แจ้งเข้ามาให้ไป ซ่อมผนัง มากที่สุด (ส่วนรายละเอียดสามอันดับจากน้อยไปมาก คือมีน้ำรั่วซึม มีรอยร้าว และอื่นๆ)
  4. เดือนไหนซ่อมอะไรมากที่สุด ก็เหมือนกับข้อ 3 ในทุกเดือนเคสที่เข้ามามากที่สุดจะเป็น งานผนัง
  5. ช่องทางที่ลูกค้าใช้ในการแจ้งเรื่องเข้ามามากที่สุดคือ แจ้งผ่านโทรศัพท์
  6. ระยะเวลาโดยเฉลี่ยที่มีการแจ้งซ่อมบ้านหลังการโอนกรรมสิทธิ์คือตั้งแต่ 1 ถึง 13 ปี โดยส่วนใหญ่จะอยู่ที่ 2ปีมากที่สุด
  7. วันที่มีจำนวนแจ้งเคสเข้ามา มากที่สุดในสัปดาห์คือ วันพุธ และน้อยที่สุดคือ วันอาทิตย์ ส่วนวันที่ในเดือนไม่มีผลกับจำนวนเคสที่แจ้งเข้ามา

ในส่วนของการทำ k-mean clustering ในส่วนของ record ที่ถูกเขียนว่า อื่นๆ ในคอลัมน์รายละเอียด ผลสรุปออกมาว่า รายละเอียดงานซ่อมมีประมาณ 10 กลุ่ม คือ…

  • รั่วซึม
  • ผนัง
  • เจ้าหน้าที่
  • สี
  • ไฟฟ้า
  • เก็บงานไม่เรียบร้อย
  • เติมดิน
  • ประตูล็อคไม่ได้
  • ไฟไม่ติด
  • อื่น ๆ

--

--