เมื่อผมอนุญาตให้นักศึกษาใช้ ChatGPT ทำ Data Science Proficiency Test …

Ta Virot Chiraphadhanakul
Skooldio
Published in
4 min readMay 7, 2023

ในยุคหนึ่งไม่นานมานี้ เรามักจะพูดติดตลกกันว่าคนที่ “Google เก่ง” มักจะทำ “ทำงานเก่ง” แต่ไม่ใช่แค่เพราะคนเหล่านี้ใช้เครื่องมือได้เก่งเท่านั้น คนที่ “Google เก่ง” มักจะเป็นคนที่มีพื้นฐานความรู้ที่ดีด้วย ซึ่งเป็นปัจจัยสำคัญที่จะช่วยให้ตั้งคำถามได้ดี และสามารถสังเคราะห์ข้อมูลที่ได้มาไปประยุกต์แก้ปัญหาต่างๆ ได้อย่างมีประสิทธิภาพ แต่การมาของ ChatGPT กำลังจะทำให้สิ่งนี้เปลี่ยนไป คุณสามารถถามคำถามงงๆ และโต้ตอบกับมันไปมาจนคุณหายงง บอกให้มันปรับนู่นแก้นี่ จนได้ผลลัพธ์ที่ต้องการ ตั้งแต่เรียงความสั้นๆ ไปจนถึงโค้ดที่สามารถทำงานได้จริง

AI will not replace you. A person using AI will.

ในคลาส (Advanced) Data Science Practicum ที่ผมสอนอยู่ที่จุฬาฯ จะมีแบบทดสอบสุดท้ายที่เรียกว่า Data Science Proficiency Test เป็นการสอบเขียนโค้ดเพื่อวิเคราะห์ข้อมูลและสร้างโมเดล Machine Learning เหมือนจำลองการทำงานจริง นักศึกษาจะถูกประเมินทั้งความสามารถในการเขียนโค้ดและการประยุกต์ความรู้ทางทฤษฎี (เช่น การสรุปผลการวิเคราะห์ข้อมูลได้อย่างถูกต้อง การทำ Feature Engineering ที่เหมาะสมกับโจทย์ หรือการเลือกและปรับจูนโมเดลตามผลลัพธ์ที่ได้จากข้อมูลจริง)

เนื่องจากในชีวิตการทำงานจริง ไม่มี Data Scientist คนไหนที่ไม่ค้นหาข้อมูลบนอินเตอร์เน็ตระหว่างทำงาน ผมเลยจัดสอบแบบ Open book, open internet มาตลอด 6 ปีที่ผ่านมา สิ่งเดียวที่ห้ามในการสอบนี้คือการพูดคุยกับคนอื่น คนที่เขียนโค้ดไม่คล่อง ต้อง Google ทุกคำสั่ง จะไม่มีทางทำข้อสอบได้ทันเวลา คนที่ไม่มีความรู้พื้นฐานที่ดีจะไม่รู้แม้กระทั่งว่าต้องค้นหาด้วย Keyword ว่าอะไรเพื่อตอบคำถามหรือแสดงความคิดเห็น

แต่…ในปีนี้เรามี ChatGPT แล้วนะ?!

  • มันจะเป็นแค่ “Google on steroids” ที่นักศึกษาใช้ค้นหาข้อมูลได้เร็วขึ้นมากๆ? ไม่ต้องกด Stack Overflow หลายๆ ลิงก์เพื่อหาตัวอย่างโค้ดที่ดีที่สุดอีกต่อไป
  • หรือมันจะเป็นเหมือนเพื่อนที่ฉลาดมากที่คอย “บอกโพย” ได้ตลอดเวลา และเริ่มเข้าข่ายการโกงข้อสอบ?

