스포츠토토와 Data Science

5
pabii research

이 글을 쓰는 시점 기준으로 약 2주일 쯤 전에 한국 개발자들이 O(N^k) 논의를 바탕으로 DB를 구성하는 역량이 매우 부족하다는 지적하는 글을 공개했는데

K모 대학교 학생 게시판에서 트래픽이 상당히 몰려들어왔길래 그 게시판을 찾아가보니

보나마나 수학 못 한다는 소리겠지. 들을 필요도 없는 소리임

이렇게 댓글을 달아놨더라.

조금만 대형 서비스가 되어도 DB를 단순 MySQL을 넘어 NoSQL로 고민의 범위가 확대되고, 로딩 속도, 처리 속도 등등의 이유로 Table마다 키 값을 뭘로 어떻게 걸고… 등등이 매우 중요해질 것 같은데,

그런 와중에 데이터 읽기/쓰기 속도, 관리 효율 등을 미리 짐작하고 설계에 들어가기 위해서 O(N^k)를 기초 지식으로 알고 접근해야한다는 주장이

‘수학 못 한다는 소리’와 그렇게 큰 관련이 있나?

 

댓글들을 보니 내가 하는 모든 말을 수학 이야기로 몰아세운 탓에 마치 내가 수학 전도사가 된 것 같던데,

수학 전공자도 아닌 주제에 이런 오해까지 받으니 황당한 동시에 수학과 분들께 너무 죄송하다.

당신들이 ‘수학 못 한다는 소리‘가 아니라 ‘대학 수학을 자기 학문에 활용‘한다는게 무슨 뜻인지 이해 못한 탓에 이런 오해가 발생하는거라는걸 한번 정리해보고 갔으면 한다.

 

나는 수학과 스타일의 고급 수학과 거리가 먼 사람이고, 별로 좋아하지도 않는다. 믿을 수 없다고?

우선, 고교 시절에 수학이라는 과목을 좋아해 수학과를 갔던 대다수가 대학 수학의 해석개론을 넘지 못하고 좌절한다.

보통은 해석개론 이후로 수학과 애들이 다른 과로 ‘탈출’하고, 수학이 그런 수학이 아니라 좀 이상하다는 표현들을 쓰는데,

학부 저학년 수학 위주로 SIAI 학위 과정을 구성한 이유, 고급 수학에 큰 관심이 없는 이유도 ‘나도 못하는 사람’이기 때문이다.

내가 이야기하는 수학은 굳이 따지자면 ‘응용 수학’, 좀 더 내 방식으로 이야기하면 ‘언어’가 수학인 경우를 말한다.

단지 그 ‘언어’가 학문을 연구, 이해, 활용하는데 쓰이는 언어일 뿐이다.

 

예를 들면,

‘두 데이터 셋이 담고 있는 정보량이 거의 비슷해서 결합해봐야 새롭게 더 얻을 정보가 별로 없다’라는 표현을

‘두 set이 near multi-collinearity가 있을만큼 vector space가 linearly dependant하다’라고 바꿔서 표현할 뿐이다.

한국어 번역에 자신은 없지만 ‘두 집합이 사실상 다중공선성을 갖고 있을만큼 벡터 공간이 선형 종속 상태다’라고 하면 될까?

굳이 왜 일반인이 알아듣기 힘든 ‘이상한 언어’를 쓰느냐고 불편한 기색을 보인다면 어쩔 수 없지만,

배우기를 그렇게 전문 용어로 배웠고, 보통은 비수학적인 언어로 풀어내려면 말이 꼬이는 경우가 너무 많다.

무슨무슨무슨무슨무슨무슨 조건들을 정보 손실 없이 수학 아닌 언어로 설명하기도 쉽지 않고.

 

이게 자신의 직업이면 ‘수학’이라는 ‘언어’를 쓸 수 있는 능력을 당연히 탄탄하게 갖춰야 ‘대화’가 되고,

반대로 외부인에게 설명할 때는 정확도를 좀 타협하고 평범한 한국어로 설명할 수 있어야 좋은 Data Scientist라고 할 수 있다.

