cutoffvalue_make function

olxtar·2022년 11월 27일
0

Comment :

이진분류(Binary Classification), 즉 지원대상자(=1), 미지원대상자(=0)을 예측하는 모델에서 Cut-off value를 계속 수정하고 체크해야되는 케이스가 많았다.
(이는 고객과 사업단의 생각 차이에서 나오는것이긴 한데... 예를들어 상위 5,000번째 or 상위 10% 의 probability 값을 Cut-off로 쓸것인지...)

따라서 간편하게 Cut-off value를 뽑을 수 있는 Function 하나 만듦



def cutoffvalue_make(p_array,
					 rank,
                     pct):
                     
	"""
    param p_array: 모델의 예측값 NumPy Array(probability 0~1)
    param rank: 상위 ?번째
    param pct: True일 경우, rank가 상위 ?퍼센트로 됨 ex) rank=0.2 -> 상위 20%
    return: 입력 p_array의 상위 rank(번째 or 퍼센트)의 probability value
    """
    
    # 내림차순으로 입력 p_array 정렬
    p_array_sorted = np.sort(p_array)[::-1]
    
    len_p = len(p_array)
    print(f"예측값 총 {len_p} 건")
    
    if pct:
    	rank_idx = int(len_p * rank)  # 상위 ?퍼센트
        cutoff_val = p_array_sorted[rank_idx]
        print(f"상위 {rank*100}({rank_idx}번째) %의 probability value: {cutoff_val}")
        
    else:
    	cutoff_val = p_array_sorted[rank-1]
        print(f"상위 {rank}번째의 probability value: {cutoff_val}")
        
    return cutoff_val

사용 예시

# 시나리오 1 테스트 데이터셋의 상위 25% probability값
S1_25pct_cutoff = cutoffvalue_make(p_array = S1_test_p,
								   rank = 0.25,
                                   pct = True)
예측값 총 21349건
상위 25.0(5337번째) %의 probability value: 0.23665015399456024
profile
예술과 기술

0개의 댓글