''' 📁 risk_manage_engine/risk_scorer.py 여러 리스크 지표를 종합하여 종합 리스크 점수를 계산하는 모듈 정규화 및 안정성 고려한 계산 방식 적용 ''' import numpy as np # 안정성 유지를 위한 정규화 함수 def normalize(value, min_val, max_val): if max_val == min_val: return 0.0 # 모든 값이 동일한 경우 → 중립값 return (value - min_val) / (max_val - min_val) def compute_risk_score(risk_values: dict) -> float: """ 입력된 리스크 지표들을 기반으로 종합 리스크 점수를 계산합니다. Parameters: risk_values (dict): 각 리스크 지표들의 원시 값 예: {'var': 0.02, 'svar': 0.03, 'atr': 0.015, 'monte_carlo': 0.05} Returns: score (float): 0 ~ 100 사이의 리스크 점수 (높을수록 안정적) """ # 기준 범위 지정 (샘플 기준) expected_ranges = { 'var': (0.01, 0.10), 'svar': (0.01, 0.12), 'atr': (0.005, 0.05), 'monte_carlo': (0.01, 0.20) } weights = { 'var': 0.25, 'svar': 0.25, 'atr': 0.25, 'monte_carlo': 0.25 } score = 0 for key, value in risk_values.items(): min_v, max_v = expected_ranges.get(key, (0, 1)) norm = normalize(value, min_v, max_v) inverted = 1 - norm # 위험이 낮을수록 점수는 높아야 함 weighted = inverted * weights.get(key, 0.25) score += weighted return round(score * 100, 2) # 점수를 0~100 범위로 환산