กำไร:
- ความสามารถในการกำหนดประเภทของปัญหา (การจำแนก การถดถอย การจัดกลุ่ม) และเกณฑ์ความสำเร็จตามต้นทุนที่แท้จริงของงาน
- ความสามารถในการแบ่งข้อมูลอย่างตรงไปตรงมา (โดยไม่ต้องสัมผัสชุดทดสอบ ตามลำดับเวลาในอนุกรมเวลา) และสร้างพื้นฐานการประเมินที่ปราศจากการรั่วไหล
- ความสามารถในการเลือกแบบจำลองที่สามารถตีความได้โดยการเริ่มต้นด้วยพื้นฐานที่เรียบง่าย และเพิ่มความซับซ้อนเมื่อสมควรเท่านั้น
จนถึงตอนนี้เราได้รวบรวมข้อมูล ทำความสะอาด สำรวจ และสร้างฟีเจอร์ต่างๆ ทีนี้มาถึงการทำงานจริงการสร้างแบบจำลอง แบบจำลองคือโครงสร้างทางคณิตศาสตร์ที่เรียนรู้รูปแบบจากข้อมูลและสร้างการคาดการณ์สำหรับสถานการณ์ใหม่ แต่ส่วนที่สำคัญที่สุดในการสร้างแบบจำลองไม่ใช่ตัวโค้ด แต่เป็นการตัดสินใจสองประการที่เกิดขึ้นก่อนหน้า: การกำหนดปัญหาที่ถูกต้องและการแยกข้อมูลอย่างถูกต้อง AI เป็นที่ปรึกษาที่ทรงพลังในการเลือกอัลกอริทึม การเขียนโค้ด และการปรับพารามิเตอร์ แต่ขึ้นอยู่กับผู้ตัดสินใจว่าจะทำนายอะไรและความสำเร็จหมายถึงอะไร ปัญหาที่มีการกำหนดไว้ไม่ดีจะไม่ทำงานแม้จะมีแบบจำลองที่เขียนมาอย่างสมบูรณ์ก็ตาม
คำจำกัดความของปัญหาก่อน: เราคาดการณ์อะไร
งานการสร้างแบบจำลองทุกงานเริ่มต้นด้วยคำถาม และคำถามนี้จะกำหนดประเภทของแบบจำลอง การจัดประเภท — ผลลัพธ์เป็นหมวดหมู่: "ลูกค้ารายนี้จะออกหรืออยู่ต่อ", "ธุรกรรมนี้เป็นของปลอมหรือไม่" การถดถอย (ในภาษาอังกฤษ การถดถอย - ผลลัพธ์เป็นตัวเลข): "บ้านหลังนี้มีมูลค่าเท่าไหร่", "เดือนหน้าจะมีคำสั่งซื้อกี่รายการ" การจัดกลุ่ม (การแบ่งข้อมูลที่ไม่มีป้ายกำกับออกเป็นกลุ่มทั่วไป): "ลูกค้าของฉันแบ่งออกเป็นกลุ่มทั่วไปกี่กลุ่ม"
ส่วนที่สองของคำชี้แจงปัญหาคือเกณฑ์ความสำเร็จ: โมเดลนี้ "ดี" หมายความว่าอย่างไร ในรูปแบบการฉ้อโกง การพลาดผู้ฉ้อโกงนั้นมีราคาแพงกว่าการบล็อกลูกค้าที่ซื่อสัตย์โดยไม่ได้ตั้งใจ ดังนั้นไม่ใช่ "ความแม่นยำทั่วไป" แต่เป็น "อัตราการจับผู้ฉ้อโกง" มาเป็นอันดับแรก หากคุณไม่กำหนดเกณฑ์นี้ตั้งแต่ต้น ร่วมกับเจ้าของธุรกิจ คุณจะพบกับโมเดลที่ "มีความแม่นยำสูง" ซึ่งใช้ไม่ได้ผล (เราจะเจาะลึกลงไปในเมตริกในหน่วยที่ 7)
ข้อควรระวัง: "ความถูกต้อง" อาจทำให้เข้าใจผิดได้ หากธุรกรรม 10 จาก 1,000 รายการเป็นการฉ้อโกง โมเดลโง่ที่ระบุว่า "ไม่มีการฉ้อโกง" จะให้ความแม่นยำ 99% แต่จะไม่จับผู้ฉ้อโกงแม้แต่คนเดียว เลือกเกณฑ์ความสำเร็จโดยพิจารณาจากต้นทุนที่แท้จริงของปัญหา
การแยกการฝึกอบรม/การทดสอบ: การตรวจสอบแบบจำลองอย่างตรงไปตรงมา
การทดสอบแบบจำลองด้วยข้อมูลที่ได้เรียนรู้ก็เหมือนกับการถามคำถามเดียวกันกับนักเรียนที่เขา/เธอเรียนในข้อสอบ เขาได้คะแนนสูงแต่ไม่ได้แสดงสิ่งที่เขารู้จริงๆ ดังนั้นเราจึงแบ่งข้อมูลออกเป็นสองส่วน (มักเป็นสามส่วน):
- ชุดฝึกอบรม (ชุดฝึกอบรมเป็นภาษาอังกฤษ ปกติ 70-80%): โมเดลเรียนรู้เกี่ยวกับสิ่งนี้
- ชุดทดสอบ (ชุดทดสอบ ปกติ 20-30%): โมเดลไม่เห็นสิ่งนี้เลย ประสิทธิภาพที่แท้จริงวัดได้ที่นี่
- ชุดการตรวจสอบความถูกต้อง: ชุดระดับกลางที่ใช้สำหรับการตั้งค่าโมเดล (พารามิเตอร์ใดดีกว่า) เพื่อให้ชุดทดสอบ "สะอาด"
กฎพื้นฐานที่สุด: ห้ามสัมผัสชุดทดสอบระหว่างการฝึก การปรับขนาด การเขียนโค้ด การเลือกคุณสมบัติ - ทั้งหมดนี้เรียนรู้จากชุดการฝึก จากนั้นนำไปประยุกต์ใช้กับการทดสอบ (หลักการรั่วไหลจากหน่วยที่ 5) ชุดทดสอบเป็นครั้งแรกที่แบบจำลองมองเห็นโลกแห่งความเป็นจริง หากคุณเปิดเครื่องเร็วเกินไป คุณจะไม่มีวันรู้ถึงประสิทธิภาพที่แท้จริง
ข้อยกเว้นอนุกรมเวลา: หากข้อมูลของคุณขึ้นอยู่กับเวลา (ยอดขาย ตลาดหุ้น อุปสงค์) การแยกแบบสุ่มจะไม่เกิดขึ้น เพราะการแยกแบบสุ่มทำให้โมเดลมองเห็นอนาคตและทำนายอดีตได้ - นี่คือการรั่วไหล ให้แบ่งตามลำดับเวลาแทน: ฝึกกับช่วงเวลาเก่า ทดสอบกับช่วงเวลาใหม่
การเลือกอัลกอริทึม: จากง่ายไปซับซ้อน
ข้อผิดพลาดที่พบบ่อยที่สุดของผู้เริ่มต้นคือการเริ่มต้นด้วยโมเดลที่ซับซ้อนที่สุด แนวทางที่ถูกต้องนั้นตรงกันข้าม: ขั้นแรกให้สร้างพื้นฐานง่ายๆ "เดาชั้นเรียนส่วนใหญ่เสมอ" ในการจำแนกประเภท; "ประมาณค่าเฉลี่ยเสมอ" ในการถดถอย โมเดลโง่ๆ นี้ให้พื้นฐาน หากโมเดลจริงของคุณไม่ผ่านสิ่งนี้ แสดงว่ามีปัญหา จากนั้นไปยังโมเดลที่เรียบง่ายและตีความได้
รุ่น
ประเภทปัญหา
จุดแข็ง
ความอ่อนแอ
ข้อมูลพื้นฐาน (ส่วนใหญ่/เฉลี่ย)
ทั้งสองอย่าง
ให้เกณฑ์มาตรฐาน
ไม่เรียนรู้
การถดถอยโลจิสติก
การจำแนกประเภท
เรียบง่ายตีความได้
ความสัมพันธ์เชิงเส้นเท่านั้น
การถดถอยเชิงเส้น
การถดถอย
ง่ายรวดเร็ว
สมมติฐานเชิงเส้น
ต้นไม้ตัดสินใจ
ทั้งสองอย่าง
ตีความได้
ท่องจำง่าย
ป่าสุ่ม
ทั้งสองอย่าง
แข็งแรงทนทาน
ตีความได้น้อยลง
การเร่งการไล่ระดับสี (XGBoost ฯลฯ )
ทั้งสองอย่าง
แข็งแกร่งมาก
ปรับยาก เสี่ยงต่อการท่องจำ
กฎ: เลือกโมเดลที่ "ดีพอ" ที่ง่ายที่สุด ความสามารถในการตีความมีคุณค่ามากกว่าอำนาจในบริบททางธุรกิจส่วนใหญ่ เป็นการดีกว่าที่จะอธิบายการปฏิเสธสินเชื่อ "เนื่องจากอัตราส่วนหนี้สินต่อรายได้ของคุณสูง" มากกว่า "เพราะกล่องดำกล่าวไว้เช่นนั้น"
มินิเคสสามอัน
กรณีที่ 1 — คำจำกัดความของปัญหาไม่ถูกต้อง ทีมงานสร้างแบบจำลองการจำแนกประเภทโดยยึดตาม "ความพึงพอใจของลูกค้า" แต่เลือก "ความถูกต้อง" เป็นเกณฑ์ความสำเร็จ จากข้อมูลพบว่า 88% ของลูกค้าพึงพอใจ แบบจำลองนี้มีความแม่นยำ 88% โดยการเรียกทุกคนว่า "พอใจ" และไม่เคยจับคนที่ไม่พอใจได้ แม้ว่าเป้าหมายที่แท้จริงคือการตามหาพวกเขาก็ตาม บทเรียน: เลือกเกณฑ์ความสำเร็จตามวัตถุประสงค์ที่แท้จริง
กรณีที่ 2 — เวลารั่วในช่อง ในโครงการพยากรณ์ความต้องการ ข้อมูลจะถูกแบ่งแบบสุ่ม แบบจำลองนี้ให้ความแม่นยำ 93% แต่เกิดข้อผิดพลาดในการใช้งานจริง เนื่องจากในการฝึกอบรม โมเดลได้คาดการณ์ไว้ว่าในเดือนมกราคม จากนั้นในเดือนพฤศจิกายน พร้อมด้วยข้อมูลในเดือนธันวาคม ซึ่งมองเห็นอนาคตได้ เมื่อเราเปลี่ยนมาใช้การแบ่งตามลำดับเวลา ประสิทธิภาพจริงเพิ่มขึ้นเป็น 74% บทเรียน: การแบ่งตามลำดับเวลาในอนุกรมเวลา
กรณีที่ 3 — ความซับซ้อนที่ไม่จำเป็น นักวิเคราะห์รายหนึ่งเริ่มต้นโดยตรงกับโครงข่ายประสาทเชิงลึก ปรับจูนเป็นเวลาหลายสัปดาห์ และได้รับความแม่นยำ 81% จากนั้นเพื่อนร่วมงานคนหนึ่งได้รับ 80% ด้วยการถดถอยโลจิสติก 20 บรรทัด ซึ่งเร็วกว่ามาก ตีความได้ และบำรุงรักษาง่ายกว่ามาก บทเรียน: เริ่มต้นด้วยพื้นฐานและแบบจำลองง่ายๆ เพิ่มความซับซ้อนเมื่อสมควรได้รับ
เทมเพลตที่สามารถคัดลอกได้สี่แบบ
1) ชี้แจงคำจำกัดความของปัญหา:
บทบาทของคุณ: ที่ปรึกษาด้านการสร้างแบบจำลอง ช่วยฉันกำหนดงานนี้: “ฉันต้องการลดการเลิกจ้างของลูกค้า” ถามฉันและชี้แจง: (1) นี่คือการจำแนกประเภทหรือการถดถอย (2) ตัวแปรเป้าหมายคืออะไรกันแน่ และควรนิยามไว้อย่างไร (3) เกณฑ์ความสำเร็จควรเป็นอย่างไร และเพราะเหตุใด การตัดสินใจเป็นของฉัน คุณนำเสนอคำถามและตัวเลือก
2) ช่องการฝึกอบรม/การทดสอบที่ปลอดภัย:
แบ่ง df ของฉันออกเป็นการฝึกอบรม/การทดสอบ 80%/20% คงไว้ซึ่งการกระจายคลาส (stratify).random_state=42 นี่ไม่ใช่อนุกรมเวลา (การสังเกตอิสระ) พิมพ์อัตราส่วนชั้นเรียนของแต่ละชุดหลังการแบ่ง เพียงให้โค้ดแยกกับชุดทดสอบโดยไม่ต้องใช้การแปลงใดๆ
3) การแบ่งอนุกรมเวลา:
ข้อมูลจะขึ้นอยู่กับเวลา (คอลัมน์วันที่: order_date) ไม่ใช่การสุ่ม แบ่งตามลำดับเวลา: การฝึก 80% ที่เก่าที่สุด การทดสอบใหม่ล่าสุด 20% พิมพ์ช่วงวันที่ฝึกอบรมและทดสอบออกมา เพื่อที่ฉันจะได้ตรวจสอบได้ว่าอนาคตไม่รั่วไหล
4) การตั้งค่าพื้นฐาน:
ฉันมีปัญหาในการจำแนกประเภท (เป้าหมาย: ปั่น 0/1) ขั้นแรก สร้างพื้นฐาน: วัดความแม่นยำในการฝึกอบรม/การทดสอบด้วย DummyClassifier ซึ่งจะคาดการณ์คลาสส่วนใหญ่เสมอ จากนั้นฝึกการถดถอยโลจิสติกอย่างง่ายและเปรียบเทียบว่าเกินค่าพื้นฐานหรือไม่ แสดงหน่วยเมตริกของทั้งสองแบบเคียงข้างกัน
พรอมต์อ่อน / พรอมต์แข็งแกร่ง
พรอมต์ที่อ่อนแอ:
สร้างโมเดลที่ดีที่สุดด้วยข้อมูลนี้
"ดีที่สุด" ไม่ได้กำหนด; ไม่มีประเภทปัญหา ไม่มีเป้าหมาย ไม่มีเกณฑ์ความสำเร็จ และไม่มีกลยุทธ์การแบ่งแยก AI สร้างรูปแบบสุ่มที่อาจรั่ว
พรอมต์อันทรงพลัง:
บทบาทของคุณ: ผู้ช่วยนางแบบ ปัญหา: การจำแนกประเภท เป้าหมาย "ปั่น" (0/1) มีความไม่สมดุลของคลาส (~ 12% การปั่น) เกณฑ์ความสำเร็จ: การระลึกถึงผู้ที่ปั่นป่วนเป็นสิ่งสำคัญ การสังเกตข้อมูลโดยอิสระ (ไม่ใช่อนุกรมเวลา) งาน: (1) การแยกชั้น 80/20%, (2) พื้นฐาน DummyClassifier, (3) การถดถอยโลจิสติก, การเปลี่ยนแปลงทั้งหมดในไปป์ไลน์ และเรียนรู้จากการฝึกอบรมเท่านั้น อย่าสัมผัสชุดทดสอบก่อนที่จะแยก
ต่อไปนี้ประเภทของปัญหา ความไม่สมดุล เกณฑ์ และมาตรการวัดการรั่วไหลมีความชัดเจน
ข้อผิดพลาดทั่วไป
- ไม่เลือกเกณฑ์ความสำเร็จตามวัตถุประสงค์ที่แท้จริง "ความถูกต้อง" ในข้อมูลที่ไม่สมดุลทำให้เข้าใจผิด หากคุณต้องการยึดครองชนกลุ่มน้อย การเรียกคืนจะต้องมาก่อน
- การสัมผัสชุดทดสอบระหว่างการฝึก การปรับขนาด/การเข้ารหัสก่อนการแยกจะรั่วและซ่อนประสิทธิภาพที่แท้จริงไว้
- การแยกแบบสุ่มในอนุกรมเวลา โมเดลมองเห็นอนาคต ล่มสลายในการผลิต การแบ่งตามลำดับเวลาเป็นสิ่งสำคัญ
- กระโดดเข้าสู่โมเดลที่ซับซ้อนโดยไม่ต้องสร้างพื้นฐาน หากไม่มีการวัดประสิทธิภาพ คุณจะไม่มีทางรู้ได้ว่าโมเดลนั้นดีจริงหรือไม่
- ละเลยการตีความ ในการตัดสินใจทางธุรกิจ โมเดลที่อธิบายได้ง่ายมักจะมีคุณค่ามากกว่ากล่องดำ
เคล็ดลับ: ก่อนที่คุณจะเริ่มสร้างแบบจำลอง ให้เขียนหนึ่งประโยค: “แบบจำลองนี้จะทำนาย _____ ความสำเร็จของแบบจำลองจะวัดโดยหน่วยวัด _____ เนื่องจากต้นทุนที่แท้จริงของงานคือ _____” หากคุณไม่สามารถกรอกประโยคนี้ได้ แสดงว่าคุณยังไม่พร้อมที่จะเขียนโค้ด
โดยสรุป
ส่วนที่สำคัญที่สุดของการสร้างแบบจำลองไม่ใช่โค้ด แต่เป็นการตัดสินใจที่เกิดขึ้นก่อนหน้า: การกำหนดปัญหาที่ถูกต้อง (การจำแนกประเภทหรือการถดถอย เป้าหมายคืออะไร เกณฑ์ความสำเร็จคืออะไร) และการแบ่งข้อมูลอย่างยุติธรรม (โดยไม่ต้องแตะชุดทดสอบ ตามลำดับเวลาในอนุกรมเวลา) เริ่มต้นด้วยพื้นฐานง่ายๆ เสมอและเพิ่มความซับซ้อนเมื่อสมควรได้รับเท่านั้น ความสามารถในการตีความมีความสำคัญมากกว่าอำนาจในบริบททางธุรกิจส่วนใหญ่ AI เป็นที่ปรึกษาที่ทรงพลังในการเลือกอัลกอริธึมและโค้ด แต่มนุษย์จะเป็นผู้ตัดสินใจว่าคุณคาดการณ์อะไรและเพราะเหตุใด
งานสมัคร
กำหนดปัญหาการทำนายและเขียนประโยคต่อไปนี้ให้สมบูรณ์: “แบบจำลองนี้จะทำนาย ___ (การจำแนกประเภท/การถดถอย) เป้าหมายคือ ___ เกณฑ์ความสำเร็จคือ ___ เพราะ ___” จากนั้นแบ่งข้อมูลตามกลยุทธ์ที่ถูกต้อง (ตามลำดับเวลาหากเป็นอนุกรมเวลา) สร้างเส้นฐาน และวัดว่ารูปแบบง่ายๆ ทำลายเส้นฐานนั้นหรือไม่
รายการตรวจสอบ
- [ ] ฉันได้กำหนดประเภทของปัญหา (การจำแนกประเภท/การถดถอย) และเป้าหมายไว้อย่างชัดเจนหรือไม่
- [ ] ฉันได้เลือกเกณฑ์ความสำเร็จตามต้นทุนจริงของงานหรือไม่
- [ ] ฉันปล่อยชุดทดสอบทิ้งไว้โดยไม่มีใครแตะต้องระหว่างการฝึกหรือไม่?
- [ ] ถ้าเป็นอนุกรมเวลา ต้องแบ่งตามลำดับเวลาหรือไม่?
- [ ] ฉันได้สร้างพื้นฐานก่อนที่จะก้าวไปสู่โมเดลที่ซับซ้อนแล้วหรือยัง?