아니, 쉬운 언어로 표현하기는 좋은 학자들의 공통적인 특징이다.

반복하는대로 나는 ‘좋은 학자’와는 거리가 먼 사람인데, 내 나름대로 좀 ‘(껍데기는) 어렵지만 (알고보면) 쉬운‘ 예제 하나로 위의 주장을 풀어내보자.

 

고급(?) 수학과 줄 세우기 → 줄 세우기와 Data Science

위는 Scientific Programing이라는, SIAI 교육과정의 4번째 수업 자료 중 일부다.

이 수업이 일반에 AI/Data Science로 알려진 ‘계산과학’ 전용의 ‘코딩’ 수업이라고 보면 맞을 것 같은데,

(계속 주장하는대로 개발자들이 필요한 ‘코딩’과 계산과학 전공자들의 ‘코딩’은 코드의 내용이 완전히 다르다.)

강의 전체를 관통하는 주제는

  1. 각각의 계산법들이 언제, 어떤 상황일 때
  2. 오차-계산속도 라는 상충 관계에서

더 나은 타협인지를 비교하는 것이다.

 

‘오차’에 대한 개념이 매우 부족한 CS 전공자, 혹은 관련 전공 지식을 주워듣고는 무조건 DNN이 다 맞고, 다 좋다~ 라고 착각하는

수 많은 코딩 기반 ‘Data Scientist’들에게 일침이 될 만한 과목이라고 생각해서 배정한 것도 있고,

그 전에 어지간한 상위권 대학의 Data Science 과정에 저런 논의를 담은 수업들이 다 있어서 넣기도 했다.

어떤 방식으로건 컴퓨터의 계산 속도에 해당하는 O(N^k) 개념을 가르쳐야겠는데,

그렇다고 CS 전공은 아니니까, 계산과학 목적에 맞춘 저 수업이 딱 적절하다고 판단들을 했을 것이다.

참고로 위의 노트는 Stanford의 Managerial Engineering이라는 전공에서 다루는 내용 중 일부를 갖고 온 것이다.

 

뭔가 복잡한 수식을 잔뜩 써 놔서 비전공자들이면 무슨 뜻인지 못 알아봤을 것 같은데,

위는 Change of Measure(측정 기준 변환?)라는 주제로, 수학의 측도론(Measure Theory)에서 다루는 주제이기도 하다.

여기까지만 들으면 ‘그럴 줄 알았다, 엄청 복잡한 수학이네, 또 그런거 안다고 자랑할려고 그런다’라는 표현들을 쓸텐데,

우선, DS 전공 자체가 Stanford의 Managerial Engineering에서 다루는 주제와 약간 다른 내용을 가르치는 탓에 Stochastic calculus와 연결되는 부분을 삭제했다는 점을 지적하고 간다.

즉, 이미 Data Science 교육 과정에 필요한 ‘상대적으로 쉬운’ 수학을 취사선택한 상태다.

 

이제 저 수식을 수식으로 보지 말고, ‘언어’로 보고 이해하기 위해 저 수식이 나온 배경 ‘이야기’를 잠깐만 해 보자.

예를 들어, ‘정규분포’로 주어진 데이터를 ‘균일분포(Uniform distribution)’로 해석해야 하는 순간이 있다.

좀 더 현실에 가깝게 다가가기 위해 예시를 구체화하면, 전 국민의 키를 모은 데이터는 ‘정규분포’를 따르는 것으로 알려져 있다.

그런데, 내 키가 상위 몇 %에 해당하는지를 보려면, 정규분포 기준으로는 ‘정규분포표’라는 것을 찾아서 봐야 한다.

고교 수준 통계학에 불과하지만 이미 이 정도만 해도 일반인들에게는 두려운 지식이다.

이걸 좀 더 쉽게 풀어내려면 분포 자체를 ‘균일분포’ 형태로 표현해야한다.

인간에게 가장 쉽게 이해되는 분포가 1등부터 꼴등까지 1열로 줄을 세운 균일분포니까.

 

