This repository has been archived on 2025-06-07. You can view files and clone it, but cannot push or open issues or pull requests.
2025-05-06 21:23:04 +09:00

51 lines
1.5 KiB
Python

'''
📁 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 범위로 환산