ฝึกอบรมโครงสร้างการตัดสินใจเทียบกับข้อมูลที่ไม่สมดุล


43

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

ข้อมูลประกอบด้วยนักเรียนที่เรียนหลักสูตรและตัวแปรระดับคือสถานะของหลักสูตรที่มีสองค่า - ถอนตัวหรือปัจจุบัน

  • อายุ
  • เชื้อชาติ
  • เพศ
  • หลักสูตร
    ...
  • สถานะของหลักสูตร

ในชุดข้อมูลมีอินสแตนซ์อีกมากมายซึ่งเป็นปัจจุบันกว่าถอนออก การถอนอินสแตนซ์นั้นคิดเป็นเพียง 2% ของอินสแตนซ์ทั้งหมด

ฉันต้องการสร้างแบบจำลองที่สามารถทำนายความน่าจะเป็นที่คน ๆ หนึ่งจะถอนตัวในอนาคต อย่างไรก็ตามเมื่อทำการทดสอบแบบจำลองกับข้อมูลการฝึกอบรมความแม่นยำของแบบจำลองนั้นแย่มาก

ฉันมีปัญหาที่คล้ายกันกับต้นไม้การตัดสินใจที่ข้อมูลถูกครอบงำโดยหนึ่งหรือสองชั้น

ฉันจะใช้วิธีใดในการแก้ปัญหานี้และสร้างลักษณนามที่แม่นยำยิ่งขึ้น


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

คำตอบ:


61

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

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

นี่เป็นปัญหาสำคัญเนื่องจากชุดข้อมูลที่ไม่สมดุลอาจนำไปสู่การประเมินประสิทธิภาพที่สูงเกินจริง สิ่งนี้อาจนำไปสู่ข้อสรุปที่ผิดพลาดเกี่ยวกับความสำคัญซึ่งอัลกอริทึมทำงานได้ดีกว่าโอกาส

วรรณกรรมการเรียนรู้ด้วยเครื่องจักรในหัวข้อนี้ได้พัฒนากลยุทธ์การแก้ปัญหาสามประการ

  1. คุณสามารถเรียกคืนความสมดุลในชุดการฝึกอบรมโดยundersamplingชั้นขนาดใหญ่หรือโดยoversamplingชั้นขนาดเล็กเพื่อป้องกันไม่ให้เกิดอคติจากในสถานที่แรก

  2. หรือคุณสามารถแก้ไขค่าใช้จ่ายของการจัดประเภทตามที่ระบุไว้ในการตอบกลับก่อนหน้าอีกครั้งเพื่อป้องกันอคติ

  3. เพิ่มเติมคุ้มครองคือการเปลี่ยนความถูกต้องโดยที่เรียกว่าความถูกต้องสมดุล มันถูกกำหนดให้เป็นค่าเฉลี่ยเลขคณิตของความถูกต้องเฉพาะระดับที่และแสดงถึงความแม่นยำที่ได้รับจากตัวอย่างบวกและลบตามลำดับ หากตัวจําแนกทํางานได้ดีเท่ากันในแต่ละคลาสเทอมนี้จะลดความแม่นยําทั่วไป (เช่นจํานวนการทำนายที่ถูกต้องหารด้วยจํานวนการคาดการณ์ทั้งหมด) ในทางตรงกันข้ามหากความแม่นยำแบบดั้งเดิมมีโอกาสสูงกว่าเท่านั้นเนื่องจากตัวจําแนกใช้ประโยชน์จากชุดการทดสอบแบบไม่สมดุลย์ความถูกต้องแบบสมดุลจะลดลงถึงโอกาสตามความเหมาะสมตามความเหมาะสมπ+π-ϕ:=12(π++π),π+π

ความแม่นยำและความแม่นยำที่สมดุล

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

ฉันยินดีที่จะโพสต์การอ้างอิงเพิ่มเติมไปยังวรรณกรรมหากคุณต้องการติดตามเรื่องนี้


