다음의 알트코인 계약에 대한 변경 사항을 2018년 3월 30일 부로 적용할 예정입니다:

  • 선물계약에 한정하여 0.25%의 정산 수수료가 폐지됩니다. 포지선의 진입과 종료 장벽을 없앰으로써 거래상의 더 높은 유동성을 확보하고자 합니다.
  • DASH, ETC, NEO, XMR, XLM 및 ZEC 계약은 만료된 후 일정기간 동안 폐지됩니다. 이는 거래자들이 더 선호하고 거래량이 많은 계약에 대한 거래 엔진 용량을 확보 (서버 확대)하기 위함이며, 최적화 후 재 상장될 수 있습니다.
  •  ADA, BCH, ETH, LTC 및 XRP 계약은 이번 분기를 기점으로 향후 분기별로 재 상장될 예정입니다:
    • 비트멕스 카르다노 / 비트코인 2018년 6월 29일 선물계약  (ADAM18)
    • 비트멕스 비트코인 캐시 / 비트코인 2018년 6월 29일 선물계약 (BCHM18)
    • 비트멕스 이더리움 / 비트코인 2018년 6월 29일 선물계약 (ETHM18)
    • 비트멕스 라이트코인 / 비트코인 2018년 6월 29일 선물계약 (LTCM18)
    • 비트멕스 리플 / 비트코인  2018년 6월 29일 선물계약 (XRPM18)

요약: 저희는 2012년 이후 비트코인과 일부 전통적인 금융자산간의 가격 상관관계를 살펴보았습니다. 그 결과 절대적 관점에서의 상관관계는 여전이 낮은 편이지만, 지난 몇 달 간 주식과의 가격 상관관계가 사상 최고 수준에 도달했다는 사실을 알 수 있었으며, 암호화폐 생태계가 확장하면 상관관계가 증가할 수 있겠지만, “전통적인 자산과의 상관관계가 존재하지 않는 새로운 자산등급”에 관한 암호화폐 투자 이론의 장점이 있을 수 있다고 결론지었습니다. 주식과의 가격 상관관계로 인해 경제 위기가 발생하는 경우에 비트코인은 더이상 몇몇 투자자들이 기대하는 하방보호 (downside protection, 기초자산의 가격하락에 대한 손실을 콜옵션으로 완충시키는 것)를 제공하지 않을 것입니다.

개요

저희는 2012년 이후의 비트코인과 여러 종류의 전통적 금융 자산의 180간에 걸친 일일 가격 변동 상관관계를 백분율로 계산했습니다. 아래 도표에서 볼 수 있듯이 수치는 -0.2 에서 +0.2 사이를 거의 벗어나지 않는 아주 낮은 변동폭을 보였습니다.

비트코인과 다양한 전통적 자산 간의 가격 상관관계 – 180일 간의 일일 가격 변동 수치 (단위: %)
(출처: BitMEX Research, Bloomberg, Bitstamp)

비트코인 vs. S&P 500지수와 금 (gold)

S&P 500지수와 금에만 초점을 맞추어 보면, 비트코인은 몇 번의 기간동안 앞서 말한 둘과의 상관관계를 경험한 듯 합니다.

  • 2013년 3월 비트코인 가격이 다시 상승했을 때, 평론가들은 키프롯 금융 위기 (Cypriot financial crisis)가 부분적인 원인을 제공했다고 주장했습니다. 이 기간동안 비트코인과 금 사이의 가격
    상관관계는 증가했고 2014년 비트코인 가격 폭락이 있기 전까지 증가세를 유지했습니다.
  • 2016년 비트코인 가격이 다시 상승하는 동안 비트코인과 금 간의 가격 상관관계가 다시 증가하였으며, 금과 비트코인 모두 한 해동안 상승세를 보였습니다. 이는 동일한 기본 경제 요소와 정치적 불확실성 (중국의 경제성장 둔화, 브렉시트 및 트럼프 대통령 당선)이 이 기간동안 두 자산의 가격 변동에 영향을 주었을 수 있다는 점을 나타냅니다.
  • 가장 최근의 비트코인 가격 회복 기간 동안 비트코인과 주신간의 가격 상관관계가 사상 최고치 (0.25에 달하는) 를 기록하면서 다소 변화된 양상을 보였습니다. 저희는 비트코인이 이 기간 동안 “리스크온 (risk-on, 시장 상황이 낙관적일 때 수익성이 크지만 위험성이 큰 자산에 투자하는
    방식)” 의 특성을 가지게 되었다고 생각합니다. 따라서 비트코인은 그동안 장점 중의 하나로 여겨져왔던 재정 파탄 혹은 주가 하락시에 보호 장치를 제공할 수 없을 가능성이 높습니다.
    게다가 최근 금과의 가격 상관관계 역시 부정적 양상을 보이고 있습니다.

비트코인 vs S&P 500지수와 금 간의 가격 상관관계 – 180일 간의 일일 가격 변동 수치
(단위: %) (출처: BitMEX Research, Bloomberg, Bitstamp)

통계적 의의

아래 도표에서 볼 수 있 듯 비트코인과 다른 자산간의 결정계수 (R-squared, 0 과 1 사이의 값으로
두 변수간의 상관관계의 정도를 나타내는 상관계수 R의 제곱값)는 낮으며, 최근 가격 회복 기간동안 비트코인과 S&P 500지수 간의 상관관계의 최고치는 6.1%를 기록했습니다. 또한 저희는 탄탄한 방법론을 사용한 모든 전통적 자산과 비트코인 사이의 일일 가격 변동 상관관계가 가진 어떠한 통계적 의의도 입증하지 못했습니다. 따라서 해당 기사는 과학적, 통계적 추측에 기반한 것임을 알려드립니다.

S&P 500지수와 금 간의 비트코인 가격 결정계수 – 180일 간의 일일 가격 변동 수치
(출처: BitMEX Research, Bloomberg, Bitstamp)

최근의 가격 변동 흐름

데이터 포인트의 수가 부분적으로 제한되어 있기 때문에 통계적 방법론에 기반하여 결론을 내리기는
어렵지만, 지난 몇 달간 비트코인 가격과 S&P 500지수의 비교 결과는 전적으로 무시하기 힘들만큼 매우 긍정적인 양상을 보여왔습니다.

비트코인 가격과 S&P 500지수 비교. (출처: BitMEX Research, Bloomberg)

블룸버그가 아래의 도표에서 지적한 바와 같이 비트코인 가격의 최고치는 S&P 500지수의 향후 수익
가치평가비율의 최고치와 사실상 일치했습니다. 위 비교는 다소 비논리적일 수도 있습니다. 그 이유는
실제로 주식시장은 1월 말에 최고치를 경신했고 (비트코인이 지난 해 12월에 최고치를 경신한 반면) 2018년 12월 말의 수익 추정치는 2017년 말에 이전보다 더 높은 수준으로 재설정되었기 때문입니다.

비트코인 가격과 S&P 500지수의 향후 수익 가치평가비율 비교. (출처: Bloomberg)

이더리움과 라이트코인

저희는 이더리움과 라이트코인간의 비트코인 일일 가격 변동 상관관계를 180일 간 조사하였습니다.
두 암호화폐와 비트코인 간의 가격 상관관계는 전통적인 자산과 비교해 훨씬 더 높았고 이는 통계적으로 유의미한 결과입니다. 그러나 2017년 암호화폐의 가격 회복 기간동안 알트코인이 비트코인에 의해 거래되고 독립적으로 변동하면서 비트코인과의 가격 상관관계는 0.1 수준까지 하락했습니다. 2018년 가격 조정이 시작된 이후, 암호화폐들이 다시 함께 변동하면서 가격 상관관게는 상승하기 시작했습니다.

  • 라이트코인 — 가격상관관계는 0.5 수준으로 높은 편입니다. 라이트코인 가격에 대한 법적 조치가 미비했던 2015년에는 0.2 수준까지 하락하기도 했습니다.
  • 이더리움 — 이더리움이 출시된 직후, 시스템 규모는 매우 작았고 이더리움 출시와 창립팀의 자금 조달 모델을 둘러싼 불확실성과 같은 몇가지 고유한 위험요소들에 노출되어 있었습니다. 따라서 라이트코인의 가격 상관관계 최고치와 비슷해지기 전까지 초반의 비트코인과의 가격 상관관계는 낮았습니다.

이더리움과 라이트코인 간의 비트코인 가격 상관관계 –  180일 간의 일일 가격 변동 수치 (단위: %) (출처: BitMEX Research, Bloomberg, Bitstamp)

결론

암호화폐의 옹호자들은 종종 암호화폐가 기존의 자산 포트폴리오 관리자들에게 손실에 관한 대비책 (hedge)를 제공할 수 있는 “전통적 자산과의 상관관계가 없는 새로운 자산 등급” 이라고 말합니다. 위와 같은 자산 포트폴리오 관리자들은 그들의 포트폴리오 내의 수당을 추후 가격 상승 가능성이 있는 암호화폐로 전환시킬 것입니다.

비트코인의 발자취를 살펴보면 전통적인 자산과의 상관관계가 없는 것처럼 보입니다. 가장 최근의 가격 회복 기간 동안 비트코인의 가치평가는 수 천억달러를 기록한 반면 – 리스크온 (risk-on)특성을 가진 즉, 전통적 자산과의 가격 상관관계는 – 이제 막 증가하기 시작했습니다.

암호화폐와 전통적 자산간의 상관관계가 없다는 가설의 장점도 물론 있지만, 암호화폐의 가격이 높은 수준으로 유지되거나 앞으로 더 높아진다면 전세계 금융 시스템의 중요한 일부분이 될 것이며, 점차 증가하는 전통적 자산과의 상관관계는 불가피한 결과일 것으로 예상됩니다.

암호화폐가 “새로운” 자산 등급인지의 여부는 별개의 주제일 수 있습니다. 또한, 단순히 ‘새롭기’ 때문에 암호화폐에 엄청난 장점이 있다고는 확신할 수 없으며 더 중요한 것은 아마도 암호화페가 다른 자산이
가지지 못한 특별함을 가지고 있는지의 여부일 것입니다.

금일 비트멕스에서는 사용자의 주문내역, 포지션 및 손익현황을 트롤박스 상에서 확인할 수 있는 몇 가지 명령어를 소개해 드리고자 합니다.

아래 각 명령어 앞 부분에 ” / ” (슬래시)를 추가하여 귀하의 거래 정보를 확인하실 수 있습니다:

  1. /orders: 모든 미체결 주문내역 확인
  2. /orders <symbol>: 기호에 대한 미체결 주문내역  확인
  3. /position <symbol>: 기호에 대한 포지션 확인
  4. /pnl <symbol> : 기호에 대한 총 손익현황 확인
  5. /rpnl <symbol>: 기호에 대한 실현손익 현황 확인
  6. /upnl <symbol>: 기호에 대한 미실현손익 현황 확인
  7. /help: 홈페이지 상의 레퍼런스 가이드를 참조

위의 예시에서, ‘symbol’는 XBTUSD, XBTM18 및 ETHH18 등의 계약명을 의미합니다.  

XBTUSD 와 같은 symbol과 /orders를 동시에 타이핑하면, 사용자의 메시지 아래의 파란색 상자 안에 있는 귀하의 모든 미체결 XBTUSD 주문들을 확인할 수 있습니다:

파란색 상자 안의 비트멕스 로고는 해당 메시지가 비트멕스 내부 시스템에 의해 생성되었으며, 특정 사용자에 의해 위조된 것이 아님을 의미합니다.

모든 채널과 테스트넷에서 위 명령어들을 바로 사용하실 수 있습니다. 여러분의 사용 후기를 공유해 주시면 감사하겠습니다!

요약: 2017년 9월, 저희는 세그윗 거래 처리 용량 증가에 대한 보고서를 작성한 바 있습니다. 이 글에서 저희는 작년 9월 이후 세그윗 도입과 관련된 6개월 간의 업데이트 된 데이터를 보여드리겠습니다.
또한 거래 용량 증가를 위한 대안적 매커니즘인 비트코인 캐시의 거래 처리량과 세그윗 거래 처리량을
비교해보겠습니다.

