AI에게 몬스터 진단법을 가르치며 깨달은 인간 추론의 본질

keyword_148

“이 괴물의 증상이 정확히 뭐야? 뿔이 굽었어, 아니면 피부가 푸른색이야?” 모니터 너머로 쏟아지는 데이터셋을 보며 스스로에게 던진 질문이었다. 현실의 질병이 아닌, 가상의 몬스터들이 앓는 가상의 질병을 진단하는 모델을 만드는 일은 단순한 유희를 넘어 AI가 어떻게 ‘분류’하고 ‘추론’하는지를 실험하는 가장 순수한 방법처럼 느껴졌다.

상상 속의 질병과 데이터의 구조

보통의 의료 AI가 실제 환자의 MRI 영상이나 혈액 검사 수치를 학습한다면, 나의 몬스터 진단 AI는 ‘뿔의 각도’, ‘비늘의 광택’, ‘포효의 데시벨’ 같은 가상의 특징값(Feature)을 학습해야 했다. 딥러닝 모델이 실제 질병을 진단할 때 사용하는 체계적인 접근 방식을 차용하여, 몬스터의 외형적 특징과 증상을 매칭하는 분류기를 설계하기로 했다.

가장 먼저 한 일은 몬스터의 상태를 정의하는 JSON 형식의 데이터셋을 구축하는 것이었다. 예를 들어, ‘화염 드래곤’이 ‘냉기 감기’에 걸렸을 때 나타나는 특징을 {"symptom": "blue_smoke", "temperature": 45.5, "scale_color": "pale_grey"}와 같이 수치화했다. AI는 이 숫자들의 조합 속에서 특정 패턴을 찾아내어 어떤 몬스터가 어떤 병에 걸렸는지 확률적으로 계산하게 된다.

하지만 여기서 흥미로운 문제가 발생했다. AI는 데이터에 나타난 상관관계만으로 정답을 맞히기 때문에, 정작 몬스터의 생물학적(가상의) 인과관계는 완전히 무시했다. 단순히 ‘푸른 연기’가 나오면 99% 확률로 ‘냉기 감기’라고 진단하는 식이었다. 이는 인간이 전문가가 되어가는 과정, 즉 단순 암기가 아니라 원리를 이해하는 과정과는 완전히 다른 경로였다.

몬스터 진단 모델 구축하기

실제로 이 실험을 구현하기 위해 파이썬의 Scikit-learn 라이브러리를 활용한 간단한 랜덤 포레스트(Random Forest) 분류기를 사용했다. 복잡한 딥러닝 모델보다 결정 트리 기반의 모델을 선택한 이유는, AI가 어떤 기준으로 몬스터의 병명을 결정했는지 ‘의사결정 경로’를 시각적으로 확인할 수 있기 때문이었다.

모델을 구축하고 실행하는 과정은 다음과 같았다.

  1. 가상 몬스터 증상 데이터셋(CSV)을 준비하고 pandas를 통해 로드한다.
  2. 특징값(Feature)과 정답 레이블(Target)을 분리하여 학습 데이터와 테스트 데이터로 나눈다.
  3. RandomForestClassifier를 생성하고 하이퍼파라미터를 설정하여 학습시킨다.
  4. 새로운 몬스터의 증상을 입력하여 진단 결과와 확률을 출력한다.

아래는 실제로 모델을 학습시키고 특정 몬스터의 증상을 진단하는 핵심 코드 조각이다.

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# 1. 데이터 로드 (몬스터 특징: 뿔길이, 체온, 비늘색_코드, 포효강도)
data = pd.read_csv('monster_health_data.csv')
X = data[['horn_length', 'body_temp', 'scale_code', 'roar_db']]
y = data['disease_name']

# 2. 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 모델 학습 (결정 트리 100개 사용)
clf = RandomForestClassifier(n_estimators=100, max_depth=5)
clf.fit(X_train, y_train)

