ระบบ ML เวอร์ชันที่ใช้งานจริง: ไปป์ไลน์การตรวจสอบ

ยินดีด้วย คุณได้ติดตั้งใช้งานโมเดลยูนิคอร์นแล้ว โมเดลควรทำงานตลอด 24 ชั่วโมงทุกวันโดยไม่มีปัญหาใดๆ คุณต้องตรวจสอบไปป์ไลน์แมชชีนเลิร์นนิง (ML) เพื่อให้มั่นใจว่าไปป์ไลน์จะทำงานได้

เขียนสคีมาข้อมูลเพื่อตรวจสอบข้อมูลดิบ

หากต้องการตรวจสอบข้อมูล คุณควรตรวจสอบข้อมูลอย่างต่อเนื่องเทียบกับค่าทางสถิติที่คาดไว้โดยการเขียนกฎที่ข้อมูลต้องเป็นไปตามนั้น ชุดกฎนี้เรียกว่าสคีมาข้อมูล กำหนดสคีมาข้อมูลโดยทำตาม ขั้นตอนต่อไปนี้

  1. ทำความเข้าใจช่วงและการกระจายของฟีเจอร์ สําหรับฟีเจอร์เชิงหมวดหมู่ ให้ทําความเข้าใจชุดค่าที่เป็นไปได้

  2. เข้ารหัสความเข้าใจของคุณลงในสคีมาข้อมูล ตัวอย่างของ กฎมีดังนี้

    • ตรวจสอบว่าคะแนนที่ผู้ใช้ส่งมาอยู่ในช่วง 1-5 เสมอ
    • ตรวจสอบว่าคำว่า the ปรากฏบ่อยที่สุด (สำหรับฟีเจอร์ข้อความภาษาอังกฤษ)
    • ตรวจสอบว่าฟีเจอร์เชิงหมวดหมู่แต่ละรายการตั้งค่าเป็นค่าจากชุดค่าที่เป็นไปได้ที่กำหนดไว้
  3. ทดสอบข้อมูลกับสคีมาข้อมูล สคีมาควรตรวจหาข้อผิดพลาดของข้อมูล เช่น

    • ความผิดปกติ
    • ค่าที่ไม่คาดคิดของตัวแปรเชิงหมวดหมู่
    • การกระจายข้อมูลที่ไม่คาดคิด

เขียนการทดสอบ 1 หน่วยเพื่อตรวจสอบความถูกต้องของการออกแบบฟีเจอร์

แม้ว่าข้อมูลดิบอาจผ่านสคีมาข้อมูล แต่โมเดลจะไม่ได้รับการฝึก จากข้อมูลดิบ แต่โมเดลจะฝึกกับข้อมูลที่ได้รับการออกแบบฟีเจอร์ เช่น โมเดลจะฝึกกับฟีเจอร์ตัวเลขที่ปรับให้เป็นมาตรฐาน แทนที่จะเป็นข้อมูลตัวเลขดิบ เนื่องจากข้อมูลที่ได้รับการออกแบบฟีเจอร์อาจแตกต่างจากข้อมูลอินพุตดิบมาก คุณจึงต้องตรวจสอบข้อมูลที่ได้รับการออกแบบฟีเจอร์แยกต่างหากจากการตรวจสอบข้อมูลอินพุตดิบ

เขียนการทดสอบหน่วยตามความเข้าใจเกี่ยวกับข้อมูลที่ได้รับการออกแบบฟีเจอร์ เช่น คุณสามารถเขียนการทดสอบหน่วยเพื่อตรวจสอบเงื่อนไขต่างๆ เช่น เงื่อนไขต่อไปนี้

  • ฟีเจอร์ที่เป็นตัวเลขทั้งหมดจะได้รับการปรับขนาด เช่น ระหว่าง 0 ถึง 1
  • เวกเตอร์เข้ารหัสแบบ One-hot มีค่า 1 เพียงค่าเดียวและมีค่า 0 จำนวน N-1 ค่า
  • การกระจายข้อมูลหลังการเปลี่ยนรูปแบบเป็นไปตามที่คาดไว้ เช่น หากคุณแปลงข้อมูลให้เป็นมาตรฐานโดยใช้คะแนน Z ค่าเฉลี่ยของคะแนน Z ควรเป็น 0
  • ค่าผิดปกติ จะได้รับการจัดการ เช่น โดยการปรับขนาด หรือการตัด