สิ่งเดียวที่แน่นอนคือ ตอนที่ลูกศิษย์ผมจบไปทำงานเป็น Data Scientist เค้าก็จะสามารถใช้ ChatGPT ระหว่างทำงานได้ ผมเลยจำยอมเปิดโอกาสให้ใช้ ChatGPT ในการสอบได้อย่างเต็มที่ แต่มีข้อแม้ว่าจะต้องส่ง Chat log มาให้ตรวจด้วย (เหมือนส่งกระดาษทดในห้องสอบ) เพื่อใช้โอกาสนี้ในการทำความเข้าใจถึงรูปแบบการใช้งานที่เป็นไปได้ (ที่ผมอาจจะนึกไม่ถึง) มากยิ่งขึ้น และผลกระทบต่อการประเมินผลความสามารถของผู้เรียนเพื่อปรับปรุงรูปแบบการสอบในครั้งต่อไป

การใช้งานของนักศึกษาในการสอบครั้งนี้เป็นการใช้ ChatGPT เป็นผู้ช่วยเขียนโค้ด และการถามความคิดเห็นเพื่อตอบคำถามในข้อสอบเป็นหลัก นักศึกษาส่วนใหญ่ยังใช้ตัวฟรี GPT 3.5 ซึ่งในภาพรวมก็ต้องถือว่าตอบคำถามส่วนใหญ่ได้ดีในระดับหนึ่ง อาจจะมีตอบผิดบ้างเล็กๆ น้อยๆ แบบที่พอเอาโค้ดไปรันจริงก็จะสามารถหาจุดที่ผิดได้ไม่ยากมากนัก (แต่ก็ต้อง Debug โค้ดได้คล่องนะ 😌) พวกนี้มักจะเป็น Error ที่เฉพาะเจาะจงกับข้อมูลที่มี เช่น ข้อมูลบางแถวเป็น Null แล้วโค้ดไม่ได้จัดการไว้ดีๆ สิ่งที่ค่อนข้างชัดเจนมากคือ ความสามารถในการเขียน “prompt” ส่งผลมากๆ ต่อผลลัพธ์ที่จะได้ คนที่ถามเก่งๆ ใส่รายละเอียดที่จำเป็นได้ครบถ้วน สามารถได้คำตอบที่ถูกต้องพร้อมใช้ไปได้ทันที

ลองมาดูตัวอย่างการใช้งานที่น่าสนใจ ที่น่าจะเป็นประโยชน์กับทั้งคนที่(อยาก)เป็น Data Scientist และคนที่ต้องสอนหรือประเมิน Data Scientist กัน

1. ถาม(ไม่)ชัด…ก็ตอบ(ไม่)ชัด

เมื่อถามกลางๆ ว่าจะเปลี่ยน string เป็น datetime ทำอย่างไร ก็จะได้คำตอบกลางๆ ที่บอกแค่ฟังก์ชันที่ต้องใช้เท่านั้น แต่ด้วยความฉลาด(และช่างพูด)ของ ChatGPT มันก็เลยอธิบายต่อว่าจริงๆ แล้วควรต้องระบุเพิ่มด้วยนะ ว่าวันที่ในข้อความมันอยู่ในรูปแบบไหน

เมื่อเราระบุรูปแบบข้อมูลไปใน Prompt ให้ชัดขึ้น ChatGPT ก็ให้โค้ดที่พร้อมนำไปใช้งานมากขึ้น (เอาจริงๆ ส่วนตัวทุกครั้งที่ใช้ strptime ก็ต้องเปิด Document ทุกครั้ง 😅) แต่ยังไม่พร้อมใช้งานทันทีเนื่องจากชื่อคอลัมน์ created_time_str ไม่อยู่ใน Prompt แล้ว

นักศึกษาบางคนบอกชัดๆ ข้ามขั้นไปเลยว่าจริงๆ อยากได้ weekday จากวันที่ในรูปแบบข้อความตามที่ระบุ

2. บริบทยิ่งเยอะ…โมเดลยิ่งเข้าใจมาก