3
Broder - ขอบคุณสำหรับข้อมูลรายละเอียด นั่นเป็นประโยชน์จริงๆ! ฉันเริ่มลองใช้ฟังก์ชันการขุดข้อมูลใน SQL Server อย่างไรก็ตามตามคำแนะนำของคุณฉันเปลี่ยนไปใช้ R. ฉันใช้อัลกอริทึม SMOTE เพื่อปรับสมดุลชุดข้อมูลและลองใช้ทั้งต้นไม้ตัดสินใจและ SVM DTs ให้ความแม่นยำสมดุล 81% และดียิ่งขึ้นด้วย SVM แม้ว่าคำถามหนึ่ง - ฉันควรทดสอบแบบจำลองกับชุดข้อมูลซึ่งมีข้อมูล rebalancd ด้วยหรือไม่ หรือควรทดสอบกับข้อมูลมากกว่าแบบเดิมหรือไม่
chrisb

2
นี่เป็นสิ่งที่ดีที่จะได้ยิน เกี่ยวกับคำถามของคุณ: คุณไม่ต้องการสมดุลข้อมูลการทดสอบของคุณ สิ่งนี้จะทำให้เกิดการประเมินผลการปฏิบัติงานของคุณเนื่องจากคุณจะทดสอบตัวอย่างสองครั้ง (ในกรณีที่มีการสุ่มตัวอย่างมากเกินไป) หรือละเว้นตัวอย่างบางส่วนจากการทดสอบ (ในกรณีที่มีการสุ่มตัวอย่างต่ำ) โดยสรุปคุณต้องการสร้างความสมดุลให้กับชุดการฝึกอบรมของคุณ (แยกจากกันภายในแต่ละการตรวจสอบความถูกต้องไขว้) แต่จากนั้นทำการทดสอบข้อมูลการทดสอบที่ไม่เปลี่ยนแปลง (อาจไม่สมดุล)
Kay Brodersen

ขอบคุณพี่ชาย การทำนั้นทำให้ภาพแตกต่างกับสิ่งต่าง ๆ ความแม่นยำสมดุลลดลงประมาณ 56% ความไวลดลงถึง 17% สำหรับรุ่นที่ดีที่สุดของฉัน (ตรงกับระดับที่ฉันต้องได้รับการทำนายที่ดีขึ้น) ฉันคิดว่านี่เป็นเหตุผลเพราะคลาสที่มีขนาดใหญ่เกินไปคือคลาสนั้นดังนั้นตัวอย่างเหล่านั้นจะถูกนับหลายครั้ง ฉันจะพยายามเพิ่มความสมดุลของชุดข้อมูลการฝึกอบรมเพื่อดูว่าจะสร้างความแตกต่างได้หรือไม่
chrisb

หลังจากทดสอบด้วยสัดส่วนข้อมูลที่แตกต่างกันความแม่นยำสมดุลที่ดีที่สุดที่ฉันจะได้รับคือ Ada Boost 60% ฉันกำลังดิ้นรนเพื่อพิจารณาว่า "ดี" คืออะไร เป้าหมายหลักของฉันคือการทำนายนักเรียนที่อาจถอนตัวออกจากหลักสูตรของพวกเขา ด้วยการถอนตัวจากการเป็นชนชั้นบวกของฉันฉันได้พยายามเพิ่มจำนวนผลบวกที่แท้จริงของฉันให้มากที่สุด (เช่นเพิ่มความไว) การปรับสมดุลข้อมูลจะทำให้ความเสียหายของจำนวนเชิงลบผิดพลาด 60% ดูเหมือนจะไม่ดีไปกว่าการสุ่มสำหรับฉัน - แต่ฉันไม่มีพื้นฐานสำหรับสิ่งที่ "ดี" ในกรณีนี้
chrisb

2
@chrisb นี่เป็นความเห็นสายเล็กน้อย (!) ในการสัมผัสกันคุณสามารถลองการถดถอยของ Cox Proportional Hazards ( cran.r-project.org/doc/contrib/Fox-Companion/… ) เพื่อจำลองการเอาตัวรอดของนักเรียนของคุณ คุณอาจไม่จำเป็นต้องดาวน์หรือสุ่มตัวอย่างมากเกินไป
Zhubarb

8