세그윗 (SegWit) vs. 비트코인 캐시 (Bitcoin Cash)

비트코인 프로토콜로의 세그윗 업그레이드는 2017년 8월 이루어졌습니다. 이후, 사용자들은 지갑을
업그레이드하여 블록웨이트 (blockweight) 규모를 41퍼센트 더 제공하는 (다수의 사용자들 역시 업그레이드에 참여한다고 가정했을 때) 이점을 지닌 세그윗을 사용할 수 있는 선택권을 갖게 되었습니다.

이와 비슷한 시기에 비트코인 캐시는 거래 처리 용량 증가를 위한 대안적 매커니즘을 내놓았습니다.
세그윗의 접근 방식과 달리  비트코인 캐시는 신규 코인의 결과로 만들어졌다는 결정적인 차이점이
있지만, 비트코인 캐시 매커니즘 역시 새로운 지갑으로의 업그레이드와 더 많은 거래를 처리할 수 있다는 이점을 위해 새로운 거래 포맷을 필요로 했습니다.

그동안 비트코인 캐시와 새로운 세그윗 비트코인 거래 포맷의 거래 규모는 거의 비슷했습니다. 비트코인 캐시의 출시 이후, 6천 백만 건의 세그윗 거래가 이루어졌고, 이는 비트코인 캐시의 누적 거래 건 수 보다 단 20.1% 많은 수치였습니다. 이는 거의 차이가 나지 않는 수치입니다 – 비록 세그윗 거래 용량 증가
방법론의 지지자들이 비트코인 캐시가 1달 더 일찍 출시되었고 그 결과 비트코인 캐시 블록체인 수수료가 더 저렴하기 때문에 둘의 비교는 적절하지 않다고 주장할 수 있지만 말이죠. 비트코인 캐시가 한 달
먼저 출시된 것을 감안하여 비교해 보면, 세그윗은 비트코인 캐시보다 31.5 퍼센트 많은 누적 거래 규모를 기록한 것으로 나타납니다. 이는 20.1 퍼센트 보다는 높은 수치지만, 두 수치간의 차이는 여전히 크지 않습니다. 물론, 위 수치 중 하나 혹은 모두가 조작되었을 가능성도 있습니다.

이 데이터는 세그윗 거래가 비트코인 캐시보다 조금 더 빨리 도입된 결과 거래 규모가 더 커졌다는 것을 보여주지만, 비트코인 캐시의 옹호자들은 비트코인 캐시가 단기간 동안의 거래규모의 실질적인 증가
속도보다는 장기적인 관점에서 더 큰 규모의 거래 처리 용량 체계를 가지고 있다고 주장할 수도 있습니다. 따라서 비트코인 캐시의 옹호자들은 결국엔 코인 갯수가 늘어나는 즉시, 비트코인보다 비트코인 캐시의 거래 규모가 더 커질 것이라고 여전히 주장하고 있습니다.

비트코인 캐시의 출시 이후 누적 거래 규모.
(출처: BitMEX Research, Bitcoin blockchain, Blockchair for Bitcoin Cash data)

위 차트가 나타내듯이 비트코인 캐시는 출시와 동시에 거래 규모가 급증했고; 이와 반대로 세그윗 업그레이드의 도입은 더 단계적으로 이루어졌습니다. 이는 투자 흐름과 몇 번의 거래 규모 급등이 있었고, 짧은 시간 안에 도입된 신규 코인인 비트코인 캐시에 대한 흥미와 관련이 있을 것입니다. 비트코인 캐시가
출시된 후 3개월이 지난 2017년 10월 31일, 세그윗 거래 규모가 비트코인 캐시를 앞질렀고 이후로
줄곧 우위를 점하고 있습니다.

일일 거래 규모. (출처: BitMEX Research, Bitcoin blockchain, Blockchair)

아래의 도표는 세그윗 도입이 2017년 8월 이후 계속해서 늘어나고 있다는 것을 보여주며, 이 증가세는 대기업들이 세그윗으로 방식을 바꾸는 과정과 맞물려 일어난 것으로 보여집니다. 현재 전체 거래 수 대비 세그윗의 도입률은 약 30% 정도이지만, 더 중요한 수치일 수도 있는 블록 스페이스 대비 도입률은 22% 에 불과합니다.

세그윗 사용 거래 비율 (단위: %).
(출처: BitMEX Research, Bitcoin blockchain, Blockchair)

세그윗은 거래 처리 용량에 전 시스템적으로 의미있는 영향을 주기 시작했으며, 이를 통해  잠재적으로 거래 수수료를 낮추고 새로운 거래 포맷으로 업그레이드하지 않은 사용자에게도 이득을 줄 수 있을 것입니다. 그러나 거래 수수료 시장은 아직 미성숙한 상태이며, 저희는 앞으로도 거래가격이 계속해서 변동할 가능성이 있다고 생각합니다.

결론

새로운 거래 포맷인 세그윗과 비트코인 캐시의 도입은 아주 느린 속도로 이루어졌습니다. 동시에 저희가 이전에 게재한 보고서에서 볼 수 있듯, 새로운 합의 규칙 (consensus rules)의 제정 또한 단계적으로
이루어졌습니다. 이는 가능한 한 지장을 적게 주는 방식으로 네트워크의 업그레이드를 설계하는 것이
중요한 이유를 보여줍니다. 이렇게 업그레이드 된 메커니즘은 사용자와 마이너들이 업그레이드에 전혀 참여하지 않는다 해도 안전할 것입니다.

고지사항

이 보고서 상의 주장들은 외부로부터 인용된 것이나, 주장의 정확성을 보증하거나 보장하지는 않습니다. 수정 요청은 언제든 환영합니다.

이전글 – 왜 Python 이 아니라 R로 강의하는거야?

 

귀국하고 지난 1년 반 남짓한 기간 동안 데이터 사이언티스트로 살면서 필자가 싸워(?)야했던 오해 중 가장 큰 두 개를 꼽자면,

  • 빅데이터 = 용량만 많은 데이터
  • 데이터 사이언티스트 = 공대 출신 개발자

라는 잘못된 이해들이었다. 수 십개의 블로그 포스팅도 빅데이터란 유저들의 행동데이터를 말하고, 데이터 사이언티스트는 그 행동데이터에서 패턴을 추적하는 사람들이지, 프로그래밍하는 개발자가 아니라는 설명을 알리기 위해서였다고해도 과언이 아니다. 덕분인지 요샌 구인란을 보면 좀 정신차린(?!) 잡 포스팅이 올라온다. 데이터 사이언티스트 뿐 아니라, 심지어 데이터 엔지니어들에게도 수학, 통계쪽 지식이 필요하다는 (좀 오버스러운) 잡 포스팅을 심심치 않게 볼 수 있다.

(Source: 잡코리아)

그러다 요즘 만나는 새로운 편견이 하나 있는데, Python이 머신러닝을 배울 수 있는 (유일한!) 프로그래밍 언어(?)고, 나머지는 별로 관계가 없다는 오해다. 개인적으로는 개발자들이 이쪽 필드에 진입하겠답시고 코드 몇 줄 Copy&Paste 해 놓고 아는체하는 모양새가 굉장히 불편해서 개발용 언어인 Python에만 집중하는 한국 시장의 편견에 적지않게 당황스럽다.

이번 포스팅에서는 Python의 한계를 지적하고, R과 Python을 함께 써야할 때 쉽게 활용할 수 있는 플랫폼을 소개해보고자 한다.

 

Python = 머신러닝용 언어(X), 개발용 언어(O)

위에 쓴대로, 데이터 사이언스는 행동데이터에서 패턴을 찾는 작업, 즉 통계학 위에서 돌아가는 수학 모델링인데, TensorFlow라는 명령어 라이브러리가 하나 나왔다는 이유로 갑자기 Python 아니면 안 된다고 하는 “꼴”들이 참 우습다. 필자가 보스턴에서 처음 머신러닝을 들을 때만해도 수업 숙제들을 구현할 수 있는 라이브러리가 없어서 직접 코드를 다 쳤고, 그 무렵에 수업을 같이 듣거나, 미리 들었던 동료들이 R 라이브러리들을 만들었는데, 그 중 일부는 Amazon, HP 등의 대기업들의 지원을 받아 MXNet, H2O 등으로 발전해 있다. 써 본 사람들은 알겠지만, TensorFlow 가 나오던 2015년 이전부터 이미 활용되던 패키지들이고, 솔직히 계산 속도도 더 빠르고 활용처도 더 많다.

(H2O의 뒷 이야기를 보면, R로 빅데이터 계산하는데 한계를 느끼고 S라는 프로그램을 만들었다가, 이걸 나중에 Java, R 같은 프로그램에 얹을 수 있는 Add-in 형태로 진화시킨 이야기가 나온다. 요즘은 물론 Python에서도 작동한다.)

아마 많은 개발자들이 통계학을 제대로 공부해본 적이 없고, 통계학 기반으로 제대로 설명해주는 머신러닝 수업을 이해할 자신도 없으니, 그냥 평소에 하던대로 코드나 Copy&Paste하자는 생각으로 이쪽 업무를 바라보고 있고, Python에서 (제대로) 돌아가는 머신러닝 라이브러리가 Keras 기반 TensorFlow 밖에 없으니 그냥 TensorFlow = Machine Learning 라는 생각이 굳어지고 있는 듯하다.

안 그래도 개발자들이 데이터 사이언스 분야를 왜곡시키는 “꼴”이 불편한 필자 입장에서, 데이터 처리와 통계학 모델링 지원이 많이 부족한 개발자용 언어를 모르면 데이터 사이언스를 못하는게 아니냐나는 터무니 없는 편견이 좋게 보일 수는 없다.

(Source: RPy2)

필자 역시도 두 언어를 모두 활용하는 입장에서 어느 한쪽을 폄하하고 싶은 생각은 전혀 없고, 다만 두 언어가 출발점이 매우 다른 탓에 필요한 목적에 따라 적절하게 나눠서 써야 한다고 본다. 당장 필자의 기초 데이터 사이언스 수업은 수리통계학에 기반한 이해를 화면에 구현해야하기 때문에 R로 코드를 보여주고, 실제로 업무 중에도 데이터를 놓고 모델링 작업에 거의 대부분 R Studio를 켜놓고 작업한다. 물론 시스템에 얹어야하는 상황, 개발과 업무가 연계되어야 하는 상황에는 Python에서 모델을 돌린다. 이 때 R에서만 있는 함수를 써야하면 어쩔 수 없이 새로 함수를 만들거나 아니면 R 에뮬레이터를 돌린다. (RPy2) 반대로 Python에서만 구할 수 있는 함수 집합들 (ex. TensorFlow)을 R 작업중에 돌려야할 때도 마찬가지로 에뮬레이터를 돌린다 (rPython).

 

Python에 대한 데이터 사이언티스트의 불만 1 – 데이터 저장, 처리 과정

Python이 열심히 R의 데이터 처리, 통계학 기반 명령어 셋을 복사하고 있지만 (ex. pandas, statsmodels, scikit-learn), 태생이 개발자용 언어다보니 아직 부족한 점도 많고, 한계도 뚜렷하다. 당장 Python 2.7 버젼과 Python 3.x (upto 3.4), 그리고 Python 3.5 이후 버젼은 데이터 저장 방식이 완전히 다르다. 일단 Python 2.x 버젼과 Python 3.x 버젼은 명령어 셋마저 달라서 두 버젼간 호환이 안 된다. 개발자들이 쓰는 플랫폼이 대부분 Linux일텐데, 제일 많이 쓰는 Ubuntu 16.04는 Python 2.7을 지원한다. 그래서 빠른 개발을 시도하는 스타트업들에 가면 Java, C++대신 쉬운 Python을 쓰고 있는데, 정작 운영체제에서 지원하는 Python 2.7에 익숙해져 있다보니, 2.7 안 쓰면 작업 호환이 안 된다고 버젼을 강제로 낮춰달라고들 한다.

