Customer’s Negative Comments
DSEsGr.10 Week2–3
Team member:
1. ake
2. Bank
3. Jui
4. oOhHhH
5. เต้ย พอๆๆ
6. ปาร์ตี้ จ้า
7. Sutthipas Y.
8. VIVI -ビビ
9. Aui Jampen
10. DingDoNG
11. iceberg
12. Nui
13. Mr. Vasan
14. Panuwat
15. ming
16. Peach
17. sumana
18. Thon
19. Emkrit
20. SmileyYui
21. Guide (Private)
22. Gopher_Sum’O~*
23. Yui Kitima
Objective: บทความนี้เป็นส่วนหนึ่งของ Data Science Essential ของ Botnoi Classroom หัวข้อ Machine Leaning (เบื้องต้น) และ Prediction Models
โปรเจคนี้เกี่ยวกับอะไร ทำไมเลือกหัวข้อนี้ ?
ปัจจุบันการซื้อของออนไลน์กลายเป็นวิถีปกติใหม่ของคนยุคนี้ไปแล้ว ประกอบกับมีตัวเร่งการระบาดของโรคโควิด-19 ก่อนหน้า ส่งผลให้คนหันมาซื้อของผ่านช่องทางนี้เพิ่มมากขึ้น เราจึงปฏิเสธไม่ได้เลยว่าการดำเนินชีวิตของคนกลุ่มหนึ่งเปลี่ยนไปแล้วโดยสิ้นเชิง ทำให้การจัดการข้อมูลเพื่อนำมาประยุกต์ใช้กับธุรกิจที่อาศัยแพลตฟอร์มการขายของออนไลน์ (E-commerce) เป็นสิ่งที่สร้างประโยชน์กับผู้ประกอบการหรือเจ้าของข้อมูลได้อย่างแน่นอน เพื่อปรับเปลี่ยนแนวทางการพัฒนาตัวสินค้าหรือบริการให้เป็นที่พึงพอใจของลูกค้ามากที่สุดและสามารถสร้างยอดขายที่สูงขึ้นได้
ในส่วนโปรเจคนี้ทีมงานจะมาวิเคราะห์ ไอเดีย อารมณ์และความรู้สึกที่มีต่อสินค้าและบริการว่าเป็น แง่บวกหรือแง่ลบผ่านการสร้างโมเดลการทำนายความพึงพอใจของลูกค้าจากข้อมูลการให้คะแนนสินค้าและข้อความคอมเม้นต์หรือรีวิวสินค้าหลังจากได้รับแล้ว ด้วยเทคนิค Text Classification เพื่อทำ Sentiment Analysis
ขั้นตอนการเลือก data
เป็นชุดข้อมูลที่มาจากแพลตฟอร์มขายของออนไลน์เจ้าหนึ่งซึ่งใหญ่เป็นอันดับต้นๆของเมืองไทย ซึ่งมีรายละเอียดของ timestamp, score, sku name (ชื่อ รายละเอียดสินค้า ยี่ห้อ), product catagoryแบบกว้าง, product catagoryแบบละเอียด และ original text (ข้อความคอมเม้นต์) โดยข้อมูลที่นำมาใช้อยู่ในระหว่างช่วงเดือนกุมภาพันธ์- มิถุนายน 2563 (ทางทีมไม่เปิดเผยที่มาของข้อมูลและ sku name เนื่องจากทีมงานไม่มีเจตนาละเมิดลิขสิทธิ์)
การสร้างโมเดล
ภาพรวมขั้นตอนทั้งหมดเป็นตามลำดับดังนี้
- Get Problem
- Get data
- Cleansing data
- Feature Extraction
- Train model and evaluation
- Export Model
- Business evaluation
โดยสามารถดู code ประกอบคำอธิบายได้จาก link colab ด้านล่าง https://colab.research.google.com/drive/1QJVBRqK7MUY4rQo_bj0Vpcpllt7ktFoo?authuser=2#scrollTo=dJmwOw23Mri7
หลังจากเราได้หัวข้อปัญหาและชุดข้อมูลมาแล้ว (ขั้นตอนที่ 1) ขั้นตอนต่อไปเราจะเริ่มต้นด้วยการ import ข้อมูลเข้ามาก่อน (ขั้นตอนที่ 2) จากนั้นเลือกดึง column ข้อมูล original text และ score ออกมา (2.1) เพื่อนำไปใช้ในส่วนของการ cleansing data (ขั้นตอนที่ 3)โดยเราพบว่ามีข้อความคอมเม้นต์ที่ขาดหายไป 117 รายการ แต่เราละไว้เพราะเป็นสัดส่วนที่น้อยมากเทียบกับจำนวนคอมเม้นต์ทั้งหมด (403,379 คอมเม้นต์)
จากนั้นเริ่มเช็คว่ามีคอนเน้นต์ที่ซ้ำกันหรือไม่ (3.2) พบว่ามีส่วนข้อความคอนเม้นต์ที่ซ้ำกันบ้าง มีการเช็ค score ที่ได้ทั้งหมดเป็นอย่างไรบ้าง (3.3)
จากนั้นมีการสุ่มตัวอย่างคอมเม้นต์ช่วงที่ได้คะแนนดี และไม่ดี แล้วเปลี่ยน score 4&5 นั้นเป็น pos (positive) และ score 1&2 เป็น neg (negative) (3.4) และเช็คดูว่าในตัวอย่างที่สุ่มมานี้มีคอมเม้นต์ซ้ำกันบ้างหรือไม่ พบว่ามีเล็กน้อยบางส่วน
จากตัวอย่างที่สุ่มมาพบว่ามีบางคอมเม้นต์เป็นรูป emoji ซึ่งเราก็จะทำการเปลี่ยนตัวคอมเม้นต์ทั้งหมดให้เป็น string (3.5)
จากนั้นเป็นการเริ่มแบ่งชุดข้อมูลสำหรับการ train และ test (3.6) และ plot bar graph ดูพบว่าชุดข้อมูล train และ test มีจำนวน neg และ pos ใกล้เคียงกัน ก็เป็นอันใช้ได้ คาดว่า feature ที่ได้ออกมาน่าจะใช้ได้
ขั้นตอนที่ 4 เป็นการสกัด feature ออกมา โดยเนื่องจากชุดข้อมูลเป็นภาษาไทย เราจำเป็นต้องมีการ import libraly ที่ทำงานกับภาษาไทยได้มาด้วยในโปรเจคนี่เราใช้ pythainlp (https://thainlp.org/pythainlp/docs/2.0/index.html) ซึงจะสามารถสกัด token ที่เป็นภาษาไทยออกมาได้ จากนั้นเริ่มขั้นตอนการสกัด token จากคอมเม้นต์ลูกค้า (4.1)
หลังจากได้ token ออกมาแล้วเราจะทำการสร้าง bag of word เป็นการจัดกลุ่มจำแนกคำที่มีลักษณะคล้ายๆกันมาอยู่ด้วยกัน โดยจำแนกจาก score ซึ่งจะตั้งชื่อเรียก train_label (4.2)
จากนั้นเป็นการ clean รูปแบบ format ของคอมเม้นต์เพื่อให้ง่ายต่อการ extract feature โดยการตัดการขึ้นบรรทัดใหม่มาเป็นการเว้นวรรคแทน (4.3)
ทำการ Fit model (4.4) ทำการแปลง feature ที่ได้ให้อยู่มนรูปตัวเลข array
และทำการ normalize feature matrix เพื่อปรับ scale ข้อมูลให้อยู่ในช่วงที่เราต้องการ(4.5)
ขั้นตอนที่ 5 เป็นการ Train model and evaluation เรา import libraly Linear SVC เพื่อจะให้ model เรา train กับ libraly Support Vector Machine (SVM) โดยจะมี parameter 2 ตัวที่ใช้คือ feature token ที่แปลงเป็น array แล้ว และ train_label
โดยหลังจาก train แล้ว เราลอง plot heat map เพื่อทำการทดสอบผลลัพธ์ที่ได้จากสร้างโมเดล เพื่อเปรียบเทียบความถูกต้อง ตำแหน่งเลขแรกคือค่าที่ทำนาย ตำแหน่งเลขที่สองคือผลลัพธ์ที่แท้จริง โดย 0 = คำติ 1 = คำชม เราจะทราบสัดส่วนของผลลัพธ์ที่แท้จริงจากโมเดล เทียบกับผลลัพธ์จริง (5.1–5.3)
จากนั้นดูค่า Accuracy ของ โมเดล precision, recall, f1-score, support โดยเราจะให้ความสำคัญกับ precision มากที่สุด
และทำการสั่งใช้งานโดยให้ model แสดงค่าการทำนาย (SVM_predict) และโชว์ผลลัพธ์ของการทำนายเทียบกับ score ที่ถูกจำแนกแล้ว (label pos or neg) พบว่ามีส่วนที่ทำนายผิดจำนวน 256 คอมเม้นต์จากจำนวน test_data 3,200 คอมเม้นต์
ขั้นตอนที่ 6 เป็นการ export model และ ลอง test กับคำคอมเม้นต์จริงดูว่า model อ่านค่าออกมาเป็น pos หรือ neg (6.1–6.2)
ขั้นตอนที่ 7 เป็นการ apply model ที่ได้ กับคอมเม้นต์จริงทั้งหมดแล้วแสดงค่า comment ออกมาใน comment_type และจัดกลุ่ม comment_type ที่เป็น neg ออกมาว่าไปตกอยู่ในสินค้ากลุ่ม product category ใดบ้าง (7.1–7.2) ก็จะพบ Top 5 ของกลุ่ม product category เป็นกลุ่ม Small home appliances มากที่สุด รองลงมาเป็น Food & Beverage, Home & Living, Consumer Electronics และอันดับ 5 เป็น Mobiles & Tablets
การ Deploy API
จากนั้นทางทีมก็ทำการ Deploy API ของโมเดลที่สร้างขึ้นผ่าน heroku เพื่อให้ง่ายต่อการที่บุคคลทั่วไปสามารถเรียกใช้งานโดยผ่าน url ได้ โดยโมเดลสามารถทำนายใจความกว้างๆ (sentiment) ของ comment ได้ ตางlink ด่านล่าง
https://customer-nlp-api.herokuapp.com/get_result?keyword=%E0%B8%81%E0%B9%87%E0%B8%9E%E0%B8%AD%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B9%84%E0%B8%94%E0%B9%89
เพื่อนๆสามารถลองเล่นได้โดยเปลี่ยนข้อความหลังที่ต้องการทำนายหลังเครื่องหมายเท่ากับ (=) โดยเราสามารถพิมพ์ข้อความเข้าไปโมเดลก็จะสามารถทำนายได้ว่าไอเดียหรือใจความของ comment นั้นเป็น negative(neg) หรือ positive (pos) เช่น “แพ็กไม่ไดี”, “ก็พอใช้ได้” โมเดลสามารถทำนายได้ว่าเป็น pos, ส่วนตัวอย่างของ sentiment ในแนวลบเช่น “แม่ค้าตอบดี”, “ได้รับของเรียบร้อย”
บทสรุป
สรุปที่เราทำมาเป็นอย่างไร อธิบายจะพัฒนาต่อยอดได้อย่างไร นำไปใช้ประโยชน์อะไรได้อย่างไร
สรุปที่ทีมงานทำมาคือการลองทำแบบฝึกหัดสร้างโมเดลของการทำนาย sentiment ของ comment ที่ลูกค้ามีต่อสินค้าที่ซื้อผ่านแพลตฟอร์ม E-commerce และสามารถเรียกใช้งานผ่าน API ได้ โดยสามารถนำโมเดลมาประยุกต์ใช้ในการประเมินความรู้สึกโดยรวมที่ลูกค้ามีต่อตัวสินค้า หรือบริการของร้านค้าได้ว่าเป็นในแง่บวกหรือลบ และถ้ารู้แนวทางว่าเป็นลบก็จะได้สามารถปรับเปลี่ยนให้ทันถ่วงทีได้ เช่น แจ้งเตือนให้ปรับปรุงบริการของร้านค้าที่อยู่ในแพลตฟอร์ม หรือหากมีญหาที่การขนส่งสินค้าล้าช้า หรือสินค้าชำรุดจากการขนส่งก็สามารถแจ้งร้องเรียนปัญหาไปที่บริษัทขนส่งเพื่อที่จะรักษาฐานลูกค้าของแพลตฟอร์ม สร้างความประทับใจให้กับลูกค้า และสร้างความสามารถในการแข่งขันโดยรวมกับแพลตฟอร์มอื่นๆได้
ส่วนแนวทางการพัฒนาต่อยอดในอนาคตสำหรับโมเดลนี้คือจะให้สามารถวิเคราะห์ลงไปในรายละเอียดของ product category แบบละเอียดได้ ก็จะสามารถมีข้อมูลระบุได้ชัดเจนมากขึ้นหากลูกค้าไม่พอใจในสินค้าหนึ่งๆ ด้วยสาเหตุอะไร เพื่อหาทางปรับปรุงแก้ไขได้