AI가 이상을 감지하면 경고 목록이 나타납니다. 보통은 심각도가 높은 순서로 나열됩니다.
심각도 순의 목록은 올바르게 보입니다. 다른 정렬 방법을 생각하기 어렵습니다. 그런데 위에서부터 살펴보면, 오탐(false positive)들이 섞여 있습니다. 게다가 오탐일수록 위에 있는 경우가 많습니다.
정렬 방식이 잘못된 것은 아닙니다. 정렬할 때 보고 있는 값이 하나 부족합니다. 부족한 것은 심각도의 세밀함이 아니라, 해당 경고가 얼마나 확실한지입니다.
본문에서는 빌딩 관리 업무 시스템(Python / FastAPI)에서 경고의 순위를 어떻게 매기고 있는지 최소 구현 예제와 함께 설명하겠습니다.
스코어 = 심각도의 가중치 × 신뢰도 + 종류별 가점
- 심각도의 가중치: critical / high / medium / low 4단계 -
- 신뢰도(確信度): 0~1. 해당 감지 로직이 얼마나 확실한가 -
- 종류별 가점: 감지 종류별로 부여하는 가점
곱셈과 덧셈을 조합한 형태입니다. 결과는 수치로 나오며, 내림차순으로 정렬된 것이 순위가 됩니다.
신뢰도는 경고 건별의 느낌이 아니라, 감지 메커니즘으로 결정됩니다. 실제 값을 두 가지 예시로 들어보겠습니다.
| 감지 | 신뢰도 | 이유 |
|---|
| 점검 기한 초과 | 0.98 | 기한 날짜와 오늘 날짜를 비교할 뿐입니다. 틀릴 수가 없습니다. |
| 제출 기한 임박 | 0.75 | 지난 제출 이력을 보고 있지 않기 때문에, 이미 제출된 것에도 경고가 발생합니다. |
같은 '기한'에 대한 이야기라도, 한쪽은 확실하고 다른 쪽은 오발생(false trigger)합니다. 심각도만으로 정렬하면, 이 차이가 순위에 반영되지 않습니다.
가중치와 경계값, 2건을 제외한 심각도와 신뢰도는 본문용 예시입니다.
from dataclasses import dataclass
# 가중치 값은 본문용 예시
SEVERITY_WEIGHT = {
이 순위는 제안입니다. 담당자는 낮은 우선순위의 건이라도 먼저 처리하여 완료할 수 있으며, 그 과정은 누가・언제・무엇을 변경했는지로 기록으로 남습니다. 그렇다면 어떤 작업은 AI의 제안에만 머물게 하고, 어떤 작업을 사람이 직접 실행해야 할까요? 저는 이를 '되돌릴 수 있는지', 그리고 '누구에게 도달하는지'라는 두 가지 질문만으로 분배하고 있습니다. 이 두 축의 정의와, 작업을 동사로 작성하여 세밀한 수준을 맞추는 방법을 Zenn에 정리해 두었습니다(이 장은 무료로 읽으실 수 있습니다).