수식을 벗어나 직관적으로 이해하면 정규분포 양쪽 끝을 잡고 주~욱~ 늘려 팽팽한 평행선으로 만든 것이다.

 

그래서 ‘정규분포’를 ‘균일분포’로 바꿔서 표현하려면 어떻게 해야되는데?

저 위의 f(x)에 ‘비율’이 곱해져 있는데, 그 비율이 분포함수를 분모/분자로 놓은 것이라고 보면 이해하기 쉽다.

중학 수학 관점을 빌려서 ‘정규분포’를 ‘약분’하고, ‘균일분포’만 남기면 분포함수의 모양이 바뀐다고 보면 되기 때문이다.

 

뭔가 대단하고 복잡한 수학이 들어간 것 같지만, 중학 수학의 ‘약분’ 개념이 하나 들어간 것에 불과하고,

고교 수학에서 f⊙g 라는 결합 함수 쓰던 방식일 뿐이다.

똑같은 직관을 10진법과 2진법, 16진법 변환에서도 볼 수 있다.

이 정도까지 풀어 설명했으니 ‘(껍데기는) 어렵지만 (알고보면) 쉬운‘ 예제의 조건을 충족했으면 좋겠다.

 

고급(?) 수학과 축구 게임 → 축구 게임과 Data Science

여기까지 설명하면 저런 황당한 계산을 왜 하는거냐는 질문이 나온다.

(그런 수학 배워봐야 현실에 쓸 일 없잖아요!…. 라는 반박 형식의 자기 위로)

분포함수 따위는 왜 바꿔야 되는거지? 그런거 안 바꿔도 컴퓨터한테 알아서 계산하라고 그러면 되는거 아닌가?

누군가 코드 잘 짜 놓은 Library 올려놓으면 그거 갖다 쓰면 되는거 아닌가?

 

일단 위의 그림으로 가 보자.

(짙은 파란색 정규분포 기준) X축 값이 s인 경우가 거의 나타나지 않는 데이터를 갖고 왔는데, 그 경우에 대해서 매우 구체적으로 자료를 찾으라고 명령이 내려왔다고 생각해보자.

다시 현실 예시를 들면, FIFA 같은 게임에 적절한 선수들 자료를 넣어서 가상 시뮬레이션 경기를 했다고 생각해보자.

축구에서 한국 팀이 브라질을 2:0으로 이길 확률이 s값인데, 저 사건이 터지면 스포츠 ToTo로 돈을 번다.

(공감하기는 어렵겠지만) 내가 돈을 벌 확률, 얼마를 벌게 될지 등등에 대한 계산을 저 위의 그래프가 설명해주고 있는데,

문제는 내가 뽑은 확률이 맞는지 자신이 없다는 것이다.

왜? 나는 FIFA로 고작 500번 밖에 시뮬레이션 게임을 안 돌려봤기 때문에 2번 이긴다고 나온 그 수치가 정말 0.4% 확률을 말하는건지 알 수가 없다.

고작 2번 나온걸로 승률에 대한 확신이 안 서기 때문이다.

통계학 용어를 빌리면 ‘샘플 숫자가 너무 적다’고 표현할 수 있다.

 

10,000번, 아니 50,000번 돌려서도 40번, 200번 이기는 사건이 나와야 0.4%라는 확률이 정확한거잖아?

이걸 수만번 돌려보며 컴퓨터를 학대해도 상관없다는 것이 ‘코딩 라이브러리만 잘 쓰면 AI Engineer’라는 관점이고,

나 같은 사람들은 위의 Change of Measure라는 계산을 이용해 분포함수의 중간값을 옮기는 계산으로,

위의 축구 시뮬레이션으로 치면 선수들 능력치 평균 값을 조금 조정하는 방식으로 확률이 바뀌는 것을 활용해,

굳이 50,000번의 시뮬레이션을 돌려보지 않고도 승률 값에 대해 강한 확신을 얻을 수 있는 방법을 쓰려고 한다.

 

선수들 능력치 값을 바꿔서 500번 시뮬레이션 해서 50번 이기는 사건이 나오면 10%,

