부드러운 ROC 곡선, 미적분학과 곡률

R-Blogger · 블로그·해설 · 2025-12-15

R-Blogger블로그·해설한국어2025-12-15

부드러운 ROC 곡선, 미적분학과 곡률

평활화된 ROC 곡선, 미적분학 및 곡률데이터 과학에서 ROC(Receiver Operating Characteristic) 곡선은 이진 분류기의 성능을 평가하는 데 흔히 사용됩니다. 이 경우 데이터 세트는 보통 모집단에서 추출한 샘플이며, 따라서 ROC 곡선 자체가 난수 객체가 됩니다. 같은 분류기를 동일한 모집단의 여러 샘플 데이터 세트에 적용해 생성한 여러 샘플 ROC 곡선이 존재하는 경우가 드물지만, 다수의 샘플 ROC 곡선으로부터 평균 ROC 곡선을 구할 수 있다면 흥미로운 일이 될 것입니다. 이를 위해 함수형 데이터 분석(FDA)의 이론을 활용해 샘플 포인트를 이용해 곡선을 생성하고, 곡선 자체를 연구 대상인 난수 객체로 만드는 방법이 있습니다. FDA 프로세스의 첫 번째 단계는 일반적으로 스플라인을 사용해 베이스 함수 집합을 구성하고, 이를 통해 샘플 포인트를 함수형 객체로 평활화하는 것입니다. 이 글에서는 ROC 곡선 평활화의 첫 번째 단계에 대해 탐구하고, 평활화된 ROC 곡선이 구해지면 미적분학과 기본 차분 기하학의 개념을 사용해 곡선을 분석할 수 있음을 지적할 것입니다.연구 흐름분석에 사용할 데이터 세트 선택데이터 세트에 세 가지 이진 분류기 피팅 및 표준 ROC 곡선과 AUC 값 계산스플라인 베이스 함수를 사용해 ROC 곡선 평활화, 평활 곡선에 대한 AUC 및 아크 길이 계산 및 평활화 과정에서 발생할 수 있는 어려움 논의기본 분석 제공필요한 패키지library(tidymodels) # 모델링 및 평가 library(dplyr) # 데이터 조작 library(ggplot2) # 플롯 library(MASS) # Pima.tr library(mlbench) # 데이터 library(broom) library(pROC) # ROC 곡선 분석 library(patchwork) # 플롯 레이아웃 library(gt) # 표 library(katex) # 수식 렌더링 tidymodels_prefer()데이터 준비인공 데이터 세트인 two_class_dat(modeldata 패키지)와 Pima.tr(MASS 패키지), aSAH(pROC 패키지)를 사용합니다. 여기서는 aSAH2를 사용하지만, 한 줄의 코드를 바꾸면 다른 두 데이터 세트 중 하나를 쉽게 선택할 수 있습니다. 세 데이터 세트 모두 두 개의 수치형 특성(Feature)과 이진 클래스 라벨로 구성됩니다.# 데이터 세트 로드 및 전처리 data(two_class_dat, package = "modeldata") two_class_dat2 %>% mutate(Class = recode(Class, "Class1" = "1", "Class2" = "2")) data(Pima.tr, package = "MASS") Pima.tr2 %>% mutate(Class = type, Class = recode(Class, "Yes" = "2", "No" = "1")) %>% select(c(bmi, bp, Class)) data(aSAH, package = "pROC") aSAH2 %>% mutate(Class = outcome, Class = recode(Class, "Good" = "1", "Poor" = "2")) %>% select(c(s100b, ndka, Class))복제 가능성을 위해 시드를 설정합니다.set.seed(123)모델 피팅 및 ROC 곡선 계산선택한 데이터 세트에 대해 세 가지 모델(로지스틱 회귀, SVM, 결정 트리)을 피팅하고, 각 모델의 ROC 곡선과 AUC 값을 계산합니다.# 모델 피팅 예시 log_reg_fit %>% select(Class)) %>% mutate(model = "SVM") tree_preds %>% bind_cols(test_data %>% select(Class)) %>% mutate(model = "Decision Tree") # AUC 계산 및 모델 이름 재레이블 auc_tree %>% roc_curve(truth = Class, .pred_1) auc_data %>% group_by(model) %>% roc_auc(truth = Class, .pred_1)ROC 곡선 평활화와 분석스플라인 베이스 함수를 사용해 ROC 곡선을 평활화한 뒤, 평활 곡선에 대한 AUC와 아크 길이를 계산하고, 평활화 과정에서 발생할 수 있는 문제를 논의합니다.# 평활화 예시 (코드가 완전히 제공되지 않음) # 스플라인을 이용한 평활화 및 AUC, 아크 길이 계산 # ... (추가 구현 필요)위 과정에서 로지스틱 회귀 모델은 미세한 수치 노이즈 때문에 TPR 또는 FPR이 완전 단조적(monotone)이지 않을 수 있음을 확인합니다.# 모노톤성 검사 legend_labels %>% summarise(monotone_TPR = all(diff(TPR) = -1e-8), monotone_FPR = all(diff(FPR) = -1e-8), .groups = "drop") print(check_monotone) # 결과 예시 # A tibble: 3 × 3 # model_norm monotone_TPR monotone_FPR # <chr> <lgl> <lgl> # 1 Decision Tree TRUE TRUE # 2 Logistic Regression FALSE TRUE # 3 SVM TRUE TRUE요약 및 결론평활화된 ROC 곡선을 통해 미적분학과 곡률 개념을 적용하면 곡선의 기울기 변화를 정밀하게 파악하고, AUC보다 더 민감하게 곡선 형태를 분석할 수 있습니다. 이러한 접근은 이진 분류기의 성능을 보다 세밀하게 평가할 때 유용합니다.
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2025-12-15