몇 달전에 자살사고 관련된 설문조사를 몇 년동안 했다는 분의 데이터 모델링 요청을 받았다.

스트레스 받기 싫어서 보통은 일언지하에 거절하는데, 비트코인 가격 움직임 예측해서 돈 벌고 싶다는 헛소리도 아니고, 자살사고 예방이라면 취지가 좋은 것 같아서 일단 한번 말이나 들어보자는 생각에 뭘 원하는지 정리해서 보내달라고 했다.

아래는 그 때 받은 엑셀 파일에 있던 내용이다.

이런거 공개하면 메일 보내셨던 분께 무례가 될 수도 있다는 정도의 상식은 있지만,

  • 정말 너무 심하게 어이가 없어서,
  • 앞으로 유사한 메일 보내시는 분들도 좀 깨달으시라고,
  • 그리고 잘 모르면 이런 요청 좀 하지말라는 정보 환기 차원에서

무례를 무릅쓰고 Extra mile을 걸어본다.

사족을 좀 달면, 저 메일 받고 너무 어이가 없어서, 혹시 내가 잘못 생각하고 있는건가 싶어서, 이걸 주변의 박사 친구들에게도 보여주고, 교수로 재직 중인 학교 선배들한테도 보여줬었다. 한국 갓 들어오는 친구들일수록 충격먹은 표정으로 “앞으로 이런 사람들 상대해야되는거야?” 투의 질문을 했고, 교수나 연구원으로 재직 중인 선배들은 “그러길래 한국 왜 왔고, 컨설팅은 왜 해준다고 그랬냐 ㅋㅋ” 같은 반응들이었다.

 

황당한 점 1번. 98% 조건

일단 가장 황당한 점을 꼽으라면 98% 이상 정확도 요구조건이다.

무슨 MNIST 데이터 같은 low uncertainty 데이터 & 전처리 완료된 데이터도 아니고, 설문조사처럼 Noise & Bias가 잔뜩 섞여 있는 데이터에서 98% 이상의 정확도라는게 말이나 되는 조건인가?

머신러닝이라는게 요술봉이어서 한번 슥~ 휘두르면 100% 정확도가 뚝딱 나오는 줄 아는 사람이 아니고서야 저런 요청을 할 수가 없다.

 

황당한 점 2번, 일반분석, 머신러닝, 딥러닝 구분

이 블로그 포스팅들을 최소한 몇 개는 읽고나서 저런 메일을 보냈을텐데, 머신러닝은 Linear pattern 찾는 작업이 아니라 Non-linear pattern 찾는 작업에 쓰는 응용통계 모델링이라는 지적, 데이터가 랜덤 오차를 많이 갖고 있으면 Non-linear patterning이 먹혀들지 않는다는 지적, 딥러닝이라는건 머신러닝의 Neural Network 모델을 좀 더 Computationally heavy하게 쓰는 작업이라는 말을 몇 번이나 써 놨는데, 어떻게 저런식의 구분을 한 요청을 할 수 있을까?

 

황당한 점 3번, 분석에 포함된 모든 인원에 대한 비지도 학습 필수?????

Unsupervised learning이 도대체 뭔지 이해나하고 있는 상태에서 보낸 요청인지 궁금해진다. Unsupervised learning은 저런 종류의 설문조사 데이터라면 그룹을 묶어내는 용도로 밖에 쓸 수가 없다. 기껏해야 변인 20개로 자살할지 말지를 찾아내는 작업이니 Skewed data (또는 Imbalanced data) 처리를 위해서 일부 Unsupervised 컨셉을 활용할 수도 있겠지만, 저런식으로 “비지도 학습 필수” 같은 황당한 요청이 들어가는 건 모델링이 뭔지 전혀 이해를 못하고 있다는 뜻으로 밖에 볼 수 없다.

 

그 외에도 황당한 점 투성이의 요청이 잔뜩 든 메일이었는데, 한 마디로 요점을 정리하면 “그냥 아무것도 모르는 사람이 쓴 요청”이라고 정리하면 될 것 같다.

이런 요청이 한 번 뿐이었으면 그냥 웃고 넘어갈 수도 있는 이벤트였을 것이다. 근데 지난 1년간 저런 종류의 황당한 이메일을 최소한 10번은 받은 것 같다.  메일의 아마추어리즘 기준을 좀 더 올리면 10번이 아니라 30번도 헤아릴 수 있을 정도다.

 

만약에 내가 저런 요청을 보냈다면?

만약 내가 같은 종류의 요청을 보냈다면 아래의 3줄 메일에 데이터 column이름과 3번째 row 정도까지의 Screen shot을 보냈을 것 같다. 그래야 어떤 종류의 데이터를 갖고 있는지 짐작할 수가 있을거 아닌가?

데이터의 종류: 설문조사 데이터 (언제, 어디서, 어떤 목적으로, 어떤 종류의 질문들, 어떤 사람들을 대상으로 조사한건지)

연구 목적: 자살사고 예측, 자살사고 시도할 가능성이 높은 그룹 선별

추가요청사항: 플랫폼을 R로, n년치 데이터인만큼 시간의 흐름에 따른 고려 필수

딱 이렇게 보냈을 것 같다.

법적 자문을 구해야해서 변호사들을 만나는데, 법 지식이 거의 없는 나같은 사람이 어떻게 하면 가장 효율적인 일처리를 할 수 있을까? 변호사 친구들 이야기도 별반 다르지 않다. 현재 상황을 간단하게 요약 정리하고, 원하는 내용을 짧게 포인트로 정리하지, 괜히 법 조항 뭘 주워들었다고 이것저것 이야기를 늘어놓으면 변호사들한테 놀림감된다고. 어차피 복잡한 분쟁일수록 실력있는 변호사가 자신이 짜맞춘 스토리에 법 해석을 가미하는 작업이라고.

저 분께 답장을 이렇게 했었다.

(중략)

몇 가지 짚고 넘어가고 싶은 내용은, 무슨 모델을 써 달라, 98% 이상 정확도를 맞춰야한다 등은 모델러나 발주 측에서 정하는게 아니라, 데이터가 정하는것이라고 생각합니다.

저는 대상 데이터의 형태와 리서치 목표에 따라 합리적으로 보이는 모델들을 활용할 뿐입니다.

정확도라는 것도 어떤 모델을 어떻게 활용하느냐는 제한적인 성과 밖에 없고, 데이터의 퀄리티에 기인하는 바가 큽니다.

데이터를 보진 않았습니다만, “중복응답문항도 종종 있음”이라는 문구를 봤을 때, 단순 설문조사 데이터인 것 같은데, 그 정도 데이터라면 무거운 Neural net 모델 (일반에 딥러닝으로 알려져 있습니다)을 굳이 써야할 데이터는 아닌 것으로 판단됩니다.

그리고 비지도 학습이라는 건 데이터에서 input값만 알고 있고, output 값을 모를 때 데이터를 분류하기 위해서 쓰는 작업입니다. 모르는 내용을 알아 맞추는 작업이 아니에요.

(중략)

혹시나 다른 전문가 분께서 보시기에 필자의 답장이 잘못되었다고 판단되면 댓글로 or 이메일로 지적해주시면 좋겠다.

 

나가며 – 모르면 당한다

어느 보안전문 코스닥 상장사에 일하는 분이 수업에 찾아왔다가 정부 과제를 맡았는데 “무조건 99%가 나와야 된다네요. 머신러닝이 무슨 요술봉인줄 아는 사람이 많다는 말 안 믿었는데, 진짜 그런 사람 엄청 많더라구요 ㅠㅠ” 라고 하시더라.

그런 이야기를 들어주기도 정말 답답하더라.

합리적인 요청이 들어오면, 또 공익에 도움이 된다 싶으면 바쁜 와중에라도 짬을 내서 돕고 싶은 마음이 생기는게 인지상정이다. 그런데, 위에 보신 내용의 요청이 들어오면 박사 친구들끼리 낄낄거리는 웃음거리로 쓰지 않기 위해서 마음 수양을 해야한다. (or 메일을 빨리 삭제한다.)

그 동안 컨설팅 의뢰는 무조건 거절한다고 못을 박고, 외부 강의 요청도 어지간하면 칼같이 끊어버렸던게 모두 같은 이유에서였다.

누군가는 저런 요청에도 무조건 맞출 수 있다는 식으로 프로젝트를 우선 따오는게 중요하지 않냐, 그게 진정한 세일즈의 마인드 아니냐고 반문하실수도 있겠다. 왠지 잘 모르는 “갑”을 골려먹는 “을”들이 평소에 하는 말인 것 같기는 하지만….

이런 종류의 지적 노동의 결과물을 의뢰하는 작업은 언제나 “갑”이 얼마나 똑똑하냐에 따라 실력이 좋은 “을”을 골라낼 수 있느냐가 결정된다. 비슷비슷한 상품 중에 가격이 낮은 상품을 구매하는게 아니라, 좋은 퀄리티의 상품을 구매하지 않으면 돈만 버리는 꼴이 되기 때문이다.

실력 좋은 사람 추천해달라고 전화 & 메일 받을 때마다 하는 이야기다.  당신들이 실력이 있어야 실력 좋은 사람을 알아볼 수 있는거 아닌가?

변호사 수임료 1억원을 써야하는데 백만원내고 수업 하나 들으면 훨씬 더 좋은 변호사를 찾을 수 있고, 시간을 효율적으로 써서 시간 당 페이 금액을 줄일 수 있다면 어떻게 하시겠는가?

 

비전문가들도 데이터 사이언스 공부해야하는 이유 (1)

블록체인이나 (비트)코인을 이야기하면, 보통은 트렌드 용어라서 들어봤는데, 사실 내용은 잘 모른다는 반응이 대부분이다. 그나마 관심있게 공부한다는 분에게서 “Decentralized”여서 중앙 통제 시스템이 없어도 잘 돌아가는 시스템, 궁극적으로는 서버를 모두 대체할 수 있는 시스템이라는 설명을 들을 수 있다. 그런데, 도대체 Decentralized가 왜 그렇게 중요한 포인트일까? 그럼 왜 인류의 역사 내내 중앙 통제없는 시스템이 제대로 성립될 수 없었고, 왜 블록체인이라는 시스템이 나와서야 그런 문제가 해결되었다고 하는걸까? 도대체 블록체인이 뭐길래?

(Source: 네이버 웹툰, 가우스 전자)

– 작가 분의 동의를 받지 않은 관계로 요청시 삭제합니다

 

Double Spending Problem

단순한 중고나라 현금 거래를 생각해보자. 딱히 중고나라를 폄하할 생각은 없지만, 핸드폰 하나 사려고 했다가 사기 당해서 돈만 날렸다는 불평을 주변에서 한 두번은 들어본 적이 있을 것이다. “평화나라”, “사기나라” 등등의 수많은 비아냥 멸칭들이 생겨난 것도, 그런 사기꾼들을 쉽게 걸러낼 수 없고, 경찰에 신고해서 조사를 기다리다가 결국엔 돈을 떼이는 일이 자주 발생하기 때문일 것이라고 생각한다.