끝이 아니다. Python 3.4 미만 버젼에서는 데이터 Array가 시작하는 값이 0이었다. 쉽게 말해서 A라는 변수를 벡터로 지정하고 (1,3,5)이라는 값을 입력하면, 1이 A[0]에, 3이 A[1]에, 5가 A[2]에 저장이 된다. (Python이 데이터 처리를 위해 나온 언어가 아니라는 걸 명명백백하게 보여주는 예제가 아닐까 싶다. 왜 이게 1번에서 시작하는게 아니라 0번에서 시작하냐고….)

이것 때문에 R에서 데이터 전처리를 시켜놓고 Python을 에뮬로 R 위에 띄워서 작업하려면 데이터 벡터를 Python 위에서 다시 지정 해 줘야 했다. Python 위에서 직접 작업해도 내가 데이터를 벡터로 지정했을 때와 data frame으로 지정했을 때 불러오는 방식이 다르다는 걸 기억해야했던 것은 말할것도 없다. (data frame 이라는 개념도 최근에 추가되었다.) 그러다 Python 3.5 버젼 이후부터는 이걸 수정하는 바람에, 이전 버젼으로 짠 코드를 다시 수정했다. (이만큼 심하게 하위버젼이랑 호환 안 되는 언어가 얼마나 될려나…)

이제 버전업이 끝났으니 똑같은거 아니냐고?

R은 데이터 기본형을 data frame으로 저장해서 모델이 돌아가고, 복잡한 통계 모형들(머신러닝 포함)에 최적화된 형태로 데이터 포맷을 바꿀 수 있도록 Data Table이라는 개념이 있다. 당장 N명의 유저가 1시간 동안 1/100초 단위로 접속했던 웹페이지 리스트를 뽑는다고 생각해보자. data frame은 가로축-세로축의 2차원으로 데이터를 저장한다. (SQL 기반의 Database들도 마찬가지다.) 그런데, “유저-시간-웹페이지” 어느 관점에서 보는게 타당할까?

Excel에서 Pivot Table을 만들어보면 좀 감이 잡히겠지만, 말하려는 메세지에 따라 셋 중 어떤 값들을 X축, Y축에 놓아야할지가 다르고, 머신러닝 모델링은 당연히 3개(이상)의 축에서 패턴을 잡아내는 작업이기 때문에 (ex. PCA), 데이터를 단순하게 2차원으로 놓고 작업할 수가 없다. Python은 Data Table을 통계학 관점에서 지원해주질 않기 때문에, 이걸 2차원 데이터 여러개로 나눠서 처리하고, R은 N차원 데이터를 그 자체로 실시간 처리할 수 있는 플랫폼이다.

 

Python에 대한 데이터 사이언티스트의 불만 2 – 그래프 그리기

그래프 그리는건 말할 것도 없다. 개발자는 평소에 그래프를 그리는 사람이 아니다. 반면 통계학하는 사람은 다양한 종류의 그래프를 그려가면서 자신의 아이디어를 테스트하는게 일상사다. 당연히 R은 ggplot부터 Java Script 기반한 다양한 그래프 지원을 해 주고, Python은 이게 안 되니까 R의 ggplot을 import해서 그래프를 그린다. 아래는 Jupyter 노트북에 python pandas를 import해서 데이터를 data frame 형태로 저장하고, R ipython extension 으로 ggplot을 불러와서 데이터를 그래프로 표현한 것이다.

Python 유저 입장에서는 당연하게 보이는 이 과정들이 R 유저 입장에서 보면 매우 귀찮은 작업이다.

  • data frame을 만드는데 왜 pandas 활용해야 되는거야?
  • 뭐? Data Table은 지원 안 한다고? 그럼 데이터 포맷 변경할 때 수작업으로 해야됨???
  • 그래프 그릴려면 R 다시 불러와야된다고?
  • 그럴려면 R 에서 그리지 왜 Python 에서 억지로 불러와서 그리냐?

는 질문이 나올 수 밖에 없다. 그럼 R로 같은 작업을 하면 어떻게 될까?

library(ggplot2) #ggplot 라이브러리 불러오기
Letter <- c('a','a','a','b','b','b','c','c','c')
X <- c(4,3,5,2,1,7,7,5,9)
Y <- c(0,4,3,6,7,10,11,9,13)
Z <- c(1,2,3,1,2,3,1,2,3)
df <- data.frame(cbind(Letter, X, Y, Z)) #데이터를 column으로 합친다음, data frame으로 지정
ggplot(data = df) + #ggplot이 활용하는 데이터 셋 지정
 geom_point(aes(x=X, y=Y), color = Letter, size = Z) #_point는 scatter plot, aes는 x,y축 지정

 

pandas를 불러와서 데이터 처리를 할 필요도, R 에뮬을 불러와서 ggplot을 써야할 필요도 없다. 직접 R console 창에 붙여서 확인해보시라. 똑같은 결과값을 볼 수 있을 것이다.

ggplot이 얼마나 강력한 그래픽 라이브러리인지 알 수 있는 몇 가지 예시를 들면, Business Intelligence 툴로 전세계 최고 명성을 자랑하는 Tableau가 버젼업을 하면서 새로 추가하는 그래프는 보통 연구팀에서 ggplot으로 그린다음에 Production 팀에 넘긴다는 말을 들은 적이 있다. Tableau 연구팀 Job Posting을 보면 당연하겠지만 Heavy experience in R visualization이라는 항목이 있다. 한번은 D3.js 기반으로 그려진 예쁜 그래프 하나를 Java Script 모르는 필자가 어떻게 구현할까 고민했던 적이 있었는데, R 그래프 라이브러리를 뒤져보니 ggplot 다음 버젼 베타 테스트 결과물 중 하나로 추가가 되어 있었다. 상황이 이렇다보니 Python도 R의 ggplot을 복제해내는 것보다 에뮬레이터로 불러 쓰는 방식으로 진화하고 있는 것이다.

 

R vs. Python 일까? 아니면 R + Python 일까?

그러나…

이렇게 실컷 R 자랑을 해놓고 Python의 데이터 관리 시스템에 불평했는데, R로 개발할 수 있냐고 물으면 별로 대답할 말이 없다. R에서 ShinyApp이라는걸 이용해서 웹페이지 만들 수 있도록 해 놨는데, 쓰는 사람도 별로 없고, 사용법도 간단하질 않고, 그렇다고 서비스의 퀄리티가 훌륭하냐고 물으면 그것도 아니다. 심지어 보안은 아예 지원되는 걸 본 적이 없다. (html 기반 시스템이 얼마나 많은 보안 취약점을 가지고 있는지 아는 분들은 다 아시리라.)

애시당초 개발용 언어가 아니니까.

정리하면,

Python:

  • 개발용 언어
  • 데이터 처리 및 분석 지원을 위해서 pandas, statsmodels, scikit-learn 같은 라이브러리들을 추가하는 중

R:

  • 데이터 처리 및 분석을 위해 만들어진 언어
  • ggplot, dplyr 등을 비롯한 시각화 툴의 역사가 깊고 라이브러리가 풍부함
  • 개발용으로는 쓸 수 없음

필자 역시 둘 다 쓰는게 편하지는 않다. 근데, 이걸 불평하면 안 된다는 생각이 드는게, 어지간한 개발자들은 GUI 지원이 부족한 운영체제인 Linux에 Java나 C++를 비롯한 다양한 프로그래밍 언어를 (어느정도는) 쓸 수 있는 사람들이다. 통계학 기반으로 학계에서 연구하는 사람들도 사정은 크게 다를 바 없다. Matlab과 R 두 언어 중 하나는 마스터, 다른 하나는 남들의 작업 결과물을 이해할 수 있는 수준으로 알고 있는 경우가 대부분이고, 전공별로 사정에 따라 SAS, SPSS 같은 통계 패키지형 프로그램을 주로 쓰는 경우도 많을 것이다. 단적으로 필자의 박사 시절 화면창에 가장 오래 떠 있었던 코딩 기반 프로그램은 Mathematica였다. 복잡한 SDE의 Analytic Solution을 찾기가 버거울 때 최소한 Solution의 형태를 가르쳐주고, 그걸 자동 시뮬레이션 그래프로 보여주는 정말 맘에 쏙 드는 프로그램 중 하나였기 때문이다.(참고로 논문에 쓴 그래프들은 다 Mathematica로 그렸다.)

말을 바꾸면 어차피 한 언어가 완벽하지 않으니, 필요한 목적에 따라 여러 언어를 쓰는게 그냥 상식처럼 되어 있다.

 

나가며 – 멀티 플랫폼에 익숙해지자


(Source: RPy2)

런던서 석사하던 시절, 보통 연구를 Matlab으로 작업하고 있었는데, Jon Danielsson 교수님의 교과서 쓰는 작업이나 ECB 프로젝트에 함께하면서 교수님이 주로 쓰시던 R로 작업하게 되었다. 새로 뭔가를 배운다는 즐거운 마음에 (교수님이 울트라 “갑”이고, 필자는 슈퍼 메가 울트라 “을”이었기 때문에 찍소리 못하고) R을 배워가면서 RA일을 했었는데, 스크립트형 언어라는게 어차피 비슷비슷하기 때문에 그나마 큰 불편없이 따라갔던 기억이 난다. 그리고, 거의 대부분의 언어가 A 언어에서 만든 코드를 B 언어에서 에뮬레이터로 돌릴 수 있도록 해 놓았기 때문에, Matlab으로 짜 놓은 함수를 R로 다시 만들기 힘들 때는 그냥 에뮬레이터를 띄워서 썼던 경험도 있다. 그런데 위에 길게 써 놨듯이 R과 Python은 그 갭이 좀 더 커서, 에뮬레이터를 띄워야하는 경우가 더 많을 것이다. (당장 ggplot같은 초대형 그래픽 라이브러리를 Python에서 만들려면……)

Python 위에서 R 코드를 돌릴 때는 RPy2라는 에뮬레이터를 쓰고, 반대로 R에서 Python 코드를 돌릴 때는 rPython을 쓴다. 필자가 Neural Net 수업 시간에 H2O나 MXNet과 더불어 Python 기반의 Keras 라이브러리의 명령어들 (TensorFlow 포함)을 R 위에서 돌리는데, 이 때 rPython을 활용하고 있다.

아마 한국의 많은 Wannabe 데이터 사이언티스트들이 Python이 전부인 줄 알고 있고, 최소한의 통계학만 쓰면서 데이터 처리가 얼마나 필수적인지 감을 못 잡은 상태로 있을텐데, 이번 포스팅을 시작으로 RPy2를 소개하는 몇 차례 시리즈 글을 연재해볼까 한다. 어차피 Jupyter 노트북을 쓰고 있었으면 모르는사이에 RPy2를 쓰고 있었을지도 모르는겠지만, 그냥 이번 기회에 두 언어를 모두 활용하는데 익숙해질 수 있는 정보를 좀 정리해보고 싶다.

요약: 몇 주 전 저희가 테더 코인에 관한 연구 보고서를 발표한 이후, 푸에르토리코가 금융정보를 추가로 공개했습니다. 새로 추가된 데이터는 노블 은행 (Noble bank) 이 테더 코인의 제 1 차 에치 은행 (primary reserve bank) 이 될 가능성이 있으며, 푸에르토리코가 거대한 암호화폐 산업의 중심이 될 거라는 저희의 예측을 뒷받침합니다.  

이번 주말, 푸에르토리코 금융 기관의 기관장은 2017년 달력 기준 1년 동안의 총 금융 시스템 데이터를 발표했습니다. 노블 은행이 소속되어 있는 국제 금융 기관 (IFE) 은행부서의 은행 예금 보유고는 2017년 12월에 끝나는 한 분기 동안 248% 가 증가한 미화 3십 3억 달러를 기록했습니다. 은행부서의 총 자산은 같은 기간동안 161% 증가하며 미화 3십 8억 달러를 기록했습니다. 이 놀라운 증가세는 대량의 현금이 암호화폐 관련 은행에 유입된 결과 암호화폐 자산 가치 상승한 현상과 동시에 발생했습니다.

같은 기간 동안 발행된 테더 코인의 가치는 215% 상승하여 미화 1십 4만 달러를 기록했습니다. 새로
발표된 이 데이터는 노블 은행이 테더 코인의 제 1 차 예치은행이라는 저희 추측이 담긴 최근 보고서에 담긴 가설을 뒷받침해주는 수치입니다.

