베이지안 추리 게임
[♪ 밝은 음악]
이지은: 안녕하세요, '안개 속을 걷다'의 이지은입니다! 오늘도 불확실성과 친해지는 시간, 함께해요!
어제 정말 재미있는 방송을 봤어요. 요리 예능이었는데, 한식·중식·프렌치 요리 셰프 세 명을 먼저 소개하고, 그중 한 명이 뒤에서 요리를 만들어 내놓으면 출연자들이 맛만 보고 누구의 작품인지 맞히는 거예요.
한 출연자가 이렇게 말했어요. "달콤하면서도 매콤하고, 바삭한 식감... 이건 중식 셰프의 작품 같은데?" 그런데 다른 출연자는 "아니야, 한식 셰프가 자기 스타일로 만든 것 같아"라고 하고요.
이런 생각이 들더라고요. '어? 이거 완전히 베이지안 추론 문제잖아?'
[띠링!]
맞아요! 베이지안 눈으로 보면, 셰프는 모델, 셰프의 요리들은 가설, 음식 맛은 데이터인 거죠. 게임의 질문이 '무슨 요리인가'가 아니라 '누구의 요리인가'니까, 가설이 아닌 모델을 맞히는 추론 문제인 셈이에요. 한식 셰프인지, 중식 셰프인지, 프렌치 셰프인지, 세 가능성을 모두 열어두고 비교하는 거죠. 실제로 출연자들도 하나만 콕 찍지 않고, '중식 셰프 같긴 한데, 한식 셰프일 수도 있고...' 이렇게 여러 가능성을 동시에 저울질하더라고요.
우리도 이 문제를 한번 풀어볼까요? 출연자들은 직감으로 했지만, 우리에겐 그동안 배운 베이지안 추론이 있잖아요. 각 셰프일 가능성을 '한식 50%, 중식 30%, 프렌치 20%...' 이렇게 숫자로 표현하면서 추리해 보겠습니다!
Ep.10에서 우리는 베이즈 정리를 배웠습니다. '케이크가 촉촉한 건 버터를 얼마나 넣었기 때문일까?'라며 버터 50g, 150g, 250g 같은 여러 가설을 비교했죠. 그런데 사실 우리가 미처 의식하지 못한 전제가 하나 있었습니다. 바로 '이 케이크는 일반적인 케이크 레시피로 만들어졌다'는 것입니다. 만약 이 케이크가 비건 케이크라거나 오일로 만든 시폰 케이크라면 버터 함량에 대한 우리의 추론이 무의미해집니다. 우리가 항상 어떤 '모델'의 렌즈를 끼고 세상을 본다는 사실을 알아차리면, 렌즈를 바꿔볼 수도 있고, 더 나아가 여러 렌즈를 놓고 비교할 수도 있습니다.
여러 렌즈(모델)를 어떻게 체계적으로 비교할 수 있을까요?
Ep.10의 베이즈 정리를 다시 보면:
여기서 '가설' 자리에 '모델'을 넣으면 다음과 같이 모델 공간에 적용된 베이즈 정리가 됩니다:
형태가 완전히 같습니다! 쉽게 말해, 데이터를 보기 전 모델에 대한 믿음(사전 확률)을 데이터를 본 후의 믿음(사후 확률)으로 업데이트하는 공식입니다.
지금쯤 여러분은 조건부 확률 P(데이터|가설)을 순방향으로 읽으면 어떤 가설이 참일 때 여러 데이터를 관찰할 확률(%), 역방향으로 읽으면 어떤 데이터가 관찰되었을 때 여러 가설이 이 데이터를 얼마나 잘 설명하는지를 나타내는 점수(데이터 지지도)로 해석하는 것에 익숙해졌을 겁니다. (기억이 나지 않는 분은 Ep.9를 복습하세요.)
P(데이터|모델)도 마찬가지입니다. 순방향으로 읽으면 '이 모델이 참일 때, 각 데이터가 관찰될 확률은?'이고, 역방향으로 읽으면 '이 데이터가 관찰되었을 때, 각 모델이 얼마나 잘 설명하는가?'입니다. 역방향은 확률이 아니라 모델에 대한 점수, 즉 데이터 지지도가 됩니다. 이렇게 가설 수준과 모델 수준 모두에서 데이터 지지도가 등장하므로, 구분을 위해 기존의 데이터 지지도를 가설 데이터 지지도, P(데이터|모델)의 역방향을 모델 데이터 지지도라고 부르겠습니다. 가설 데이터 지지도가 개별 가설 하나의 설명력이라면, 모델 데이터 지지도는 그 모델에 속한 가설들의 설명력을 종합한 것입니다.
여기서 한 가지 짚고 넘어갈 것이 있습니다. 위의 첫 번째 수식에서 P(데이터)라고 썼던 것은 사실 P(데이터|모델)이었습니다. 인식하지 못했을 뿐, 우리는 늘 하나의 렌즈를 끼고 데이터를 바라보고 있었던 거죠. 이제 그 사실을 알았으니, 모델을 베이즈 정리에 명확히 표현하고, 여러 모델을 동시에 고려하며, 어떤 모델이 적절한지도 불확실성의 대상으로 다룹니다.
그렇다면 모델 데이터 지지도는 어떻게 계산할까요? Ep.5에서 배운 전체 확률의 법칙을 활용합니다. Ep.10에서 우리는 P(데이터)를 이렇게 계산했습니다:
방금 이 P(데이터)가 사실은 P(데이터|모델)이었다는 걸 알았으니, 각 항의 조건부에 '모델'을 추가하면:
여기서 Σ (시그마) 기호는 '모든 가설에 대해 더한다'는 뜻입니다. 쉽게 말해, 모델 데이터 지지도는 그 모델에 속한 모든 가설들의 데이터 지지도를 가중평균한 값입니다. 예를 들어 중식 셰프 모델에 탕수육, 라즈지, 깐풍기라는 가설들이 있다면, 각 요리가 데이터(맛)를 설명하는 정도에 그 요리의 사전 확률을 곱해서 모두 더하는 것입니다.
정리하면, 역방향 추론에서 P(데이터|가설)은 데이터가 가설을 얼마나 지지하는지 직접 평가하고, P(데이터|모델)은 가설들의 지지도를 가설의 사전 확률을 사용해 가중평균하며, P(데이터)는 모델들의 지지도를 모델의 사전 확률을 사용해 다시 가중평균합니다. 이제 데이터 지지도와 사전 확률을 베이즈 정리에 적용하면 베이지안 믿음 업데이트가 모델 수준과 가설 수준에서 동시에 일어납니다. 새로운 데이터의 효과는 물결처럼 퍼져나가 모든 층위의 믿음을 함께 조정합니다.
이제 셰프 맞히기 게임으로 돌아가 이 원리를 구체적으로 살펴봅시다. 후보 셰프는 세 명이고, 각 셰프는 자신의 대표 요리 세 가지 중 하나를 만들어야 합니다. 대표 요리 목록은 출연자들에게 미리 공개되었죠.
셰프마다 어떤 요리를 낼지는 알 수 없지만, 평소 성향을 바탕으로 사전 확률을 매겨볼 수 있습니다. 김 셰프는 한식 전문가로, 갈비찜이 간판 요리이니 갈비찜 40%, 닭갈비 30%, 잡채 30%. 이 셰프는 중식 전문가로, 깐풍기를 자주 선보이는 편이라 탕수육 30%, 라즈지(매콤한 고추 튀김닭) 30%, 깐풍기 40%. 마르탱 셰프는 프렌치 요리 전문가로, 코코뱅(와인 조림 닭)이 시그니처이니 코코뱅 40%, 치킨 프리카세(크림소스 스튜) 30%, 꼬르동 블뢰(치즈·햄을 넣은 튀김 커틀릿) 30%입니다.
우리가 맛본 요리의 특징은 '달콤하면서도 매콤하고, 바삭한 식감'입니다. 이제 각 요리가 이런 맛을 낼 가능성을 평가해 봅시다. (실제로는 첫 입에 어느 나라 음식인지 감이 오겠지만, 모델 수준에서의 베이지안 추론을 보여주기 위해 추론의 각 단계를 뜯어보겠습니다.)
이 셰프의 요리들부터 살펴보면, 탕수육은 달콤하고 바삭하지만 보통 매콤하지 않습니다. 세 가지 맛 중 두 가지만 일치하므로 40% 정도의 가능성을 부여합니다. 깐풍기는 고추·간장·설탕·식초 소스 덕에 매콤달콤한 맛이 뚜렷하고, 바삭한 튀김까지 갖춰 세 가지 맛을 가장 전형적으로 보여줍니다. 90%의 가능성을 부여합니다. 라즈지도 건고추를 듬뿍 사용해 강하게 매콤하고 바삭하게 튀겨내지만, 단맛은 은은한 수준이라 깐풍기보다는 한 발 뒤처져 85%입니다. 따라서 중식셰프 모델을 가정했을 때, 세 가설(탕수육, 라즈지, 깐풍기)에 대한 요리의 데이터 지지도는 각각 40점, 85점, 90점입니다. (이 수치들은 설명을 위해 가상으로 정한 것입니다. 더 현실적인 수치를 원한다면, 예를 들어 탕수육을 여러 번 먹어보고 '달콤+매콤+바삭' 조합이 나오는 빈도를 따져볼 수 있습니다.)
김 셰프의 한식 요리들은 어떨까요? 갈비찜은 간장 양념의 단맛은 있고 약간 매콤할 수 있지만 바삭함과는 거리가 멉니다. 20% 정도의 가능성을 부여합니다. 닭갈비는 고추장 양념 덕에 달콤하면서 매콤하지만 역시 바삭하지 않아 25%, 잡채는 약간 달콤할 수 있지만 매콤하거나 바삭하지 않아 15% 정도입니다. 한식셰프 모델의 세 가설(갈비찜, 닭갈비, 잡채)에 대한 데이터 지지도는 각각 20점, 25점, 15점입니다.
마르탱 셰프의 프렌치 요리는 더욱 어렵습니다. 코코뱅은 와인에 조린 닭요리로 달콤하지도, 매콤하지도, 바삭하지도 않습니다. 5%의 낮은 가능성만 부여합니다. 치킨 프리카세는 크림소스 요리로 역시 세 가지 맛과 거리가 있어 10%, 꼬르동 블뢰는 그나마 바삭한 겉면이 있어 15% 정도입니다. 프렌치셰프 모델의 세 가설(코코뱅, 치킨 프리카세, 꼬르동 블뢰)에 대한 데이터 지지도는 각각 5점, 10점, 15점입니다.
이제 각 셰프의 모델 데이터 지지도를 계산해 봅시다. 모델 데이터 지지도는 그 모델에 속한 가설들을 고려할 때 가설 데이터 지지도의 가중 평균입니다. 이 셰프(중식)부터 표로 정리해 볼까요?
같은 방식으로, 김 셰프는 40% × 20점 + 30% × 25점 + 30% × 15점 = 20점, 마르탱 셰프는 40% × 5점 + 30% × 10점 + 30% × 15점 = 9.5점입니다.
이제 모델에 대한 사전 확률을 정해봅시다. 맛을 보기 전, 출연자들에게 '직감적으로 누구의 요리일 것 같나요?'라고 물었더니 김 셰프 50%, 이 셰프 30%, 마르탱 셰프 20%라고 답했습니다. 김 셰프가 가장 유명해서, '맛있는 요리 = 김 셰프'라는 선입견이 작동한 거죠. (이 수치도 개인의 경험에 따라 달라질 수 있습니다. 사전 확률은 데이터를 보기 전의 주관적 믿음이니까요.)
이제 베이즈 정리를 적용합니다. 각 셰프의 사전 확률에 모델 데이터 지지도를 곱하고, 전체 합으로 나누어 정규화(전체 합이 100%가 되도록 조정)하면:
여기서 한 걸음 더 들어가 봅시다. 이 셰프일 확률이 65%로 가장 유력하다면, 그의 요리 중에서는 무엇일 가능성이 높을까요? 각 요리의 사전 확률과 가설 데이터 지지도를 곱해보면 탕수육은 30% × 40점 = 12점, 라즈지는 30% × 85점 = 25.5점, 깐풍기는 40% × 90점 = 36점입니다. 정규화하면 깐풍기 49%, 라즈지 35%, 탕수육 16%가 됩니다. 이렇게 모델(셰프)과 가설(요리)의 확률이 동시에 업데이트되는 것입니다!
전체 그림을 표로 정리해 봅시다. 표에서 '전체 확률'은 모델 확률에 모델 내 가설 확률을 곱한 값입니다. 예를 들어 사후 전체 확률에서 '이 셰프의 깐풍기'는 65%(모델 사후 확률) × 49%(모델 내 가설 사후 확률) = 32%가 됩니다. '모델 내 확률'은 각 모델 안에서 가설들의 합이 100%이고, '전체 확률'은 모든 가설의 합이 100%입니다.
사전에는 김 셰프가 50%로 가장 유력했지만, '달콤+매콤+바삭' 데이터를 관찰한 후 이 셰프가 65%로 역전했습니다. 전체 확률로 보면 '이 셰프의 깐풍기'가 32%로 9개 가설 중 가장 유력합니다.
이번엔 일상적인 예시로 한 번 더 연습해 봅시다. 평소 매일 연락하던 친구가 갑자기 3일째 연락이 안 됩니다. 무슨 일이 있는 걸까요? 다음 세 가지 모델을 생각해 보죠. 친구가 바쁘거나 아플 수 있고(개인 문제 모델), 내게 화가 났거나 서운해서일 수 있으며(관계 문제 모델), 어떤 이유로 내게 연락할 방법이 없을 수도 있습니다(연락 수단 문제 모델).
각 모델 안에서 구체적 가설과 사전확률을 생각해 보면, 개인 문제 모델에는 바쁨(60%), 아픔(30%), 기타(10%)가 있고, 관계 문제 모델에는 화남(50%), 서운함(30%), 거리두기(20%)가 있으며, 연락 수단 문제 모델에는 핸드폰 고장(70%), 앱/계정 오류(20%), 기타(10%)가 있습니다.
그런데 'SNS는 접속함, 다른 친구들과는 연락함, 내 메시지는 읽고 답이 없음'이라는 데이터를 관찰했습니다. 이 데이터를 각 가설이 얼마나 잘 설명하는지 평가해 봅시다.
개인 문제 모델부터 살펴보죠. 친구가 실제로 바쁘다면 이 데이터가 관찰될 확률은 30% 정도, 친구가 아프다면 10%, 다른 개인 사정이 있다면 20% 정도입니다. 역방향으로 읽으면 가설 데이터 지지도는 각각 30점, 10점, 20점입니다. 여기에 가설 사전 확률을 가중치로 사용해 모델 데이터 지지도를 계산하면 60% × 30점 + 30% × 10점 + 10% × 20점 = 18점 + 3점 + 2점 = 23점입니다.
관계 문제 모델은 어떨까요? 친구가 내게 화가 났다면 이 데이터가 관찰될 확률은 90%로 매우 높고, 서운하다면 85%, 거리를 두고 싶다면 80% 정도입니다. 역방향으로 읽으면 가설 데이터 지지도는 각각 90점, 85점, 80점입니다. 모델 데이터 지지도를 계산하면 50% × 90점 + 30% × 85점 + 20% × 80점 = 45점 + 25.5점 + 16점 = 86.5점이나 됩니다.
연락 수단 문제 모델은 어떨까요? 핸드폰이 고장 났는데 SNS는 되고 내 메시지만 못 볼 확률은 5%로 매우 낮고, 앱/계정 오류라면 10%, 다른 이유라면 5% 정도입니다. 역방향으로 읽으면 가설 데이터 지지도는 각각 5점, 10점, 5점입니다. 모델 데이터 지지도를 계산하면 70% × 5점 + 20% × 10점 + 10% × 5점 = 3.5점 + 2점 + 0.5점 = 6점에 불과합니다.
평소 친구와의 관계, 친구에 대해 알고 있는 지식을 바탕으로 모델 사전 확률을 정할 수 있습니다. 이 친구가 자주 바빴던 점을 고려해 개인 문제 50%, 큰 갈등은 없었으므로 관계 문제 30%, 가끔 핸드폰 문제가 있었으므로 연락 수단 문제 20%로 설정해 보죠.
모델 데이터 지지도에 모델 사전 확률을 곱해 각 모델의 가중 점수를 계산하면, 개인 문제는 50% × 23점 = 11.5점, 관계 문제는 30% × 86.5점 = 25.95점, 연락 수단 문제는 20% × 6점 = 1.2점이 됩니다. 정규화해서 모델 사후 확률을 구하면, 개인 문제 30%, 관계 문제 67%, 연락 수단 문제 3%입니다. 관계 문제일 가능성이 67%로 가장 높고, 관계 문제 모델 안에서도 '화남'이 사전 확률(50%)과 데이터 지지도(90점) 모두 가장 높으니 가장 유력하네요. 혹시 최근에 무심코 상처 주는 말을 하지 않았나 돌아봐야겠습니다.
아래 표는 데이터를 관찰하기 전(사전 확률)과 후(사후 확률)의 변화를 모델 수준과 가설 수준에서 동시에 보여줍니다.
이제까지 본 것처럼, 베이지안 추론은 여러 층위에서 동시에 작동합니다. 하나의 증거가 모델 수준의 믿음과 가설 수준의 믿음을 한꺼번에 업데이트합니다.
사실 우리는 베이즈 정리를 배우기 전에도 이미 이런 식으로 생각하고 있습니다. '친구가 연락을 안 한다'는 사실을 접하면, 먼저 큰 범주(개인 문제? 관계 문제? 연락 수단 문제?)를 떠올리고, 각 범주 안에서 구체적 이유를 생각합니다. 새로운 정보를 얻으면 두 수준의 믿음을 동시에 재조정하죠. 베이지안 사고는 이 자연스러운 과정을 수학적으로 체계화한 것입니다.
[♪ 차분한 음악]
이지은: 어떠셨나요? 하나의 렌즈 안에서 이리저리 조정하는 것과, 렌즈 자체를 여러 개 놓고 비교하는 것, 느낌이 다르죠?
오늘 다룬 베이지안 추론은 두 층위의 불확실성을 동시에 다뤄요. 모델들 사이의 확률 분포('어떤 셰프인가')와 각 모델 안에서 가설들의 확률 분포('어떤 요리인가')죠. 베이즈 정리를 적용하면 하나의 증거로 이 두 분포를 한꺼번에 업데이트할 수 있어요. 아주 편리하지 않나요?
[띠링!]
오늘의 미션! '나만의 셰프 맞히기 게임'
일상에서 설명하고 싶은 현상 하나를 정하고:
3가지 다른 '셰프'(모델) 설정하기
각 셰프의 대표 메뉴(가설) 2-3개씩 정하기
각 셰프의 사전 확률 정하기
'맛'(관찰된 데이터)이 각 메뉴와 얼마나 잘 맞는지 평가하기
모델 데이터 지지도를 구해서, 어떤 셰프일 가능성이 가장 높은지 결론 내리기!
예를 들어, '화분의 식물이 왜 시들었을까?'
물 셰프(사전 확률 40%): 물 부족(60%), 물 과다(30%), 물 주기 불규칙(10%)
온도 셰프(사전 확률 35%): 고온 피해(40%), 저온 피해(35%), 일교차(25%)
병해충 셰프(사전 확률 25%): 뿌리 곰팡이(50%), 해충(30%), 세균 감염(20%)
관찰: '흙이 바싹 마르고, 잎 끝이 갈색으로 마름' → 물 셰프의 모델 데이터 지지도가 가장 높겠죠?
처음엔 복잡해 보여도, 하나씩 따라 하다 보면 자연스럽게 익숙해질 거예요.
다음 시간에는 여러 모델 중 하나를 골라야 할 때 어떤 기준을 써야 하는지 알아볼 거예요. 때로는 간단한 지도가 복잡한 위성사진보다 나을 수 있다는 것을 배울 거예요.
다음에 어떤 판단이 잘 안 풀릴 때, '내가 지금 하나의 렌즈에 갇혀 있는 건 아닌지' 한번 떠올려보세요. 렌즈를 여러 개 끼는 순간, 큰 틀과 세부 이유가 동시에 보이기 시작합니다. 저는 이지은이었습니다.
[♪ 밝은 음악]