Home 공부하며 정리하는 인과추론 01
Post
Cancel

공부하며 정리하는 인과추론 01

이 포스트는 개인적으로 공부한 내용을 정리하고 필요한 분들에게 지식을 공유하기 위해 작성되었습니다.
지적하실 내용이 있다면, 언제든 댓글 또는 메일로 알려주시기를 바랍니다.

본 포스트의 상당 내용은 인과추론의 데이터과학 강의를 정리한 것임을 밝힙니다.

인과추론을 통해 달성하고자 하는 것

IT 운영 관리에서의 근본원인분석

과거에는 소프트웨어를 하나의 커다란 덩어리로 개발하는 Monolithic방식으로 개발이 이루어졌습니다. 기업이 HW를 구입하면, HW에 대해서 잘 아는 개발자들이 주어진 HW 환경에서 잘 작동할 수 있는 SW를 기획하고 설계했었죠. 그런데 HW의 성능은 구입하는 순간부터 변화하지 않기 때문에, IT 인프라가 확대될 때 거기에 맞는 최적의 SW 성능을 계산하여 개발해야만 했습니다.

하지만 이제는 클라우드 시대입니다. 클라우드를 활용하면 필요에 따라서 HW의 성능을 유연하게 확장하거나 축소할 수 있습니다. 따라서 많은 기업들이 기존의 온프레미스 환경에서 구축하여 운영하던 IT 인프라를 클라우드로 전환하고 있습니다. 이에 따라서 SW의 개발 방식도 바뀌게 되었는데, 클라우드 환경에서 Micro Service Architecture(MSA) 방식으로 개발하는 경우가 대표적입니다. MSA 개발 방식은 소프트웨어를 단독으로 실행 가능하고 독립적으로 배치될 수 있는 서비스 단위로 구분하여 마치 레고 블록을 조립하듯 개발하는 방식입니다. HW를 유연하게 확장하거나 축소할 수 있다는 클라우드 환경의 장점과, 개별 서비스 단위들을 필요에 따라 독립적으로 개발 및 배포할 수 있다는 MSA 방식은 찰떡 궁합인 셈이죠.

그러나 MSA 방식에도 단점이 있습니다. 바로, 전체 소프트웨어가 커질수록, MSA의 복잡도가 기하급수적으로 늘어날 수 있다는 점입니다. IT 인프라 관리의 관점에서 볼 때, 이러한 복잡성은 클라우드 인프라에서의 이상징후탐지(Anomaly Detection)와 장애에 대한 근본원인분석(Root Cause Analysis, RCA)을 어렵게 하는 요인이 됩니다. 즉, Micro Service로 이루어진 시스템에는 각 서비스 컴포넌트들 간 수백~수천가지의 상호 연관성이 존재하고, 이러한 서비스 컴포넌트들이 클라우드 환경에 분산되어 있습니다. 이때 개별 컴포넌트마다 각각 매우 많은 메트릭(latency, throughput, resource, error, …)이 측정되는데, 특정 이상징후나 장애가 발생했을 때, 이에 대한 원인을 파악하기 위해 이들을 분석하는 일이 쉽지 않습니다.

필자는 이처럼 복잡한 IT 인프라 환경에서 이상징후 및 장애가 발생되었을 때, 이를 해결할 수 있는 AI-ops 기술에 관심을 가지고 있습니다. 이를 위해서 인과추론(Cause Inference)의 방법론을 공부하여 정리하고, 추후 IT 인프라에 적용하는 연구를 진행해보고자 합니다.

인과추론이 무엇인가?

데이터 사이언스 vs 데이터 분석

필자와 같이 AI를 전공한 사람은 대부분 인과추론도 기계학습의 한 분야일 것이라고 생각할 수 있습니다. 마치 다양한 학습 데이터 X가 있고 정답인 y를 예측하는 문제를 푸는 방식처럼 말이죠. 전형적인 데이터 사이언스적인 접근방법이라고 할 수 있습니다. 물론 최근에는 인과추론에도 기계학습 기법들을 도입하는 연구가 있다고 합니다만, 기본적인 접근 방법만 놓고 본다면 다소 차이가 있어 보입니다.

필자가 AI-ops에 관심을 가지고서 IT 인프라 운영에서 근본원인분석을 수행한 선행연구들을 조사했을 때도 지금까지 배워왔던 기계학습 기술들과는 사뭇 다른 접근법을 취하는 것이 대부분이었습니다. 예를 들어서, Causality Graph를 구축하여 장애의 근본원인을 분석하려 한다는 등 말이죠. 역시나 기계학습 방식의 접근법에 저의 생각이 오버피팅(?) 되었던지라, 그래프라는 단어가 나오자마자 ‘그래프 임베딩’과 같은 단어들이 머릿속에 먼저 등장했는데요. 인과추론의 Introduction을 공부하고 나서야 ‘인과추론이 기계학습과는 결이 다르구나’를 깨달았습니다.

