파이썬 ROC 커브, AUC 영역 구하기 예제
삼각형 면적의 일반 공식 삼각형의 면적을 구하는 공식은 아주 단순합니다. 제일 초급 공식이 밑변과 높이가 주어졌을 때 쓰는 (밑변 * 높이)/2 가 있습니다. 양변의 길이와 두 변 사이의 각이 주어졌을 때는 이 사안을 푸는 방법은 기울기를 구하는 초급 수학 기술부터 벡터의 cross product나 적분을 사용하는 방법까지 다양합니다. (1) 직선의 기울기 가장 기본적인 방법으로는 즉각적으로 위에 소개한 두 변 사이의 각을 활용한 공식을 사용하는 것입니다.
사이 각은 점 (0,0)과 점 (3.1)을 잇는 직선의 기울기 그리고 점(0,0)과 점(1,2)를 직선의 기울기를 구한 후 기울기의 actan 값으로 직선과 X축이 완성하는 각을 구한 후 두 각의 차이를 계산하면 됩니다.
정적분 계산
부정적분 산출 결과를 이용하여 주어진 그래프 아래의 면적에 해당하는 정적분 값도 계산이 가능합니다. 예시로, 위의 함수에서 2에서 5까지 정적분을 진행한 다음과 같은 값을 계산해 보겠습니다. $$ int_{2}^{5} e^x + 2 x^2 + 3x + 4; dx$$ 값의 대입은 선언한 함수의 subs 메소드에서 subs(변수, 값) 형태로 지정해주시면 됩니다. F = sy.integrate(f, x)# x에 관하여 2~5 범위에서 정적분 값 계산F.subs(x, 5) – F.subs(x, 2)
만일, 소수점 형태로 결과를 반환받고 싶다면 evalf() 메소드를 추가 실행해주시면 됩니다.
ROC 커브 그리기
테스트셋 판단 결과에 대한 ROC 커브를 그리기 위하여 우선, 테스트셋 데이터에 대한 라벨 판단 값을 받아오도록 하겠습니다. y_score = model.predict(X_test) # 테스트 데이터셋에 대한 판단 값# 앞 5개 값 출력 예시print(y_score[:5]) # [0.62168355 0.17803853 0.27512068 1.1320503 1.11698318]
사이킷런의 roc_curve 함수로 추정 threshold별 FP rate 및 TP rate를 즉각적으로 구할 수 있습니다.
input은 (실제 라벨, 판단 값) 순서로 지정해주시면 되며, 출력 값은 순서로 FP rate, TP rate, threshold value를 의미합니다. (판단 회귀 값이 threshold보다.
AUC 공간 구하기
AUC는 ROC 커브 아래의 면적을 의미하는데, 0 ~ 1 사이의 값을 가지며, 1에 가까울수록 모델 분류 성능이 좋음을 의미합니다. AUC 면적에 대한 값은 사이킷런의 roc_auc_score 함수로 단순하게 구할 수 있습니다. input은 roc_curve 함수와 마찬가지로 (실제 라벨, 판단 값) 순서로 지정해주시면 됩니다. from sklearn.metrics import roc_auc_scoreprint(roc_auc_score(y_test, y_score)) # 0.985260399606944
해당 예제의 AUC 면적은 약 0.985 이상으로 측정되었습니다.
같이보시면 좋은글
자주 묻는 질문
정적분 계산
부정적분 산출 결과를 이용하여 주어진 그래프 아래의 면적에 해당하는 정적분 값도 계산이 가능합니다. 자세한 내용은 본문을 참고 해주시기 바랍니다.
ROC 커브 그리기
테스트셋 판단 결과에 대한 ROC 커브를 그리기 위하여 우선, 테스트셋 데이터에 대한 라벨 판단 값을 받아오도록 하겠습니다. 더 알고싶으시면 본문을 클릭해주세요.
AUC 공간 구하기
AUC는 ROC 커브 아래의 면적을 의미하는데, 0 1 사이의 값을 가지며, 1에 가까울수록 모델 분류 성능이 좋음을 의미합니다. 관심이 생기다 내용은 본문을 참고하시기 바랍니다.