대안으로 직거래를 한다고 하지만, 정작 직거래로 구매한 제품도 집에와서 다시 훑어보니 문제가 있는 경우도 많고, 아예 마음 편하게 수수료 주고 중고 거래 플랫폼으로 알려진 used.axxxxxx.co.kr 같은 웹페이지를 활용하는 사례도 종종 있을 것이다. 중고 거래 플랫폼을 쓴다는 말은 “중간 관리자“를 통한 거래를 한다는 말과 같다.

비슷한 맥락을 현금대신 어음으로 결제하는 방식의 신용거래에서도 찾을 수 있다. 은행같은 중앙 컨트롤 타워에서 양측의 거래를 정산, 기록, 보증, 관리해주는 서비스는 결국에는 중간 관리자가 있어야 거래의 안정성을 담보할 수 있다는 경험에서 나온 것이라고 봐야한다.

어음을 개인간에 거래한다면, A와 B 모두에게 어음으로 결제한 다음에 어느 한 쪽에 (or 양쪽에) 부도를 내는 일이 굉장히 잦을 것이다. 이런 식으로 여러 곳에 거짓 약속(False promise)을 하는 판매자들의 문제를 Double Spending Problem 이라고 부른다.

그럼 Double Spending Problem을 해결하기 위해서 Centralized 시스템을 구성할 수 밖에 없을까?

상호간의 신뢰만으로 구성되는 거래 시스템을 구축하겠다는 건 너무 순진한 생각인가?

일본에서 Paidy라는 서비스가 비슷한 컨셉으로 시행되고 있다. 온라인 상점에서 Paidy 결제를 신청하면, Paidy에서 먼저 지불해주고 유저들은 최대 18일안에 Paidy계좌로 송금해주면 된다. 이게 일본처럼 내부 신뢰도가 높게 쌓인 나라에서는 가능한 이야기일지 모르겠지만, 다른 나라에서는 가능한 이야기일까? (중고나라 사기꾼들을 보면 우리나라에서는…..?????)

 

블록체인의 거래 승인 구조

블록체인은 Double Spending Problem을 막기 위해서 시스템 참여자 모두가 거래를 승인하는 네트워크형 정보 처리 시스템을 응용한다. 위의 그림을 보면, 송금자인 Alice의 Public Key는 모두에게 공개되어 있고, 모두가 그 Key를 이용해서 거래를 승인하게 된다. Alice는 Bob에게 100달러를 송금하면서 Private Key를 이용해 자기 지갑을 열고, 거기에 Transaction을 기록 + 싸인해서 전송한다. 이 정보는 Alice의 Public Key와 함께 전송되어서 네트워크에 있는 모든 유저들이 Alice의 Public Key를 이용해 결제를 승인해준다. 모두에게 공개된 정보이므로, 누구 하나가 거짓말을 해봐야 거짓말을 했다는게 들통날 수 밖에 없다. (자세한 내용은 이전의 Byzantine Generals’ Problem 참조)

자 그럼 기록을 어디에 할까?

여기서 블록체인의 “블록”이 등장한다. 거래 내용을 “블록”에 기록해야하는데, 누군가 그 “블록”을 생성해줘야 한다. 누가 해 줄까?

비트코인 “광산”에서 “코인”을 “캔다”는 표현을 하던 분들이 기억나시는가?

입력 정보에 맞춰서 Hashed key를 매칭시키는 문제를 풀어낼 때마다 블록을 하나씩 생성해주고, 그 블록이 위의 거래 정보를 기록하는 저장 공간이 된다. 그 때 블록을 “캐냈던” Miner들에게 합리적인 보상을 해 줘야 그들이 계속해서 블록을 제공해주지 않을까?

방금 생성된 블록의 정보도 담고 있으면서, 그래서 블록이 거짓으로 생성된 것이 아니라는 걸 담보해주면서 동시에 “화폐”가 될 수 있다면? 비트코인은 바로 이런 관점에서 생성된 것이다.

말을 바꾸면, 코인은 블록이 다음 블록으로 연결되도록 만들어주는 Hash 정보를 담고 있는 열쇠이면서, 동시에 코인 경제 시스템에서 화폐 역할도 하는 2중의 기능을 갖고 있다.

** Alice가 Public key를 배포하는 시점에 Alice를 공격하려는 “해커”가 Alice의 공개키를 자신의 키로 바꿔서 중간에서 정보를 해킹하는 경우가 있기 때문에 (Main-in-the-Middle Attack), Public Key와 Private Key가

  1. 수학적 연관성을 갖도록 구조를 짜고 (Hashed Key를 찾아내는 계산 작업이 들어가는 부분)
  2. 안전하게 묶일 수 있는 Public-Key Infrastructure (PKI)도 필요하다

때문에 시스템 구성이 복잡해지고, 처리 속도가 느려질 수 밖에 없다. 구체적으로 어떻게 느려질까?

 

Proof of Work (PoW)가 작동하는 방식

위에서 앞의 블록에서 나온 Hashed key와 맞는 조합 (160개의 문자/숫자열)을 찾아내면 그 다음 블록이 생성되고, 그 때 찾아낸 값을 Nonce라고 부른다.  만약 2명의 Miner들이 동시에 Nonce를 찾아냈고, 그래서 Block 2가 1개가 아니라 2개가 동시에 생겨났다면? 둘 중 어느 Miner에서 Bitcoin을 줘야할까?

일반적인 시스템은 그 다음 Block이 생성될 때까지 기다려서, 더 길이가 길어진 블록이 앞으로 활용될 블록이라고 결론을 내리고, Block 3이 생성된 이후에 Block 2 만든 Miner에서 보상을 준다. 근데, 혹시 Block 3도 2개가 같이 만들어졌다면? 이거 끝이 있을까?

저런 Proof of Work 시스템이 언젠가는 더 길이가 긴 블록체인에게 보상을 주는 방식으로 문제를 극복할 수 있다지만, 정작 사기꾼이 개입할 수 있는 여지가 엄청나게 많다. 몇 가지만 예시를 들어보자.

 

Race attack

아주 짧은 시간 안에 2개 이상의 다른 주소로 같은 Coin을 보내는 꼼수를 쓰는 사기꾼을 생각해보자. 전형적인 Double Spending Problem의 사례인데, Block 2가 동시에 생성되기 때문에 Block 3을 먼저 만들어내는 쪽으로 유지되고, Block 3을 늦게 만들어내면 닭 쫓던 개 지붕 쳐다보는 격이 된다.

 

Finney attack

위에 비슷한 방식인데, Block을 (몰래) 미리 만들어 놓은 다음, 거래 정보를 2곳 이상으로 보내면서 기록하면 첫번째만 기록되고, 2번째는 기록이 안 되지만 정작 거래 정보는 발신된 상태가 된다. 역시 피해자가 발생한다.

 

Majority attack (51% Attack)

위의 두 종류의 사기보다 훨씬 더 어렵지만, 시스템을 완전히 망가뜨릴지도 모르는 엄청난 사기다. 보통 Conflict이 생길경우 더 길이가 긴 블록체인에게 코인을 주는 방식을 이용해서, 시스템 내의 블록 과반수를 장악해버리는 것이다. A가 B에게 엄청나게 많은 숫자의 코인을 보내줬다고 가짜 기록을 발신한 다음, 그 기록이 남은 블록 위에 빠른 속도로 다른 블록들을 우르르르르~ 추가해버리면 A는 영문도 모르는채로 B에게 엄청난 숫자의 코인을 보내주게 된다. 51% 장악하기가 어렵기는 하지만, 신규 코인에서는 흔히 발생하는 문제다.

 

게임이론의 등장

Schelling Point라는 게임이론 개념이 있다. 보통 흔히들 생각하는 방식, 일반의 상식대로 따라가게 되는 경향성을 지적하는 개념이다. 예를들어, 7864239, 3423123, 1000000, 2312354 같은 숫자를 던져놓고, 하나를 고르라고 하면 대개는 1000000을 고른다. 일반의 상식이다.

덧붙여서 Grim Trigger Equilibrium은 최악의 상황을 피하기 위해서 서로가 서로의 상황을 이해하고 타협하는 것이 인간의 본능이라는 컨셉에서 출발한다.

위의 Proof of Work가 정상적으로 작동하기 위해서는 Miner들이나 블록체인 이용자들이 합리적인 의사결정 구조를 갖고 있고, 집단적으로 합리적인 행동이 무엇인지에 대한 공감대가 형성되어 있어야 한다. 누구나가 51% Attack을 꿈꾸고 있다면 위의 블록체인 구조는 작동될 수가 없다. 모두가 남의 뒤통수만 치려고 하는 시스템이 유지되기 위해서는 어쩔 수 없이 Central authority가 개입해야하기 때문이다.

그런 지식을 바탕으로 하고 있는 상태에서 Schelling Point 형태의 행동 양식이 작동하면 시스템을 공격해서 부당 이득을 취하려고 하기 보다는 시스템을 활용하겠다는 접근법을 쓸 것이라는 기대가 바로 블록체인의 근간이다.

그러나…

중고나라도 모두가 사기를 치려고 하면 아무도 중고나라를 이용하지 않을 것이라는 극단적인 논리와, 모두가 서로에게 진실되면 중간 매개체가 필요없다는 이상주의적인 관점 사이의 어느 지점에서 우리 사회의 한 단면을 볼 수 있듯이, 블록체인 자체도 완벽하게 De-centralized 시스템으로만 운영되기는 어려운 점이 있다.

 

나가며 – What to do

블록체인 커뮤니티도 단순한 프로파간다 형태의 De-centralized 구조로 시스템을 운영할 수 없다는 사실을 인지하고 있다. Chain의 구성 방식도 Centralized와 Complete Network의 어느 중간 형태인 Extended star network를 만들어서 “모두가 결제를 승인”한다는 컨셉에서 한 발자국 벗어나고 있고, 계산 처리 속도를 높이기 위해서 네트워크 구조를 더더욱 단순화하는데 초점을 맞추고 있기도 하다.

어떤 형태의 네트워크를 골라서 Double Spending Problem과 Decentralized 시스템의 조화를 이룰 것인가는 고민에는 언제나 위의 게임이론 컨셉들이 활용된다. “모두”가 아니라 “일부”만 승인해야 되는 시스템이라면, “일부”를 누구로 고르느냐에 따라 Miner들의 참여 인센티브도 달라지고, 시스템의 결제 처리 속도도 달라지기 때문이다.

