전문가시스템 추론 설계: 규칙 체이닝과 베이즈 업데이트를 언제 섞는가

전문가시스템의 지식베이스·추론엔진 구조와 순방향/역방향 규칙 체이닝, 조건부확률 기반 베이즈 업데이트를 결합하는 하이브리드 추론 설계를 Python 예시로 정리한다.

2026-08-13 · 최초 발행 2025-11-26

장애 로그가 네트워크·스토리지·애플리케이션 세 갈래 원인 후보를 동시에 가리킬 때, 시스템은 무엇을 근거로 하나를 고를까. 전문가시스템(Expert System)은 지식기반 AI의 대표 격으로, 전문가의 문제 해결 지식을 명시적으로 모델링하고 추론엔진으로 결론을 도출하는 시스템이다. 규칙 기반 추론과 조건부확률을 결합해 불확실성을 처리하는 메커니즘, 그리고 의사결정 자동화와 설명 가능성 사이의 균형이 이 글의 축이다.

지식베이스와 추론엔진이 하는 일

전문가시스템은 전문가의 문제 해결 지식을 규칙·사실·확률 정보로 결합해 모델링하고, 추론엔진이 이를 바탕으로 결론을 도출하는 지식기반 시스템이다. 핵심 구성은 지식베이스(KB), 작업기억(Working Memory), 추론엔진(Inference Engine), 설명기능(Explanation Facility), 지식획득·거버넌스 모듈이다. 조건부확률은 관찰 증거가 주어졌을 때 가설의 사후확률을 계산하는 역할을 하며, 규칙 매칭의 신뢰도를 보정하고 충돌을 해결하는 기준을 제공한다.

지식베이스는 IF-THEN 규칙, 사실, 온톨로지(Entity-Relation)로 도메인 지식을 표현하고, 규칙에 신뢰도(확신계수)나 확률·우도(likelihood)를 붙여 불확실성을 표준화한다. 추론엔진은 순방향(데이터 주도), 역방향(목표 주도), 하이브리드를 지원하며 확률적 추론기(베이즈 업데이트, 베이지안 네트워크)를 통합해 구성한다.

충돌이 나면 규칙 우선순위, 특이성 우선(specificity), 최신성(recency) 전략으로 해결하고, 상충하는 결론이 나오면 사후확률·효용 기반으로 선택한 뒤 설명을 붙인다. 설명 가능성은 Why/Why-not 질의 응답, 규칙 체인과 증거 기여도 제시, 확률 스코어·임계값·대안 가설 비교로 구현한다. 운영·거버넌스는 지식 버전관리, 테스트 스위트(리그레션/커버리지), 모델카드·변경 이력, 온라인 모니터링(정답률, 스루풋, 충돌 빈도), 롤백과 점진 배포로 받친다.

규칙 기반 추론: 순방향과 역방향

순방향 추론(Forward Chaining)은 입력 증거 → 규칙 전제 매칭 → 결과 사실 추가 → 고정점 수렴 순서로 진행한다. 실시간 이벤트 처리, 다수 증거 집계에 유리하다.

역방향 추론(Backward Chaining)은 목표 가설을 세우고 필요 전제를 재귀적으로 확인해 결론을 도출한다. 질의응답형 진단, 탐색 공간 축소에 유리하다.

여러 규칙이 동시에 적용 가능할 때는 우선순위·특이성·신뢰도·최근성을 조합한 점수로 갈등을 해결한다.

확률적 추론: 조건부확률과 베이즈 정리

조건부확률과 베이즈 정리는 P(H|E) ∝ P(E|H) × P(H)로 계산하고, 정규화로 사후확률의 합이 1이 되도록 맞춘다. 독립을 가정하면 여러 증거의 우도를 P(E1..En|H) = ∏ P(Ei|H)로 결합할 수 있다.

나이브 베이즈(Naive Bayes)는 조건부 독립을 가정해 빠르게 학습·추론하는, 기저선(baseline)으로 유용한 방법이다. 베이지안 네트워크(BN)는 DAG로 원인-결과의 인과 구조를 표현하고, 국소 조건부확률표(CPT)로 정교하게 추론한다. 결합 전략으로는 규칙으로 후보를 축소한 뒤 확률로 랭킹을 매기거나, 규칙의 신뢰도를 우도로 사용하는 방식을 쓴다.

입력은 사전확률 P(H), 증거별 우도 P(E|H), 관찰 증거 세트 E다. 처리는 베이즈 업데이트 → 사후확률 P(H|E) 계산 → 임계값 기반 의사결정 순으로 이어지고, 출력은 추천·진단·경고와 근거(규칙 체인, 증거 기여도)다. 예외 처리도 필요하다. 우도가 결측이면 라플라스 스무딩이나 백오프 규칙을 적용하고, 영확률이 발생하면 로그 확률 합산으로 언더플로를 방지하며 floor 확률을 둔다. 결론이 상충하면 기대효용(확률×비용/효익)을 최대화하는 쪽을 선택한다.

절차 다이어그램

매칭 있음매칭 없음아니오아니오사용자/센서 입력작업기억 업데이트규칙 전제 매칭충돌 집합 생성우선순위/특이성/신뢰도점수화규칙 실행 새로운 사실 추가확률 추론 필요?베이즈 업데이트 P(H|E)임계값/효용 충족?결정 생성추가 증거 요청/실험지식 부족 알림/전문가에스컬레이션설명 생성(규칙 체인+증거기여도)API/대시보드 출력

비교표: 추론 접근법 트레이드오프