ตรวจสอบเมตริกสำหรับกลุ่มข้อมูลที่สำคัญ

บางครั้งความสำเร็จโดยรวมอาจบดบังความล้มเหลวในส่วนย่อย กล่าวคือ โมเดลที่มีเมตริกโดยรวมดีอาจยังคงให้การคาดการณ์ที่แย่ใน บางสถานการณ์ เช่น

โมเดลยูนิคอร์นของคุณทำงานได้ดีโดยรวม แต่ทำงานได้ไม่ดีเมื่อ ทำการคาดการณ์สำหรับทะเลทรายซาฮารา

หากคุณเป็นวิศวกรที่พึงพอใจกับ AUC โดยรวมที่ยอดเยี่ยม คุณอาจไม่สังเกตเห็นปัญหาของโมเดลในทะเลทรายซาฮารา หากการคาดการณ์ที่แม่นยำสำหรับทุกภูมิภาคเป็นสิ่งสำคัญ คุณก็ต้องติดตามประสิทธิภาพของทุกภูมิภาค ส่วนย่อยของข้อมูล เช่น ส่วนที่สอดคล้องกับทะเลทรายซาฮารา เรียกว่าชิ้นข้อมูล

ระบุกลุ่มข้อมูลที่สนใจ จากนั้นเปรียบเทียบเมตริกของโมเดลสำหรับข้อมูลที่แบ่งส่วนเหล่านี้กับเมตริกของชุดข้อมูลทั้งหมด การตรวจสอบว่าโมเดลทํางานได้ดีในทุกกลุ่มข้อมูล จะช่วยกําจัดอคติ ดูข้อมูลเพิ่มเติมได้ที่ ความเป็นธรรม: การประเมินอคติ

ใช้เมตริกในโลกแห่งความเป็นจริง

เมตริกของโมเดลไม่ได้วัดผลกระทบในโลกแห่งความเป็นจริงของโมเดลเสมอไป ตัวอย่างเช่น การเปลี่ยนไฮเปอร์พารามิเตอร์อาจเพิ่ม AUC ของโมเดล แต่การเปลี่ยนแปลงดังกล่าวส่งผลต่อประสบการณ์ของผู้ใช้อย่างไร หากต้องการวัดผลลัพธ์ในโลกแห่งความเป็นจริง คุณต้องกําหนดเมตริกแยกต่างหาก ตัวอย่างเช่น คุณอาจสำรวจผู้ใช้โมเดล เพื่อยืนยันว่าผู้ใช้เห็นยูนิคอร์นจริงๆ เมื่อโมเดลคาดการณ์ว่าผู้ใช้จะเห็น

ตรวจสอบความคลาดเคลื่อนระหว่างการฝึกและการให้บริการ

ความคลาดเคลื่อนระหว่างการฝึกและการแสดง หมายความว่าข้อมูลอินพุตระหว่างการฝึกแตกต่าง จากข้อมูลอินพุตในการแสดง ตารางต่อไปนี้อธิบายความเบ้ 2 ประเภทที่สำคัญ

ประเภท คำจำกัดความ ตัวอย่าง โซลูชัน
ความคลาดเคลื่อนของสคีมา ข้อมูลอินพุตสำหรับการฝึกและการแสดงผลไม่เป็นไปตามสคีมาเดียวกัน รูปแบบหรือการกระจายข้อมูลการแสดงโฆษณาเปลี่ยนแปลง ในขณะที่โมเดลยังคงฝึกกับข้อมูลเก่า ใช้สคีมาเดียวกันเพื่อตรวจสอบข้อมูลการฝึกและข้อมูลการแสดง ตรวจสอบว่าคุณได้ตรวจสอบสถิติที่ไม่ได้ตรวจสอบโดย สคีมาของคุณแยกต่างหากแล้ว เช่น เศษส่วนของค่าที่ขาดหายไป
ความเบ้ของฟีเจอร์ ข้อมูลที่ได้รับการออกแบบจะแตกต่างกันระหว่างการฝึกและการแสดง โค้ดการออกแบบฟีเจอร์จะแตกต่างกันระหว่างการฝึกและการแสดงผล ซึ่งจะสร้างข้อมูลที่ออกแบบแตกต่างกัน ใช้กฎทางสถิติเดียวกันในการฝึก และแสดงข้อมูลที่ได้รับการออกแบบ เช่นเดียวกับความเบี่ยงเบนของสคีมา ติดตามจำนวน ฟีเจอร์ที่ตรวจพบว่ามีความเอนเอียง และอัตราส่วนของตัวอย่างที่เอนเอียงต่อฟีเจอร์