실제로, VISA 카드는 1분에 1,500만건의 거래를 처리할 수 있는 중앙처리 시스템을 갖추고 있는데, 비트코인은 4건, 이더리움은 겨우 15건을 처리할 수 있는 속도라고 서버 담당하는 분들에게 혹평을 듣는 사례를 본 적이 있다. 그렇다고 더 빠른 속도로 처리하려면 Nonce 하나 계산하는데 들어가는 시간을 지금보다 현격하게 줄여야하는데, BGP 풀이에서 봤듯이 시간 차이를 이용한 거래 검증 시스템이 고속화와 충돌이 일어나지는 않을까? GPU 계산이 느리니까 지금처럼 GPU 계산을 꾸준히 유지해야 거래 기록의 진실성을 유지할 수 있다던 어느 담당자 분께 그래픽 카드 계산이 더 빨라지면 어떻게 하실꺼냐니까 딱히 합리적인 대답을 못 내놓더라.

말은 번드르르하지만, 현실은 아직 첩첩산중이다.

가까운 펀드 매니저들이랑 이야기를 해보면, 자기네가 제일 비웃는 사람들이 “종목을 추천해달라”고 하는 사람들이란다. 어떤 나라가 전망이 좋고, 어떤 산업이 전망이 좋고, 어떤 기술이 전망이 좋은지에 대한 고민을 해서 관련 테마에 맞춰 시장 점유율 같은 적절한 비율로 투자하는게 초단기 단타를 노리는 일부 헤지펀드를 제외하면 일반적인 투자자들의 관점이다. 그런데 “종목을 추천해달라”는건 어디서 주워들은 대박난다는 소문을 자기하고 좀 공유해달라는 소리로 밖에 안 보인단다. 그런 소문말고 정말 내부 정보를 알고 투자를 하는건 엄연히 불법이다. 펀드 매니저 지인들이 이슈만 따라가고 있는 다른 펀드 매니저들을 무시하는 것도 아마 같은 이유일 것이다. 산업 전망이니, 기업 상황이니 등등의 복잡한 건 모르겠고, 그냥 종목 하나 골라주면 니 말 믿고 거기에 투자했다가 망하면 너한테 욕하겠다는 마인드랑 다를게 뭐가 있나?

요즘 연말이되니 교육 예산이 남았는지 “딥러닝” 강의 해달라는 요청이 엄청나게 늘었다. pabii 블로그를 계속 보신분들, 특히 수업을 직접 들으신 분들은 이해하겠지만, “딥러닝”을 가르쳐달라는 요청은 “종목을 추천해달라”는 요청과 별반 다르지 않은 피상적인 접근법이다.

왜? Neural net이라는게 결국 Logit과 Decision Tree와 Ensemble 모델의 결합이기 때문이고, 각각의 모델을 이해하고 나면 Neural Net의 여러가지 응용 모델들 (RNN, CNN)과 Reinforcement Learning 모델을 이해하기도 쉽고, 모델을 정교화할 때도 같은 지식을 활용하고, 문제가 생겼을 때 해결할 때도 그런 기초 지식을 쓰게되기 때문이다. 수업 커리큘럼을 이렇게 순서대로 짜놓은 것도, Neural Net 에만 집착하지 않는 것도 같은 이유다.

아래는 얼마전에 요청받은 1주일 코스의 딥러닝 강의 계획표 중 하나다.

 

(Source: 딥러닝 강의 계획표)

이게 딱 우리나라의 현실이다. 앞에 다른 내용들은 하나도 몰라도 되고, 그냥 Deep Learning 이라는것만 배우면 된다고 생각하기 때문에 나오는 커리큘럼이다. 저런 방식의 수업을 듣지 않고, 시계열에 대한 이해가 있는 상태에서 시계열 데이터를 Seasonality decomposition 하는 예제 1개, RNN 기본 예제 1개, LSTM 예제 1개, 그리고 주식 가격 같은 데이터로 응용하는 예제 1개 정도만 돌려보면 Neural net의 RNN 계열 모델이 어떤 모델이고, 어떤 데이터에서 잘 작동하는지 스토리를 그려가면서 따라올 수 있다.

다 가르치는데 들어가는 시간은? 3시간이면 충분하다. 시계열 데이터의 형태와 Neural Net이 어떤 모델인지만 알고 있다면.

모델에 대한 기초가 있다면 RNN이 깨질 때, LSTM 모델이 잘 안 돌아갈 때 Hidden Layer 숫자만 늘렸다 줄였다하는 단순무식한 디버깅이 아니라, 어떤 방식으로 모델에 손을 대야, 혹은 다른 모델을 어떻게 써야 지금 겪는 문제를 해결할 수 있을지 알아낼 수 있지 않을까? 그래서 기초를 가르치는데 긴 시간을 투자하고, 저런 응용 부분은 빠르게 코드를 훑고 가는 강의를 짜 놓은 것이다.

참고로 MNIST (위의 표에는 MINST라고 오타..) 데이터를 이용해서 숫자 0~9까지 인식시키는건 예제 코드 한번만 돌려보면 된다. 위의 표처럼 점심시간 앞 뒤로 2시간이나 쓰는 강의는 다양한 Variation을 다 가르칠 수 있는 예제에나 해당하는 이야기지, MNIST 데이터처럼 단순히 손으로 쓴 숫자들 몇 개에는 해당사항이 없는 이야기다.

까짓꺼 위의 커리큘럼대로 강의해주는거 어려운 거 없다. pabii의 수업을 다 들었고, 저런 종류의 외부 강의들 한번 들어봤으면 알겠지만, pabii 수업에서 3시간만에 강의 할 내용을 다른 강의들에서 4-5배의 시간을 들여서 강의하고 있을 것이다. 그렇게 느릿느릿하게 코드 한 줄 쓸 때마다 여러분도 다 쳐 보세요, 다 실행 버튼 한번 눌러보세요~ 라고 가르치면 된다. 윗 계획표를 보면 마지막 날 좀 어려운 예제라고 가르치는데 OpenAI Gym에 다 공개된 예제들 Cart pole, Frozen lake 같은 걸 돌려보네? 이거 주제 하나당 블로그 글을 최소한 100개는 찾을 수 있을 것이다.

그런 시간 낭비 강의, 블로그 수준의 강의는 양심상 못 하겠더라.

 

나가며 – 딥러닝 강의 요청에 대한 단상

저런 식으로 자기들만의 커리큘럼을 강요하는 분들께 한번 물어보고 싶다. 내가 당신들보다 배운 것도 훨씬 더 많고, 이런쪽 경험치도 훨씬 많은데다, 가르친 짬도 쌓였고, 심지어 박사 학위 중에 석사생 대상으로 한 강의에서 Teaching Award도 받은 사람인데, 내가 만든 커리큘럼이 다 이유가 있어서 그렇게 만들었다는 생각을 해 본적은 없나?

작년 이맘때쯤에 4차산업을 선도하는 어느 교육기관이라는 곳에서 3시간 8번이나 되는 “구질구질”한 강의 하지말고, 하루 6시간씩 2번 짧게 핵심만 요약하는 강의를 해달라고 했다. 데이터 사이언스 기본 강좌를 듣고 나가시는 분들께 가끔 그 이야기를 해 드리면, 48시간도 부족해 보이는 강의를 꽉꽉 우겨넣은 24시간 강의를 듣고 나가는 판국에, 이걸 소화하려고 동영상 강의 복습에 2배 이상의 시간을 투자해야될 것 같은데, 이걸 12시간만에 가르치라는건 논리와 맥락을 다 빼고 코드만 봐야될 것 같다고, 수업의 핵심을 다 포기해라는거 아니냐며 허탈 웃음을 지으셨다.

수학 & 통계학으로 내공이 단단하게 쌓인 연구소 박사 분들 반응도 별반 다르지 않다. 하물며 내공도 없는 사람들에게 기초적인 배경 지식은 생략하고 그냥 “딥러닝”만 바로 가르치라고하니, 가르치는 사람도 어이가 없고, 배우는 사람도 다 포기하고 코드만 보게 되는 것이다. 아니면 코딩만 할 줄 아는 사람이 가르치게 되던가.

요약: 이 보고서에서 저희는 “비트코인 코어 (Bitcoin Core)” 소프트웨어 프로젝트의 힘과 역학에 대해 살펴보고 비트코인 소프트웨어 프로젝트와 경쟁할 수 있는 다양하고 각기 다른 방법들 간의 차이점에 대해 알아보겠습니다. 또한 비트코인 코어 소프트웨어 저장소에 비트코인 합의 규칙을 변경하거나 변경을 막는 특별한 기능이 있다는 오해에 대해 설명할 것입니다. 이어서 널리 알려진 몇 가지 오해에 관해서도 다룰 것이며, 만일 비트코인 코어가 삭제되거나 범죄자들에게 장악되더라도 비트코인은 큰 영향을 받지 않을 것이라는 사실에 대해서 설명할 것입니다.

비트코인 코어와 “경쟁”할 수 있는 다양한 방법을 담은 벤 다이어그램

(출처: Bitcoin ABCBitcoin UASFBTCGPUBitcoin XTBTC1Bitcoin ClassicBitcoin Cash CobraBitcoin SV,Bitcoin UnlimitedBitcoinXBitprimBcoinParity BitcoinBTCDLibbitcoinCaesureBits of ProofBitcoinj,Ufasoft CoinBitcrustPicocoinBitcoin AddrinexBitcoin KnotsBitcoin-RBFBitcoin BitMEX Research)

3가지 종류의 경쟁

비트코인 코어와 경쟁 관계에 있는 소프트웨어 프로젝트들은 3개의 그룹으로 분류할 수 있습니다:

경쟁 유형 설명
체인 간 경쟁 이 유형은 경쟁 관계에 있는 소프트웨어 프로젝트가 고의적으로 사용자들이 현재 실행 중인 구현체와 다른 합의 규칙을 가지고 있을 때를 말합니다. 하드포크와 소프트포크 모두 여기에 포함됩니다. 이러한 소프트웨어의 운영은 특정 환경에서 위험한 행위로 간주됩니다. 왜냐하면 해당 소프트웨어가 암호화폐를 두 개의 체인으로 분할시킬 수도 있기 때문입니다. 따라서 이러한 유형의 경쟁은 비트코인의 서로 다른 구현체 (implementations)와 경쟁하기 보다는 다양한 암호화폐/체인들 간에 이루어집니다. 실제로 누군가가 비트코인 코어의 소프트포크를 시행하여 합의 규칙을 변경할 경우, 대부분의 코드는 동일한 개발팀에 의해 작성되었을 가능성이 높습니다. 따라서 이는 개발팀과 경쟁하는 것이 아닌 잠재적으로 동일한 개발팀에 의해 작성된 코드를 가진 새로운 암호화폐를 출시하는 셈입니다.
독립적 구현체 (independent implementations)
간의 경쟁
이 유형의 경쟁은 비트코인이 비트코인 코어에서 코드를 사용하지 않고 재구현 (re-implemented)되었을 경우를 말합니다. 일반적으로 새로운 코딩 언어를 사용하는데, 이는 다른 코딩 언어들의 장점을 흡수하기 위해서 입니다. 첫 번째 유형의 경쟁처럼 다수의 사람들은 이 유형의 경쟁 또한 위험하다고 생각합니다. 그 이유는 이 경쟁이 뜻하지 않게 서로 다른 합의 규칙에 의해 야기된 무계획적인 체인 분할 가능성을 증가시킬 수 있기 때문입니다. 대체 클라이언트 (alternative client)는 소프트웨어 사용자들이 현재 운영중인 합의 행위 (consensus behaviour)와 심지어는 버그 또는 대다수 클라이언트 내의 의도치 않은 행위 (unintended behaviour)와 일치시켜야 합니다.
기타 경쟁관계에 있는 소프트웨어 프로젝트들(합의 규칙을 변경하거나 코드베이스를 재구현하지 않는) 합의 규칙을 변경하지 않고, 독립적인 새 코드베이스를 작성하지 않고도 비트코인 코어와 경쟁할 수 있습니다. 프로젝트의 소프트웨어 포크를 시행한 뒤, 합의 규칙이 아닌 것만 변경하면 됩니다. 이 유형의 경쟁은 위에서 언급한 두 유형보다 많은 위험을 수반하지 않습니다.