แนวคิดสี่ข้อต่อไปนี้อาจช่วยคุณจัดการปัญหานี้ได้

  1. เลือกการวัดประสิทธิภาพที่เหมาะสมจากนั้นปรับค่าพารามิเตอร์ในแบบจำลองของคุณ - เพื่อให้เป็นมาตรฐาน - เพื่อให้ได้ผลลัพธ์ที่น่าพอใจในชุดข้อมูลการตรวจสอบความถูกต้องและเมื่อพอใจให้ทดสอบแบบจำลองของคุณบนชุดข้อมูลการทดสอบ สำหรับวัตถุประสงค์เหล่านี้ให้แยกส่วน 15% ของข้อมูลของคุณที่จะใช้สำหรับการตรวจสอบความถูกต้องของข้อมูลและ 15% สำหรับใช้ในการทดสอบขั้นสุดท้าย เป็นวัดที่ก่อตั้งขึ้นในเครื่องการเรียนรู้สนับสนุนโดยแอนดรู Ng เป็นสถิติ F1 ที่กำหนดไว้เป็นจำ} พยายามที่จะเพิ่มตัวเลขนี้ในชุดข้อมูลการตรวจสอบความถูกต้องข้ามและตรวจสอบให้แน่ใจว่าประสิทธิภาพการทำงานที่มั่นคงในชุดข้อมูลการทดสอบเช่นกัน2PrecisionRecallPrecision+Recall

  2. ใช้พารามิเตอร์ 'ก่อนหน้า' ในต้นไม้การตัดสินใจเพื่อแจ้งอัลกอริทึมของความถี่ก่อนหน้าของคลาสในชุดข้อมูลนั่นคือถ้ามี 1,000 ผลบวกในชุดข้อมูล 1,000,0000 ชุดprior = c(0.001, 0.999)(ใน R)

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

  4. ใช้อาร์กิวเมนต์ 'cost' ในอัลกอริธึมการจัดหมวดหมู่บางอย่าง - เช่นrpartใน R - เพื่อกำหนดต้นทุนสัมพัทธ์สำหรับการจำแนกประเภทของการบวกเชิงบวกและเชิงลบที่แท้จริง คุณควรกำหนดค่าใช้จ่ายสูงสำหรับการจำแนกคลาสที่หายาก

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


2

ฉันให้คำตอบในหัวข้อล่าสุด :

สิ่งที่เราทำคือเลือกตัวอย่างที่มีสัดส่วนต่างกัน ในตัวอย่างข้างต้นนั่นจะเป็น 1,000 กรณีของ "YES" และตัวอย่างเช่น 9000 ของกรณี "NO" วิธีการนี้ช่วยให้แบบจำลองมีเสถียรภาพมากขึ้น อย่างไรก็ตามต้องมีการทดสอบกับตัวอย่างจริง (ที่มี 1,000,000 แถว)

ไม่เพียง แต่จะช่วยให้แนวทางมีเสถียรภาพมากขึ้นเท่านั้น แต่แบบจำลองโดยทั่วไปยังดีกว่าเท่าที่มีการคำนึงถึงการยก

คุณสามารถค้นหาว่าเป็น "การสุ่มตัวอย่างในสถิติ" ผลลัพธ์แรกค่อนข้างดี: http://www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf


1

การเพิ่มกลยุทธ์ของโซลูชั่นที่ 1 ของ @Kay คำตอบ: Synthetic Minority Oversampling ( SMOTE ) มักจะทำได้ดีกว่าหรือต่ำกว่าการสุ่มตัวอย่างจากประสบการณ์ของฉันเพราะฉันคิดว่ามันเป็นการประนีประนอมระหว่างทั้งสอง มันสร้างตัวอย่างสังเคราะห์ของคลาสของชนกลุ่มน้อยโดยใช้จุดข้อมูลที่พล็อตบนพื้นที่ของตัวทำนายหลายตัวแปรและใช้จุดกึ่งกลางระหว่างจุดที่อยู่ติดกันบนพื้นที่นั้นมากขึ้นหรือน้อยลงเพื่อสร้างจุดสังเคราะห์ใหม่ (ไม่แน่ใจในจุดกึ่งกลางรายละเอียดของอัลกอริทึมที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.