거기서 다시 능력치 보정을 취소하는 계산(즉 역함수)을 해보면 아까의 0.4%가 얼마나 정확했는지 감을 잡을 수 있다.

근데 선수들 능력치 값을 얼마나 바꿔야

  1. 오차가 줄어들고
  2. 빨리 계산할 수 있을까?

이걸 할 때마다 다 찾아볼 수 없기 때문에 개념 이해를 이용해 ‘언제, 어떤 조건일때’ 더 1, 2가 성립하는지를 배우는 것이 저 수업의 진짜 핵심이다.

 

각 계산법 별로 ‘언제’, ‘어떤 조건일때’ 1, 2가 성립하는지 수식 기반으로 개념을 이해하고나면?

컴퓨터 계산에 ‘오차’라는 것을 모르던 사람이 그걸 이해하게 되고, 빨리 계산하는 것의 장점을 이해하게 되면서,

DNN이 무조건 제일 좋다는 황당한 맹신을 안 하게 된다.

모든 계산법은 주어진 데이터와 내 계산 목적에 따라 효율성(오차-속도간 상관관계)을 최대화하기 위해 나온 것이기 때문에,

DNN이라는 계산도 몇몇 특수 목적에서 나온 계산법이라는 걸 이해할 수 있기 때문이다.

 

물론 위의 계산은 능력치 보정을 조절하는 계산(즉 분포함수 가정)이 실제로 맞는지에 대한 확신이 있어야 되는데,

위의 ‘약분’하는 분포함수는 그런 정보를 미리 알고 있는 경우에 한정되는 단점이 있다.

그 단점을 극복하려고 저 강의의 다른 노트에 분포함수를 모를 때 데이터 포인트들로 추정하는 계산법부터 이런저런 자료들이 더 있는데,

오늘 논의를 위해서는 저 2장의 슬라이드면 충분하리라 믿는다.

 

참고로 난 저 Change of measure라는 개념을 금융상품 가격을 계산하는 시점에 배웠다.

현실 데이터만 모아서는 risk-averse 정도가 제각각인 투자자들의 선호를 모아서 반영하기 힘든 반면, (P-measure)

Risk-neutral의 세계로 금융상품 수익률 데이터를 옮겨가면 평범한 대학생도 알고 있는 분포(인 정규분포 및 기타 분포들)로 바꿔서 계산을 할 수 있기 때문이다. (Q-measure)

단순히 금융시장 데이터들 다 묶어서 DNN에 부어넣으면 알아서 척척척 주가 예측 해 준다고 주장하는 모든 종류의 AI마니악을 불편한 시선으로 바라보는 이유이기도 하고,

위의 간단한 수학 개념이 사기를 당하지 않기 위해 필수적인 지식인 이유이기도 하다.

 

당시 교수님은 수식을 풀고 난 다음에 항상 ‘Math hat’을 ‘Finance hat’으로 바꿔쓰라며 수식을 넘어 도메인 지식을 활용해 해석할 수 있도록 끊임없이 질문을 던지셨는데,

‘수학’은 ‘수식’이 아니라 ‘언어’라며, 그걸 어떻게 응용하느냐를 알아야 공부하는 의미가 있다는 말의 영어식 표현이라고 보면 되겠다.

 

나 역시 처음 배울 때는 쉽지 않았던 개념이지만 축구 시뮬레이션을 비롯한 다양한 직관적인 예제를 통해 개념을 파악하게 됐었고,

그 이후로는 어느 필드의 데이터건 상관없이 불편한 절차들로 날 괴롭히는 계산들을 효율화 할 수 있도록 데이터의 구조를 바꾸는데 활용했고,

내 눈 앞의 ‘창문’이 아닌 다른 ‘창문’을 통해 세상을 바라보는 사람이 어떤 시야일지 가늠하기 위해 그 사람이 알고 있는 지식, 경험 같은 ‘창문’들의 종류를 생각하는 철학적인 사고력 확장에도 활용하기도 했다.