# 4. 새로운 몬스터 진단 (예: 뿔 15cm, 체온 32도, 비늘코드 2, 포효 80dB)
new_monster = [[15.2, 32.1, 2, 80.5]]
prediction = clf.predict(new_monster)
probability = clf.predict_proba(new_monster)

print(f"진단 결과: {prediction[0]} (확률: {max(probability[0])*100:.2f}%)")

실행 도중 ValueError: Found input variable with inconsistent number of samples 같은 에러가 발생했다면, 이는 학습 데이터와 테스트 데이터의 행 수가 맞지 않거나 결측치(NaN)가 포함되었을 가능성이 크다. 이럴 때는 data.dropna()를 통해 빈 값을 제거하거나 SimpleImputer로 평균값을 채워 넣는 과정이 필수적이다.

AI가 가르쳐준 인간의 ‘모름’에 대하여

모델의 정확도가 95%를 넘어섰을 때, 나는 묘한 상실감을 느꼈다. AI는 정답을 맞혔지만, 왜 그 답이 나왔는지에 대한 ‘맥락’은 없었다. 이는 전문가들이 흔히 겪는 ‘지식의 저주’와 정반대의 지점이었다. 숙련된 인간 전문가는 자신이 무엇을 모르는지 잊어버리지만, AI는 처음부터 ‘모른다는 감각’ 자체가 없기에 단순히 확률적인 최적값을 제시할 뿐이었다.

인간의 추론은 비유와 은유를 통해 확장된다. 예를 들어, 우리가 새로운 질병을 마주했을 때 “이건 예전에 봤던 A 질병과 비슷하게 진행되네”라고 추론하는 방식이다. 하지만 AI에게 몬스터의 질병은 그저 다차원 공간상의 좌표값 차이일 뿐이었다. 몬스터라는 메타포를 통해 AI를 가르치려 했지만, 정작 배운 것은 인간이 가진 ‘직관’과 ‘공감적 추론’이 얼마나 복잡하고 귀한 메커니즘인가 하는 점이었다.

결국 AI 모델을 고도화하는 작업은 기술적인 튜닝보다, 인간이 세상을 범주화하는 방식을 데이터라는 언어로 얼마나 정교하게 번역하느냐의 싸움에 가깝다. max_depth 옵션을 조절해 모델의 과적합(Overfitting)을 막는 행위조차, 사실은 AI에게 “너무 세세한 것에 집착하지 말고 일반적인 규칙을 찾아라”라는 인간의 사고방식을 강요하는 과정이었던 셈이다.

추론의 경계에서 다음으로 나아갈 방향

이번 실험을 통해 깨달은 점은 AI가 정답을 맞히는 능력보다, 그 정답에 이르는 ‘설명 가능성(Explainability)’이 훨씬 중요하다는 것이다. 단순히 “이 몬스터는 냉기 감기입니다”라고 말하는 AI보다, “뿔의 온도가 평소보다 10도 낮고 비늘의 색이 변했기 때문에 냉기 감기로 추정됩니다”라고 근거를 제시하는 AI가 인간에게는 훨씬 더 신뢰감을 주기 때문이다.

다음에 시도해보고 싶은 것은 LLM(거대언어모델)의 Chain-of-Thought(사고의 사슬) 기법을 적용해, AI가 스스로 진단 과정을 단계별로 서술하게 만드는 것이다. 단순히 숫자를 분류하는 것을 넘어, 가상의 몬스터 생태학적 지식을 프롬프트에 주입했을 때 AI의 추론 과정이 얼마나 인간과 유사해질 수 있을지 궁금하다.

우리는 AI에게 지식을 가르치고 있다고 생각하지만, 사실은 AI라는 거울을 통해 우리가 어떻게 생각하고 판단하는지를 배우고 있는 것은 아닐까. 여러분이 만약 자신만의 가상 세계를 구축한다면, AI에게 가장 먼저 가르치고 싶은 ‘상식’은 무엇인가?

댓글 남기기