Rstudio에서 이탈 예측을위한 이진 로지스틱 회귀를 구축했습니다. 이 모델에 사용 된 불균형 데이터로 인해 가중치도 포함했습니다. 그런 다음 시도와 오류를 통해 최적의 컷오프를 찾으려고 노력했지만 연구를 완료하려면 최적의 컷오프를 찾기 위해 ROC 곡선을 통합해야합니다. 아래에서 모델 (fit2)을 빌드하는 데 사용한 스크립트를 제공했습니다. 무게는 'W'에 저장됩니다. 이는 이탈자를 잘못 식별하는 데 드는 비용이 이탈자가 아닌 사람을 잘못 식별하는 데 드는 비용보다 14 배 더 크다는 것을 의미합니다.
#CH1 logistic regression
library(caret)
W = 14
lvl = levels(trainingset$CH1)
print(lvl)
#if positive we give it the defined weight, otherwise set it to 1
fit_wts = ifelse(trainingset$CH1==lvl[2],W,1)
fit2 = glm(CH1 ~ RET + ORD + LVB + REVA + OPEN + REV2KF + CAL + PSIZEF + COM_P_C + PEN + SHOP, data = trainingset, weight=fit_wts, family=binomial(link='logit'))
# we test it on the test set
predlog1 = ifelse(predict(fit2,testset,type="response")>0.5,lvl[2],lvl[1])
predlog1 = factor(predlog1,levels=lvl)
predlog1
confusionMatrix(pred,testset$CH1,positive=lvl[2])
이 연구를 위해 pROC 패키지를 사용하여 의사 결정 트리에 대한 ROC 곡선도 작성했습니다. 그러나 물론 동일한 스크립트가 로지스틱 회귀에 대해 동일하게 작동하지 않습니다. 아래 스크립트를 사용하여 로지스틱 회귀에 대한 ROC 곡선을 만들었습니다.
prob=predict(fit2, testset, type=c("response"))
testset$prob=prob
library(pROC)
g <- roc(CH1 ~ prob, data = testset, )
g
plot(g)
그 결과 아래 ROC 곡선이 나타납니다.
이 ROC 곡선에서 최적의 컷오프를 얻으려면 어떻게해야합니까?
"최적"컷오프를 얻는 것은 모델 유형과 완전히 독립적이므로 pROC를 사용하여 다른 유형의 모델에서와 마찬가지로 얻을 수 있습니다. 와 coords
기능 :
coords(g, "best", transpose = FALSE)
또는 플롯에서 직접 :
plot(g, print.thres=TRUE)
이제 위의 내용은 민감도와 특이성의 합을 최대화합니다. 이것은 종종 너무 단순하며 사용 사례에 맞게 조정 된 "최적"에 대한 명확한 정의가 필요할 수 있습니다. 그것은 대부분이 질문의 범위를 벗어나지 만 시작점 으로 몇 가지 기본 옵션에 대한 좌표 기능 문서의 Best Thresholds 섹션을 살펴보아야 합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다