
최근 Kaggle의 Intermediate Machine Learning 코스를 듣다가 XGBoost에 대해 배우게 되었는데,
이게 의외로 한의학의 '선혈(選穴)' 과정과 굉장히 비슷하다는 생각이 들었다.
선혈은 말 그대로 "침을 어디에 놓을 것인가?"를 결정하는 과정이다.
같은 어깨 통증이라도, 어떤 한의사는 견우에 침을 놓고, 어떤 한의사는 견정에 침을 놓는다.
아픈 부위가 어깨인데도 합곡, 후계처럼 손에 침을 놓는 경우도 있고, 심지어는 발끝에 놓기도 한다. 왜일까?
그 이유는 단순하지 않기 때문이다.
증상만 보는 게 아니라, 체질, 맥상, 동반 증상, 병력 등 다양한 조건을 종합적으로 판단하기 때문이다.
XGBoost는 "조건 기반 분기"를 반복적으로 만들어가는 트리 기반의 머신러닝 모델이다.
정형 데이터에서 성능이 좋고, 특히 조건이 복잡하고 상호작용이 많은 문제에서 잘 작동한다.
예를 들어 이런 식이다:
IF 통증 부위 == 어깨:
IF 방사통 있음:
IF 통증 강도 > 7:
선택: 합곡, 견우, 견정
ELSE:
선택: 견우, 후계
ELSE:
IF 체형 == 허약:
선택: 비수, 기해
ELSE:
선택: 대장경 중심
그림으로 나타내면 이런 식이다.

이 그림과 결정트리는 한의학을 잘 모르는 개발자인 내가 작성한 것이기 때문에, 내용은 정확하지 않고 그냥 참고용임을 알아주길 바란다.
아무튼! 이렇게 마치 한의사가 문진을 통해 진단을 내리는 것처럼,
XGBoost도 여러 조건을 고려하면서 최적의 예측을 한다.
선형 회귀 같은 모델은 다음과 같은 식으로 예측을 한다.
가격 = (10 × 방 수) + (5 × 평수) + 100
이처럼 모든 feature가 단순히 "더하거나 곱해지는" 식으로만 결과에 영향을 준다.
그래서 이런 모델은 예를 들어, "나이가 많을수록 무조건 질병 확률이 높다" 같은
단순하고 직선적인 결론밖에 낼 수 없다.
하지만 XGBoost는 조건에 따라 다른 판단을 한다.
예를 들어,
이런 복잡하고 분기적인 관계를 모델링할 수 있다.
즉, XGBoost는
| 항목 | 한의학 선혈 판단 | XGBoost |
|---|---|---|
| 진단 방식 | 조건에 따른 분기 | 조건문 트리 분기 |
| 개별화된 판단 | 체질, 동반 증상, 병력 등 고려 | feature 조합에 따른 분기 |
| 선혈 선택 기준 | 다단계 조건 조합 | 트리 기반 의사결정 |
"같은 증상이라도, 환자마다 다른 처방을 내리는 것"
이건 전통적인 선형적 사고로는 모델링하기 어렵다.
그래서 오히려 XGBoost처럼 조건에 따라 유연하게 판단하는 트리 기반 모델이 더 잘 어울린다고 느꼈다.
증상은 같은데, 조건이 조금씩 다를 경우 다음과 같이 트리 기반 판단이 다르게 작동할 수 있는 것이다.
| 조건 | 선택된 경혈 |
|---|---|
| 어깨통증 + 방사통 + 통증 강도 8 | 합곡, 견우, 견정 |
| 어깨통증 + 방사통 없음 + 체형 허약 | 비수, 기해 |
| 어깨통증 + 방사통 없음 + 체형 튼튼 | 대장경 위주 |
만약 한의학 진단 데이터를 충분히 수집할 수 있다면,
선혈 판단 과정을 XGBoost 모델로 재현해보는 것도 의미 있는 연구/실험이 될 수 있지 않을까?
한의학은 복잡하지만, 그렇기 때문에 더더욱
조건 기반 판단 구조를 가진 머신러닝 모델과 잘 어울릴지도 모르겠다.