경쟁 관계에 있는 합의 규칙에 관한 논쟁

이 주제는 비트코인 커뮤니티 내에서 2015년 여름부터 2017년 11월까지 “블록사이즈 전쟁 (blocksize war)”의 맥락에서 폭넓게 논의되었던 주제입니다. 저희는 이 보고서에서 해당 주제에 대한 모든 주장을 다루지 않을 것이며, 주 목적인 각기 다른 종류의 경쟁을 제대로 설명하기 위해 해당 주제를 활용할 것입니다.

경쟁에 찬성하는 입장 경쟁에 반대하는 입장
합의 규칙에 대한 경쟁은 권장되어야 합니다. 이는 암호화폐의 유동성을 보장하고 적응 및 경쟁할 수 있게 하기 때문입니다. 현상유지 룰셋 (ruleset)의 모델은 논쟁의 여지가 있는 상황에서 소수가 항상 모든 변화에 반대하므로 매우 설득력있는 경우에도 규칙이 절대 변경될 수 없음을 의미합니다. 합의 규칙에 대한 경쟁은 많은 사람들이 생각하는 것보다 심각한 혼란을 가져올 확률은 훨씬 더 낮습니다. 실제로 대기업과 커뮤니티는 하나의 암호화폐를 지지하여 경제젹 다수를 따르거나 해시래이트의 다수를 따를 이들로 고객을 변경합니다. 경쟁은 위험하고 암호화폐의 안정성을 위협하기 때문에 합의 규칙에 대한 경쟁은 피하는 것이 최선책입니다. 논쟁이 생길 경우, 현재의 합의 규칙이 우세할 것이며 이는 비트코인의 중요하고 독특한 특징인 2천 1백만개 발행 한도와 같은 현재의 합의 규칙을 유지하게 합니다. 따라서 폭넓은 합의없이 합의 규칙을 변경했을 경우, 혼란이 야기되는 점은 비트코인의 바람직한 특징이라 할 수 있습니다. 이에 따라 합의 규칙의 변경은 다음의 두 방법 중 하나로 이루어집니다:

  1. 암호화폐 사용자 커뮤니티 그리고 기술 전문가와의 폭넓은 합의 후, 사용자에게 클라이언트를 업그레이드할 충분한 시간을 제공합니다
  2. 개발자가 충분한 수의 사용자들이 새로운 규칙으로 업그레이드할지 확신할 수 없을 때, 이는 새로운 암호화폐가 출시되는 계기가 될 수 있습니다. 이 경우, 탄탄한 양방향 재연 방지 (replay protection)과 체인 와이프아웃 방지가(wipeout protection) (완전 검증 클라이언트와 라이트 클라이언트 둘 다를 위한) 사용자 자금 손실의 위험성을 낮추기 위해 필수적일 것 입니다

(합의 규칙의 변화가 소프트포크를 통해 이루어진 경우 (하드포크와 반대되는), 대다수 마이너들의 업그레이드가 있어도 체인 분할을 막을 수 있을 것입니다)

독립적 구현체 간 경쟁에 관한 논쟁 

위 처럼 이 역시 매우 논란이 많고 논쟁의 여지가 있는 주제이지만, 우리는 합의 규칙을 고의적으로 변경하는 것이 경쟁과는 근본적으로 다른 문제라고 생각합니다.

경쟁에 찬성하는 입장 경쟁에 반대하는 입장
점유율이 가장 높은 구현체 (dominant implementation)가 예기치 못한 합의 버그 (consensus bugs)로 부터 네트워크를 보호할 수도 있지만, 이는 클라이언트의 고장과 예상치 못한 암호화폐 인플레이션을 야기시키는 특정 유형의 치명적인 버그들에 네트워크를 노출시킬 수도 있습니다. 위 같은 상황은 최근인 2018년 9월 발견된 치명적인 인플레이션 버그인 CVE-2018-17144에서 찾아볼 수 있습니다. 예를 들어, 각각 10%의 시장점유율을 가진 10개의 독립 구현체들이 있고, 버그는 클라이언트 고장 또는 인플레이션을 일으킨 하나의 독립 구현체에서만 발생했다면, 네트워크의 나머지 90%는 계속 정상적으로 작동할 수 있습니다. 그러므로 네트워크는 더 큰 회복 탄력성을 갖게 됩니다. 따라서 클라이언트 사용자 실행의 다양성은 중요한 원동력입니다. 이 유형의 경쟁에 있어 가장 강력한 반대론자는 아마도 사토시일 것입니다. 그/그녀는 다음과 같은 유명한 말을 남겼습니다:

저는 제 2의 호환성있는  비트코인의 구현체가 좋은 아이디어라 생각하지 않습니다. 설계의 대부분은 모든 노드가 철처하게 동일한 결과를 얻는 데에 달려있으며, 이 결과는 네트워크에 위험한 영향을 줄 것입니다. MIT 라이선스는 다른 모든 종류의 라이선스 및 상업적 용도와 호환되므로 라이선싱 (licensing) 측면에서 이를 재작성할 필요가 없습니다.

두 번째 버전은 저에게 엄청난 발전과 동시에 유지보수의 번거로움을 가져다 줄 것입니다. 두 번째 버전의 로크 인 (locking in) 없이 네트워크를 업그레이드 하는 동안 하위 호환성 (backward compatibility)을 유지하는 것은 어려운 일입니다. 두 번째 버전이 실패할 경우, 사용자 경험은 두 버전에 모두 부정적으로 반영될 것입니다. 비록 공식 버전을 계속 이용하는 것의 중요성을 사용자에게 강하게 인식시켰지만 말입니다. 누군가 두 번째 버전의 포크를 준비하고 있다면, 저는 소수 버전 사용에 대한 위험성을 담은 수 많은 고지사항 (disclaimers)를 발표해야 할 것입니다. 이 설계 방식은 의견 차이가 있을 경우 다수가 지지하는 버전이 승리하는 설계 방식이며, 소수 버전의 지지자들이 보기엔 매우 탐탁지 않을 것입니다. 저는 소수 버전을 이용하지 않을 것이며, 하나의 버전이 있는 한 소수 버전을 이용할 필요 또한 없을 것입니다.
(출처: Bitcointalk)

10개의 선호도 높은 구현체들이 있다는 것은 좋은 일입니다. 그러나 문제는 점유율이 가장 높은 단일 구현체로부터 네트워크를 합의 버그에 취약하게 만들 수 있는 각각 50%의 시장점유율을 지닌 두 개의 인기있는 독립 구현체와 같은 위험한 영역으로의 진입없이 다양한 클라이언트들로 이행되어가는 과도기의 문제입니다. 따라서 합의 버그를 최소한으로 유지하기 위해 철저한 검증을 거친 점유율이 가장 높은 단일 구현체를 확보하는 것이 더 나은 계획일 수 있습니다. 이 방법을 통해 모든 사용자가 네트워크를 신뢰할 수 있으며, 10%의 소수 체인은 10%의 사용자들에게 문제가 될 수 있습니다.

기타 경쟁 관계에 있는 클라이언트들

합의 규칙에 대한 경쟁을 반대하며 탄탄한 룰셋을 매우 선호하고, 구현체 간 경쟁에 관한 사토시의 부정적 견해를 맹목적으로 신봉하는 이가 있다해도 그것이 곧 그/그녀가 경쟁 소프트웨어를 보유해선 안된다는 것을 의미하지는 않습니다. 이 경쟁은 앞서 소개한 벤 다이어그램의 바깥 쪽, 백지와 같은 영역에서 이루어집니다. 합의 규칙의 고의적 변경과 코드의 재구현 또한 없는 이 유형의 경쟁은 저희가 말할 수 있는 한, 전혀 논쟁의 여지가 없습니다.

따라서 비트코인은 이론상으로 깃허브 (Github) 내의 특정 소프트웨어 저장소를 관리하는 사람이 누구인가 혹은 저자오 접근 권한을 가진 이는 누군인가와 같은 문제에 시달릴 필요가 없습니다. 저희는 이 문제들이 소프트웨어 프로젝트 간의 경쟁 위험성을 인식하고는 인지만, 서로 다른 유형의 경쟁을 올바르게 구분짓는데 실패한 이들에 의한 오해에서 비롯된 것이라고 생각합니다. 이런 이유로 많은 사람들은 모든 경쟁을 위험하거나 어딘지 모르게 용납할 수 없는 것으로 여기며 비트코인 코어의 위력을 과대평가하는 것처럼 보입니다.

비트코인 코어의 기원

2013년 이전에는 비트코인 코어라는 이름의 소프트웨어 프로젝트가 존재하지 않았습니다. 사토시 클라이언트는 단순히 참조 구현체 (reference implementation) 혹은 비트코인-QT/비트코인드 (Bitcoin-QT/Bitcoind)라고 불렸습니다. 그 해 2월, 주요 비트코인 개발자인 Gavin Andresen은 비트코인 재단 포럼에 다음과 같은 글을 올렸습니다:

오늘 있었던 인터넷 채팅에서 비트코인-Qt와 참조 구현체의 명칭을 변경하는 것에 대한 논의가 있었습니다; 저는 명석한 두뇌를 가진 여러분이 좋은 이름을 붙여주실거라 생각합니다.

그러자 또 다른 개발자인 Mike Hearn이 이렇게 대답했습니다:

좋아요. 드디어 이름을 정할 때가 왔군요. 한동안 이것 때문에 골머리를 앓았는데, 비트코인 코어는 어때요?
(출처: Bitcoin Foundation Forum)

실질적으로 변한 것은 없지만 이 때부터 많은 사람들이 해당 소프트웨어를 “비트코인 코어”라 부르기 시작했습니다. 비트코인 코어는 신중함과 안정성을 갖춘, Gavin의 말에 따르면 “바위처럼” 탄탄한 브랜드를 개발하기 시작했습니다.

“블록사이즈 전쟁”이 끼친 영향