결론부터 말하자면, 인과추론은 기계학습과는 달리 원인과 결과의 관계를 합리적으로 알아가기 위한 일련의 방법론을 통칭하는데, 지금까지 배워왔던 기계학습, 즉 데이터 사이언스와는 다른 접근법을 보입니다. 오히려 데이터 분석의 영역이라고 봐야겠네요.

two_paradigms

위 그림은 일반적인 ‘데이터 사이언스’ 방식인 Prediction과 ‘데이터 분석’ 방식인 인과추론이 어떻게 다른지를 간략히 보여줍니다. 즉, Prediction은 대개 AI 모델이 학습 데이터를 통해 정답을 예측하는 문제라면, 인과추론은 연구 디자인 방식(Design-based Approach) 또는 그래프 기반 방식(Graph-based Approach)을 활용하는 문제입니다. (각각에 대한 세부적인 내용은 추후 다루겠습니다.) 하여간, 지금 딱 보아도 무언가 접근 방식이 다르죠.

인과추론?

필자가 인과추론을 공부하며 참고하고 있는 인과추론의 데이터과학에서는 다음과 같은 추천시스템의 협업필터링을 예로 들어 인과추론의 필요성을 설명합니다. 어떤 기업이 추천시스템을 도입하고자 하는데, 추천시스템을 도입하는 것이 정말로 사용자의 구매로 이어지는 ‘원인’이 되는지 확인하고 싶다고 합시다.

collaborative_ex

이 예에서 사용자 A가 라면과 콜라를 구입했습니다. 사용자 B도 라면과 콜라를 구입했네요. 둘은 비슷한 물건들을 구입했으니 비슷한 사용자라고 볼 수 있겠습니다. 사용자 A는 생수도 구매했는데, 추천시스템 알고리즘은 사용자 A와 비슷한 사용자 B에게도 생수를 추천했습니다. 만약, 여기서 사용자 B가 생수를 구매했다면, 과연 사용자 B가 생수를 구매한 것이 추천시스템이 잘 작동했기 때문이었을까요? 물론 그럴 수도 있겠지만, 생수를 구매한 ‘원인’이 ‘추천시스템’이었다고 단정하기는 어렵겠습니다. 예를 들어, 사용자 A와 사용자 B가 모두 자취생이었기 때문에 라면과 콜라를 구매했었고, 자취생이므로 집에 정수기를 두기보다는 생수를 사먹는 것이 편했다고 합시다. 그러면 추천시스템이 추천하지 않았더라도 애초에 사용자 B는 생수를 구매했을 수 있습니다.

즉, ‘진짜 그것이 원인이 되어서 그 결과를 내었는가?’에 대해서 데이터를 분석하여 보다 합리적이고 체계적으로 답을 내고싶은 것이 인과추론입니다.

심슨의 역설로 보는 인과추론

또 다른 예를 들어봅시다.

simpsons paradox

위의 예시는 인과추론을 공부하기 시작한 분들이라면 제일 처음으로 봤을 법한 표일겁니다. 심슨의 역설이라 불리는 표죠. 이해를 쉽게 하기 위해서 표의 행에 해당하는 Treatment A와 B를 각각 화이자(A)와 모더나 백신(B)이라고 가정해봅시다. 각 %는 사망률을 의미합니다. 어떤 백신을 접종받는 것이 좋을까요? ‘Total’ 열을 보면, 사망률이 16%인 화이자(A) Treatment를 받는 편이 사망률이 19%인 모더나(B) Treatment를 받는 것보다 나아 보입니다.

그런데, 경증 환자(Mild 열) 그룹만 놓고 보면 사망률이 10%인 모더나(B) Treatment를 받는 것이 나아보입니다. 독특한 점은 중증 환자(Severe 열) 그룹만 놓고 보아도 모더나(B) Treatment를 받는 것이 좋아보입니다. 즉, 종합적으로 놓고 보면 화이자(A) Treatment가 더 사망률이 낮아서 좋아보이지만, 개별 그룹끼리 놓고 보면 모더나(B) Treatment가 더 좋아보인다는 겁니다. 이렇듯 심슨의 역설은 데이터만 놓고 결론을 내리기는 어렵다는 사실을 보여줍니다.

사실 이 문제는 인과관계를 어떻게 정의하냐에 따라서 결론이 완전히 달라질 수 있습니다. 두 가지 시나리오로 예를 들어보겠습니다.

심슨의 역설 - 시나리오 1 : 경증/중증이 처방의 원인이 되는 경우

causal_structure01

