Practice. Thinking Types for D.Scientist
원래는 지난 면접들을 통해서 '얘네들이 아직은 데이터 문제를 해결하는 프로세스 또는 프랙티스가 약하구나'라는 발견에 기반해서 '데이터 문제 해결하기'라는 글을 적으려 했었다. 그런데 이미 달고나 초기에 '데이터 문제 해결 프로세스'라는 글을 적었다는 깨달았다. 그럼에도 생각은 늘 상황에 따라서 바뀌는 거라서 지난 인터뷰에서 느낀 감정과 생각으로-- 1~2주를 쉰 후에 -- 같지만 다른 글을 적어야겠다고 마음먹었는데, 지난밤에 우연히 봤던 글을 함께 공유하면 좋을 것 같아서 짧게 적는다. 인터뷰에서 느꼈던 감정은 큰 부분이 결국 생각하는 방법에 관한 거였다. 요즘 데이터 과학이나 ML 개발자를 하겠다는 친구들의 스킬은 분명 내가 그네들의 나이 때 가졌던 것보다 월등하다는 걸 알고 있다. 그럼에도 아직은 경험과 실력이 부족하다고 느끼는 것은 문제와 해결책을 바라보는 눈, 즉 생각하는 방식의 미숙함이라 본다.
지난밤에 KDnuggets에 'Five types of thinking for a high performing data scientist'라는 글이 올라왔다. KDnuggets를 정기 구독하는 건 아니지만 구글앱을 통해서 추천되는 걸 종종 보는데, 이 글이 마침 내가 최근 느낀 갈증을 다소 해결하는 듯해서 짧게 소개한다. 다시 자세히 곱씹으며 읽어봐야겠지만, 지난밤엔 급하게 대강 읽어서 정확히 이해한 것도 아니고 생각법들 사이에 다소 모순되는 것도 있는 것 같지만 큰 틀에선 괜찮게 정리된 듯하다. 아래의 각 생각법의 정의는 첨부된 유튜브 영상 도입부의 정의를 가져왔다. 정의 다음에 오는 첨언은 원문과 내용 또는 뉘앙스가 많이 다를 수 있다.
Model Thinking
Pattern of thinking that focuses on mental models that are abstractions of reality and used to understand and explain how the world works
모델(모형)이라는 건 현실을 모사하는 거다. 즉, 최대한 현실과 가깝게 흉내를 내지만 현실보다는 매우 간단하고 직관적으로 만드는 거다. 데이터 과학자 또는 머신러닝 개발자들이 항상 하는 것이 모델을 만드는 거다. 분류 모델이든 예측 모델이든 제어 모델이든... 데이터 과학자는 현실 (수집된 데이터)을 정확히 관찰해서 인사이트를 도출하고, 이걸 추상화하고 다시 엮어서 모델을 만든다. 데이터 문제를 해결하기 위해서 현실에서 문제점을 발견하거나 주어진 문제를 분석하는 것도, 각종 데이터를 수집해서 EDA 과정을 거치는 것도, 다양한 알고리즘의 적합도를 검증하는 것도 결국 모델 싱킹의 구체화 또는 프랙티스다.
System Thinking
pattern of thinking that focuses on system structure and behavior to solve complex problems
시스템 싱킹은 복잡한 문제/시스템의 전체 구조를 이해하고 개별 구성 요소들의 기능을 파악하는 거다. 모델 싱킹과 다소 맥이 통한다. 전체 숲이 어떻게 생겼는지도 보면서 개별 나무들도 함께 본다. 본문에 각종 서브 방법들을 나열했듯이 현재 시스템을 그대로 파악하는 것도 필요하고 시간에 따라서 어떻게 변하는지 또는 변할 건지도 파악하고, 원인과 결과의 인과성이나 미래 예측도 필요하다. 예측 모델이란 결국 실행을 위해 존재한다. 학교에선 모델의 정확도를 1%, 0.1%를 올리는 것이 중요하지만, 현장에서는 실시간으로 추론이 가능한가 가 어쩌면 더 중요하다. 원문이 얘기하려는 것과는 다소 생뚱맞은 문장을 추가한 것은 예측모델을 잘 만드는 것도 중요하지만 그 모델이 실제 사용되는 현장을 애초에 가정/고민하면서 설계하고 구축해야 함을 강조하기 위함이다. 실전에선 production이 짱이다.
Agent-based Thinking
pattern of thinking that focuses on simple entities and their interactions to understand emergent properties
에이전트 기반 싱킹은 앞서 적은 모델과 시스템 싱킹과는 다소 모순된 느낌을 받는다. 앞에선 전체를 간략화하고 종합해서 봐야 한다고 했는데, 이젠 개별 객체에 집중해야 한다고 한다. 모순된 듯도 하지만 악마는 언제나 디테일에 있다는 말을 명심해야 한다. 작은 파트들이 모여서 큰 시스템이 되기 때문에 개별 파트들의 특성이 무시된다면 완성된 결과물이 원하는 것과 다를 수 있다. 좀 더 실행 또는 제어적인 측면에서 중요한다. 로봇에서 박스를 들어서 10m 옮겨놓으라는 명령을 내리기 위해선 로봇 팔을 얼마나 뻗고 몇 도를 회전하고 힘은 어느 만큼 주거 등을 모두 지정해줘야 한다. 문득 새들의 군무가 떠오른다. 군집으로 춤을 추는 새의 무리와 그 속에 있는 개별 새들의 움직임이 모델/시스템 싱킹과 에이전트 싱킹의 차이가 아닐까라는 생각이 든다. (너무 비약이 심한 듯... 제발 원문 참조)
Behavioral (Economics) Thinking
pattern of thinking that focuses on how humans really make decisions as opposed to how they ought to make decisions
이름에서 알 수 있듯이 '행동 경제학'을 생각해보면 쉽게 이해된다. 다소 최근 (2000년대 전후)에 각광받던 경제학 분야가 행동 경제학이다. 아담 스미스의 절대우위론이나 분업, 리카르도의 비교우위론, 맬서스의 인구론 등의 고전 경제학, 그리고 그 후의 케인스주의나 (하이에크나 밀튼 프리드만 등의) 신자유주의 등의 경제학은 전체 경제의 수요와 공급, 그리고 국가의 간섭 (및 개인의 자유의지) 등의 좀 거시적인 관점에 기반한 경제학이었다. 그런데 최근에는 개인의 실제 심리에 바탕을 둔 개인의 의사결정방식에 좀 더 초점을 맞춘 행동경제학이 주목을 많이 받고 있다. 사람에 관한 연구가 더 많아졌고 또 실제 데이터를 이용해서 경제를 분석할 수 있게 됨으로써 자연스레 발전한 학문이다. 당위성보다는 실제성에 더 초점을 둔다. 행동경제학을 이해한다면 비헤이비얼 싱킹은 어렵지 않게 이해할 수 있을 것 같아서 좀 길게 적었다. 우리는 데이터를 보고 모델을 만들지만 결국 실행은 사람이 한다. 예측이 실행과 동떨어지면 로스 값이 증가한다.
Computational Thinking
pattern of thinking that focuses on structured problem solving, pattern recognition, generalization and abstraction to enable coding and execution by computers
마지막으로 결국 모든 사고의 결과는 프로그래밍돼야 한다. 진주 구슬을 꿰는 작업이 필요한데, 애초에 잘 꿰어지도록 진주 구슬을 가공해두면 좋다. 앞서 적은 모델, 시스템, 에이전트 기반, 행동경제학적 생각법은 결국 잘 꿰지는 구슬을 가공하기 위한 거다. 그래서 원문에도 적혀있지만 문제를 구조적으로 보고, 크고 복잡한 건 작고 단순한 걸로 분해하기도 하고, 각각의 파트/패턴을 면밀히 분석하고 다시 역으로 그것들을 일반화하고 추상화해서 프로그래밍 구현체가 잘 만들어지도록 하는 거다. 최종 결과물을 만들어내기 위해서 계산적 사고가 필요하다.
원문의 의도와 다르게 적은 것이 많기 때문에 필히 원문을 먼저 참조하기 바란다. 지난밤에 짧게 읽고 내 나름대로 해석한 것이니 오해 없기 바란다.
참고 원문: https://www.kdnuggets.com/2021/06/five-types-thinking-data-scientist.html