블록사이즈 전쟁 동안 많은 사람들은 이 논쟁을 하드포크와 블록 사이즈 제한 증가에 반대하는 비트코인 코어 측 대 마이너 또는 대기업 간의 논쟁으로 특징지었습니다. 저희는 이 정의의 대부분이 잘못되었다고 생각합니다. 그러나 하드포크가 실행되지 않았기 때문에 이러한 정의를 만든 이들은 차후에 비트코인 코어가 우세하다고 결론지었습니다. 따라서 저희는 이 부류의 사람들이 현재 비트코인 코어의 힘을 과대평가하고 있다고 생각합니다.

비트코인 코어는 많은 이들이 생각하는 것 만큼 강력하지 않습니다

비트코인 합의 규칙을 규정하는 것은 비트코인 코어 소프트웨어 저장소가 아닙니다. 대다수의 사용자들이 현재 효율적으로 운영 중인 클라이언트들이 합의 규칙을 규정합니다. 이것들은 보통 이전에 공개된 비트코인 코어 버전입니다. 비트코인 코어 소프트웨어 프로젝트는 소프트웨어 사용자들이 실행 중인 것을 임의로 변경할 수 없으며, 사용자들은 많은 이들이 생각하는 것 보다 훨씬 더 독립적입니다. 비트코인 코어가 블록 사이즈 제한을 증가시키는 하드포크 클라이언트를 출시한다해도 커뮤니티가 업그레이드를 받아들일지는 확실하지 않습니다. 따라서 비트코인 코어 소프트웨어 저장소가 삭제, 해킹 혹은 장악되는 문제는 사람들의 생각보다 심각한 문제가 아닐 것입니다. 실제로 이런 일이 발생한다해도 실행 중인 클라이언트 사용자들에게는 영향을 주지 않을 것이며 추가적인 업그레이드나 개선이 필요한 경우, 사용자는 어떠한 조정 문제나 다른 위험성에 대한 걱정없이 다른 저장소로 옮기면 됩니다.

실제로 2017년 여름, 비트코인 UASF라는 클라이언트가 비트코인 코어와 경쟁하여 비트코인 코어를 무너뜨리고 고의적으로 네트워크 합의 규칙을 변경했습니다. 결론내리자면, 비트코인 코어가 가장 강력하다는 것은 블록사이즈 전쟁을 통해 얻은 잘못된 교훈일 뿐입니다.

비트멕스 리서치 (BitMEX Research)팀은 비트코인 코어와 경쟁할 새 클라이언트를 출시할 예정입니다 (이 글은 설명을 돕기위한 목적으로 작성되었습니다)

오늘 비트멕스 리서치 (BitMEX Research)팀은 비트코인 코어와 경쟁할 새 클라이언트인 비트코인 비트멕스 리서치 (Bitcoin BitMEX Research)의 출시를 발표했습니다. 이 클라이언트는 비트코인 코어의 소프트웨어 포크이기 때문에 사토시의 우려처럼 버그 호환성에 대한 버그 위험성을 수반하지 않습니다. 또한 비트멕스 리서치 클라이언트 (BitMEX Research client)는 비트코인 합의 규칙을 변경하지 않으므로 논란의 여지가 있는 체인 분할의 위험이 없습니다. 따라서 비트코인 코어 저장소가 장악되거나 삭제되어도 코드베이스는 비트멕스 리서치 클라이언트 (BitMEX Research client) 혹은 다른 클라이언트를 이용해 계속 개선될 수 있을 것입니다.

결론

블록사이즈 전쟁 결의안이 발표된 후, 비트코인 코어 소프트웨어 저장소의 위력은 지나치게 강조되었습니다. “저장소를 관리하는 이는 누구인가?”, “그들이 비트코인 코어 깃허브 (GitHub)를 삭제하면 어떻게 될 것인가?” 같은 것들은 이제 흔한 질문이 되어버렸습니다. 저희는 이런 질문들이 비트코인의 요점을 놓친 이들이 있음을 분명히 보여준다고 생각합니다.

사람들은 비트코인 프로토콜 규칙을 관리 및 통제해 줄 누군가를 원하는 경향이 있습니다. 블록사이즈 전쟁 이전과 전쟁 도중 다수는 이를 마이너, 대기업 혹은 비트코인 개발자 중 하나인 Gavin Andresen이라 생각했습니다. 이 전쟁이 낳은 예상치 못한 부정적인 결과 중 하나는 많은 사람들이 비트코인 코어가 이 역할을 한다라고 생각을 바꾼 것입니다. 인정하기 힘들겠지만 실제로는 최종 사용자가 궁극적으로 비트코인을 관리 및 통제합니다.

물론 위에서 언급한 내용이 비현실적일 수도 있고 실제로는 ASIC 제조사, 대형 마이닝 팜, 개발자, 대형 보관기관, 대형 거래소 심지어는 개별 소프트웨어 저장소가 훨씬 높은 영향력을 가지고 있는것이 사실입니다. 궁극적으로 사용자가 비트코인을 관리 및 통제한다고 말하는 것은 이상적일 수 있습니다. 하지만 그렇다면 “사용자가 관리하는 자금”의 의미는 무엇일까요? 사용자가 비트코인을 관리한다고 생각하지 않는다면, 비트코인은 정확히 누구를 위한 것일까요?

요약: 지난 2018년 3월 보고서에서 저희는 세그윗 (SegWit) 용량의 증가에 대해 알아보고 이를 비트코인 캐시 거래량에 비교했습니다. 저희가 초점을 맞춘 또 다른 주제는 체인 분할 이후 양쪽 체인을 향해 처음으로 이동한 암호화폐입니다 (2017년 9월 보고서 참조). 이번 보고서에서는 저희가 추적하고 있는 메트릭스 (metrics, 업무수행 결과를 보여주는 계량적 분석)에 대한 업데이트 사항을 간단히 살펴보겠습니다. 아래 데이터는 세그윗이 강력하고 지속적인 성장세를 누리고있는 반면, 비트코인 캐시 거래량은 밑바닥에서 9%대의 비트코인 거래량 수준으로 느리게 증가하고 있음을 보여줍니다. 2018년 10월에 포크가 시작된 이후, 처음으로 사전 분할 (pre-split)된 암호화페는 거의 없습니다.

 

 

세그윗 거래량 – 비트코인 거래량 비율 (일일 데이터)

(출처: BitMEX Research, Bitcoin blockchain)

2017년 9월, 이 주제에 관한 저희의 첫 번째 기사 발표 이후 비트코인 네트워크 상에서 세그윗 도입률이 상당히 증가했습니다. 현재 세그윗 도입률은 50%에 육박하며 증가율 역시 꽤 안정적이고 완만한 편입니다.

 

일일 거래량

(출처: BitMEX Research, Bitcoin blockchain, Bitcoin Cash blockchain)

위 도표가 보여주듯 비트코인 캐시의 거래량은 비트코인 수준의 c10%에서 2018년 3월 저희가 마지막으로 언급한 시점에는 6%로 감소했습니다. 그리고 2018년 늦여름 비트코인 캐시의 거래량은 10%대를 다시 회복했습니다. 비트코인 캐시 관련 수치는 2018년 8월과 9월에 실시된 “스트레스 테스트 (stress test)”에 의해 다소 왜곡되거나 편향되었을 수 있습니다. 그러나 최근 6개월 간 비트코인과 비교한 일일 비트코인 캐시 평균 거래 비율의 중간값은 9.0%로, 초기 최저치인 약 5% 또는 6%에 비해 회복되었습니다.

 

비트코인 캐시 출시 이후 누적 거래량

(출처: BitMEX Research, Bitcoin blockchain, Bitcoin Cash blockchain)

비트코인 캐시 출시 이후 2천 2백 1십만 건의 세그윗 거래가 이루어졌습니다. 이는 비트코인 캐시의 누적 거래 건수인 1천 8백 9십만 건 보다 고작 17% 많은 수치입니다. 위 도표가 보여주듯 이 수치는 스트레스 테스트로 인해 다소 왜곡된 듯 합니다.

2017년 7월 스트레스 테스트 시작 이전에는 비트코인 캐시 거래 건수보다 95.1%나 많은 1천 5백 5십만 건의 세그윗 거래가 이루어졌습니다.

 

포크 이후 암호화폐들의 첫 이동

(출처: Forks.networkOriginal chart idea from BitMEX Research)

저희의 투자자 흐름 (investor flow) 분석 시스템에 따르면 체인 분할 전 존재하던 910만 개의 비트코인이 포크 이후 최소 한 번에 걸쳐 이동한 것으로 나타났고, 이와 비교해 860만 개의 비트코인 캐시가 이동한 것으로 나타났습니다. 위 차트가 보여주듯 포크 이후 첫 암호화폐들의 경사도는 두 선이 분할되는 지점에서 차츰 평평해지기 시작했습니다. 잠재적으로 이는 향후 투자자 흐름에 막대한 변화를 줄 가능성이 희박함을 의미합니다.

제조업체에 근무하시는 분들이 수업에 찾아오거나, 빅데이터 컨설팅을 의뢰하는 경우가 꽤나 있다. 수업에 오신 분들이 수업 막바지에

“그 동안 IT나 Finance쪽 예시는 여러번 들어주셨는데, 제조업에 쓸 부분은 없나요?”

라고 질문하시는 경우가 있는데, 솔직히 말해서 별로 쓸 구석을 많이 못 만났다. 제조업 공정에서 이미지 인식으로 불량을 찾아내는 부분, 설비 노화의 정도를 예측하는 부분 정도가 겪어본 프로젝트이기 때문에 얼핏 떠오르는데, 앞의 예제는 빅데이터 활용이라기 보다는 20년전부터 있었던 불량율 찾는 자동화 시스템이고, 뒤의 예제는 센서 신호 데이터 처리하는 응용통계학 작업이다.

얼마전에 반도체 공정에서 생기는 불량을 잡아낼 수 있는 사람 추천해달라는 요청을 받은 적이 있는데, 반도체가 불량이 어디서 생기는지를 잘 알고 있는 Domain 전문가와 그런 지식을 모델로 바꿀 수 있는 모델러 능력이 결합된 사람이 얼마나 되겠냐고 반문해봤다. 이런 쪽으로 서비스가 있다는 것도 알고, 대기업들이 이미지 인식 쪽으로 석사 이상 공부한 인재들을 영입한 다음에 저런 업무를 주고 있다는 것도 안다. 잘 되고 있을까? 예상대로 직접 만나서 이야기를 들어보면 다들 Domain knowledge가 없어서 답답해하고, 현장에서 잔뼈가 굵으신 분들은 “뭐 딥러닝이라는거 쓰면 잘 된다던데요?”라는 반응들이다. 결국 이미지 인식해서 문제가 있을만한 부분이 얼마나 이상한지만 꼭꼭 집어내는 자동화 프로세스를 만드는 작업을 할 일인데, 인공지능이라고 그러니 알아서 척척척 찾아내 줄 거라고 착각들을 하는건지…