수학이 모든 학문의 도구인 동시에 궁극적으로는 철학이고 논리학인 이유이기도 하다.

 

‘말을 잘 “만드는” 것 = 수학을 잘 “활용하는” 것’ = Data Science를 잘 “활용하는” 것

위의 예시가 매우 ‘수학적’이어서 아무런 쓸모도 없다고 주장한다면 나도 할 말이 없다.

그러나

  1. 위의 지식이 있고
  2. 적재적소에 응용할 수 있는 역량

을 갖고 있으면,

단순히 축구게임 시뮬레이션을 5만번 돌리지 않아도 되는 것 뿐만 아니라,

자주 안 나타나는 사건들을 다뤄야하는 Data Scientist의 표현이

  • ‘~일 것 같은데 잘 모르겠어요’, ‘컴퓨터 학대해봐야 됩니다’, ‘데이터 더 뽑아봐야 압니다’ 가 아니라
  • ‘X, Y 라는 가정이 맞다면 ~일 겁니다. 굳이 더 시간을 쓴다고 나아질 건 없습니다’ 가 된다.

 

SIAI MBA 과정 중에는 6, 8번째 수업들에 저 지식을 응용해 선거 결과 분석, 추천 알고리즘 보정에 쓰는 과제가 나가는데,

제조업계 있는 학생이 자기 논문 데이터 샘플의 Imbalance로 고민이 많길래 ‘Importance sampling으로 처리하면 되잖아요’ 그러니까 표정이 환~해지는걸 보니 너무 기분이 좋더라.

1번만 갖추고 있고 2번이 수업 과제로도 충족되질 못했는데, 그 날의 논문 지도 코멘트 하나로 2번이 확~ 채워졌을 것이다.

 

난 공대생들이 ‘해봐야 안다’라는 표현을 쓰는 것을 몸서리치게 싫어한다.

대학까지 졸업해놓고는 관련된 기초 지식은 하나도 없이 ‘통밥’으로만 해결하는 ‘기술’ ‘기능’직이라는 뜻이기 때문이다.

그 표현을 듣는 순간 그 분을 해당 전공으로 고교생 이하 지식 수준의 인재로 판단해버리는 내 사고회로를 멈추기가 쉽지 않다.

위의 예제와 같이 필요한 지식이 있으면 ‘안 해봐도 알 수 있는’ 상황이 너무 많은데,

내 머리 속에서는 이미 결론이 난 사건, 안 된다고 확신이 든 사건을 고집스럽게 해 보면서 막대한 회사 자원을 써 버린다.

 

팀 전체의 수준이 높으면 바로 그 자리에서 ‘안 됩니다, 이렇게 바꿔서 합시다’라고 하면 1분의 간단한 회의로 끝날 일을

1달간 붙잡고 있다가 ‘왜 그런지 모르겠는데 안 되네요…’라고 있으면 팀 전체 월급, 운영 경비는 얼마나 될까?

막대한 비용을 들여 하드웨어들을 구매해서 Nvidia를 부자로 만들어주며 1년의 시간을 보냈다면?

좀 나쁘게 말하면, 당신이 지식이 없고, 실력이 부족해서 회사가 온갖 피해를 입었다.

 

소행성이 지구로 날아오는데 ‘핵미사일 쏴 봐야 안다’는 무능한 NASA 직원과

그 소행성의 구성 성분을 태양열에 대한 반응으로 바로 감을 잡고 ‘핵미사일 쏘면 더 큰 재앙이 몰려온다’고 말하는 외부 전문가가 고군분투하는 영화들을

한번쯤은 본 적이 있을 것이다. (워낙 Cliche니까)

그 영화를 보는 모든 시청자가 외부 전문가를 칭찬하고 무능한 NASA 직원을 욕할텐데,

위의 내 예시에서 ‘해봐야 안다’는 사람들에 대한 내 감정이 이해되시리라.

해보고 나면 늦다. 수십, 수백억의 영업이익이 날라간 걸로 끝나는게 아니라 소행성이 지구에 충돌할 수도 있다.

 

