ยินดีด้วย คุณได้ติดตั้งใช้งานรูปแบบ Unicorn แล้ว โมเดลควรทํางานได้ตลอด 24 ชั่วโมงทุกวันโดยไม่มีปัญหา คุณต้องตรวจสอบไปป์ไลน์แมชชีนเลิร์นนิง (ML) เพื่อให้แน่ใจว่าระบบทำงานได้
เขียนสคีมาข้อมูลเพื่อตรวจสอบข้อมูลดิบ
หากต้องการตรวจสอบข้อมูล คุณควรตรวจสอบข้อมูลอย่างต่อเนื่องเทียบกับค่าสถิติที่คาดไว้ด้วยเขียนกฎที่ข้อมูลต้องเป็นไปตาม ชุดกฎนี้เรียกว่าสคีมาข้อมูล กําหนดสคีมาข้อมูลโดยทําตามขั้นตอนต่อไปนี้
ทําความเข้าใจช่วงและการกระจายของฟีเจอร์ สําหรับฟีเจอร์เชิงหมวดหมู่ ให้ทําความเข้าใจชุดค่าที่เป็นไปได้
เข้ารหัสความเข้าใจของคุณลงในสคีมาข้อมูล ตัวอย่างกฎมีดังนี้
- ตรวจสอบว่าคะแนนที่ผู้ใช้ส่งอยู่ในช่วง 1 ถึง 5 เสมอ
- ตรวจสอบว่าคําว่า the ปรากฏบ่อยที่สุด (สําหรับฟีเจอร์ข้อความภาษาอังกฤษ)
- ตรวจสอบว่าฟีเจอร์เชิงหมวดหมู่แต่ละรายการได้รับการตั้งค่าเป็นค่าจากชุดค่าที่เป็นไปได้ซึ่งได้รับการกําหนดไว้
ทดสอบข้อมูลกับสคีมาข้อมูล สคีมาควรตรวจหาข้อผิดพลาดด้านข้อมูล เช่น
- ความผิดปกติ
- ค่าที่ไม่คาดคิดของตัวแปรเชิงหมวดหมู่
- การแจกแจงข้อมูลที่ไม่คาดคิด
เขียนการทดสอบ 1 หน่วยเพื่อตรวจสอบวิศวกรรมฟีเจอร์
แม้ว่าข้อมูลดิบอาจผ่านสคีมาข้อมูล แต่โมเดลจะไม่ฝึกด้วยข้อมูลดิบ แต่โมเดลจะฝึกกับข้อมูลที่ผ่านการปรับแต่งฟีเจอร์ เช่น โมเดลจะฝึกด้วยฟีเจอร์ตัวเลขที่แปลงค่าให้เป็นมาตรฐานแทนข้อมูลตัวเลขดิบ เนื่องจากข้อมูลที่ได้รับการออกแบบฟีเจอร์อาจแตกต่างจากข้อมูลอินพุตดิบอย่างมาก คุณจึงต้องตรวจสอบข้อมูลที่ได้รับการออกแบบฟีเจอร์แยกต่างหากจากการตรวจสอบข้อมูลอินพุตดิบ
เขียนการทดสอบ 1 หน่วยตามความเข้าใจของคุณเกี่ยวกับข้อมูลที่ผ่านการวิศวกรรมฟีเจอร์ เช่น คุณสามารถเขียนการทดสอบ 1 หน่วยเพื่อตรวจสอบเงื่อนไขต่างๆ เช่น เงื่อนไขต่อไปนี้
- ฟีเจอร์ที่เป็นตัวเลขทั้งหมดจะปรับขนาด เช่น อยู่ระหว่าง 0 ถึง 1
- เวกเตอร์ที่เข้ารหัสแบบฮอตเดียวจะมีเฉพาะ 1 รายการและ 0 จำนวน N-1
- การแจกแจงข้อมูลหลังจากการเปลี่ยนรูปแบบเป็นไปตามที่คาดไว้ เช่น หากคุณได้ปรับให้เป็นมาตรฐานโดยใช้คะแนน z ค่ามัธยฐานของคะแนน z ควรเป็น 0
- ระบบจะจัดการค่าที่ผิดปกติ เช่น การปรับขนาดหรือการตัด
ตรวจสอบเมตริกสําหรับข้อมูลส่วนสําคัญ
บางครั้งภาพรวมที่ประสบความสำเร็จอาจบดบังภาพย่อยที่ไม่ประสบความสำเร็จ กล่าวคือ โมเดลที่มีเมตริกโดยรวมยอดเยี่ยมอาจยังคงทําการคาดการณ์ได้แย่ในบางสถานการณ์ เช่น
โมเดล Unicorn มีประสิทธิภาพโดยรวมดี แต่มีประสิทธิภาพต่ำเมื่อทำการคาดการณ์สำหรับทะเลทรายซาฮารา
หากคุณเป็นวิศวกรที่พอใจกับ AUC โดยรวมที่ยอดเยี่ยม คุณอาจไม่สังเกตเห็นปัญหาของโมเดลในทะเลทรายซาฮาร่า หากการคาดการณ์ที่ดีสําหรับทุกภูมิภาคมีความสําคัญ คุณจะต้องติดตามประสิทธิภาพของทุกภูมิภาค ส่วนย่อยของข้อมูล เช่น ข้อมูลที่เกี่ยวข้องกับทะเลทรายซาฮารา เรียกว่าข้อมูลส่วนย่อย
ระบุข้อมูลส่วนที่น่าสนใจ จากนั้นเปรียบเทียบเมตริกของโมเดลสําหรับข้อมูลส่วนเหล่านี้กับเมตริกของชุดข้อมูลทั้งหมด การตรวจสอบว่าโมเดลมีประสิทธิภาพดีกับข้อมูลทุกกลุ่มจะช่วยขจัดอคติ ดูข้อมูลเพิ่มเติมได้ที่ความเป็นธรรม: การประเมินอคติ
ใช้เมตริกในชีวิตจริง
เมตริกรูปแบบไม่ได้วัดผลลัพธ์จริงของรูปแบบเสมอไป เช่น การเปลี่ยนแปลงไฮเปอร์พารามิเตอร์อาจเพิ่ม AUC ของโมเดล แต่การเปลี่ยนแปลงดังกล่าวส่งผลต่อประสบการณ์ของผู้ใช้อย่างไร หากต้องการวัดผลลัพธ์ในชีวิตจริง คุณต้องกําหนดเมตริกแยกต่างหาก เช่น คุณอาจสํารวจผู้ใช้โมเดลเพื่อยืนยันว่าผู้ใช้เห็นยูนิคอร์นจริงๆ เมื่อโมเดลคาดการณ์ไว้
ตรวจสอบความคลาดเคลื่อนระหว่างการฝึกและการให้บริการ
ความเอียงของข้อมูลการฝึกกับข้อมูลการนําเสนอหมายความว่าข้อมูลอินพุตระหว่างการฝึกแตกต่างจากข้อมูลอินพุตในการนําเสนอ ตารางต่อไปนี้อธิบายความเบี่ยงเบน 2 ประเภทที่สําคัญ
ประเภท | คำจำกัดความ | ตัวอย่าง | โซลูชัน |
---|---|---|---|
ความคลาดเคลื่อนของสคีมา | ข้อมูลอินพุตที่ใช้ฝึกและแสดงไม่เป็นไปตามสคีมาเดียวกัน | รูปแบบหรือการแจกแจงข้อมูลการแสดงผลจะเปลี่ยนแปลงไปขณะที่โมเดลยังคงฝึกด้วยข้อมูลเก่า | ใช้สคีมาเดียวกันเพื่อตรวจสอบข้อมูลการฝึกและการแสดงผล ตรวจสอบสถิติที่ไม่ได้ตรวจสอบโดยสคีมาของคุณแยกต่างหาก เช่น ส่วนหนึ่งของค่าที่ขาดหายไป |
ความเอียงของฟีเจอร์ | ข้อมูลที่ผ่านการวิศวกรรมจะแตกต่างกันระหว่างการฝึกและการแสดงผล | โค้ดการสร้างองค์ประกอบของฟีเจอร์จะแตกต่างกันระหว่างการฝึกและการแสดงผล ซึ่งจะสร้างข้อมูลที่ผ่านกระบวนการทางวิศวกรรมที่แตกต่างกัน | ใช้กฎทางสถิติเดียวกันในการฝึกอบรมและการแสดงข้อมูลที่ผ่านการวิศวกรรม ซึ่งคล้ายกับสคีมาที่มีค่าเบี่ยงเบน ติดตามจํานวนฟีเจอร์ที่ตรวจพบความเอียง และอัตราส่วนของตัวอย่างที่มีความเอียงต่อฟีเจอร์ |
สาเหตุของความคลาดเคลื่อนระหว่างการฝึกและการให้บริการอาจมองไม่เห็น พิจารณาข้อมูลที่มีให้โมเดลใช้ ณ เวลาการคาดการณ์เสมอ ในระหว่างการฝึก ให้ใช้เฉพาะฟีเจอร์ที่คุณจะใช้ได้เมื่อแสดง
แบบฝึกหัด: ทดสอบความเข้าใจ
สมมติว่าคุณมีร้านค้าออนไลน์และต้องการคาดการณ์ว่าจะได้รับรายได้เท่าใดในวันหนึ่งๆ เป้าหมาย ML ของคุณคือการคาดการณ์รายได้รายวันโดยใช้จํานวนลูกค้าเป็นฟีเจอร์
คําตอบ: ปัญหาคือคุณไม่ทราบจํานวนลูกค้า ณ เวลาการคาดการณ์ ก่อนที่ยอดขายของวันจะเสร็จสมบูรณ์ ดังนั้น ฟีเจอร์นี้จึงไม่มีประโยชน์ แม้ว่าจะคาดการณ์รายได้รายวันได้อย่างแม่นยำก็ตาม ที่เกี่ยวข้องกัน เมื่อคุณกำลังฝึกโมเดลและได้รับเมตริกการประเมินที่ยอดเยี่ยม (เช่น 0.99 AUC) ให้มองหาฟีเจอร์ประเภทนี้ที่อาจส่งผลต่อป้ายกำกับ
ตรวจสอบการเปิดเผยป้ายกำกับ
การรั่วไหลของป้ายกำกับหมายความว่าป้ายกำกับข้อมูลจริงที่คุณพยายามคาดการณ์ได้เข้าสู่ฟีเจอร์การฝึกโดยไม่ตั้งใจ บางครั้งการเปิดเผยข้อมูลแท็กก็ตรวจจับได้ยากมาก
แบบฝึกหัด: ทดสอบความเข้าใจ
สมมติว่าคุณสร้างโมเดลการจัดประเภทแบบไบนารีเพื่อคาดการณ์ว่าผู้ป่วยใหม่ในโรงพยาบาลเป็นมะเร็งหรือไม่ โมเดลของคุณใช้ฟีเจอร์ต่อไปนี้
- อายุของผู้ป่วย
- เพศของผู้ป่วย
- ภาวะทางการแพทย์ก่อนหน้านี้
- ชื่อโรงพยาบาล
- สัญญาณชีพ
- ผลการทดสอบ
- พันธุกรรม
ป้ายกำกับมีดังนี้
- บูลีน: ผู้ป่วยเป็นมะเร็งหรือไม่
คุณแบ่งพาร์ติชันข้อมูลอย่างระมัดระวังเพื่อให้ชุดการฝึกแยกออกจากชุดตรวจสอบและชุดทดสอบ โมเดลทำงานได้ดีอย่างยิ่งในชุดทดสอบและชุดตรวจสอบ เมตริกยอดเยี่ยมมาก แต่น่าเสียดายที่โมเดลทำงานได้แย่มากกับผู้ป่วยใหม่ในชีวิตจริง
คําตอบ: ฟีเจอร์หนึ่งของโมเดลคือชื่อโรงพยาบาล โรงพยาบาลบางแห่งมีความเชี่ยวชาญด้านการรักษาโรคมะเร็ง ในระหว่างการฝึกอบรม โมเดลได้เรียนรู้อย่างรวดเร็วว่าผู้ป่วยที่ส่งไปยังโรงพยาบาลบางแห่งมีแนวโน้มสูงที่จะเป็นโรคมะเร็ง ชื่อโรงพยาบาลจึงกลายเป็นฟีเจอร์ที่มีน้ำหนักมาก
ขณะทำการอนุมาน ผู้ป่วยส่วนใหญ่ยังไม่ได้รับการกำหนดให้ไปที่โรงพยาบาล ท้ายที่สุดแล้ว วัตถุประสงค์ของโมเดลคือการวินิจฉัยว่ามีหรือไม่มีโรคมะเร็ง จากนั้นจึงใช้การวินิจฉัยดังกล่าวเพื่อส่งผู้ป่วยไปยังโรงพยาบาลที่เหมาะสม ด้วยเหตุนี้ ฟีเจอร์ชื่อโรงพยาบาลจึงยังไม่พร้อมใช้งานในระหว่างการอนุมาน และโมเดลจึงต้องใช้ฟีเจอร์อื่นๆ
ตรวจสอบอายุของโมเดลตลอดไปป์ไลน์
หากข้อมูลการแสดงโฆษณาเปลี่ยนแปลงไปตามกาลเวลาแต่ไม่ได้ฝึกโมเดลใหม่เป็นประจำ คุณภาพของโมเดลก็จะลดลง ติดตามเวลานับตั้งแต่ที่ระบบได้ฝึกโมเดลใหม่ด้วยข้อมูลใหม่และตั้งค่าเกณฑ์อายุสำหรับการแจ้งเตือน นอกจากการตรวจสอบอายุของโมเดลเมื่อแสดงแล้ว คุณควรตรวจสอบอายุของโมเดลตลอดทั้งไปป์ไลน์เพื่อตรวจหาการหยุดชะงักของไปป์ไลน์
ทดสอบว่าน้ำหนักและเอาต์พุตของโมเดลมีความเสถียรทางตัวเลข
ในระหว่างการฝึกโมเดล น้ำหนักและเอาต์พุตของเลเยอร์ไม่ควรเป็น NaN (ไม่ใช่ตัวเลข) หรือ Inf (อินฟินิตี) เขียนการทดสอบเพื่อตรวจสอบค่า NaN และ Inf ของน้ำหนักและเอาต์พุตของเลเยอร์ นอกจากนี้ ให้ทดสอบว่าเอาต์พุตของเลเยอร์มากกว่าครึ่งไม่ได้เป็น 0
ตรวจสอบประสิทธิภาพของโมเดล
เครื่องมือคาดการณ์การเกิดยูนิคอร์นของคุณได้รับความนิยมมากกว่าที่คาดไว้ คุณได้รับคําขอการคาดการณ์จํานวนมากและมีข้อมูลการฝึกจํานวนมากขึ้น คุณคิดว่านี่เป็นเรื่องที่ยอดเยี่ยมจนกระทั่งพบว่าโมเดลใช้หน่วยความจําและเวลาในการฝึกมากขึ้นเรื่อยๆ คุณตัดสินใจที่จะตรวจสอบประสิทธิภาพของโมเดลโดยทําตามขั้นตอนต่อไปนี้
- ติดตามประสิทธิภาพของโมเดลตามเวอร์ชันของโค้ด โมเดล และข้อมูล การติดตามดังกล่าวจะช่วยให้คุณระบุสาเหตุที่แน่ชัดของประสิทธิภาพที่ลดลงได้
- ทดสอบขั้นตอนการฝึกต่อวินาทีของโมเดลเวอร์ชันใหม่เทียบกับเวอร์ชันก่อนหน้าและเทียบกับเกณฑ์คงที่
- ตรวจหาหน่วยความจำที่รั่วไหลโดยการตั้งเกณฑ์การใช้หน่วยความจำ
- ตรวจสอบเวลาในการตอบกลับของ API และติดตามเปอร์เซ็นต์ไทล์ แม้ว่าเวลาในการตอบกลับของ API อาจอยู่นอกเหนือการควบคุมของคุณ แต่การตอบกลับที่ช้าอาจส่งผลให้เมตริกในชีวิตจริงไม่ดี
- ตรวจสอบจำนวนคำค้นหาที่ตอบต่อวินาที
ทดสอบคุณภาพของโมเดลเวอร์ชันที่ใช้จริงกับข้อมูลที่แสดง
คุณได้ตรวจสอบโมเดลแล้ว แต่จะเกิดอะไรขึ้นหากสถานการณ์ในชีวิตจริง เช่น ลักษณะการทํางานของ Unicorn เปลี่ยนแปลงหลังจากบันทึกข้อมูลการตรวจสอบแล้ว คุณภาพของโมเดลที่แสดงก็จะลดลง อย่างไรก็ตาม การทดสอบคุณภาพในการแสดงโฆษณานั้นทําได้ยาก เนื่องจากข้อมูลในชีวิตจริงไม่ได้ติดป้ายกำกับเสมอไป หากข้อมูลการแสดงโฆษณาไม่มีป้ายกำกับ ให้ลองทดสอบต่อไปนี้
ตรวจสอบโมเดลที่แสดงความเบี่ยงเบนทางสถิติที่สําคัญในการคาดการณ์ ดูการแยกประเภท: ความลำเอียงในการคาดการณ์
ติดตามเมตริกในชีวิตจริงของโมเดล เช่น หากคุณกําลังจัดประเภทจดหมายขยะ ให้เปรียบเทียบการคาดการณ์กับจดหมายขยะที่ผู้ใช้รายงาน
ลดการเบี่ยงเบนระหว่างข้อมูลการฝึกและข้อมูลการนําเสนอโดยแสดงโมเดลเวอร์ชันใหม่ในการค้นหาเพียงบางส่วน ขณะที่ตรวจสอบรูปแบบการแสดงโฆษณาใหม่ ให้เปลี่ยนการค้นหาทั้งหมดเป็นเวอร์ชันใหม่ทีละน้อย
เมื่อใช้การทดสอบเหล่านี้ อย่าลืมตรวจสอบทั้งคุณภาพการคาดการณ์ที่ลดลงอย่างฉับพลันและช้าๆ
การสุ่ม
ทําให้ไปป์ไลน์การสร้างข้อมูลทําซ้ำได้ สมมติว่าคุณต้องการเพิ่มฟีเจอร์เพื่อดูว่าฟีเจอร์นั้นส่งผลต่อคุณภาพของโมเดลอย่างไร ชุดข้อมูลควรเหมือนกันทุกประการยกเว้นฟีเจอร์ใหม่นี้ เพื่อให้การทดสอบเป็นไปอย่างยุติธรรม ด้วยเหตุนี้ โปรดตรวจสอบว่าการสร้างข้อมูลแบบสุ่มสามารถทําให้เป็นแบบเชิงกำหนดได้ ดังนี้
- กำหนดข้อมูลเริ่มต้นให้กับโปรแกรมสร้างตัวเลขสุ่ม (RNG) การสร้างข้อมูลเริ่มต้นช่วยให้ RNG แสดงผลค่าเดียวกันตามลําดับเดิมทุกครั้งที่คุณเรียกใช้ ซึ่งจะสร้างชุดข้อมูลขึ้นมาใหม่
- ใช้คีย์แฮชแบบคงที่ การแฮชเป็นวิธีทั่วไปในการแยกหรือสุ่มตัวอย่างข้อมูล คุณสามารถแฮชตัวอย่างแต่ละรายการ และใช้จำนวนเต็มที่ได้เพื่อตัดสินใจว่าควรวางตัวอย่างนั้นไว้ในการแยกกลุ่มใด อินพุตของฟังก์ชันแฮชไม่ควรเปลี่ยนแปลงทุกครั้งที่คุณเรียกใช้โปรแกรมการสร้างข้อมูล อย่าใช้เวลาปัจจุบันหรือตัวเลขแบบสุ่มในแฮช เช่น หากต้องการสร้างแฮชอีกครั้งตามคําขอ
แนวทางข้างต้นใช้ได้กับทั้งการสุ่มตัวอย่างและการแยกข้อมูล
ข้อควรพิจารณาสำหรับการแฮช
ลองนึกภาพว่าคุณกําลังรวบรวมคําค้นหาใน Search และใช้การแฮชเพื่อรวมหรือยกเว้นคําค้นหา หากคีย์แฮชใช้เฉพาะข้อความค้นหา คุณจะรวมข้อความค้นหานั้นเสมอหรือยกเว้นข้อความค้นหานั้นเสมอในข้อมูลหลายวัน การรวมหรือยกเว้นคําค้นหาเสมอนั้นไม่ดีเนื่องจากเหตุผลต่อไปนี้
- ชุดการฝึกอบรมจะเห็นชุดข้อความค้นหาที่มีความหลากหลายน้อยลง
- ชุดการประเมินจะมีความยากเป็นพิเศษเนื่องจากจะไม่ทับซ้อนกับข้อมูลการฝึก ในทางปฏิบัติแล้ว ณ เวลาแสดงโฆษณา คุณจะเห็นการเข้าชมจริงบางส่วนในข้อมูลการฝึกอบรม ดังนั้นการประเมินของคุณจึงควรแสดงถึงข้อมูลดังกล่าว
แต่คุณสามารถแฮชคำค้นหา + วันที่แทน ซึ่งจะส่งผลให้เกิดการแฮชที่แตกต่างกันในแต่ละวัน