센서 신호 데이터 처리하는 프로젝트 했던 분과 이야기를 나눠보면, 예상대로 신호 데이터를 필터링 하려고 Kalman filter를 쓰고, 거기서 Sequence를 Frequency로 바꾸는 작업을 하셨더라. 오래전부터 있었던 전형적인 통계 모델링 작업의 일부다. 수업 시간에 말했던대로, 같은 아이디어와 방법론으로 센서 데이터만 처리하는게 아니라, IT나 Finance 쪽 데이터도 노이즈 제거 & 패턴 분석 용으로 자주 쓰인다. 냉정하게 말해서 “빅데이터”라는 타이틀을 달면 안 되는 작업들이다.

(Source: 네이버 웹툰, 가우스 전자)

 

빅데이터란?

그동안 줄곧 주장한대로, 빅데이터란 동적인 행동 패턴을 찾을 수 있는데, 이게 한 두명의 데이터가 아니라 수백만명의 데이터인 경우다. 그래서 동적 행동 패턴이 특정 집단에 나타나는 걸 잡아내는 계산을 쓰고, 이게 기존의 통계학 방법론들이 포커스 하던 부분 (수학적인 Elegancy)에서 벗어나 공학도들이 관심을 보이는 부분 (기계적인 패턴 일치율)에 활용되고 있는 맥락으로 이해하면 된다. 필자는 이런 데이터를 집단의 동적 행동 데이터라고 표현한다.

저 위의 웹툰에 나오는 정의는 필자의 관점에서 보면 틀린 정의다. 데이터 크기만 크고, 집단의 동적 행동을 볼 수 있는 데이터는 아니기 때문이다.

 

한국석유공사 – ‘국내유가예보서비스’

방송통신위원회나 한국인터넷진흥원 같은 정부기관들을 보면 빅데이터 시대를 준비해야한다며 빅데이터 사업단과 포럼을 만들어 놨다. 그런 기관 중 한 곳에 재직 중인 분이 수업에 오셔서 자기네 사람 뽑는 이야기도 해 주셨는데, 공학도를 뽑아야하는지, 통계학도를 뽑아야하는지 고민이 많다고 하시더라. 수업을 다 듣고는 이게 통계학이라는 것, 담당 업무가 통계학이라는 걸 깨닫고는 통계학과 출신을 뽑았다는 뒷 이야기를 전해주셨던 기억이 난다.

그런 기관들 중 하나로 한국석유공사가 ‘국내유가예보서비스’를 구축한 사례가 있다. SAS 수요예측 솔루션을 도입해, 국내 정유사와 주유소들의 판매가격을 예측할 수 있는 시스템을 구축했다고 하더라. 외부인은 어떻게 봤을지 모르지만, 필자의 눈에는 해외 원유가격, 국내 정유사의 생산비, 주유소별 마진율을 Input으로해서 주유소별 가격을 Output으로 뽑아내는 전형적인 통계 패키지 적용 사례였다. 아마 그런 데이터를 정리하기 위해서 주유소들더러 매일매일 가격을 시스템에 입력해라고 시키는 작업부터 그런 DB가 제대로 돌아가도록 하는 개발자들이 투입되는 비지니스적, 공돌이적 작업이 뒤에 있기는 했겠지만 말이다.

그런데 요즘 저 서비스 페이지에 들어가보면 “빅데이터 분석 사례”라고 크게 자랑을 해 놨다. 글쎄?

대략 4-5년 전 쯤에 주유소 별 유가를 보여주는 “가격비교” 서비스가 나왔을 때, 빅데이터 시대에는 정보가 잘 공유되어서 주유소들이 가격 책정도 경쟁적이 될 수 밖에 없다고 했던 때가 떠오른다. 그 시절에 비하면 위의 “예보 서비스”는 확실히 더 고급 서비스라고 생각한다. 단순히 숫자만 나열한게 아니라 최소한 (Non-)Linear Regression 모델은 한 번 돌린거니까.

어느 언론지를 보니 이걸 무슨 빅데이터 활용사례라고 하느냐고 비난조의 기사를 내놓으셨던데, 단순 가격비교 사이트가 시장의 수준이었음을 감안하면 충분히 박수를 받을만하지 않나? 문제점을 꼬집자면, 뭔가 대단히 복잡한 작업을 했던 건 아니고, 단순히 데이터 모아다가 SAS 패키지 하나 돌린 수준이면서 시대를 앞서가는 서비스인 것처럼 호들갑을 떠는것 정도랄까?

빅데이터 서비스라고 좀 더 자랑을 하려면, 주유소별 predatory pricing 으로 마진율을 역산해서 주유소들마다 등급을 매기는 작업, 유저들이 쓰고 있는 신용카드의 Cashback 서비스와 연동해서 실질적인 최저 가격 계산 작업 정도는 추가가 되었어야하지 않을까? 좀 더 나아가면, 이동 중에 이 서비스 앱을 켜면 전방 어느 지역에서 주유하면 실직적인 최저 가격이 된다는 추천이 되어야 엄지를 치켜세울 수 있는 서비스가 될 것 같다. (이런 서비스는 카드 결제 정보를 갖고 있는 회사들이면 지금도 충분히 시도해볼 수 있을 것 같다.)

물론 이런 계산 & 매칭 서비스를 내놓는데 딥러닝같은 무거운 계산 알고리즘을 써야할 필요도 없고, 철저하게 기획과 통계학적 모델링의 영역이다. 다 떠나서 이걸 “인공지능”이라고 포장하는 뻘짓은 정말 안 봤으면 좋겠다 ㅋㅋㅋ

 

(Source: 네이버 웹툰, 가우스 전자)

 

Smart factory 도입과 CRM과 빅데이터

“제조 공정에 인공지능을 도입하면 Six sigma보다 훨씬 더 효율적으로 공장이 돌아간다는 뜻인가요?”

가끔 이런 질문을 받으면 무슨 대답을 해야할지 잘 모르겠더라. 아래의 구질구질한 설명말고 한 줄 요약을 해 주실 수 있는 분께서 댓글로 어리석은 필자를 깨우쳐 주셨으면 한다.

솔직히 제조 공정에 별로 관심이 없던지라 처음에는 Six sigma가 뭔지도 몰랐다. 구글링을 해보니 Motorola에서 불량율 제로를 위한 컨설팅 회사스러운 Business process를 만들어 놨더라. 정규분포 기준으로 ±6σ는 0.000000000000003에 해당하는 값이다. 이거랑 인공지능 도입한다는 이야기가 어떻게 관련되는거지?

그런 대화 중에 받은 느낌은, DB에 쌓아놓은 데이터를 활용하면 인간이 직접 개입해서 Six sigma의 여러 작업 단계를 좀 더 효율적으로 진행할 수 있지 않냐는 기대감이었는데, 필자가 이해한 방식의 Six sigma는 공정에서 문제점이 있는 부분만 손을 댈 수 있도록 공정을 세분화하는 작업이었다. 근데…. 공정을 이렇게 운영하는게 당연한거 아닌가…요???

아모레퍼시픽에서 얼마전에 IBM의 컨설팅 지원을 받아 개인맞춤서비스를 만들었다고 한다. (11번가에서 비슷한 사업 중이라고 홍보했던 적도 있다.) 어느 제조사를 찾아갔더니, 그런 데이터가 있으면 아예 제조 공정에서 개인의 수요에 맞는 상품을 만들어낼 수 없냐고 하시더라. 그거랑 Six sigma가 연관있는건가?

아는대로 맥락을 이해해보면, CRM 최적화하는 “인공지능”을 제조공정 세분화에도 적용하면 재고 관리할 가능성이 낮아질만큼 쉽게 잘 팔리는 상품을 바로바로 만들어낼 수 있지 않느냐는 질문이었다는 짐작이 있는데, 화장품이나 간단한 소비재라면 가능할지도 모르겠지만 워낙 제조 공정이 어떻게 돌아가는지 알질 못하니 함부로 말을 못하겠다.

위에 들었던 그 언론지에서는 아모레퍼시픽이 IBM에서 컨설팅 받아서 내 놓은 개인맞춤서비스가 CRM 데이터를 효율적으로 쓰기 위한 (전통적인) 데이터 분류 작업에 지나지 않는데, 이게 무슨 빅데이터 활용 예시냐는 비판조였는데, 그것과 유사한 맥락으로 그 Smart Factory(?)에 대한 대답을 드리고 싶다. 소비자의 Needs를 분석해서 생산에 바로 연결시키겠다는 맥락은 하나도 변한게 없다고. 아마 CRM 데이터 분석이 좀 더 고도화될 수 있어서 좀 더 세분화된 소비자의 Needs를 알아낼 수 있는 가능성이 있다는 점, 소비자 별 특성을 알아내는데 매출액 레벨이 아니라 상품 클릭 레벨 단위까지 좀 더 구체적으로 볼 수 있다는 점을 제외하면 사실 큰 차이를 못 느끼겠다.

그나저나 공장에서 생산할 제품을 퐉퐉퐉~ 바꾸는거 그렇게 쉬운 일 아니지 않나? 원래 불량율이 ±6σ 수준이었던 공정들에 이런 종류의 Variation을 집어넣으면 불량율이 올라갈꺼 같은데…. 뭐 전문가가 아닌 관계로 요기까지.

(Source: 네이버 웹툰, 가우스 전자)

 

나가며 – “빅” + “데이터”  = 특정 집단의 동적 행동 데이터

빅데이터라는 용어에 대한 개념이 잘못 잡혀서인지, 무조건 데이터로 그래프만 그리면 “빅”을 갖다 붙히고 있는 상황이다. 그런 관점에서보면 잠깐 지나가는 비지니스 트렌드 용어로 끝나게 될 것 같다. 그런데, “빅” + “데이터”  = 특정 집단의 동적 행동 데이터 라고 바꿔서 이해하기 시작하면, 왜 DB 설계가 필요하고, 이걸 어떤 맥락에서 활용하게 될지에 대한 포인트가 확확 달라지게 된다.

대형 쇼핑몰 체인 Target에서 10대 소녀의 임신을 부모보다 먼저 알아냈다는 예시처럼 Retail 상품들의 종류가 다양하고, 그 상품들을 구매하는 패턴이 특정 집단에게 공통적으로 발생하는 일부 분야가 아니면 빅데이터 Hype은 사실 큰 쓸모가 없을 확률이 높다. 교보문고는 전자책 판매를 빅데이터 기반으로 하겠다고 나섰다가, 정작 활용한 방식은 아모레퍼시픽 스타일의 CRM이었는지 “별 다를거 없더라”며 예전 방식을 고수하겠다는 식으로 선회했다. 책이라는게 온라인 쇼핑몰만큼 구매가 자주 일어나지 않는 상품이니만큼 Conversion을 찾아서 패턴화하기 굉장히 어려웠을 것이다. 그냥 예전처럼 30대 남성, 20대 여성 같은 타겟팅을 좀 더 세분화하는 수준에서 그쳤을 것이라는게 충분히 짐작된다.