접근법 성능(지연) 확장성 일관성 안정성(노이즈) 운영 편의 비고
순수 규칙 기반 낮음~중간 중간 높음(명시 규칙) 낮음(노이즈 민감) 높음(버전관리 용이) 설명성 최상
베이지안 네트워크 중간 중간 높음(모형화) 높음 중간(파라미터 관리 필요) 인과 모델 적합
하이브리드(규칙+확률) 중간 높음 중간~높음 높음 중간 실무 균형점

실무에서 어떻게 쓰이는가

IT 장애 원인분석(RCA)에서는 로그·메트릭 증거로 가설(네트워크, 스토리지, 애플리케이션)의 사후확률을 계산한다. 규칙으로 서비스 토폴로지 제약을 반영하고 베이즈로 노이즈를 흡수한다.

의료 초진 보조에서는 증상·검사 결과를 입력해 질환 후보 랭킹과 추가 검사를 제안한다. Why/Why-not과 기여도를 제공해 임상의의 신뢰를 확보한다.

신용 리스크 심사에서는 정책 규칙(컴플라이언스)과 확률 모델(PD 추정)을 결합한다. 기대손실 최소화 기준으로 자동 승인·보류를 결정한다.

산업 설비 예지정비에서는 조건 모니터링 규칙과 베이즈 업데이트로 고장 유형 확률을 추정해 부품 교체 우선순위와 계획 정비를 추천한다.

고객지원 트리아지에서는 증상 키워드·사용자 환경으로 해결 플레이북 규칙을 실행하고, 확률 랭킹으로 에스컬레이션 대상을 선별한다.

구현 예시: 베이즈 업데이트와 규칙 우선순위 결합

전제는 Python 3.10+이고 외부 라이브러리는 필요 없다. 증거-가설 우도 기반 베이즈 업데이트에 규칙 우선순위를 결합한 예시다.

# 실행 환경: Python 3.10+
from math import prod

# 1) 사전확률
priors = {"flu": 0.10, "cold": 0.30, "other": 0.60}

# 2) 우도 P(evidence|hypothesis)
likelihoods = {
    "fever": {"flu": 0.85, "cold": 0.30, "other": 0.10},
    "cough": {"flu": 0.70, "cold": 0.60, "other": 0.20},
    "aches": {"flu": 0.60, "cold": 0.25, "other": 0.10},
}

# 3) 규칙: (전제 집합, 결론, 우선순위)
rules = [
    ({"fever", "aches"}, "suggest_rest", 90),
    ({"fever", "cough"}, "consider_flu", 80),
    ({"cough"}, "consider_cold", 50),
]

def bayes_update(evidence: set[str]) -> dict[str, float]:
    # 결측 우도 스무딩
    eps = 1e-6
    numerators = {}
    for h, prior in priors.items():
        terms = []
        for e in evidence:
            p = likelihoods.get(e, {}).get(h, eps)
            terms.append(max(p, eps))
        numerators[h] = prior * prod(terms) if terms else prior
    Z = sum(numerators.values())
    return {h: (v / Z if Z > 0 else 0.0) for h, v in numerators.items()}

def fire_rules(evidence: set[str]):
    applicable = [(prem, concl, prio) for prem, concl, prio in rules if prem.issubset(evidence)]
    applicable.sort(key=lambda x: (-x[2], -len(x[0])))
    return applicable[:2]  # 상위 2개

# 관찰 증거
obs = {"fever", "cough"}

post = bayes_update(obs)
top_hyp = sorted(post.items(), key=lambda x: -x[1])
fired = fire_rules(obs)

print("Posterior:", post)
print("Top hypotheses:", top_hyp[:2])
print("Fired rules:", fired)
# 임계값 기반 의사결정 예시
if post["flu"] >= 0.5 or any(c == "consider_flu" for _, c, _ in fired):
    print("Action:", "진단키트 추천 및 휴식 권고")

배치와 온라인 모두 사용할 수 있지만, 온라인은 증거 스트림 누적 관리가 따로 필요하다. 로그 확률을 쓸 때는 언더플로를 방지하고, 규칙·확률을 변경할 때는 버전 태깅과 A/B 검증을 거치는 편이 안전하다.

도입 절차와 검증된 개선폭

목표 정의·KPI 설정 단계에서는 범위, 의사결정 유형, SLA·지연 한도, 설명성 요구 수준을 명시한다. 지식 획득과 모델링 단계에서는 SME 인터뷰·플레이북 수집 → 규칙 정규화 → 용어사전·온톨로지 정의를 거치고, 우도·사전확률은 과거 데이터·전문가 엘리시테이션·베이즈 사전으로 추정한다.

추론 설계·검증 단계에서는 순방향/역방향/하이브리드 중 선택하고 충돌 해결 전략을 세운 뒤, 테스트 시나리오와 카테고리 커버리지, 반례 세트를 구축한다. 배포와 모니터링 단계에서는 API 게이트웨이화, 캐시 전략, 피크 대비 스케일링을 갖추고 정확도·Top-1/Top-3 히트율·설명 수용도·평균 처리시간을 품질 지표로 삼는다. 거버넌스와 지속 개선 단계에서는 변경 승인 프로세스, 블라인드 평가, 데이터·지식 드리프트 알림, 사후 리포트와 플레이북 업데이트 루프를 돌린다.

이렇게 도입하면 도메인·품질에 따라 편차는 있지만 평균 처리시간 2050% 단축, 1차 해결률 1025%p 개선, 에스컬레이션 15~30% 감소를 기대할 수 있다. 설명 가능한 의사결정으로 신뢰를 확보하고, 규칙과 확률을 분리해 유지보수성을 높이는 정성적 효과도 함께 따라온다.

전문가시스템추론엔진베이지안네트워크조건부확률규칙기반시스템