다음이 설명되어 있는지, 그리고 어느 것이 든 불균형 목표 변수를 가진 예측 모델을 배우는 타당한 방법처럼 들리는 지 아는 사람이 있습니까?
데이터 마이닝의 CRM 응용 프로그램에서 종종 긍정적 이벤트 (성공)가 대다수 (음수 클래스)에 비해 매우 드문 모델을 찾습니다. 예를 들어, 0.1 %만이 긍정적 인 관심 대상 (예 : 고객이 구매 한) 인 500,000 개의 인스턴스가있을 수 있습니다. 따라서 예측 모델을 작성하기위한 한 가지 방법은 모든 양의 클래스 인스턴스와 음의 클래스 인스턴스의 샘플 만 유지하여 양수 대 음수 클래스의 비율이 1에 가까워 지도록 데이터를 샘플링하는 것입니다 (25 %) -75 % 양성에서 음성으로). 오버 샘플링, 언더 샘플링, SMOTE 등은 문헌의 모든 방법입니다.
내가 궁금한 것은 위의 기본 샘플링 전략을 결합하지만 네거티브 클래스의 가방과 결합하는 것입니다.
- 모든 긍정적 클래스 인스턴스 유지 (예 : 1,000)
- 균형 잡힌 표본 (예 : 1,000)을 만들기 위해 음의 분류 사례를 표본 추출합니다.
- 모델 맞추기
- 반복
전에이 일을하는 사람 있어요? bagging이없는 것처럼 보이는 문제는 500,000 개가있을 때 네거티브 클래스의 인스턴스 1,000 개만 샘플링한다는 것은 예측 변수 공간이 희박하고 가능한 예측 변수 값 / 패턴의 표현이 없을 수 있다는 것입니다. 자루에 넣는 것이 도움이 될 것 같습니다.
나는 샘플 중 하나에 예측 변수에 대한 모든 값이 없을 때 rpart를 보았고 아무 것도 깨지지 않습니다 (그러한 예측 변수 값으로 인스턴스를 예측할 때 깨지지 않습니다).
library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))
이견있는 사람?
업데이트 : 실제 데이터 세트 (마케팅 다이렉트 메일 응답 데이터)를 가져 와서 무작위로 교육 및 유효성 검사로 나누었습니다. 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 번 반복했습니다. 그런 다음이 100 가지 모델 각각에 대한 검증 샘플의 경우 Y = 1의 확률을 예측했습니다. 최종 추정치에 대한 확률을 100으로 평균했습니다. 검증 세트에 대한 확률을 결정하고 각 decile에서 Y = 1 (모델의 순위 지정 능력을 추정하는 전통적인 방법) 인 경우의 백분율을 계산했습니다.
Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10))
성능은 다음과 같습니다.
이것이 자루에 넣지 않은 것과 비교하여 어떻게되는지 확인하기 위해 첫 번째 샘플만으로 유효성 검사 샘플을 예측했습니다 (모든 긍정적 인 경우와 동일한 크기의 임의 샘플). 명백하게, 표본 추출 된 데이터가 너무 적거나 과적 합되어 홀드 아웃 검증 표본에 효과적이지 않았습니다.
드문 경우와 큰 n과 p가있을 때 배깅 루틴의 효능 제안.