ในตัวอย่างนี้ นักศึกษายัดตัวอย่างตารางเข้าไปใน Prompt เลย พร้อมกับ ถามเป็นภาษาไทยลอกจากโจทย์ในข้อสอบมาถามตรงๆ (โหดจัง 😅)

ChatGPT ก็ตอบมาเป็น Pseudocode ทีละขั้นเลยว่าต้องทำยังไง พร้อมกับโค้ดที่ถูกต้องเกือบหมด เพราะจากตัวอย่างข้อมูล ตอนนี้ ChatGPT รู้จักชื่อคอลัมน์และรูปแบบข้อมูลหมดแล้ว ผมประทับใจเป็นพิเศษที่มันสรุปข้อมูลโดยการ GROUP BY (year, month) ไม่ใช่ GROUP BY (month) ซึ่งเป็นหนึ่งในจุดที่นักศึกษาที่ “คิดเอง” หลายคนพลาด

สังเกตว่าโค้ดด้านบนยังทำงานไม่ถูกต้องนัก ถ้าหากจะสร้างวันที่จาก created_time_str เราจะใช้ unit='s' ในการแปลงไม่ได้ ถ้าจะใช้เราจะต้องใช้ Unix time จากคอลัมน์ created_time แทน และต้องมีการระบุรายละเอียด Timezone ในการแปลงเพิ่มเติม

3. อย่าปล่อยให้ ChatGPT มโนไปเอง

อาการ “มโน” หรือ Hallucations คือหนึ่งในข้อจำกัดของการใช้งาน ChatGPT เนื่องจาก ChatGPT ไม่ได้อ่านข้อมูลจริงๆ เข้าไปประมวลผล การตีความทุกอย่างที่ขึ้นกับข้อมูลจริงจึงเชื่อถือไม่ได้

จากโค้ดก่อนหน้านี้ หลังจากที่ ChatGPT เขียนโค้ดให้เสร็จหมด ก็ปิดท้ายด้วย print(summary) แสดงผลลัพท์ที่สร้างขึ้นมาเองแบบไม่มีความจริงเจือปนแต่อย่างใด 🤣

ด้านล่างเป็นอีกตัวอย่างที่นักศึกษาก๊อปปี้โจทย์ไปวางดื้อๆ แล้ว ChatGPT ก็สามารถช่วยเขียนโค้ดในการคำนวณออกมาได้อย่างถูกต้อง

แต่พอมาถึงพาร์ทที่ต้องแสดงความคิดเห็น ChatGPT ก็ “มโน” ข้อมูล และสรุปเอาเองแบบผิดๆ ไป 🤣

4. โยนหินถามทางจนได้คำตอบที่ถูกต้อง

ในตัวอย่างนี้ นักศึกษาเริ่มจากถามห้วนๆ ว่าอยากหาค่าเฉลี่ยของ 5 แถวก่อนหน้า แม้ไวยากรณ์ภาษาอังกฤษของคำถามจะเละเทะแค่ไหน ChatGPT ก็ยังเข้าใจเราอยู่ 😂

ChatGPT ก็ตอบกลับมาเป็นตัวอย่างโค้ดพร้อมคำอธิบายการใช้งานฟังก์ชัน rolling() ซึ่งดูผิวเผินก็เหมือนจะถูกต้อง เพราะในคำอธิบายเขียนไว้ว่าเป็นการคำนวณหา “The mean of the 5 preceding rows” แต่จริงๆ แล้วโค้ดข้างต้นเป็นการหาค่าเฉลี่ยของข้อมูล 4 แถวก่อนหน้าและ แถวปัจจุบัน อาจจะเป็นเพราะการคำนวณ Moving Average โดยทั่วไป มักจะรวมข้อมูลแถวปัจจุบันไปด้วย

