ไม่มีใครรู้ว่าสิ่งต่อไปนี้ได้รับการอธิบายและ (อย่างใดอย่างหนึ่ง) ถ้ามันดูเหมือนเป็นวิธีที่เป็นไปได้สำหรับการเรียนรู้รูปแบบการทำนายที่มีตัวแปรเป้าหมายที่ไม่สมดุลมาก?
บ่อยครั้งในการใช้งาน CRM ของการขุดข้อมูลเราจะหารูปแบบที่เหตุการณ์เชิงบวก (ความสำเร็จ) นั้นหายากมากเมื่อเทียบกับคนส่วนใหญ่ (ระดับลบ) ตัวอย่างเช่นฉันอาจมี 500,000 อินสแตนซ์ที่มีเพียง 0.1% ของระดับความสนใจเชิงบวก (เช่นลูกค้าที่ซื้อ) ดังนั้นเพื่อสร้างแบบจำลองการทำนายวิธีการหนึ่งคือการสุ่มตัวอย่างข้อมูลโดยที่คุณเก็บอินสแตนซ์ของคลาสที่เป็นบวกทั้งหมดและมีเพียงตัวอย่างของอินสแตนซ์คลาสที่เป็นค่าลบเพื่อให้อัตราส่วนของ 75% เป็นบวกถึงลบ) การสุ่มตัวอย่างการ Undersampling, SMOTE และอื่น ๆ เป็นวิธีการทั้งหมดในวรรณคดี
สิ่งที่ฉันอยากรู้คือการรวมกลยุทธ์การสุ่มตัวอย่างพื้นฐานด้านบน แต่กับการบรรจุของคลาสลบ
- รักษาอินสแตนซ์ของคลาสที่เป็นบวกทั้งหมด (เช่น 1,000)
- ตัวอย่างอินสแตนซ์คลาสเชิงลบเพื่อสร้างตัวอย่างที่สมดุล (เช่น 1,000)
- พอดีกับรุ่น
- ทำซ้ำ
ใครเคยได้ยินเรื่องนี้มาก่อน ปัญหาที่ดูเหมือนว่าไม่มีการบรรจุหีบห่อคือการสุ่มตัวอย่างคลาสเชิงลบเพียง 1,000 ครั้งเมื่อมี 500,000 คือพื้นที่ของตัวทำนายจะเบาบางและคุณอาจไม่ได้แสดงถึงค่า / รูปแบบของตัวทำนายที่เป็นไปได้ การบรรจุถุงดูเหมือนจะช่วยได้
ฉันดูที่ rpart และไม่มีสิ่งใด "หยุด" เมื่อตัวอย่างอย่างใดอย่างหนึ่งไม่มีค่าทั้งหมดสำหรับตัวทำนาย (ไม่แตกเมื่อทำนายอินสแตนซ์ด้วยค่าตัวทำนายเหล่านั้น:
library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))
ความคิดใด ๆ
UPDATE: ฉันใช้ชุดข้อมูลในโลกแห่งความเป็นจริง (ข้อมูลการตอบกลับการตลาดทางไปรษณีย์โดยตรง) และแบ่งพาร์ติชันแบบสุ่มเป็นการฝึกอบรมและการตรวจสอบความถูกต้อง มีผู้ทำนาย 618 คนและ 1 เป้าหมายไบนารี (หายากมาก)
Training:
Total Cases: 167,923
Cases with Y=1: 521
Validation:
Total Cases: 141,755
Cases with Y=1: 410
ฉันเอาตัวอย่างบวกทั้งหมด (521) จากชุดการฝึกอบรมและตัวอย่างสุ่มของตัวอย่างเชิงลบที่มีขนาดเท่ากันสำหรับตัวอย่างที่สมดุล ฉันพอดีกับต้นไม้ rpart:
models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")
ฉันทำขั้นตอนนี้ซ้ำ 100 ครั้ง จากนั้นทำนายความน่าจะเป็นของ Y = 1 ในกรณีของตัวอย่างการตรวจสอบความถูกต้องสำหรับแต่ละรุ่น 100 เหล่านี้ ฉันเฉลี่ยความน่าจะเป็น 100 เพียงอย่างเดียวสำหรับการประเมินขั้นสุดท้าย ฉันเลือกความน่าจะเป็นในชุดการตรวจสอบความถูกต้องและในแต่ละช่วงเวลาจะคำนวณเปอร์เซ็นต์ของกรณีที่ Y = 1 (วิธีการดั้งเดิมสำหรับการประเมินความสามารถในการจัดอันดับของแบบจำลอง)
Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10))
นี่คือประสิทธิภาพการทำงาน:
เพื่อดูว่าสิ่งนี้เปรียบเทียบกับการไม่บรรจุถุงได้อย่างไรฉันทำนายตัวอย่างการตรวจสอบความถูกต้องกับตัวอย่างแรกเท่านั้น (กรณีบวกทั้งหมดและตัวอย่างสุ่มที่มีขนาดเท่ากัน) เห็นได้ชัดว่าตัวอย่างข้อมูลมีขนาดเบาบางหรือเกินความเหมาะสมที่จะมีผลบังคับใช้ในตัวอย่างการตรวจสอบที่ถูกระงับไว้
เสนอแนะประสิทธิภาพของขั้นตอนการบรรจุถุงเมื่อมีเหตุการณ์ที่เกิดขึ้นน้อยและมีค่า n และ p