저희는 이전 보고서에 있던 도표를 2017년 말의 원본 데이터 포인트를 추가하여 업데이트 했습니다.
이 도표는 푸에르토리코 국제 금융 기구 은행 부서의 은행 예금 보유고가 최근 암호화폐의 갑작스러운
인기에 비례하여 증가했다는 것을 보여줍니다.

푸에르토리코 국제 금융기구의 총 은행 예금 보유고와 테더 코인 보유고 (미화 1백만 달러 기준).
(출처: IFE Accounts, BitMEX Research, Coinmarketcap)

총 자산대비 현금의 비율 (완전 준비 은행 지표) 역시 위와 같은 분기 동안 72.2% 에서 85.8% 로 증가했습니다. 이 데이터는 이전 보고서에서 설명드렸듯 암호화폐와 테더 코인 관련 자산 비율 역시 증가했음을 나타냅니다.

푸에르토리코 국제 금융 기구의 전체 자산대비 총 현금 보유고 비율
(출처: IFE Accounts, BitMEX Research)

고지사항

이 보고서 상의 주장들은 외부로부터 인용된 것이나, 주장의 정확성을 보증하거나 보장하지는 않습니다. 수정 요청은 언제든 환영합니다.

데이터 사이언스라는 업무가 결국은 빅데이터가 있는 곳에서만 유의미한 탓에, IT업계 정도만 진짜 빅데이터를 갖고 뭔가 여러가지 시도를 하고 있는 것을 본다. 얼마 전까지만해도 한국의 IT회사들 대부분이 이미지 인식이나 음성 인식같은 기초적인 데이터 사이언스 업무에만 관심을 갖고, Noise가 더 많은 데이터를 처리 or 가공하려는 시도는 안 하는 통에 많은 경우에 공대 출신 개발자들에 대한 수요만 많은 것만 봤었는데, 슬슬 통계학 지식을 많이 갖춘 사람에 대한 수요가 함께 증가하는 것을 볼 수 있다. 당장 필자의 수업을 거쳐서 취업하신 분들이 회사 안에서 “깝깝한” 소리하는 팀장이나 개발자들에게 그게 아니라고 설명하다가 괴로운 일이 많고, 기존 직원들도 자신들이 지나치게 공학적인 (“A를 넣으면 무조건 B가 나온다”는 단순한) 접근을 하고 있었다는 사실을 깨닫는 중이라는 이야기를 전해듣는다.

어차피 코딩이라는 건 많은 경우에 Copy & Paste로 업무가 이뤄지고, 그 코드 속에 들어가야할 지식인 통계학을 모르고는 회사 사정에 맞게 적용 못한다는 사실을 IT업계 전체가 조금씩 깨닫고 있는 과정일 것이다. 터치 패널에 펜 인식 보정하는 작업하는 지인이 시뮬레이션 데이터를 2배로 늘렸는데, 왜 표준편차는 1.4배 밖에 증가하질 않냐고 질문하시던데, 분산이 2배가 되었고, 표준편차의 제곱이 분산인거 기억나냐고 하니 활짝 웃으며 “아~~” 하고 나가시더라. 단순히 이미지, 음성 인식 같은 분야 뿐만 아니라, 업계 전반이 데이터를 다룰 때 통계학 지식이 얼마나 중요한지 이해하는 과정의 일부라고 생각하고 뒤에서 조용히 응원해드리고 있다^^

지금까지는 코딩 기반 1차적인 지식 습득의 한계를 지적하면서 계속 통계학만 강조했는데, 오늘은 게임이론의 필요성에 대한 이야기를 좀 해보고 싶다.

(Source: A Beautiful Mind)

참고로, 게임이론이란 롤이나 스타크래프트를 잘하는 이론이 아니라, 영화 Beautiful Mind에 나온 것처럼 인간의 행동을 논리적으로 설명하는 수학 모델이고, Incentive라는 매커니즘을 이용해서 그런 행동을 어떻게 바꿀 수 있는지를 따지는 학문의 한 분야이다. (영화의 주인공 John Nash는 게임이론에 대한 기여로 1994년에 노벨 경제학상을 받았다.) 회사 CEO에게 월급만 주는 대신 스톡 옵션 (Stock Option)을 주면, 그 CEO가 회사 주가를 끌어올릴 수 있도록 최선을 다할 것이라는 아이디어가 대표적인 Incentive mechanism이라고 보면 된다. 학부 (박사 아니라 “학부”)과정에서는 수학과와 경제학과에 수업이 개설되어 있고, 지난 20-30년간 학문하는 사람들끼리는 “언어”가 게임이론으로 구성되어 있다고 해도 과언이 아닐 정도로 기본 지식처럼 되어 있다.

근데 이게 갑자기 왜 데이터 사이언스에도 중요한 지식이 되었냐고? 통계학 공부하기도 바빠 죽겠구만…?

 

1. 경험담 – Why Game Theory is needed?

귀국 얼마전, FXXXbook에 면접보던 시절의 이야기다.

필자의 백그라운드를 보면 경제학부 출신으로 증권사 IBD팀을 겪었고, 또 학위 과정 중에는 보통 경제학 전공자들이 안 하는 시뮬레이션, 머신러닝 공부를 했다. 학위도 Mathematical Finance다. 물론 논문 곳곳에 게임이론으로 논리를 전개하면서 경제학 출신 티를 냈다. 덕분에 데이터 사이언티스트로 면접을 보던 중, HR쪽에서 Economist 팀에서 관심을 보인다면서, 경제학 쓰는 포지션에도 관심이 있냐는 질문을 받기도 했었다. 그 땐 왜 이런식으로 하이브리드 백그라운드를 가진 필자에게 관심을 가지는지 잘 몰랐는데 (사실 직장 못 찾을 줄 알았다ㅋㅋ), 몇 달지나 온라인 마케팅 시장이 돌아가는 매커니즘을 공부하고 난 다음에야 비로소 왜 데이터 사이언티스트 면접보던 중에 게임이론 잘 하냐고 묻고, 2nd price auction (2차 가격 경매)을 설명해보라고 했는지 이해하게 되었다.

(Source: Appodeal, Inc) – 왼쪽이 2nd price, 오른쪽이 1st price auction 이다

Google, Microsoft를 주축으로한 서비스들이 광고지면을 파는 방식이 RTB (Real-Time Bidding)이라고 해서, 2차 가격 경매로 지면을 팔고 있고, 광고 지면이 거래되는 방식을 이해하려면, 최소한의 게임이론적인 지식이 필수였다. 심지어 페이스북은 RTB로 부족해, 여러 지면을 동시에 2차 가격으로 판매하는 하이브리드 방식을 취하는데, 이 모델로 Vickrey가 1996년에 노벨 경제학상을 받았다. 요즘들어 나오는 Header bidding 이라는 개념도 결국에는 미시경제학의 가격 차별을 활용하는 방식이라서, 경제학 지식과 데이터 모델링을 할 수 있는 사람들에 대한 수요가 한참 증가하던 걸 보고 겪었던 것이다.

 

2. 게임 이론이 적용된 사례 – 온라인 마케팅 시장

필자가 온라인 마케팅에 머신러닝을 적용하는 사업을 하는 회사에 Senior Data Scientist로 있던 시절의 이야기다. 우리 회사에서 광고 지면을 갖고 있는 회사(매체, Publisher라고 부른다)쪽 커뮤니케이션을 담당하는 팀을 BD (Business Development)라고 불렀는데, 그 팀의 Director (한국말로 이사? 정도 직급, 대략 대기업 부장급) 분이 필자에게 2차 가격 경매를 설명 못 하시더라. 일반 대기업으로 치면 원자재 구매팀의 부장급이 구매 방식을 모른다는 이야기라고 치환해볼 수 있을 것이다. 심지어 Auction이라는 단어도 모르고, Option이라는 단어를 썼다. 2nd price “option”? 그게 뭐지? 그 회사가 사업을 확장하면서 여러 Publisher들과 껄끄러운 문제를 겪은 적이 있었는데, 모델 자체를 제대로 이해 못하니 회사에서 계속 엇나가는 소리만 하는 걸 보고 씁쓸했던 기억이 있다.

(Source: Programmatic Advertising)

국내 회사들로 가면 더 가관이다. RTB라는 방식으로 지면을 팔면 매체 세일즈 팀을 확 줄여서 노동 비용이 줄어든다는 말을 듣고, 잘 모르는 개발자들을 닥달해 꾸역꾸역 RTB를 자기네 시스템에 얹은 매체사들의 RTB 팀 사람들 중에 2nd price auction이라는 개념을 제대로 이해하는 사람을 만난 적이 별로 없다. (필자 앞에서 아는 체 하다가 “털린” 분은 하나 있다.) 그러다보니 2016년 후반부터 Header bidding이라는 업그레이드 버젼이 나왔을 때, 이걸 제대로 이해하는 사람 숫자는 더더욱 없었고, 이 글을 쓰는 시점에 우리나라에 RTB로 광고 지면 판매 중이라는 매체사 중에 Header bidding을 추가 적용한 회사는 적어도 필자가 아는한 단 한 회사도 없다.

2010년대 초반부터 RTB를 주력으로 삼은 많은 글로벌 매체사들은, 2차 가격 경매의 장점을 인지하면서도, 1차 가격과의 차이를 최대한 더 이윤화하기 위해서 여러가지 게임이론 모델들을 테스트 했었다. 아마 FXXXbook의 Economist 팀에서도 비슷한 작업을 하고 있었기 때문에 필자의 게임이론 기반 논문이나 배경 지식에 대해서 여러가지 질문을 던졌을 것이라고 생각한다. “한국은 왜 항상 2류일까”는 글을 쓴 적이 있었는데, 시장이 작으니 새로운 시스템을 만들고 테스트하는데 거부감이 있다는 건 백보 양보해서 이해되지만, 다른 나라 시장이 성공하는 시스템을 빠르게 베끼면서 격차를 최소화하고 있는 시점에 당장 2nd price auction도 제대로 모르는 사람들이 시장의 주류를 차지하고 있으니 2류를 벗어나기가 더더욱 어려워지는 것이다. (필자의 글을 보고 또 엉뚱한 개발자 들볶을 것 같다…)

 

3. 실제 사례 – 카카오 택시

요즘 카카오 택시 서비스의 진화 방향을 보면 그 시절 FXXXbook과 비슷한 내부 수요가 있지 않을까 싶다.

서비스가 확대되면서 사용자 숫자는 많이 늘어났는데, 정작 택시 숫자가 별로 안 늘어나다보니 택시들이 Cherry-picking (마음에 드는 것만 고르는 행태)을 하고 있다는 불평 불만이 많았다. 자본주의 사회에서 가장 확실한 해결책은 택시 운전수 입장에서 좀 덜 마음에 드는 고객에게 추가비용을 납부하도록 하면 된다. 그러나 택시를 관리하는 운수법은 공정한 가격 책정을 원칙으로 할 것이기 때문에, 택시 운전수들에게 추가비용을 주는 요금제를 카카오 택시가 도입하기는 어려울 것이다. (우리나라는 법에서 정하지 않는 내용을 하면 “불법”이 되는 나라니까^^)

(Source: Kakao Mobility presentation, 2018-03-19, The Plaza Hotel, Seoul)

처음 서울시에서는 장거리 손님만 받던 택시에는 단거리 고객만 보이도록 프로그램을 조절해라고 압박(?)을 넣었다고 들었는데, 합산 금액이 많은 택시에게 단거리 위주로 노출하는 방식으로 프로그래밍은 할 수 있겠지만, 안 그래도 승객대비 택시 숫자가 줄어서 급한 카카오 택시에서 그런 정책을 시행할 수 있을까? 보유 택시 숫자를 늘리는 인센티브를 줘도 시원찮을 판국에?

작년 (2017년) 11월 경에 나온 “대안”을 보면, 결국 단거리 손님을 많이 태운 기사에게 장거리 손님을 먼저 노출하기로 했단다. 그리고 손님 호출을 자주 거부하는 기사에게는 일정 시간 동안 아예 호출이 뜨지 않도록 한다던데, 위에 말했듯이 승객대비 택시 숫자가 줄어들어서 다급한 카카오 택시에서 이런 “대안”은 언발에 오줌누기에 불과하다.