โชคดีที่นักศึกษาคนนี้มีความ “เฉลียว” เลยถามย้ำอีกทีว่าการคำนวณตามสูตรนี้ นับรวมแถวปัจจุบันหรือไม่ (ถ้าใครพยายามจะลองอ่าน Document จะพบว่าคำตอบอาจจะยังไม่ชัดเจนเท่าไหร่)

ChatGPT ก็ตอบกลับมาถูกต้องว่าโค้ดที่ให้ไปก่อนหน้านี้ มันนับรวมแถวปัจจุบันด้วยนะ พร้อมทั้งเสนอวิธีแก้ไขและโค้ดใหม่กลับมา แต่พออ่านย่อหน้าสุดท้าย ก็จะรู้สึกแปลกๆ นิดหน่อย ว่า min_period น่าจะไม่ใช้ทางออกของปัญหา (จริงๆ ถ้าใส่ window=5 ค่า Default ของ min_period จะถูกกำหนดให้เป็น 5 อยู่แล้ว ดังนั้นโค้ดนี้จึงทำงานเหมือนโค้ดก่อนหน้านี้เป๊ะ 🥲)

พอถาม ChatGPT อีกครั้ง ด้วย Prompt ที่เฉพาะเจาะจงมากขึ้น ในที่สุดก็ได้คำตอบที่ถูกต้อง

ด้านล่างนี้เป็นอีกตัวอย่างหนึ่งที่ถามโจทย์ข้อเดียวกัน (รอบนี้เป็นภาษา SQL) แต่นักศึกษาเริ่มจากแปะโค้ดเท่าที่ตัวเองเขียนได้ลงไป เพื่อให้ ChatGPT พอรู้บริบทว่าเราอยากทำอะไร และรู้ชื่อ Field ต่างๆ ที่ต้องใช้

จากนั้นจึงบอกให้ ChatGPT ช่วยแก้โค้ดให้หน่อย

ซึ่ง ChatGPT ตอบมาเป็นโค้ดที่ใช้คำนวณค่าเฉลี่ยของข้อมูล 4 แถวก่อนหน้าและ แถวปัจจุบัน (ซึ่ง Make sense เนื่องจากใน prompt ระบุว่า Last 5 posts) แต่ด้วย Syntax ของ SQL ทำให้บอกได้ไม่ยากว่ามันน่าจะไม่ได้ทำงานในแบบที่เราอยากได้อยู่

เหมือนเดิม พอถาม ChatGPT อีกครั้ง ด้วย Prompt ที่เฉพาะเจาะจงมากขึ้น ในที่สุดก็ได้คำตอบที่ถูกต้อง

โดยทั่วไป แนวทางการใช้งาน ChatGPT ที่ดีอย่างหนึ่ง คือ การชวนให้มันคิดและให้เหตุผลเป็นลำดับขั้น (Chain-of-Thought prompting) หลายครั้งเราจะพบว่าถ้าเราโยนคำถามแล้วขอคำตอบจากมันเลย มันจะอาจจะให้คำตอบที่ไม่ถูกต้องมา แต่ถ้าเราค่อยๆ ถามทีละขั้น หรือบอกให้มันแสดงวิธีทำ (Magic phrase: “Let’s think step by step”) โมเดลจะมีเวลาคิดมากขึ้น และเราจะมีโอกาสได้คำตอบที่ถูกต้องมากยิ่งขึ้น

5. ระบุผลลัพธ์จากข้อมูลจริงก่อนถามความคิดเห็น

จากตัวอย่างก่อนหน้านี้ ที่ ChatGPT มโนคำตอบมาให้ ก็มีนักศึกษาอีกคนไปรันโค้ดเพื่อคำนวณตัวเลขทางสถิติมาก่อน แล้วนำผลลัพธ์ที่ได้ มาใส่คู่กับคำถามไว้ใน Prompt เดียวกัน ChatGPT ก็สามารถแสดงความคิดเห็นได้อย่างถูกต้อง