สาเหตุของความคลาดเคลื่อนระหว่างการฝึกและการให้บริการอาจเป็นเรื่องเล็กน้อย พิจารณาเสมอว่าโมเดลของคุณมีข้อมูลใดบ้างในเวลาที่ทำการคาดการณ์ ในระหว่างการฝึก ให้ใช้เฉพาะฟีเจอร์ที่คุณจะใช้ได้เมื่อแสดงโฆษณา

แบบฝึกหัด: ทดสอบความเข้าใจ

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

คุณอาจพบปัญหาใดบ้าง
คลิกที่นี่เพื่อดูคำตอบ

ตรวจสอบการรั่วไหลของป้ายกำกับ

การรั่วไหลของป้ายกำกับหมายความว่าป้ายกำกับความจริงพื้นฐานที่คุณพยายามคาดการณ์ได้เข้าสู่ฟีเจอร์การฝึกโดยไม่ตั้งใจ บางครั้งการตรวจหาการรั่วไหลของป้ายกำกับก็เป็นเรื่องยากมาก

แบบฝึกหัด: ทดสอบความเข้าใจ

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

  • อายุของผู้ป่วย
  • เพศของผู้ป่วย
  • ภาวะทางการแพทย์ก่อนหน้า
  • ชื่อโรงพยาบาล
  • สัญญาณชีพ
  • ผลการทดสอบ
  • กรรมพันธุ์

ป้ายกำกับมีดังนี้

  • บูลีน: ผู้ป่วยเป็นมะเร็งไหม

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

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

ตรวจสอบอายุของโมเดลตลอดทั้งไปป์ไลน์

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

ทดสอบว่าน้ำหนักและเอาต์พุตของโมเดลมีความเสถียรเชิงตัวเลข

ในระหว่างการฝึกโมเดล น้ำหนักและเอาต์พุตเลเยอร์ไม่ควรเป็น NaN (ไม่ใช่ตัวเลข) หรือ Inf (อนันต์) เขียนการทดสอบเพื่อตรวจสอบค่า NaN และ Inf ของน้ำหนักและเอาต์พุตเลเยอร์ นอกจากนี้ ให้ทดสอบว่าเอาต์พุตมากกว่าครึ่งหนึ่งของเลเยอร์ไม่ใช่ 0

ตรวจสอบประสิทธิภาพของโมเดล

เครื่องมือทำนายการปรากฏตัวของยูนิคอร์นได้รับความนิยมมากกว่าที่คาดไว้ คุณได้รับคำขอการคาดการณ์จำนวนมากและข้อมูลการฝึกที่มากขึ้น คุณอาจคิดว่าดีจนกระทั่งรู้ว่าโมเดลใช้หน่วยความจำและเวลาในการฝึกมากขึ้นเรื่อยๆ คุณตัดสินใจที่จะตรวจสอบประสิทธิภาพของโมเดลโดยทำตามขั้นตอนต่อไปนี้

  • ติดตามประสิทธิภาพของโมเดลตามเวอร์ชันของโค้ด โมเดล และข้อมูล การติดตามดังกล่าว ช่วยให้คุณระบุสาเหตุที่แน่ชัดของการลดประสิทธิภาพได้
  • ทดสอบขั้นตอนการฝึกต่อวินาทีสำหรับโมเดลเวอร์ชันใหม่เทียบกับเวอร์ชันก่อนหน้าและเทียบกับเกณฑ์คงที่
  • ตรวจหาหน่วยความจำรั่วโดยการตั้งค่าเกณฑ์สำหรับการใช้หน่วยความจำ
  • ตรวจสอบเวลาในการตอบกลับของ API และติดตามเปอร์เซ็นไทล์ แม้ว่าเวลาในการตอบกลับของ API อาจอยู่นอกเหนือการควบคุมของคุณ แต่การตอบกลับที่ช้าอาจทำให้เมตริกในโลกแห่งความเป็นจริงไม่ดี
  • ตรวจสอบจำนวนคำค้นหาที่ตอบต่อวินาที