결국 이번에 (2018년 3월 13일) 발표된 카카오 택시의 해법을 보면, 택시 호출 서비스를 일부 유료로 전환해, 배차가 빨리 되는 서비스에는 돈을 내도록 하겠단다. 이렇게 얻은 이윤을 일부를 택시 기사분들께 돌려드려야 인센티브가 생길텐데, 어떤 방식으로 돌려줄지는 미정이라고 하니, 우리나라 초일류 IT업체가 얼마나 게임이론을 잘 이해하고 있는지, 법적인 제한을 어떻게 똑똑한 아이디어로 뚫고 나갈 수 있는지 지켜보는 것도 재미있을 것 같다.

 

나가며

모든 데이터 사이언티스트가 게임이론 전문가일 필요는 없다고 생각한다. 글로벌 대형 IT 회사들이 따로 Economist 팀을 갖고 있는 것도, 데이터 사이언티스트가 Economist들과 비슷한 수준의 게임이론 지식을 갖고 있기를 기대하지는 않기 때문일 것이다. 그러나, 데이터 사이언티스트가 DB 담당하는 개발자와 대화하려면 기본적인 DB 관련 지식을 갖춰야하는 것처럼, 회사의 큰 시스템을 만들고 그 시스템의 작동을 함께 테스트해야한다면 데이터 사이언티스트도 일정 수준 이상의 게임이론 지식을 갖출 필요가 있을 것이라고 본다.

가끔 모교 경제학부 후배들이 데이터 사이언티스트가 되고 싶은데, 코딩부터 배워야하는지에 대한 질문을 보내온다. 필자의 답은 길지 않다. 계량경제학, 계량경제학 연습, 그리고 게임이론(을 매우 잘) 듣고 졸업하면 어느 직장을 가건 몇 년안에 회사 최고의 인재가 되어 있을 것이라고. 괜히 개발자스러운 코딩 배우지 말고, 수업 시간에 회귀분석쓰는 코딩 배우라고. 자기 몸 값을 굳이 낮출 필요는 없다고.

지금와서 돌이켜보면 계량이랑 게임은 필자가 학부시절 (and 대학원 시절) 제일 좋아했던 과목들이다.

이전 글: 데이터 사이언스와 비트코인

필자의 박사 논문은 은행 네트워크에 외부 충격이 와서 1 or 2개 은행이 그 직격탄을 맞고 (예시. 2008년 Bear Sterns와 Lehman Brothers), 그 때 파산하는 은행과 직접 금융거래로 묶여 있던 다른 은행들이 그 충격을 어떻게 흡수하고, 은행 네트워크 속에서 간접적인 영향을 받는 다른 제3, 제4의 은행들이 그 충격을 어떻게 피할까, 그런 위험을 계산식에 넣으면 기존의 은행 가치 평가 기준이 어떻게 변할지에 대한 연구를 기반으로 하고 있다.

이번 포스팅 기준으로 윗 요약글의 핵심 단어는 “은행 네트워크, 직접, 간접, 충격 흡수, 위험을 계산식에 넣으면” 이라는 단어다.

(Source: meme)

지난 몇 달간 “비트코인 대박, 쪽박”이 언론에 오르내린 덕분인지 블록체인이 새로운 Buzzword로 부상하면서, 갑자기 “코인”이라는 단어가 안 들어가면 스타트업 펀딩을 못 받는다는 둥, “코인”을 모르면 스타트업계 사람이 아니라는 둥의 또 어이없는 소리를 하는 사람들이 생겨나기 시작했다. 여기저기서 ICO*한다고 소문을 내고 다니고, 저렴할 때 미리 사놓고 나중에 비트코인처럼 대박나면 돈 벌어라는 식으로들 필자를 “꼬시는” 사람도 생겼다.

*ICO: 주식공개 (IPO)의 가상화폐 버전, 코인 거래 시장에 신규 상장하는 코인을 말한다.

뭔가 여의도 증권사에서 세일즈하는 사람들이 IPO하는 주식 물량을 다 소화해야되니 돈 있는 사람들 쫓아다니며 얼마씩 투자하면 나중에 큰 돈 된다고 “썰”을 푸는 것 같은 느낌이 좀 많이 든다. 그리고, (당연하겠지만) 저런 식의 세일즈 하는 사람들 중에 가상화폐의 핵심인 블록체인이 무슨 기술인지 아는 사람은 거의 없다.

 

1. 블록체인의 시초 – 외환 송금

블록체인을 좀 (많이) 간단하게 설명하면,

A. 둘이 서로 거래하고,

B. 다른 사람들에게 알리고,

C. 그 거래를 다른 사람들이 다 승인하고,

D. 승인 내용을 다른 사람들 블록 안에 기록하고,

E. 승인하고 기록한 블록들에게 수수료를 지불하는 시스템

F. 수수료를 “가상화폐”로 지불

이라고 요약할 수 있다.

(Source: SpotCrime)

제일 먼저 이 시스템을 이용하려고 했던 서비스는 외환 송금이었다. 국가 A에서 국가 B로 송금하려고 할 때, 화폐가 다르기 때문에 환전을 해야하는데, 환율은 국가 A의 외환 시장에서 뿐만 아니라 국가 B의 외환시장에서도 독립적으로 결정된다. 문제는 국가 A의 은행a가 국가 B의 은행b로 송금할 때, 각 국별로 외환 담당하는 은행을 우선 거쳐야하고 (한국은 국민은행과 외환은행), 국가별 중앙은행을 거쳐야하고 (대량 외환 유출로 IMF 구제금융 시즌 2가 일어나는걸 한국은행이 가만히 둘리가…), 또 국제 결제 시스템인 스위프트 (SWIFT)를 이용한다. 스위프트는 국제적인 은행연합체(BIS)에 의해서 관리된다. 이게 40년 전에 구축된 시스템인데, 해외 송금해보신 분들은 알겠지만 시간도 하루, 이틀 걸리고, 은행 수수료도 만만치 않다. (요즘은 많이 저렴해지긴 했지만…)

이렇게 시간이 걸리다보니 은행들은 가격 변동의 위험에 노출되어 있고, 항상 금융시장에서 헷징 (Hedging)을 한다. 환율이 변동된 부분만큼 보상을 받거나, 차익을 지불하는 상품을 구매하는 것이다. 덕분에 한국에서 해외직구로 카드 결제를 하고나면, 월말 카드 명세서에 총 거래 금액의 0.2% ~ 0.35% 정도에 해당하는 헷징 수수료를 청구해놓은 걸 확인할 수 있을 것이다.

이걸 블록체인으로 해결하면 송금 자체를 훨씬 빠르게, 그래서 헷징 수수료도 훨씬 적게 들도록 할 수 있(는 가능성이 생긴)다. 필자가 2016년 초에 실리콘 밸리 일대에서 해외 송금 문제를 해결하겠다는 스타트업들을 여러개 봤었는데, 사업 내용이 세부적으로 조금씩 다르기는 하지만, 대체로 블록체인을 이용해 여러개의 Entity가 동시에 외환 거래를 보증하는 방식으로 스위프트를 대체하겠다는 아이디어를 바탕으로 하고 있었다. 거래를 승인해주고 기록한 주체들이 그 금전거래가 문제가 생길경우 책임을 지는 반대급부로, 수수료를 받는데, 그 수수료가 얼마전까지 광풍을 불어왔던 가상화폐로 지불되는 시스템이다.

 

2. 네트워크 이론

블록체인은 결국 중앙집권적인 SWIFT 시스템 대신 네트워크를 구성하는 세계 곳곳의 은행들이 거래를 승인하는 방식을 말한다. 한 명의 독재자가 있는 시스템이 아니라, 여러명의 책임자들이 공동 정부를 구성하는 방식이라고 이해하면 된다. 네트워크 이론에서는 앞의 경우를 Star Network라고 부르고, 뒤의 경우를 Mesh Network라고 부른다.

(Source: Study.com) – 로고에 가려진 네트워크 이름은 “Tree”다.

필자가 논문쓸 때 주로 봤던 네트워크는 작은 나라에서 중앙은행을 기준으로한 은행 시스템을 보여주는 Star Network, 유럽 연합(EU)처럼 여러나라를 넘나들며 사업하는 은행들이 또 서로 엮어있는 Hybrid (또는 Complete)를 기준으로 연구를 했고, 공부하던 당시에 Ring Network를 기준으로 수학적인 문제들을 해결하는 경우, Mesh의 부분 부분만 끊어서 문제를 해결하는 경우들에 대한 논문을 봤었다.

블록체인이 구성되려면 Mesh형 네트워크가 일시적, 부분적으로 Star형 네트워크로 전환되어야 한다. 예를 들면, 바로 맞닿아 있는 Entity가 2, 3개 밖에 없는데, 최소한 5개 이상의 다른 Entity가 거래를 승인해야하는 경우를 생각해보자. 이 때는 바로 맞닿아 있지 않지만, 그 거래를 “전해들을” 수 있는 2-step 떨어진 Entity에게 통보를 보내서 5개의 Entity를 맞춰야 한다. 이래도 부족하다면? 3-step, 4-step으로 신호를 보낸다.

그래도 부족하다면? 수수료를 올려야한다. 이 때 보내는 수수료가 바로 “가상화폐”들이다. 이 때 발생할 수 있는 좀 위험한 경우의 수들을 한번 따져보자.

A. 그렇게 승인을 해줬는데, 거래 오류가 발생해서 거래 쌍방 중 한 쪽이 손해를 봤다면? 당연히 수수료를 받았던 Entity들이 보상을 해 줘야 한다. 승인해주면서 받았던 “가상화폐”들로.

B. 서버가 다운되어서 거래 내역이 완전히 삭제되었고, 다시 데이터 복구를 해야하는 상황이라면? 결제할 때 보증해주면서 기록을 남겼던 다른 Entity들이 기록을 공유해줘서 서버 데이터를 복구시킬 수 있다. 당연히 수수료를 줘야 한다.

C. 내 블록에 기록해놨던 다른 Entity들의 기록이 다 지워졌다면? 기록을 복구하고 싶으면 같이 승인에 참가했던 Entity에서 기록을 넘겨받고 수수료를 주거나, 아니면 복구를 포기해야 한다.

여러 Entity들이 C의 상황을 겪은 바람에 A처럼 손해보는 Entity가 생기면 어떻게 될까? 기록이 남아있는 블록에 의존해서 문제를 해결한다. 위에서 승인하는 Entity가 5개라고 했는데, 모든 블록들이 다 데이터 손실이 있을 경우도 생기기 때문에 (ex. 바이러스), 거래를 직접 승인한 블록만 그 정보를 저장하는게 아니라, 승인한 블록과 연결되어있는 2차 관계자, 3차 관계자들에게도 같은 정보를 저장하는 편이 맞을 것이다. 끝으로, 내 블록에서 처리된 거래내역들을 갖고 있었어야 거래 오류로 손해 본 부분에 대한 보상을 요구할 수 있으니 당연히 B의 경우에도 수수료를 주고 데이터를 복구시키려고 할 것이다.

다들 “가상화폐”나 “코인”이라고하니 무슨 돈 거래인 것처럼 생각했겠지만, 사실은 거래 정보를 승인하고 기록하는 탈중앙화된 시스템이 작동하도록하는 “게임 시스템 머니”라고 보는게 옳다. 물론 그 “코인”이 실물로 전환이 되어야 정말 “머니”가 되는 거겠지만.

 

3. 블록체인 열풍과 머신러닝

어쩌면 “(비트)코인 열풍”이라고 쓰는게 더 맞지 않을까 싶다. 몇 달 전엔 “머신러닝이나 딥러닝으로 비트코인 가격 예측할 수 있지 않냐”는 연락도 받아봤고, 요즘 잘 모르는 스타트업들이 너도나도 코인 대열에 끼어들고 있다. (한국에서도 벌써 3개나 봤다.) 다들 ICO한다고 언론 플레이를 하는 걸 보는데, 과연 몇 명이나 저런 네트워크 모델을 이해하고 문제점들을 해결하는 시스템을 구성하고 있는지에 대해서는 좀 큰 Question mark를 던지고 싶다.