อีกตัวอย่างหนึ่ง นักศึกษาพยายามจะให้ ChatGPT ช่วยตีความค่าสัมประสิทธิ์ที่ได้จากโมเดล Linear Regression แต่อาจจะเฟรมคำถามกว้างไปหน่อย คำตอบที่ได้เลยเน้นไปทางอธิบายว่าสิ่งที่อยู่ในผลลัพธ์คืออะไร และแตะๆ เรื่องการตีความค่าสัมประสิทธิ์เล็กน้อย

แต่พอถามเพิ่มเติมชัดๆ ChatGPT ก็สามารถอธิบายเพิ่มเติมได้ถูกต้อง และมีการเติมรายละเอียด “holding all other independent variables constant” ให้สมบูรณ์มากขึ้นด้วย

6. ใช้เป็นเพื่อนช่วยคิด ช่วย Brainstorm

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

หรือข้อที่ให้นักศึกษาเสนอโมเดลที่เหมาะสมกับการนำมาใช้งาน (ซึ่งจริงๆ ขึ้นอยู่กับชุดข้อมูล) ก็พบว่ามีนักศึกษาหลายคนมาถาม ChatGPT เอาความรู้ ว่าในกรณีไหนใช้โมเดลไหนน่าจะดี

ถึงตรงนี้ หลายคนอาจจะเริ่มตั้งคำถามว่า แล้วข้อสอบชุดนี้จะยังใช้ประเมินความสามารถนักศึกษาได้อยู่หรือไม่? … ผมคงต้องยอมรับว่าประสิทธิภาพในการวัดผลคงน้อยลง เส้นแบ่งระหว่างนักศึกษาที่เขียนโค้ดคล่องกับไม่คล่องจะเริ่มเบลอมากขึ้น เพราะ ChatGPT สามารถเป็นตัวช่วยเขียนโค้ดที่ดีมากๆ ปีนี้แทบไม่มีนักศึกษาส่งกระดาษเปล่าเลย เพราะแค่เอาโจทย์ไปถาม ChatGPT ยังไงก็จะได้โค้ดอะไรบางอย่างกลับมา (แต่ถ้าโค้ดรันไม่ได้ ผมก็ไม่ให้คะแนนนะ 😅 ปีก่อนๆ อาจจะยังมีให้คะแนนค่าน้ำหมึกบ้าง)

อย่างไรก็ตาม จากหลายๆ ตัวอย่างข้างต้น ผมยังเชื่อว่าข้อสอบนี้ยังสามารถแบ่งแยกคนธรรมดากับคน “เก่ง” ได้อยู่ นักศึกษาที่เก่งจะ​ “ฉลาด” ในการเขียน prompt ให้ได้คำตอบที่ถูกต้องอย่างรวดเร็ว และมีความ “เฉลียว” เป็นภูมิต้านทานอาการ “มโน” และการตอบผิดๆ อย่างมั่นใจของ ChatGPT ได้

ถ้ามีเวลาผมจะลองทำเฉลยข้อสอบชุดนี้โดยใช้ ChatGPT หรือ Bard ล้วนๆ มาให้ลองดูกันในโอกาสหน้า แต่ได้ยินว่า Code Interpreter ซึ่งเป็น Plug-in ตัวใหม่ของ ChatGPT โหดมาก สามารถรันโค้ดจริงได้แล้ว แทบจะจบงานทุกอย่างได้ใน ChatGPT ตั้งแต่ออกแบบวางแผนการวิเคราะห์ เขียนโค้ด สร้างกราฟ ลองไปดูตัวอย่างกัน https://dataliteracy.com/code-interpreter-for-chatgpt/

--

--

Ta Virot Chiraphadhanakul
Skooldio

Co-founder @ Skooldio. Google Developer Expert in Machine Learning. A data nerd. A design geek. A changemaker. — Chula Intania 87, MIT Alum, Ex-Facebooker