글 첫머리에 들었던 불량품 찾기, 센서 신호로 문제점 찾기 같은 작업이 사실은 이미지 인식이나 데이터 전처리라는 통계적인 모델링 스킬과 Domain Knowledge의 결합이라는 점에서 볼 수 있듯이, 빅데이터 기반 작업이라고 불리는 많은 업무들이 사실은 이전에 했던 일과 크게 다르지 않다. 제조업에서 빅데이터 모델링을 한다고 했을 때 정말 동적 행동 데이터를 갖고 있고, 그걸 활용해서 도움이 되는 회사는 과연 얼마나 될까?

IT나 Finance 데이터 이외에 다른 영역에서 이건 정말 빅데이터라는 느낌을 받은 데이터도 없고, 그걸 어떻게 적용해서 대박(?)을 낼 수 있는지도 잘 모르겠다. 첫째 수백만명의 데이터에서 수십만명씩의 특이 패턴을 분리할 수 있는 수준으로 데이터가 모이는 산업이 IT와 금융시장 이외에 존재하는지에 의문이 있으니까.

제조업에서 쓰겠다는 빅데이터는 혹시 “그런 단어 쓰면 이사진이 좋아하”기 때문이 아닐까 싶다.

얼마전에 우연히 국내 유명 IT회사의 데이터 사이언티스트 채용 공고를 봤다.

 

위의 내용은 어디서나 다 찾을 수 있을지 모르겠지만, 다음 중 하나의 논문을 읽고 설명할 수 있는 능력을 요구하는 부분에서 요구 수준이 얼마나 높은지 쉽게 확인할 수 있겠더라.

링크: 논문1, 논문2, 논문3, 논문4, 논문5, 논문6

참고로 위의 6개 논문 중 4번째 논문은 필자의 데이터 사이언스 기본 강좌 마지막 부분에서 짧게 다루고 있고, 모델링 강좌에서는 그 논문에서 쓰는 모델의 배경지식까지 두루두루 훑어본다. (논문에 대한 기본적인 설명은 논문 리뷰 포스팅 참조) 기본 강좌 중에는 저 논문의 모든 내용을 다 볼 수는 없고, Display advertising에서 최상위 IT 회사들이 쓰는 모델이 사실은 Logit이라는 점, 그 앞 수업까지 고생하면서 배운 개념들을 모두 저 논문에서 활용하고 있다는 점을 꼭꼭 짚어내면서 이런 방식의 모델링으로 활용된다는 점을 강조한다. 보통 머신러닝을 배운다, 딥러닝을 배운다고 하는 사람들이 Neural network를 무겁게 돌리기만하면 다 되는 것처럼 착각하는 경우가 많고, 수업에 오신 분들도 “나는 Neural net만 배우고 싶은데 왜 Logit, SVM, Ensemble, PCA 같은 모델을 다 배워야하냐”고 의문점을 가지는 경우가 많다. 그런 의문이 수업 후반부에 Neural net 배우는 시점에 많이 풀릴 것이고, 마지막 날 저 논문을 살펴보는 시점에 데이터를 어떻게 처리해서 어떤 방식으로 모델을 만든다는 큰 그림이 같이 그려질 것이라고 생각하고 수업을 했는데, 많이들 공감해주셨을까?

그동안 코더 위주의 시장 구성, 코딩으로 이걸 해결할 수 있는 것처럼 홍보하는 IT학원들의 강의에 대한 강한 불만을 계속 표현했었는데, 이런 포스팅이 올라오는걸 보면 이제 코더 수준인 개발자들이 포기하고 나가떨어지지 않을까 싶다. 논문4를 일부만이라도 리뷰하는 수업을 들은 수강생 분들 상당수가 공감하시겠지만, 어지간한 학부 전공 수준으로는 저 논문들을 따라가기가 쉽지 않기 때문이다. 필자가 비슷한 채용을 진행한다면, 저 위에 있는 논문 2개 정도를 PPT로 정리해서 발표하게 하고, 1개 정도는 직접 코드로 쳐서 reproduce할 수 있는 능력이 있는지 테스트해볼텐데, 그게 박사시절 평소에 했던 공부와 크게 다르지 않다. 실용 논문이니 약간 관점이 달라서 수학적으로 어떤 부분이 부족하고, 어떤 Challenge를 회피하려는 꼼수를 썼고… 같은 부분을 지적하는 스텝만 빼면 충분히 괜찮은 면접이 될 것 같다.

그동안 계속 개발자들이 Python만 잘하면 데이터 사이언티스트 되는거냐, 코딩 경력이 10년이 넘어서 어떤 플랫폼도 쉽게 적응할 수 있다는 어조로 데이터 사이언티스트가 되고 싶다는 메일을 보낼 때마다 길게 설명해주는 답변하기 불편했는데, 앞으로는 딱 이 포스팅 링크를 보내고 끝내려고 한다. 왜 TensorFlow로 이미지 인식하는 코드 예제만 몇 십개씩 보여주는 수업은 안 하냐, 그런 예제 위주의 수업을 듣고 싶다고 하는 몇몇 분들께도 같은 대답을 드릴까 한다. TensorFlow 같은 오픈소스용 코딩 라이브러리가 Data Scientist용 지식이 아니라, 저런 추천 알고리즘을 연구/개발하는 자리가 딱 Data Scientist가 갈 자리고, 그런 자리를 가고 싶으시다면 수학, 통계학으로 탄탄한 실력을 쌓으셔야한다고.

저 위의 구인 공고는 수학 & 통계학 수업부터 데이터 사이언스 기본 강좌모델링 강좌로 이어지는 필자의 수업이 제대로 된 궤도로 가고 있다는 증거물임과 동시에, 한국 시장이 지난 몇 년 사이에 엄청나게 많이 성숙했다는 뜻이기도 할 것이다. 그동안 코더들이 이걸 할 수 있는 것처럼 믿고 있는 답답한 분들 때문에 기업 미팅이 힘들었던 적이 많았는데, 저 잡 포스팅을 보니 속이 시원해지더라.

다음달인 11월부터 내년 3월까지 매달 남은 논문 5개를 하나씩 블로그에 리뷰해본다. 블로그에서 수학과 통계학을 다룰 수 있는 깊이에 한계가 있기 때문에 제대로 배우고 싶으시다면 데이터 사이언스 기본강좌를 거쳐 모델링 강좌에 오시면 될 것 같다.

메일 섹션을 홈페이지 하단에 넣고, 회사 전화번호를 등록했을때만해도 공부하다가 뭔가 잘 모르는 내용이 있는 사람들, 벽에 부딪혔는데 스스로의 힘으로 극복하기 좀 어려운 분들의 연락을 기대했었다. 수업을 하는 것도 같은 이유니까. 나도 공부할 때 힘들었는데, 누군가 조금만 더 도와줬으면 쉽게 극복했을텐데, 이제 쬐끔 더 알게되었으니 도와주겠다는 마음에서 넣어놓은 개인 연락 포인트건만, 거의 대부분의 연락은 포인트 못 잡는 비지니스 요청이나, 대학원가고 싶은데 스펙이 안 되어서 고민이다, 그것도 아니면 개발자들이 경력 X년인걸 강조하면서 Data Scientist로 전직하고 싶다는 내용들이다.

대학원 가고 싶다는 분, 개발 경력 Y년이라는 분들, 그냥 돈 버린다는 셈치고 내 수업을 하나만 들어보시는 걸 추천한다. 일반인 용으로 쉽게 설명해놓은 웹페이지에 나오는 내용말고, Data Science 대학원가서 배울만한 내용들을 한번 보고나면, 할 수 있는 내용인지 아닌지, 잘 준비하고 있는지 아닌지 쪼~오~끔 더 쉽게 판단할 수 있지 않나? 이미 pabii 블로그 글이 100개 가까이 있고 그 중에는 대학원 수업에 무슨 내용이 나오는지 맛보기라도 넣어놨는데, 글도 안 읽어보고 입에 밥을 떠넣어달라는 식의 연락을 주시면 곤란하다.

솔직히, 수업 들으셨던 분 아니면 딱히 대답하고 싶은 수준의 질문 주시는 분도 없는 마당이라, 요즘은 홈페이지 하단의 메일 섹션 없애고 싶은 유혹이 샘솟는다ㅋㅋ

아래는 기대하는 질문 예시들이다.

 

질문 1. 의학 + 머신러닝

얼마전, 의대 교수로 재직 중인 분이 수업에 오셨다. 한 달 동안 말없이 수업에 나오고 계시길래, 잘 따라오고 계신지 궁금했는데, 종강 후에 연구 분야에서 관심있는 내용을 메일로 보내주시더라. 한번 뵙고 난 다음에 뭘 해드릴 수 있는지 간략하게 설명드렸고, 그 자리에서 왜 다른 사람들 다 놔두고 날 찾아왔는지 납득이 되는 설명을 해 주셨다.

계속되는 Follow-up 대화는 의학 논문들에서 쓰인 머신러닝 방법들에서 데이터를 어떻게 활용했는지에 대한 이야기였지, SVM 썼네, Ensemble을 썼네, Neural Net을 썼네 같은 대화는 일체 없었다.

보내주신 논문 A에서 본 데이터가 X-Y-Z 구조인 것 같은데, 이게 의학적인 관점에서 합당한 이해입니까, 논문 B에서는 이걸 Q-R-S vs. X-Y-Z로 해 놓고 Logit, RF, SVM 다 써보다가 결국 Logit을 이용해서 어느 병 진단에 Q-R-S 구조가 더 적합하다는 결론을 내렸네요, 데이터로 네트워크를 그려보니 구조도가 (K-M)-X-Y-Z 로 나오는데, 교수님께서 K-M이 연결되는게 합리적이라고 해 주셔서 모델을 변형시켜보는 것도 괜찮을 것 같습니다. 그런데, 이런 구조가 Q-R-S에는 없는지요? 가능하다면 apple-to-apple 비교를 해야할 것 같습니다.

 

질문 2. 금융 + 머신러닝

아주 예전에 수업을 듣고 가신 분 중에 모 금융사에 장기근속중인 학부 대선배 분이 있었다. 복습을 다섯달이나 하고 나니 이제 좀 이해가 된다는 겸손한 말씀과 함께, 시뮬레이션으로 만든 가상 데이터로 사내 컨설팅 하신 내용을 정리해서 보내주셨더라. 수업 때는 PCA만 가르쳐 드리고 FA를 개념만 설명해드렸었는데, FA로 latent variable을 찾아내서 각 변수별로 이름을 붙이려고 correlation으로 역추적하신 작업, sensitivity check으로 latent variable 숫자가 달라질 때 correlation 활용도가 어떻게 바뀌는지 논리를 쌓아올리는거보고 정말 감탄사가 절로 나왔다.