(Source: VentureRadar)

비트코인의 사례에서 봤듯이, 네트워크가 복잡해지면 블록간 결합, 정보 전송, 분리를 유기적으로 빠르게 처리하는데 굉장히 많은 시스템 자원이 필요하다. 당연히 계산 모듈도 좋아야하고, 또 시스템을 효율적으로 구성할 수 있는 네트워크 모델적인 아이디어와 코드 구성적인 아이디어가 동원되어야 하는데, 한국에서 ICO를 하겠다는 스타트업 대표들 중에 필자가 납득할만큼의 수학적인 지식을 가진 사람을 아직 못 만나봤다. (심지어 셋 중 한 회사 대표는 고교 정석책 수준의 교양 수학 서적도 이해 못 하는 사람이었다.)

사실 머신러닝의 Neural network (일반에 딥러닝으로 알려진)를 이미지 인식이나 음성 정보 처리같은데 활용할 수 있는 프로그래밍 프로젝트로(copy & paste로) 본 사람들의 눈에 블록체인이 수학의 네트워크 모델이고 Neural network와 접점이 있다는 인식이 쉽게 와 닿을 것 같지는 않다. 언제나 모든 지식은 아는 만큼만 보이는 법이니까.

(Source: Hopfield network)

Neural network를 one-way로 푸는 방식말고, Hobfield network로 푸는 방식을 본 사람들이라면 블록체인의 네트워크 구성방식이랑 굉장히 비슷하다는 느낌을 받을 것이다. 위에 예시로 든 Hobfield 그림을 보면, Mesh나 Hybrid (or complete) network와 유사한 네트워크라는 걸 알 수 있다. 말을 바꾸면 네트워크 전체가 유기적으로 움직이는데 필요한 계산의 일부분을 머신러닝의 Neural network로 쓸 수 있다는 걸 보여준다.

좀 더 정확하게 이야기하려면 오른쪽의 Network 그림보다 왼쪽의 행렬식에 집중하는 편이 더 좋을 것 같다. 결국 Neuron을 잇고 있는 Node들에 들어가는 가중치(Weight)는 행렬의 숫자들로 표현되고, 위의 계산도 필자가 반복적으로 주장하듯이 Network 계산은 행렬 계산이 되어버린다. 고교 수학에 나오듯이, 행렬은 중학교 때 배운 방정식 계산을 위한 도구라는 점을 기억해보면, 결국 블록체인 모델링의 기초를 우리네 중, 고교 수학에서 다 배웠다는 걸 알 수 있다. (그렇다고 네트워크 이론을 몰라도 된다는 말은 아니다 ㅎㅎ)

어차피 Neural net 기반의 머신러닝 모델이건 Hobfield net 기반의 블록체인이건 실제로 적용하는 작업에 필요한 계산은 최적화(Optimization)다. 이걸 개발자 스타일로 “새로 나온거야? 어떻게 쓰는거야?”라고 물으면서 Copy & Paste를 하는게 맞을까, 아니면 기본적인 수학 개념들을 이해해서 두 개의 기술 모델이 어떻게 연관되어 있는지를 이해하는게 좋을까?

 

나가며

가상화폐라는 것은 블록체인 시스템이 돌아가도록하는 도구이지, 그 자체로 화폐를 대체하는 수단이 되는데는 한계가 있다. 이전 글에서도 밝혔듯이, 화폐의 가치는 보증해 주는 기관의 신뢰도에 달려있는데, 탈중앙집권적인 대부분의 가상화폐는 생성방식에서 이미 보증기관을 배제하고 시작한다. 결국 특정 시스템 내부적으로만 인정받는 화폐가 될 것이고, 그 가치는 시스템이 잘 돌아가는지의 여부와 실물 화폐로 연동되는 창구에서 가치가 안정적으로 유지될 수 있느냐에 달려있을 것이라고 본다.

요즘 몇몇 회사들이 진행하는 ICO는 아예 한 발 더 나가서 그냥 코인 찍어내고 돈을 받는, 봉이 김선달 식의 판매같은 느낌도 든다. 주식이라면 회사 소유권을 갖게되는거지만, ICO로 받은 코인은 그 코인이 다른 실물화폐와 일정 비율의 교환 가치를 가질 때만 진정한 가치를 가지게 된다. 물론 아무도 그 교환 가치를 보증해주지 않는다. 돈이 몰리는 가장 큰 이유는 비트 코인처럼 가격이 폭등할 것이라는 (맹목적인) “기대”가 있기 떄문일 것이다. 정말 “기대”대로 가격이 폭등할까?

(Source: B’ZUP) – 테라노스의 급성장도 실제 기술에는 관심없고, 투자금액(과 CEO의 미모?)에만 열광했던 비전문가들이 만들어낸 투기판이었다

“코인”한다는 사업모델을 찾고 있는 투자자들, 코인에 일찍 투자해서 큰 돈을 벌고 싶은 ICO 매니악들에게도 같은 말을 하고 싶다. 실물 화폐가 유의미한 이유는 경제 시스템이 원활하게 돌아가도록하는 윤활유이기 때문이다. 짐바브웨나 아르헨티나처럼 정부가 외환 부채 갚겠다고 돈을 막 찍어내면 초 인플레로 경제 시스템이 망가지고, 국민들이 그 나라 화폐 대신 달러, 유로, 엔 같은 안정적인 가치의 대체 화폐를 찾는다. 가상화폐들의 운명도 그 가상화폐를 사용하는 시스템이 얼마나 잘 돌아가는지에 달려있지, “광풍”에 달려있지는 않다.

사업 모델이 구체적으로 갖춰지지 않은 회사가 찍어낸 ICO를 구매해놓고 “대박”이 나기를 기대하는건, 2000년대 초반 닷컴 버블과 다를게 하나도 없다. 화려한 용어만 가득 들어간 백서(White Paper) 하나 만들고 ICO하겠다는 회사들 중에 그 백서의 내용을 구현하기는 커녕 제대로 이해하는 회사는 과연 몇 개나 될까?

“광풍”을 몰고 온 메뚜기 떼가 지나간 벌판은 쌀 한 톨도 남아 있지 않는 폐허가 된다.

 

블록체인 시리즈

이전 글: 데이터 사이언스와 비트코인

필자의 박사 논문은 은행 네트워크에 외부 충격이 와서 1 or 2개 은행이 그 직격탄을 맞고 (예시. 2008년 Bear Sterns와 Lehman Brothers), 그 때 파산하는 은행과 직접 금융거래로 묶여 있던 다른 은행들이 그 충격을 어떻게 흡수하고, 은행 네트워크 속에서 간접적인 영향을 받는 다른 제3, 제4의 은행들이 그 충격을 어떻게 피할까, 그런 위험을 계산식에 넣으면 기존의 은행 가치 평가 기준이 어떻게 변할지에 대한 연구를 기반으로 하고 있다.

이번 포스팅 기준으로 윗 요약글의 핵심 단어는 “은행 네트워크, 직접, 간접, 충격 흡수, 위험을 계산식에 넣으면” 이라는 단어다.

(Source: meme)

지난 몇 달간 “비트코인 대박, 쪽박”이 언론에 오르내린 덕분인지 블록체인이 새로운 Buzzword로 부상하면서, 갑자기 “코인”이라는 단어가 안 들어가면 스타트업 펀딩을 못 받는다는 둥, “코인”을 모르면 스타트업계 사람이 아니라는 둥의 또 어이없는 소리를 하는 사람들이 생겨나기 시작했다. 여기저기서 ICO*한다고 소문을 내고 다니고, 저렴할 때 미리 사놓고 나중에 비트코인처럼 대박나면 돈 벌어라는 식으로들 필자를 “꼬시는” 사람도 생겼다.

*ICO: 주식공개 (IPO)의 가상화폐 버전, 코인 거래 시장에 신규 상장하는 코인을 말한다.

뭔가 여의도 증권사에서 세일즈하는 사람들이 IPO하는 주식 물량을 다 소화해야되니 돈 있는 사람들 쫓아다니며 얼마씩 투자하면 나중에 큰 돈 된다고 “썰”을 푸는 것 같은 느낌이 좀 많이 든다. 그리고, (당연하겠지만) 저런 식의 세일즈 하는 사람들 중에 가상화폐의 핵심인 블록체인이 무슨 기술인지 아는 사람은 거의 없다.

 

1. 블록체인의 시초 – 외환 송금

블록체인을 좀 (많이) 간단하게 설명하면,

A. 둘이 서로 거래하고,

B. 다른 사람들에게 알리고,

C. 그 거래를 다른 사람들이 다 승인하고,

D. 승인 내용을 다른 사람들 블록 안에 기록하고,

E. 승인하고 기록한 블록들에게 수수료를 지불하는 시스템

F. 수수료를 “가상화폐”로 지불

이라고 요약할 수 있다.

(Source: SpotCrime)

제일 먼저 이 시스템을 이용하려고 했던 서비스는 외환 송금이었다. 국가 A에서 국가 B로 송금하려고 할 때, 화폐가 다르기 때문에 환전을 해야하는데, 환율은 국가 A의 외환 시장에서 뿐만 아니라 국가 B의 외환시장에서도 독립적으로 결정된다. 문제는 국가 A의 은행a가 국가 B의 은행b로 송금할 때, 각 국별로 외환 담당하는 은행을 우선 거쳐야하고 (한국은 국민은행과 외환은행), 국가별 중앙은행을 거쳐야하고 (대량 외환 유출로 IMF 구제금융 시즌 2가 일어나는걸 한국은행이 가만히 둘리가…), 또 국제 결제 시스템인 스위프트 (SWIFT)를 이용한다. 스위프트는 국제적인 은행연합체(BIS)에 의해서 관리된다. 이게 40년 전에 구축된 시스템인데, 해외 송금해보신 분들은 알겠지만 시간도 하루, 이틀 걸리고, 은행 수수료도 만만치 않다. (요즘은 많이 저렴해지긴 했지만…)

이렇게 시간이 걸리다보니 은행들은 가격 변동의 위험에 노출되어 있고, 항상 금융시장에서 헷징 (Hedging)을 한다. 환율이 변동된 부분만큼 보상을 받거나, 차익을 지불하는 상품을 구매하는 것이다. 덕분에 한국에서 해외직구로 카드 결제를 하고나면, 월말 카드 명세서에 총 거래 금액의 0.2% ~ 0.35% 정도에 해당하는 헷징 수수료를 청구해놓은 걸 확인할 수 있을 것이다.

이걸 블록체인으로 해결하면 송금 자체를 훨씬 빠르게, 그래서 헷징 수수료도 훨씬 적게 들도록 할 수 있(는 가능성이 생긴)다. 필자가 2016년 초에 실리콘 밸리 일대에서 해외 송금 문제를 해결하겠다는 스타트업들을 여러개 봤었는데, 사업 내용이 세부적으로 조금씩 다르기는 하지만, 대체로 블록체인을 이용해 여러개의 Entity가 동시에 외환 거래를 보증하는 방식으로 스위프트를 대체하겠다는 아이디어를 바탕으로 하고 있었다. 거래를 승인해주고 기록한 주체들이 그 금전거래가 문제가 생길경우 책임을 지는 반대급부로, 수수료를 받는데, 그 수수료가 얼마전까지 광풍을 불어왔던 가상화폐로 지불되는 시스템이다.

 

2. 네트워크 이론

블록체인은 결국 중앙집권적인 SWIFT 시스템 대신 네트워크를 구성하는 세계 곳곳의 은행들이 거래를 승인하는 방식을 말한다. 한 명의 독재자가 있는 시스템이 아니라, 여러명의 책임자들이 공동 정부를 구성하는 방식이라고 이해하면 된다. 네트워크 이론에서는 앞의 경우를 Star Network라고 부르고, 뒤의 경우를 Mesh Network라고 부른다.

(Source: Study.com) – 로고에 가려진 네트워크 이름은 “Tree”다.