몇 차례 공개했다시피 2014년에 글로벌 수학 학회 중 하나인 SIAM 학회에 가서 내 박사시절 논문을 발표한 적이 있는데,

그런 학회에 가보면 알겠지만 순수 ‘수학’ 전공자들만 오는게 아니라, 응용 수학, 공학을 비롯한 온갖 전공자들이 다 온다.

그 3일 일정 내내 보고 알게 된 것이, 위의 내 ‘화법’으로 ‘수학=언어’를 이용해 현실을 설명하는게 그들이 평소에 쓰는 ‘화법’이더라.

세부 전공이 달라 용어들이 종종 다르지만, ‘화법’이 같으니까 대화가 조금 버벅거리기는해도 다들 이해하고 간다.

같은 ‘화법’은 그런 전공들의 학위 과정 내내, Data Scientist 직장 찾느라 면접 보는 내내, 그리고 SIAI 학위 과정에서도 쓴다.

필요한 수학 지식(박사 vs. 학부)과 도메인(Finance vs. IT)과 곁들어 쓰는 자연어(영어 vs. 한국어)가 조금씩 달라졌을 뿐이다.

 

그 수학이 ‘(껍데기는) 어렵지만 (알고보면) 쉬운‘ 수학이니까 잔뜩 쫄아서 입학했던 SIAI 학생들이

(밖에서 괜히 수학 공부 더 할 것 없고) 일단 들어와보면 안다

라는 표현으로 교육 과정의 수학 난이도를 평가했지 않을까?

서양 애들이 박사 1학년 때는 고급 수학을 하나도 모르다가 졸업무렵에는 엄청난 능력자가 되는 것도 같은 이유다.

내가 공부하는 학문에 필요한 수학을 갖다 쓰는 방식을 이해하다보니 수학이라는 도구를 잘 “활용하는” 사람이 된 것이다.

 

난 그렇게 수학을 잘 하는 사람이 아니었다.

최소한 대학 학부 고학년 이상의 ‘증명’ 수학들을 매우 싫어하는 사람이었다.

수학을 싫어하는 사람이었음에도 Data Science에 매력을 느낀 이유는 DS가 수학적 Rigor를 강조하는 학문이 아니라, 그런 수학을 잘 ‘활용하는’ 학문이기 때문이다.

 

보나마나 수학 못 한다는 소리겠지. 들을 필요도 없는 소리임

다시 그 K대 학생 커뮤니티의 어느 댓글로 돌아가보자.

보나마나 수학 못 한다는 소리겠지. 들을 필요도 없는 소리임

당신들에게 그렇게 들릴 수 있다는 점은 이해할 수 있다. 최소한 나도 ‘당신들의 hat’을 써보려고 노력 중이다.

 

다만 내 입장에서는 당신들이 ‘수학을 못 하는 것’이 아니라,

수학이라는 ‘언어’를 못 쓰니 불편과 비효율을 야기할 뿐이다

라고 표현하고 있을 뿐이다.

수학이라는 ‘언어’로 적힌 ‘AI’와 ‘DS’를 무시하고 ‘코딩’으로 적힌 것만 따라가고 있으니 수천억의 손실과 소행성 충돌 같은 사건을 야기하고 있으니까, 공부하던가 포기하던가 둘 중 하나를 선택해야지,

지금처럼 장님 문고리 잡기를 하고 있으면 손실은 누가 감당해주나?

 

마치 영어 문법을 모르는 사람이

You is yesterday here

같은, 문법적으로 틀린 문장을 써 놓고도

보나마나 영어 문법 모른다는 소리겠지. 들을 필요도 없는 소리임

이라고 주장하는걸 보는 기분이다. (원래 의도는 You were here yesterday 였다.)

 

저 문법 실력으로 아주 기초 대화는 어떻게 해결이 되겠지.

근데 당신이 ‘(이 정도 영어 실력으로도) 대기업 취직하는데 문제없다’라면 뭐라고 해야하지?

당신에게 월급주는 대기업 오너의 기분은 어떨까?

Similar Posts