질문 하신 부분이 Latent variable과 굉장히 유사해보이는 직접 변수들을 썼을 때, 모델 오차가 얼마나 날지에 대한 결론을 training set / test set으로 내 봤는데, 이 부분이 얼마나 합리적인 추론인지, 혹시나 다른 방법이 없는지에 대한 궁금증이었다.

어차피 Latent variable을 뽑아낼 때 information loss가 있을 것이고, 그게 Bias의 원인이 된다. 유사해보이는 직접 변수들도 “유사”라는 말이 Measurement error가 있는 변수를 쓴다는 말과 같은 말이기 때문에, 아마 attenuated bias가 생길 것이라는 점을 미뤄볼 때, 두 모델 모두 coefficient들의 절대값이 실제로 나왔어야하는 값보다 약간 작게 나올 것이다. Coefficient들의 절대값이 더 크게 나오는 모델이 좀 더 Bias가 작은 모델일 것이라고 직관적인 결론을 내려볼 수 있다는 답변을 드렸다.

참고로 이거 수업 시간에 다 설명했던 내용이다.

 

질문 3. 불량율 + 머신러닝

어느 연구소 분의 질문이다. y = ax1 + bx2 + cx3…..의 간단한 regression 식을 세워놓고, y값이 0/1인 경우를 테스트하겠다고 하시던데, y값을 Normal Q-Q plot에 얹어놓으셨더라. 0/1이면 Binomial이고, 한쪽 skewed로 나올 가능성이 높아보이는데 이걸 왜 Normal의 Q-Q에 얹었는지 이해가 안 되어서 왜 이런 작업을 하시느냐고 물어봤다.

하나의 batch에 N개의 상품이 들어있는데, 각 batch마다 불량율을 k%로 기록하고, 그 불량율 k%를 맞추려고 상품들의 특징을 잡아낸 x1, x2, x3 값들도 batch마다 평균값을 썼단다. 말을 바꾸면, y값도 평균값들의 분포, x1, x2, x3…도 평균값들을 모아놓은 데이터 셋인 것이다.

이런 경우에, y값은 sample들의 평균을 모아놓은 것이므로, Central Limit Theorem에 의해서 정규분포로 수렴하게 된다. y값 이전에 불량/정상 사건은 0/1이고 불량일 가능성이 낮으니까 Poisson일 확률이 높지만, 일단 batch 하나가 sample 집합이고, sample에서 뽑은 평균값들을 주욱 다 모아놓으면 정규분포에 수렴하는건 통계학적인 기초 상식이다.

그런데, y값은 0.1%, 0.2%,…, 1% 범위에 있는, 0 근처에 있는 값, 0보다 작을 수 없는 값이기 때문에 아마 0에서 truncated인 normal이 나올 것이다. 따라서 저 위의 Normal Q-Q 로 데이터가 랜덤인지 아닌지 알기 어렵다. 그전에, 이런 CLT 정규분포인 데이터를 Normal인지 아닌지로 랜덤 여부를 알아본다는 것 자체가 말이 안 되는 작업이다.

거기다, x1, x2, x3… 모두가 batch별 평균값들이잖나? 그럼 x1의 분산이 얼마나 작을까? x2, x3는? 아마 x값들의 분산이 굉장히 작게 나올텐데, 그걸로 truncated normal인 y값을 예측하겠다? 그런 batch가 수만개가 있다고해도 쉽지 않은 작업일 것이다. 바늘구멍으로 10m 밖에 있는 반대편 바늘구멍을 설명하는 작업이기 때문이다.

이래놓고 x1^2, x1 * x2 같은 non-linear 패턴 찾아줄 변수들 쓰면 더 좋아지는거 있지 않냐, 그런 library 가르쳐 달라고 하시던데, 수업시간에 그게 무모한 작업이기 때문에 SVM, Ensemble 같은 모델들이 나왔다는 설명하지 않았었나? 다른 포스팅에도 써 놨던 답변인거 같은데?

애시당초 batch 에서 나온 평균값을 쓰지말고, batch 안에 있는 낱개 데이터들을 썼어야했다.

 

나가며 – Data Scientist들이 할 일, 할 수 있는 일, 해야만 할 일

앞으로는 이런 답변을 할 수 있는 질문이 아니라면 답변을 거절하려고 한다. 돈 벌려고 수업 들으라고 하는게 아니라, 이런 답변을 알아들을 수 있는 사람들에게만 설명하고 싶기 때문에 수업을 들으라고 하는 것이다. 그리고 이런 대화가 가능한 사람들이 많아져야 모델링 수준도 올라가고, 덩달아 시장 수준도 올라가지 않겠는가? Neural net 쓰는 예제 코드만 열심히 모은다고 저런 대화가 가능해질까? 실제로 Criteo 다니던 시절에 한 줌 밖에 안 되는 Data Scientist 들끼리 글로벌 콜을 하면 수리통계학 기반 없는 사람들은 대화에 끼여들 여지가 거의 없었다. 예를 들면, 회사의 어떤 데이터 셋이 Poisson인지, Truncated Poisson인지에 대한 의견을 나누고, 결론에 맞춰 모델 설정을 어떻게 해야하는지에 대한 자신들의 research를 쉐어하고, y=0인 경우를 제거하느냐 아니냐에 모델 결론이 바뀌는 부분에 대해서 이런저런 토론을 했었다. 이런게 진짜 Data Scientist들이 할 일, 할 수 있는 일, 해야만 할 일이라고 생각한다.

무슨 수업을 들어야할까요? 수학 공부는 어디서부터 시작해야하나요? 고교 수학이 기억 안 나는데 정석책을 다시 봐야할까요? 대학 전공은 뭘로 골라야할까요? 등등의 질문은 스스로 답변을 찾을 수 있을만큼 정보가 널려있지 않나? 고교 시절에 수학 못 하던 반 친구가 “이 책 다 보고나면 나도 수학 만점 받을 수 있어?”라고 물었을 때 대답할 말 찾기 힘들었던 것과 궤를 같이 한다. 그 책 한 권만 보면 수학 만점 받을 수 있다는 “쏙쏙 빼먹어서 편하게 공부하고 싶다”는 마인드를 버리고, 시중에 나온 모든 문제집에 나온 모든 문제를 다 풀어낼 수 있는 수준이 되어야 수학 만점을 받을 수 있다고 솔직하게 대답했다면 어떻게 됐을까? 그딴 식으로 사람 힘 빠지는 소리하지마라, 그렇게 힘들게 공부하는게 왕도가 아니다는 반박을 들었을까? 참고로 머리가 딸리는 필자는 항상 “할 수 있는거 다 해본다”는 철학을 갖고 공부해왔다.

저런 대답하기 깝깝한 질문들 말고, 위에 예시를 들어놓은 종류의 답변이 필요한 질문은 아무리 바빠도 늦게라도 시간을 내서 답변한다. 실제로 메일을 잃어버려서 1달만에 늦게 보고서는 답장해드린 경우도 있다. 이미 그런 답변 쓴 내용 중 일부를 이곳, 이곳, 이곳, 이곳에 올려놨기도 하고.

정말 열심히 공부하고 있으신 분들 모두 화이팅이다!

Researcher discloses VirtualBox Zero-Day without reporting it to Oracle

보안 연구원인 Sergey Zelenyuk이 오라클의 VirtualBox 가상화 소프트웨어의 제로데이 취약점에 대한 세부사항을 공개했습니다. 이 취약점은 공격자가 게스트에서 호스트로 탈출하는데 악용될 수 있습니다.

Zelenyuk은 오라클의 패치를 기다리지 않고 이 취약점을 대중에 공개했습니다. 이유는 현대 정보 보안의 상태, 특히 보안 연구 및 버그바운티 쪽의 의견에 동의하지 않기 때문이라고 밝혔습니다.

이 취약점은 VirtualBox 5.2.20 및 이전 버전에 영향을 미치며, 모든 호스트 또는 게스트 OS에서 악용될 수 있습니다.

Zelenyuk은 디폴트 설정에서 동작하는 익스플로잇 코드를 개발했습니다. 유일한 요구사항은 네트워크 카드가 Intel PRO/1000 MT Desktop (82540EM)이어야 하며, NAT 모드여야 한다는 것입니다.

그는 Ubuntu 16.04 및 18.04 x86-64 guest에서 이 익스플로잇을 성공적으로 테스트 했습니다. 하지만 그는 이 코드가 윈도우에서도 작동할 것이라 추측했습니다.

이 취약점의 근본적인 원인은 메모리 충돌 버그입니다. 이는 루트 또는 관리자 권한을 가진 공격자가 guest에서 host ring3으로 탈출하는데 악용될 수 있습니다. 그런 다음, 공격자는 기존 테크닉을 사용해 /dev/vboxdrv를 통해 ring0으로 권한을 상승시킬 수 있습니다.

“이 익스플로잇은 리눅스 커널 모듈(LKM)으로 guest OS에 로드됩니다. 윈도우의 경우 초기화 래퍼와 커널 API 호출을 통한, LKM과 다른 드라이버가 필요할 뿐입니다.

“양쪽 OS 모두에서 드라이버를 로드하기 위해서는 상승 된 권한이 필요합니다. 이는 흔한 일이며, 극복이 불가능한 장애물로 간주 되지 않습니다. Pwn2Own 콘테스트에서, 연구원들은 익스플로잇 체인을 사용합니다. Guest OS에서 악성 웹사이트를 오픈한 브라우저를 악용하고, guestOS의 하이퍼바이저에서 공격하는데 필요한 ring0에 도달하기 위해 OS 취약점도 악용 되었습니다. 가장 강력한 하이퍼바이저 취약점들은 guest ring 3에서도 악용이 가능합니다. VirtualBox 또한 guest root 권한 없이도 도달이 가능한 코드였으며, 대부분 여기에 대한 감사가 이루어지지 않았습니다.”

이 연구원은 문제를 완화 시키기 위해 사용자들에게 가상 머신의 네트워크 카드를 AMD PCnet 또는 반가상화 된 네트워크 어댑터로 변경하거나, NAT의 사용을 피하라고 조언했습니다.

출처 :

https://securityaffairs.co/wordpress/77771/hacking/virtualbox-zero-day.html

[11월 둘째주] 알약 스미싱 알림

 

본 포스트는 알약M 사용자 분들이 ‘신고하기’ 기능을 통해 알약으로 신고해 주신 스미싱 내역 중 ‘특이 문자’를 자체 수집, 집계하여 제공해 드리는 정보성 포스트입니다.

특이 문자 

 No.

문자 내용 

1

 너의 성적인 사진이 있으니 클릭하게끔 유도하는 문자

 2

 [Web발신] 11월11일/오후5시/라루체호텔/헤이스룸 [Web발신] ♣an eternal promise♣ 11.11(일).PM5시{포시즌호텔3층}

 3

 [Web발신] Cj대한통운 운송장번호[3209224154]  주문하신 상품이 발송 되었습니다

 4

 [Web발신][CJ대한통운]나기은11월07일택배주소를찾을수없음주소변경