필자가 논문쓸 때 주로 봤던 네트워크는 작은 나라에서 중앙은행을 기준으로한 은행 시스템을 보여주는 Star Network, 유럽 연합(EU)처럼 여러나라를 넘나들며 사업하는 은행들이 또 서로 엮어있는 Hybrid (또는 Complete)를 기준으로 연구를 했고, 공부하던 당시에 Ring Network를 기준으로 수학적인 문제들을 해결하는 경우, Mesh의 부분 부분만 끊어서 문제를 해결하는 경우들에 대한 논문을 봤었다.

블록체인이 구성되려면 Mesh형 네트워크가 일시적, 부분적으로 Star형 네트워크로 전환되어야 한다. 예를 들면, 바로 맞닿아 있는 Entity가 2, 3개 밖에 없는데, 최소한 5개 이상의 다른 Entity가 거래를 승인해야하는 경우를 생각해보자. 이 때는 바로 맞닿아 있지 않지만, 그 거래를 “전해들을” 수 있는 2-step 떨어진 Entity에게 통보를 보내서 5개의 Entity를 맞춰야 한다. 이래도 부족하다면? 3-step, 4-step으로 신호를 보낸다.

그래도 부족하다면? 수수료를 올려야한다. 이 때 보내는 수수료가 바로 “가상화폐”들이다. 이 때 발생할 수 있는 좀 위험한 경우의 수들을 한번 따져보자.

A. 그렇게 승인을 해줬는데, 거래 오류가 발생해서 거래 쌍방 중 한 쪽이 손해를 봤다면? 당연히 수수료를 받았던 Entity들이 보상을 해 줘야 한다. 승인해주면서 받았던 “가상화폐”들로.

B. 서버가 다운되어서 거래 내역이 완전히 삭제되었고, 다시 데이터 복구를 해야하는 상황이라면? 결제할 때 보증해주면서 기록을 남겼던 다른 Entity들이 기록을 공유해줘서 서버 데이터를 복구시킬 수 있다. 당연히 수수료를 줘야 한다.

C. 내 블록에 기록해놨던 다른 Entity들의 기록이 다 지워졌다면? 기록을 복구하고 싶으면 같이 승인에 참가했던 Entity에서 기록을 넘겨받고 수수료를 주거나, 아니면 복구를 포기해야 한다.

여러 Entity들이 C의 상황을 겪은 바람에 A처럼 손해보는 Entity가 생기면 어떻게 될까? 기록이 남아있는 블록에 의존해서 문제를 해결한다. 위에서 승인하는 Entity가 5개라고 했는데, 모든 블록들이 다 데이터 손실이 있을 경우도 생기기 때문에 (ex. 바이러스), 거래를 직접 승인한 블록만 그 정보를 저장하는게 아니라, 승인한 블록과 연결되어있는 2차 관계자, 3차 관계자들에게도 같은 정보를 저장하는 편이 맞을 것이다. 끝으로, 내 블록에서 처리된 거래내역들을 갖고 있었어야 거래 오류로 손해 본 부분에 대한 보상을 요구할 수 있으니 당연히 B의 경우에도 수수료를 주고 데이터를 복구시키려고 할 것이다.

다들 “가상화폐”나 “코인”이라고하니 무슨 돈 거래인 것처럼 생각했겠지만, 사실은 거래 정보를 승인하고 기록하는 탈중앙화된 시스템이 작동하도록하는 “게임 시스템 머니”라고 보는게 옳다. 물론 그 “코인”이 실물로 전환이 되어야 정말 “머니”가 되는 거겠지만.

 

3. 블록체인 열풍과 머신러닝

어쩌면 “(비트)코인 열풍”이라고 쓰는게 더 맞지 않을까 싶다. 몇 달 전엔 “머신러닝이나 딥러닝으로 비트코인 가격 예측할 수 있지 않냐”는 연락도 받아봤고, 요즘 잘 모르는 스타트업들이 너도나도 코인 대열에 끼어들고 있다. (한국에서도 벌써 3개나 봤다.) 다들 ICO한다고 언론 플레이를 하는 걸 보는데, 과연 몇 명이나 저런 네트워크 모델을 이해하고 문제점들을 해결하는 시스템을 구성하고 있는지에 대해서는 좀 큰 Question mark를 던지고 싶다.

(Source: VentureRadar)

비트코인의 사례에서 봤듯이, 네트워크가 복잡해지면 블록간 결합, 정보 전송, 분리를 유기적으로 빠르게 처리하는데 굉장히 많은 시스템 자원이 필요하다. 당연히 계산 모듈도 좋아야하고, 또 시스템을 효율적으로 구성할 수 있는 네트워크 모델적인 아이디어와 코드 구성적인 아이디어가 동원되어야 하는데, 한국에서 ICO를 하겠다는 스타트업 대표들 중에 필자가 납득할만큼의 수학적인 지식을 가진 사람을 아직 못 만나봤다. (심지어 셋 중 한 회사 대표는 고교 정석책 수준의 교양 수학 서적도 이해 못 하는 사람이었다.)

사실 머신러닝의 Neural network (일반에 딥러닝으로 알려진)를 이미지 인식이나 음성 정보 처리같은데 활용할 수 있는 프로그래밍 프로젝트로(copy & paste로) 본 사람들의 눈에 블록체인이 수학의 네트워크 모델이고 Neural network와 접점이 있다는 인식이 쉽게 와 닿을 것 같지는 않다. 언제나 모든 지식은 아는 만큼만 보이는 법이니까.

(Source: Hopfield network)

Neural network를 one-way로 푸는 방식말고, Hobfield network로 푸는 방식을 본 사람들이라면 블록체인의 네트워크 구성방식이랑 굉장히 비슷하다는 느낌을 받을 것이다. 위에 예시로 든 Hobfield 그림을 보면, Mesh나 Hybrid (or complete) network와 유사한 네트워크라는 걸 알 수 있다. 말을 바꾸면 네트워크 전체가 유기적으로 움직이는데 필요한 계산의 일부분을 머신러닝의 Neural network로 쓸 수 있다는 걸 보여준다.

좀 더 정확하게 이야기하려면 오른쪽의 Network 그림보다 왼쪽의 행렬식에 집중하는 편이 더 좋을 것 같다. 결국 Neuron을 잇고 있는 Node들에 들어가는 가중치(Weight)는 행렬의 숫자들로 표현되고, 위의 계산도 필자가 반복적으로 주장하듯이 Network 계산은 행렬 계산이 되어버린다. 고교 수학에 나오듯이, 행렬은 중학교 때 배운 방정식 계산을 위한 도구라는 점을 기억해보면, 결국 블록체인 모델링의 기초를 우리네 중, 고교 수학에서 다 배웠다는 걸 알 수 있다. (그렇다고 네트워크 이론을 몰라도 된다는 말은 아니다 ㅎㅎ)

어차피 Neural net 기반의 머신러닝 모델이건 Hobfield net 기반의 블록체인이건 실제로 적용하는 작업에 필요한 계산은 최적화(Optimization)다. 이걸 개발자 스타일로 “새로 나온거야? 어떻게 쓰는거야?”라고 물으면서 Copy & Paste를 하는게 맞을까, 아니면 기본적인 수학 개념들을 이해해서 두 개의 기술 모델이 어떻게 연관되어 있는지를 이해하는게 좋을까?

 

나가며

가상화폐라는 것은 블록체인 시스템이 돌아가도록하는 도구이지, 그 자체로 화폐를 대체하는 수단이 되는데는 한계가 있다. 이전 글에서도 밝혔듯이, 화폐의 가치는 보증해 주는 기관의 신뢰도에 달려있는데, 탈중앙집권적인 대부분의 가상화폐는 생성방식에서 이미 보증기관을 배제하고 시작한다. 결국 특정 시스템 내부적으로만 인정받는 화폐가 될 것이고, 그 가치는 시스템이 잘 돌아가는지의 여부와 실물 화폐로 연동되는 창구에서 가치가 안정적으로 유지될 수 있느냐에 달려있을 것이라고 본다.

요즘 몇몇 회사들이 진행하는 ICO는 아예 한 발 더 나가서 그냥 코인 찍어내고 돈을 받는, 봉이 김선달 식의 판매같은 느낌도 든다. 주식이라면 회사 소유권을 갖게되는거지만, ICO로 받은 코인은 그 코인이 다른 실물화폐와 일정 비율의 교환 가치를 가질 때만 진정한 가치를 가지게 된다. 물론 아무도 그 교환 가치를 보증해주지 않는다. 돈이 몰리는 가장 큰 이유는 비트 코인처럼 가격이 폭등할 것이라는 (맹목적인) “기대”가 있기 떄문일 것이다. 정말 “기대”대로 가격이 폭등할까?

(Source: B’ZUP) – 테라노스의 급성장도 실제 기술에는 관심없고, 투자금액(과 CEO의 미모?)에만 열광했던 비전문가들이 만들어낸 투기판이었다

“코인”한다는 사업모델을 찾고 있는 투자자들, 코인에 일찍 투자해서 큰 돈을 벌고 싶은 ICO 매니악들에게도 같은 말을 하고 싶다. 실물 화폐가 유의미한 이유는 경제 시스템이 원활하게 돌아가도록하는 윤활유이기 때문이다. 짐바브웨나 아르헨티나처럼 정부가 외환 부채 갚겠다고 돈을 막 찍어내면 초 인플레로 경제 시스템이 망가지고, 국민들이 그 나라 화폐 대신 달러, 유로, 엔 같은 안정적인 가치의 대체 화폐를 찾는다. 가상화폐들의 운명도 그 가상화폐를 사용하는 시스템이 얼마나 잘 돌아가는지에 달려있지, “광풍”에 달려있지는 않다.

사업 모델이 구체적으로 갖춰지지 않은 회사가 찍어낸 ICO를 구매해놓고 “대박”이 나기를 기대하는건, 2000년대 초반 닷컴 버블과 다를게 하나도 없다. 화려한 용어만 가득 들어간 백서(White Paper) 하나 만들고 ICO하겠다는 회사들 중에 그 백서의 내용을 구현하기는 커녕 제대로 이해하는 회사는 과연 몇 개나 될까?

“광풍”을 몰고 온 메뚜기 떼가 지나간 벌판은 쌀 한 톨도 남아 있지 않는 폐허가 된다.

 

 

데이터 사이언스 강의를 하다보면, 통계학이 뭐가 중요하냐고, 그냥 “빅”데이터 전부를 “딥”러닝 모델에 다 집어넣으면 알아서 답 가르쳐주는거 아니냐고, 왜 자꾸 고등학교 이후로 보지도 않은 수학 이야기하면서 수업을 진행하냐고 불편한 기색을 못 감추는 분들이 있다.

아무 변수나 막 집어넣는 걸 피하려고 여러가지 작업을 해 놓은 현업 머신러닝 적용 논문 (“합리적으로 변수 추출하기” 참조)을 소개시켜줘도 그런 말씀을 하시는 분들을 보면, 고교시절 수학 공부를 제대로 안 했고, 학부시절 수학을 자기 전공 공부에 제대로 안(or 못) 써본 경우가 대부분이다. 그런 분들이 통계학 수업을 할 때 꼭 묻는 질문들이 있다. 원인과 결과를 구분해야한다는 말은 알겠는데, 그런식으로 “달걀이 먼저인지, 닭이 먼저인지” 모르는 철학적인 질문에 통계학이 무슨 답을 해 줄수 있냐고 하시더라.

사실 이런 철학적(?)인 질문이 오랫동안 학문하는 사람들, 특히 인과관계로 상관관계를 구분하는 데이터 모델링을 해야하는 사람들에게 큰 과제였다. 그리고, 예전에는 “논리적”으로 순서를 따져보면 원인과 결과관계인지, 단순하게 시간의 선후 관계인지 구분할 수 있지 않냐고 애매모호(?)하게 넘어가는 경우도 많았다. 그러다 1969년에 Clive Granger라는 영국인 통계학자가 경제학계 최고 권위의 저널인 Econometrica에 낸 논문에서 이 문제를 다룰 수 있는 큰 전환점을 만들어 냈다. Granger causality라고 일반에 알려진 모델이다.

(Granger는 이 논문를 비롯한 다른 시계열 데이터 모델링에 대한 공헌을 바탕으로 2003년에 노벨 경제학상을 수상했다. 통계학자의 논문이 경제학 저널에 나오고, 노벨 경제학상을 받았다는 부분에서 경제학이 얼마나 통계학과 밀접하게 연관되어 있는지 이해하실 수 있을 것이다.)