ทดสอบคุณภาพของโมเดลที่ใช้งานจริงในข้อมูลที่แสดง

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

  • สร้างป้ายกำกับโดยใช้ผู้ให้คะแนนที่เป็นมนุษย์

  • ตรวจสอบโมเดลที่แสดงอคติทางสถิติที่สำคัญในการคาดการณ์ ดู การจัดประเภท: การคาดการณ์ อคติ

  • ติดตามเมตริกในโลกแห่งความเป็นจริงสำหรับโมเดล เช่น หากคุณจัดประเภทจดหมายขยะ ให้เปรียบเทียบการคาดการณ์กับจดหมายขยะที่ผู้ใช้รายงาน

  • ลดความแตกต่างที่อาจเกิดขึ้นระหว่างข้อมูลการฝึกและข้อมูลการแสดงผลโดย แสดงผลโมเดลเวอร์ชันใหม่ในเศษส่วนของคำค้นหา เมื่อตรวจสอบความถูกต้องของโมเดลการแสดงโฆษณาใหม่แล้ว ให้ค่อยๆ เปลี่ยนคำค้นหาทั้งหมดเป็นเวอร์ชันใหม่

ในการใช้การทดสอบเหล่านี้ โปรดอย่าลืมตรวจสอบทั้งการลดคุณภาพการคาดการณ์อย่างฉับพลันและการลดลงอย่างช้าๆ

การสุ่ม

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

  • เริ่มต้นโปรแกรมสร้างตัวเลขสุ่ม (RNG) การเริ่มต้นช่วยให้ RNG แสดงค่าเดียวกันตามลำดับเดิมทุกครั้งที่คุณเรียกใช้ ซึ่งจะสร้างชุดข้อมูลใหม่
  • ใช้คีย์แฮชที่ไม่เปลี่ยนแปลง การแฮชเป็นวิธีทั่วไปในการแยก หรือสุ่มตัวอย่างข้อมูล คุณสามารถแฮชตัวอย่างแต่ละรายการ และใช้จำนวนเต็มที่ได้เพื่อ ตัดสินใจว่าจะวางตัวอย่างไว้ในชุดข้อมูลใด อินพุตของฟังก์ชันแฮช ไม่ควรเปลี่ยนแปลงทุกครั้งที่คุณเรียกใช้โปรแกรมสร้างข้อมูล อย่าใช้เวลาปัจจุบันหรือตัวเลขสุ่มในแฮช เช่น หากต้องการสร้างแฮชใหม่ตามต้องการ

แนวทางข้างต้นใช้ได้ทั้งกับการสุ่มตัวอย่างและการแยกข้อมูล

ข้อควรพิจารณาสำหรับการแฮช

ลองนึกภาพอีกครั้งว่าคุณกำลังรวบรวมคำค้นหาใน Search และใช้การแฮช เพื่อรวมหรือยกเว้นคำค้นหา หากคีย์แฮชใช้เฉพาะการค้นหา ในข้อมูลหลายวัน คุณจะรวมการค้นหานั้นเสมอหรือยกเว้นการค้นหานั้นเสมอ การรวมหรือยกเว้นคำค้นหาเสมอเป็นสิ่งที่ไม่ควรทำเนื่องจากเหตุผลต่อไปนี้

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

แต่คุณสามารถแฮชในคำค้นหา + วันที่ของคำค้นหา ซึ่งจะทำให้เกิดการแฮชที่แตกต่างกันในแต่ละวัน

รูปที่ 7 ภาพการแสดงข้อมูลแบบเคลื่อนไหวที่แสดงให้เห็นว่าการแฮชในคำค้นหาเพียงอย่างเดียวทำให้ข้อมูลไปอยู่ในที่เก็บข้อมูลเดียวกันในแต่ละวัน แต่การแฮชในคำค้นหาบวกเวลาของคำค้นหาทำให้ข้อมูลไปอยู่ในที่เก็บข้อมูลที่แตกต่างกันในแต่ละวัน โดยมี 3 กลุ่ม ได้แก่ การฝึก การประเมิน และ
            ไม่สนใจ
รูปที่ 7 การแฮชในคำค้นหาเทียบกับการแฮชในคำค้นหา + วันที่ค้นหา