이 그래프는 경증/중증을 의미하는 Condition C에 따라서 어떤 백신(Treatment T)을 처방하게 되는지 결정되는 경우가 표현된 인과 그래프입니다. 예를 들기 위해서 가정을 좀 해보겠는데, 화이자(A)는 상대적으로 구하기 쉬운 반면, 모더나(B)는 굉장히 희귀해서 구하기 어렵고 값도 더 비싸다고 가정해봅시다. 그래서 의사가 구하기 쉬운 화이자(A)는 경증 환자에게 처방하기로 하고, 구하기 어렵고 비싼 모더나(B)는 중증 환자에게 처방하기로 합니다. 다시 말해서, 경증/중증이기 때문에 화이자/모더나가 처방된 상황으로, Condition이 Treatment의 원인이되고, 이에 대한 결과로 Treatment가 결정되는 상황인 것입니다. 이를 C -> T(처방)으로 표현합니다. 또한, 상식적으로 중증 환자는 더 쉽게 사망에 이를 것입니다. 이를 C -> Y(결과)로 표현합니다.

이렇게 인과관계를 가정한다면, 경증/중증 여부, 즉 Condition C가 백신 처방 T의 원인이 되기도 하며, 사망률 Y의 원인이 되기도 합니다. 이처럼 처방과 사망률 모두에 연관되어 있어서 특정 원인과 결과의 연관성을 왜곡시키는 C와 같은 공통 원인 변수를 교란변수라 부릅니다. 구체적인 내용은 추후에 다루겠지만, 교란변수가 있는 경우, 교란변수를 조정함으로써 C -> T의 인과관계를 끊어내야 합니다. 즉, 경증/중증의 Condition과 상관 없이, 동일한 Condition을 가진 그룹 내에서만 비교를 하도록 실험이 설정되면 가능하겠죠. 이렇게 C -> T의 인과관계를 끊어내면, T -> Y의 인과관계에만 집중하여 분석할 수 있습니다. T -> Y 인과관계만 놓고 본다면, 각 그룹에서 더 좋은 백신을 처방 하는 것(원인)이 더 낮은 사망률(결과)로 이어진다는 것을 의미합니다. 정리하자면, 위와 같은 인과관계 설정에서는 경증/중증 각각의 그룹에서 더 낮은 사망률을 기록한 백신 B를 처방하는 것이 바람직하게 됩니다.

심슨의 역설 - 시나리오 2 : 처방이 경증/중증의 원인이 되는 경우

causal_structure02

이번에는 시나리오 1과는 다른 예를 들어보겠습니다. 화이자(A)를 처방하는지 또는 모더나(B)를 처방하는지에 따라서 환자의 경증/중증 여부가 달라지는 독특한 설정을 해보겠습니다. 예를 들어, 모더나(B)는 아주아주 구하기 힘들어서, 모더나를 처방 받는 환자는 대략 1년을 기다려야 한다고 극단적으로 가정해보겠습니다. 반면 화이자(A)는 이처럼 기다릴 필요 없이 바로 처방받을 수 있다고 합시다. 이 경우, 모더나(B)를 처방 받은 사람이 실제로 백신을 투여받기까지 1년 동안 병세가 점점 심해져서 결국 중증이 되어 사망할 가능성이 높아질 수 있습니다. 즉, 어떤 백신을 처방했는지가 경증/중증에 영향을 미쳐서 사망률에도 영향을 주는 T -> C -> Y의 인과관계가 생긴 것입니다. 이 경우, 모더나(B) 자체의 효과는 화이자(A)보다 좋을 수 있겠지만, 경증 환자를 중증으로 만들어버릴 정도로 오랜 시간 백신 투여가 지연되게 되어 사망에 이르게 되므로, 화이자(A)를 처방하는 편이 낫습니다.

심슨의 역설에서 살펴볼 수 있듯, 인과관계를 어떻게 정의하느냐에 따라 결론이 달라질 수 있습니다.

정리하며

이번 포스트에서는 인과추론이 무엇이며, 왜 필요한지 간략하게나마 살펴보았습니다. 기계학습에 익숙한 필자에게는 다소 낯선 접근 방법이기도 하지만, 독특한 방식으로 데이터를 분석하여 인과관계를 파악한다는 방식이 신기하기도 합니다. IT 인프라의 운영 관리에서 많이 연구되고 있는 방식인만큼, 더욱 공부할 필요성을 느낍니다.

다음 포스트에서는 인과추론의 양대산맥으로 볼 수 있는 Potential Outcome FrameworkStructural Causal Model을 간단하게 살펴보겠습니다.

참고자료

[1] 인과추론의 데이터과학
[2] Introduction to Causal Inference (Brady Neal)

This post is licensed under CC BY 4.0 by the author.

-

공부하며 정리하는 인과추론 02