(참고로, 많은 경제학자 & 경제학 관련 전공 연구자들이 Econometrica에 논문 한번 내 보려고 평생을 연구에 바친다. 한국에는 서울대학교 경제학부의 황윤재 교수님을 비롯한 극소수 경제학자들만 Econometrica에 논문 실적이 있을만큼 논문 한 편 내기 굉장히 힘든 저널이다.)

“합리적으로 변수 추출하기” 에서 이미 확인하신 분도 있겠지만, “빅”데이터를 다루다보면 많은 경우에 인과관계와 상관관계가 헷갈리는 경우가 있다. 위의 예시는 상어가 인간을 공격하는 사건 (빨간색)과 아이스크림 판매량 (파란색)이 매우 높은 상관관계를 가지는 것을 보여준다. 이 그래프만 보면, 아이스크림이 많이 팔릴수록 상어가 사람을 많이 공격하니, 아이스크림 판매량을 억제하면 상어가 인간을 덜 공격할 것이다는 성급한 결론을 내리게 된다. (더 심하게는 상어가 인간 몸 속에서 소화되어버린 아이스크림을 좋아하는게 아닌가는 생물학적인 실험을 하는 경우도 있을것이다. OMG!!!)

그러나 조금이라도 “상식”이 있는 사람이라면, 여름에 더워서 아이스크림을 많이 사먹는 것과 해변에 여행을 많이가다보니 상어에 노출되는 경우가 많은 경우를 놓고, 더위로 인한 두 가지 다른 파생결과라고 해석할 것이다. 이걸 하나로 묶어서 보는 어리석음은 단순히 숫자 (정확하게는 그래프 모양)에 집착했기 때문인데, Granger causality는 이런 문제를 논리적으로 인식할 수 있는 좋은 생각의 틀이다.

 

1. Granger causality

논문의 아이디어는 간단하다. 원인과 결과가 시간 순서에 따라 발생했다면, X와 Y간 시간의 선후가 서로에게 영향을 주었는지를 살펴보는 것이다.

위의 식에서 X의 과거 값이 X의 현재 값에 영향을 주었다면 X는 시계열 데이터다. 그런데, 과거의 Y값이 오늘의 X에게 영향을 주었다면? 위의 식에서 Beta값이 0이 아닌 다른 값이 나왔을 것이다. 과거의 Y값이 오늘의 X에게 전혀 영향을 주지 않았다면? 모든 Beta값이 0이 나왔을 것이다. 이렇게 과거의 Y가 현재의 X에게 전혀 영향을 주지 않은 경우에 “Granger causality”가 없다고 표현한다.

반대로 X의 과거 값이 Y의 현재 값에 영향을 주었다면 어떻게 될까? 아까 식으로 잡아낼 수 있었던거 아니냐고? 위의 식은 “과거”의 Y가 “현재”의 X에게 영향을 주는지만 따지는 통계 검증이다. X의 “과거”가 Y의 “현재”에 주는 영향은 확인할 수 없다. 그래서 보통은 아래와 같은 식을 이용해서 쌍방향 테스트를 진행한다.

상대방 변수의 과거가 타겟 변수의 현재 값에 전혀 영향을 주지 않지만, 타겟 변수는 시간이 지남에 따라 특정한 수열을 보이는 경우, Granger causality 테스트를 통해 X와 Y는 시계열 데이터일 뿐이지 서로간 인과관계는 볼 수 없다고 결론을 내린다.

첫머리에 들었던 아이스크림 판매량과 상어의 공격을 놓고 보면, 각각은 여름에 폭발적으로 증가하는 시계열 데이터의 특성을 보이지만, 서로가 서로에게 영향을 주는 관계는 아닌, 인과관계가 없다는 결론을 내릴 수 있는 것이다.

(물론 위의 테스트만으로 무조건 인과관계를 단정지을 수는 없다. 시간의 선후가 유의미한 맥락을 갖는 시계열 데이터에만 적용할 수 있고, 시간의 선후를 나눌 때 데이터 처리방식에 따라 교묘하게 인과관계가 있는 것처럼 보이게 할 수도 있기 때문이다. 더더군다나 통계 검증은 언제나 데이터에만 의존하므로 오직 귀납적으로만 맞을 뿐이다. 덕분에 Granger가 노벨상 수상식에서 “Of course, many ridiculous papers appeared”라고 모델의 오용에 대한 불편한 감정을 표현하기도 했다.)

Granger causality의 가치에 대해서 여러가지 말들이 많지만, 시계열 데이터의 상관관계를 놓고 인과관계가 없다는 사실을 확인하는데는 이렇게 간단한 테스트를 찾아내기가 힘들다고 생각한다. 반대로 인과관계가 있다는 주장을 하기 위해서는 숫자 뒤에 숨어있는 눈에 보이지 않는 요소들도 고려해야하므로 선뜻 적용하는 경우가 적다.

 

2. Post hoc, ergo propter hoc

인간이 뭔가 대단히 똑똑한 존재라고 착각하는 경우가 많지만, 우주 속 천체의 움직임을 이해할 수 있는 수학과 물리학을 만들어낸 인류 역사상 희귀한 대천재 Issac Newton도 정작 회중시계를 마실 차 대신 끊는 물에 넣거나, 남들따라 South Sea 버블에 투자해서 평생 번 돈을 잃는 등 “멍청한 짓”도 많이 하고 산다. 인간의 생각하는 방식을 복사한다는 머신러닝의 Neural network 모델 (외부인에게 “딥러닝”으로 알려져 있다)이라고해서 별 다를 바 있을까? 한편으로는 이세돌과 바둑에서 이길 수 있을만큼 복잡한 수 계산을 할 수 있지만, 정작 패턴이 없는 데이터, 잘못된 패턴을 집어넣은 데이터에서는 그 힘을 발휘하지 못한다.

대표적으로 위의 경우처럼 시간적 순서가 인과관계를 담보하는 것 같은 데이터를 입력하면 모든 통계 기반 모델들이 마치 인과관계가 있는 것 같은 결과를 내놓을 것이다. 인간의 인식 한계가 모델링 작업에 그대로 반영되어 있기 떄문이다.

이런 오류를 논리학에서 “Post hoc, ergo propter hoc” 오류라고 한다. 영어로 직역하면, “After this, therefore because of this” 정도가 될 것 같은데, X 다음에 Y가 일어났으므로 X가 Y의 원인일 것이라고 생각하는 오류를 말한다. (Post hoc fallacy라고도 한다.)

징크스가 대표적인 예일텐데, 머리를 염색했더니 시험 점수가 100점이 나오더라는 우연한 사건을 바탕으로, 앞으로 시험 전에는 항상 머리를 염색하겠다고 생각하는 사람을 보고, “나도 머리를 염색해야겠다”고 생각하는 오류가 딱 여기에 해당된다. 아마 상식적인 사람이라면 머리를 염색하는 대신에 공부를 해야 시험점수가 100점 나올 확률이 높아진다는 것, 머리 염색은 개인적인 긴장 완화와 연관관계가 있을지 몰라도 시험에 나오는 문제를 더 맞출 수 있는 “실력”을 길러주지는 않는다는 것을 잘 알 것이다.

아무런 인과관계가 없는데, 우연히 특정 데이터 셋에서 100%의 상관관계를 갖는 변수를 이용하는 머신러닝 모델을 만들었다고 치자. 시간이 흘러 새롭게 들어오는 데이터에서는 더 이상 그런 상관관계가 안 나타난다면 내가 만든 모델은 어떻게 될까? 언뜻보면 Over-fitting과 비슷한 맥락으로 오해할 수도 있지만, Over-fitting은 인과관계가 있는 데이터에서 좀 더 샘플 데이터에 치우져버린 모델을 이야기하고, Post hoc fallacy는 아예 아무런 인과관계가 없는 데이터로 모델을 만드는 경우를 말한다.

글 서두에 살짝 언급한대로, 모든 “빅”데이터를 다 집어넣고 머신러닝 모델을 만들면, “합리적으로 변수 추출하기” 에 나왔던대로 User ID값으로 그 User의 전환율을 예측할 수 있다는 식의 엉뚱한 모델을 만들게 될 것이다. 정작 User ID는 웹페이지에 들어오는 순서대로 생성되는 변수일 뿐이고, 그 값이 홀수인지, 짝수인지와 그 User의 전환율은 아무런 관계도 없지만, classification 모델은 마치 두 변수가 엄청나게 큰 연관관계를 가진 것처럼 인식하기 때문이다.

 

3. Spurious Regression

위의 예시는 지난 40년간 미국에서 핸드폰 사용자의 숫자와 암 환자의 숫자 변화를 놓고 학자라는 사람이 얼마나 엉뚱한 결론을 내리고 있는지를 풍자하는 만화다.

1970년대 이후 암 환자가 꾸준히 늘었는데, 아마 이유는 식습관의 변화, 평균 수명의 증가 등을 꼽을 수 있을 것이다. 최소한 1990년대부터 늘어난 핸드폰 사용자의 숫자 증가와 암 환자 숫자 증가간 논리적인 연관관계를 찾기는 어렵다. 당장 검은색 그래프와 빨간색 그래프간 증가하는 시점이 15년 이상 차이가 나고, 그 사이에 변화한 내용들 (식습관, 평균 수명 등)이 너무 많다. 가장 중요하게는 핸드폰에서 나온다는 그 전자파가 암 발병, 특히 어떤 종류의 암 발병에 영향을 주는지 논리적인 근거를 먼저 찾아봐야 한다. 핸드폰에서 나오는 전자파가 TV나 모니터의 1/10도 안 될텐데, 왜 TV나 모니터는 놔두고 핸드폰만 범인이라고 몰아세워야할까?

(솔직히 저런 경우 많이보고, 필자도 항상 조심한다.)

위의 사례에서 뽑아낼 수 있는 메세지가 많겠지만, 필자는 크게 두 개를 본다. “지나치게 데이터에 집착할 필요는 없다”, “데이터 모델링은 정말 어려운 작업이다”

회귀분석을 기반으로 한 연구 결과물을 발표하는 학자들이 가장 두려워하는 공격이 “Spurious regression”이라는 말이다. X와 Y로 놓은 대상이 서로 아무런 관련이 없거나, 그 스토리가 전혀 논리적으로 맞지 않는데도 불구하고 단순하게 상관관계만 높게 나왔다는 공격인데, 그래서 모델을 만들 때 위의 Granger causality를 비롯해 다양한 아이디어들을 활용해서 자신의 모델을 검증하는 작업을 거친다. 겪어보면 알겠지만, 그렇게 쓴 논문 하나 좋은 저널에 낼려면 “토할 것 같은” 검증 작업을 거쳐야 한다.

(Spurious라는 단어의 영어 사전 뜻을 찾아보면 “사기”, “허위”같은 뜻이 나온다. 학자 입장에서 저런 논문 발표하고나면 연구 인생은 그걸로 끝이라고 봐야한다.)

 

나가며

“토할 것 같은” 검증 작업이나 모델 만들기 힘들다는걸 모르는 것도 이해하고, 몰라도 좋은데, 제발 “그냥 다 집어넣으면 되는데 왜 통계학…?” 같은 질문은 안 해줬으면 좋겠다. 머신러닝은 남들이 만들어 놓은 코드만 Copy & Paste하는거 아니고, 적용 환경이 달라지면 모델도 그에 맞게 달라져야한다.

자기 회사에 무조건 Neural net 기반 머신러닝 모델만 (Copy & Paste해서) 얹으면 모든 게 해결되는 것처럼 말하는 사람들에게 묻고 싶다. 모델들이 항상 똑같다면 왜 “토할 것 같은” 검증 작업을 거쳐야만 논문이 출판될까?

코딩 경력 X년으로 쉽게 데이터 사이언티스트 되는 거였으면, 실리콘 밸리에서 저렇게 데이터 사이언티스트 기근 현상이 일어나지도 않았다.

 


글 아이디어를 주 김수진님, 2017년 10월 강의에 Granger causality를 상기시켜주신 김재준 님께 감사드립니다.