인간과 AI의 공존을 위한 대안의 모색

원본은 2019년 10월에, 한글본은 2021년 6월에 출판되었다. 왼쪽은 아마존 킨들 버전 표지이고 오른편은 한글 버전 표지이다.

최근 스튜어트 러셀 교수(Stuart Russell, UC Berkeley)가 또 하나의 역작을 냈다. 1995년 그가 구글의 피터 노빅(Peter Norvig)과 함께 출간한 Artificial Intelligence: A Modern Approach(옆 사진)는 AI에 관해 가장 널리 사용되는 교과서가 되었으며, 내 수업에서도 AI의 정의와 관련된 몇개의 장(chapter)이 소개되었다.

새 저서에서 러셀 교수가 제시한 주장을 간략히 요약하면 다음과 같다: 1) 머지않은 미래에 초지능(super-intelligence) AI가 출현할 것이다. 2) 그것은 인류에 중대한 위협이 될 수 있다. 3) 그러나 우리가 지금부터 AI의 개발 방향을 잘 잡아간다면 인간과 AI가 평화롭게 공존할 수 있을 것이다. 4) 그 방향은 “증명가능하게 이로운 AI(provably beneficial AI)”로 집약된다.

인공지능(Artificial Intelligence, AI)은 지능을 지닌 기계(intelligent machine)이다. 인공이라는 수식어는 자연발생적이 아니라 누군가(대체로 인간)에 의해 만들어졌다는 의미이고 지능이라는 명사와 합쳐져서 지능을 지닌 기계라는 특정한 의미를 지니게 된다. 여기서 기계는 물리적 외형을 가질 수도 있고 컴퓨터에 탑재된 소프트웨어일 수도 있다.  문제는 지능이 무엇인가 혹은 지능을 지녔다는 의미가 무엇인가이다.

러셀 교수는 지능을 다음과 같이 정의한다. “대강 말하자면, 한 존재는 자신이 하는 일이 자신이 지각해온 것을 토대로 자신이 원하는 것을 성취할 가능성이 있는 한 지적이다”(Roughly speaking, an entity is intelligent to the extent that what it does is likely to achieve what it wants, given what it has perceived)(p. 33. 이 글에서 인용 표기는 한글 버전의 쪽이다). 이 정의에는 인지(perception), 행동(action), 목표의 성취(achievement of objectives)라는 세 가지 요소가 담겨있다. 즉, 어떤 존재가 자신의(혹은 주어진) 목표를 갖고 있으며, 그와 관련해서 환경을 파악하고 그 목표를 성취하기 위해 행동하면 그 존재는 지적이(intelligent)라고 규정할 수 있다는 것이다.

필자는 지능에 관한 이 정의를 지지한다. 사실 필자는 3년 전에 지능에 대해 그와 유사한 정의를 내린 적이 있다(지능이라는 이름의 개임(4)). 당시에 필자는 환경에서의 생존을 모든 존재의 공통적이고 근본적인 목표로 보았기 때문에 지능을 환경으로부터의 도전에서 살아남는 능력이라고 규정하였다. 러셀 교수의 정의는 필자의 것보다 더욱 다양한 목표를 포용할 수 있다는 장점을 갖고 있다.

러셀은 현재 인공지능의 연구와 산업 분야에서 통용되고 있는 ‘표준적인 모형'(standard model of AI)에 이의를 제기한다. 그것은 인간이 부여한 정해진 목표를 기계가 최적화한다는 모형이다. 기계는 목표와 데이터가 주어지면, 목표로부터의 오차(사실 오차 제곱, 비용함수라고 부름)를 최소화하는 방식으로 학습하여 성취 능력을 향상시킬 수 있다. 최근에는 주어진 보상체계에 의지해서 기계 스스로 능력을 높여나가는 강화학습 모형이 널리 사용되고 있다. 

러셀은 실제로 초지능 AI(일반적 AI, general AI라고도 불림)의 개발을 목표로 하는 연구자나 기업이 존재하고 있고, 설령 그것을 목표로 삼지 않더라도 연구자들이 특수한 용도의 AI를 개발하는 과정에서 초지능 AI가 출현할 수 있다고 지적한다.

문제는 만약 궁극적으로 인간에 의해 통제받도록 설계되지 않으면 초지능 AI는 인간의 이익보다 AI 자신의 이익을 우선적으로 추구할 수도 있으며, 인간의 통제를 완전히 벗어날 수 있다는 것이다. 인간은 AI의 전기 코드조차 뽑지 못할 수도 있다. AI는 그러한 인간의 시도를 거부하고 방해할 수 있기 때문이다. 러셀에 의하면 현재의 표준 모형에 의한 AI의 연구와 개발은 언젠가 그러한 통제불능의 초지능 AI의 출현을 초래할 가능성이 높다.

초지능 AI의 관점에서 보면 그 AI의 표준 모형이야말로 AI 연구의 잘못된 길의 출발점이라는 것이 그의 주장이다. 그는 완전히 자율적인 초지능 AI의 출현을 차단하는 대안으로 그 표준모형을 대체할 지적이면서 이로운 기계(intelligent and beneficial machine) 모형을 제시한다. ‘지적인 기계(intelligent machine)’만으로는 충분하지 않다는 것이다. 그것은 지적인 동시에 반드시 ‘이로운 기계(beneficial machine)’이어야 한다.

러셀은 이로운 기계를 만들기 위한 세 가지 원칙을 제시한다. 첫째, 기계의 목적은 오로지 인간 선호의 실현을 최대화하는 것(이타성의 원칙)이어야 하며, 둘째, 기계는 그 선호가 무엇인지 처음에는 확실히 알지 못하고(겸손의 원칙), 셋째, 인간의 선호에 관한 정보의 궁극적 원천은 인간의 행동이다(인간 관찰의 원칙). 다시 말하면, AI는 어떤 경우에도 자신 혹은 자신의 존재를 인간의 선호보다 우위에 두어서는 안되며, AI는 목표에 대한 판단이 헷갈릴 때는 그것을 인간에게 묻거나 인간의 행동에 대한 관찰을 통해서 파악해야 한다. 어떤 경우에도 인간의 선호를 다 알고 있듯이 행동해서는 안된다는 것이다. 

러셀은 그러한 ‘증명가능하게 이로운’ AI 모형의 장래에 관해 낙관적이다. 그는 무엇보다 그러한 AI 모형이 표준적인 AI 모형보다 투자 기업들에게 더 매력적이며, 또한 인간의 선호를 학습하는데 필요한 자료가 아주 풍부하기 때문이라는 것이다.

이상은 책에 제시된 러셀 교수의 주장에 대한 간략한 요약이다. 그 책에 대한 요약은 아니다. 그 책에는 AI 발전에 관한 전망, AI의 오용에 대한 논의, 초지능 AI에 관한 다양한 주장과 태도에 대한 비판 등 AI와 관련된 다양하고 많은 논쟁과 그에 대한 논리적 검증이 제시되어 있다.

그 책에는 AI의 미래에 관해 다소 지루할 정도로 다양한 논의가 제시되고 있다. 어떤 독자는 그런 논의가 흥미롭다고 느낄 것이고 나아가 어떤 독자는 그러한 논의로부터 참신한 발상을 얻을 수도 있을 것이다. 여기서도 그러한 논의를 모두 사상하고 러셀 교수의 주장만 간추려 보았다. 그것만으로도 그 책은 충분한 가치를 지닌다고 생각되기 때문이다. (2021-07-25).  

안개에 쌓인 미래: 포스트 시대

Jared Bowen on Twitter: "Tonight I'm a man in the mist as we meet ...

미래가 너무 불투명할 때 우리는 post-(탈, 이후)라는 표현을 사용한다. 지금이 딱 그런 시기이다.

2020년 6월 26일 현재 5년, 10년 후는 고사하고 1년 후, 아니 한 달이나 두 달 후의 세상이 어떻게 될 것인지도 짐작되지 않는다. 미래를 다루는 학자와 전문가들에게는 무척 곤혹스러운 시기이다.

인류는 코로나 바이러스(covic 19)의 위기를 이겨낼 것인가? 백신은 언제나 출시될 것인가? 그 사이 얼마나 많은 인명이 희생될 것인가? 코로나 바이러스에 대한 백신이 발견된 후에 코로나 바이러스보다 더 무서운 전염병이 출현하지는 않을까? 이상 기후는 멈출 것인가? 코로나 바이러스 위기 이후에는 어떤 사회가 전개될 것인가? 현재와 마찬가지일까? 아니면 인류는 한번도 경험해 보지 못한 새로운 세상으로 들어가게 되는 것일까?

제어되지 않은 자본주의가 낳은 불평등은 과연 어떤 결과를 초래할까? 인류는 과연 그 제도를 제어할 수 있는 대안을 찾아낼 수 있을까? 서구의 대의 민주주의는 시대적 도전들을 적절히 대응할 수 있는 정치제도인가? 아니면 전체주의가 대안일까? 현재의 정부관료제는 숨막히는 도전들을 극복하는 역할을 과연 수행할 수 있을까? 신문과 방송이라는 대중매체가 해체된 후 우리는 어디에서 진실을 찾을 수 있을까? 탈진실의 시대가 오는 것(아니 이미 와 있는 것)은 아닐까?

의문은 많고 해답은 거의 없다. 인류가 발명하고 유지해 온 주요한 정치, 경제, 사회, 문화 제도에 대해 수많은 의문이 쏟아지고 문제가 제기된다. 과연 답은 어디에서 찾아야 할까? 선지자가 출현해야 하는 것일까?

post-covic 19, post-capitalism, post-democracy, post-nation-state, post-truth, post-mass-media, post-university….

Covid19 코로나 바이러스 - Pixabay의 무료 이미지

우리가 살아갈 세상은 어쩌면 이미 누구나 뛰어난 미래예측 능력을 가져야만 살아남을 수 있을 정도로 불확실하고 급변하는 생존 환경인지도 모르겠다. 성장이나 발전이 아닌 생존의 방법을 물어야 하는 시대이다. 혹시 포스트 시대(Post era)에 들어가고 있는 것은 아닐까? (2020-06-26)

데이터과학을 위한 수학복습(2)

이번에는 벡터의 내적(inner product)에 관해 알아보자.

원점 O에서  와 같은 벡터 를 만들 때 를 벡터 가 이루는 각이라고 한다.

 

일 때, 벡터 와 벡터 는 수직이라고 하며 기호 로 나타낸다.

벡터의 시작점을 원점으로 할 때 벡터의 끝점의 좌표를 벡터의 성분이라고 하며,

 혹은 로 표시한다. 이 때 벡터 의 크기(길이)는 ,  의 크기는 이다. 이 크기를 벡터의 노름(norm)이라고도 한다.

이 경우 벡터의 내적(혹은 스칼라적)은 다음과 같이 정의된다.

두 벡터의 크기(벡터의 크기는 절대값 기호로 나타냄)의 곱에 사이각의 코사인 값을 곱한 것이다. 기호로는  또는 로 나타낸다. 즉,

벡터의 내적은 아래와 같이 벡터의 성분을 사용하여 나타낼 수 있다.

평면벡터 에 대하여

그리고 내적의 정의에 의하여

두 벡터 사이 각의 코사인 값은 두 벡터의 내적을 두 벡터의 크기의 곱으로 나눈 값이다. 영벡터가 아닌 두 벡터 의 내적이 0이면, 두 벡터는 직교(orthogonal)한다(혹은 수직이다)고 말하고 라고 표시한다.

이 코사인 값은 두 벡터의 상관성을 측정하는 코사인 유사도(cosine similarity)라는 척도에 바로 적용된다. 온라인 서점의 예를 보자.

위 그림에서 사용자 1은 책을 {B,C,B} 순으로 살펴보았고, 사용자 2는 책을 {C,A,B} 순으로 살펴보았을 때, 만약 사용자 3이 들어와서 책 A를 살펴보고 있다면, 그에게 어떤 책을 추천하면 좋을까?

온라인 서점은 사용자들의 클릭 혹은 검색 행태에 관한 데이터를 가지고 책들 사이의 상관성을 파악해 둔다. 그리고 만약 어떤 새로운 사용자가 들어와서 특정한 책을 살표보면 온라인 서점(의 컴퓨터)는 그 책과 상관성이 가장 높은 책(들)을 추천한다. 그 때 코사인 유사도가 사용될 수 있다.

온라인 서점은 사용자들의 검색 데이터를 가지고 품목(책) 대 품목(책) 행렬을  구한다. 그러면 각 책은 행벡터를 갖게 된다. 책 A는  , 책 B는  등의 행벡터를 갖는다. 그러면 책 A와 책 B 사이의 코사인 유사도는 위에서 소개한 사이각의 코사인 값을 구하는 공식으로 계산될 수 있다.

여기서 분자인 의 내적은 (0*1 + 1*0 + 1*2 + 0*0) = 2이다. 분모인 두 벡터의 크기와 크기의 곱은 아래와 같다.

따라서  책 A와 책 B의 코사인 유사도는,

다른 두 책들 사이의 코사인 유사도도 동일한 방법으로 계산할 수 있다. 온라인 서점의 컴퓨터는 책 A와 코사인 유사도가 가장 큰 책을 추천할 것이다.

 

Excel로 하는 미래 예측(4): 시계열 예측

지수평활화법(FORECAST.ETS)는 3차 평활화를 수행한다. 데이터 추동 예측에서 소개한 지수평활화가 1차 평활화라고 한다면 두 차례 더 평활화를 거치는 함수이다. ETS는 Exponential Triple Smoothing의 머리글자이다. 지수평활화(exponential smoothing)가 백색 소음을 잡아주는 평활화라고 한다면 2차 평활화는 추세(trend)를 반영하고, 3차 평활화는 계절성(seasonality)을 반영한다. 수식으로 표현하면 다음과 같다.

1차 지수 평활화는,

는 측정된 시계열 데이터이고, 는 예측된 시계열 데이터(시간 t에서 평활화된 값)이다. 전 시구간에서 예측된 값의 오류를 다음 시구간 값을 예측할 때 일정한 비율()로 반영해 주는 식이다.

2차 지수 평활화는 다음과 같이 표현될 수 있다.

 시점 t에서의 추세(trend)에 대한 최적의 추정치

는 기본 요인(base factor) 혹은 데이터 평활화 요인(data smoothing factor)으로 불리며  이다. 는 추세 평활화 요인(trend smoothing factor)라고 불리며  이다. 를 넘어서 예측하려면 다음 공식을 사용한다.

3차 지수평활화(multiplicative의 경우)는 아래와 같이 계산된다.

: 계절적 조정 요인의 시퀀스(the sequence of seasonal correction factors). 그것은 관찰이 진행 중인 사이클에서 어느 시점 t mod L에서 예측된 추세의 예상된 비율이다.

L: 계절적 변동 주기(cycle)의 길이

는 계절적 변동 평활화 요인(the seasonal change smoothing factor)이며,  를 넘어서 예측하려면 다음 공식을 사용한다.

지수평활법을 이론적으로 이해하기는 다소 어렵지만 엑셀로 실행하는 것은 쉽다. 아래 그림에서처럼 예측값을 넣으려는 셀에 =FORECAST.ETS를 치고, 예측시점(여기서는 A38), 표적변수 데이터(B2:B37), 관찰한 시점들(A2:A37)을 넣어주면 된다.

그 이후 여러 시점들에 대해 예측하려면 그 수식을 복사하면 된다.  값을 구하려면, 셀에 =FORECAST.ETS.STAT(B2:B37,A2:A37,1)을 넣으면 된다.  값은 =FORECAST.ETS.STAT(B2:B37,A2:A37,2)을,  값은 =FORECAST.ETS.STAT(B2:B37,A2:A37,3)을 넣으면 된다. 계절성 주기(L)를 알아내려면 =FORECAST.ETS.SEASONALITY(D2:D51,A2:A51)을 넣으면 된다. 이렇게 계산된 계절성 주기는 6이고, 알파 값은 0.126, 베타는 0.001, 감마도 0.001이다.

이상으로 표적변수의 시계열 데이터만으로 예측하는 시계열 예측(time series forecasting)의 다양한 모형과 함수를 이해하면서 엑셀로 구현해 보았다. 아마도 그 정도만 구현할 수 있으면 현업의 실무적 요구에 잘 대응할 수 있으리라 생각된다.

미래 예측이 어렵다면 그것은 도구의 문제가 아니라 상상력, 혹은 이론과 학습의 부족에서 먼저 그 원인을 찾아야 하지 않을까. 다행한 점은 고등학교 정도의 수학만 잘 구사할 수 있으면 대부분의 문헌과 강의를 이해할 수 있다는 것이다.

엑셀이 시계열 예측만 도와주는 것이 아니다. 선형회귀와 같은 지도학습모형에 의한 예측도 수행하게 해준다. 추가기능(add-ins)을 이용하면 유용한 미래 예측을 해낼 수 있다. 다음에는 그 가능성을 살펴보겠다.

Excel로 하는 미래 예측(3): 시계열 예측

지난 포스팅에서 시계열 예측 중 데이터 추동 예측을 소개했다. 이번에는 모형 추동 예측을 살펴보자. 표적 변수의 과거 데이터에 의존해서 미래를 예측한다는 점은 데이터 추동 예측의 경우와 동일하지만 모형 추동 예측은 단지 개별적 데이터들의 집합에만 의존하는 것이 아니라 데이터들로 만들어지는 변동의 형태를 미래 예측에 반영하는 방법이다. 예컨대 변동이 선형(linear)이라는 점을 고려할 수도 있고 아니면 변동의 주기성–계절적 부침이라고 한다–이나 상향적 경향–추세라고 한다–을 고려할 수도 있다.

아래 그림들을 보면, (a)의 경우는 주기성이 분명해 보이고 (b)의 경우는 주기성이나 트렌드가 보이지 않는다. (A)의 경우는 주기성을 반영해서 미래를 예측한다면 오류를 줄일 수 있을 것이다.

모형 추동 예측에서 가장 널리 쓰이는 것은 선형회귀 모형이다. 시계열 예측의 선형회귀 모형은 크게 두 가지를 생각할 수 있다. 하나는 시간(시구간)을 예측변수로 갖는 모형–단순회귀모형, 다른 하나는 표적변수의 과거값을 독립변수로 갖는 모형–자기회귀모형이다.

데이터에 계절성(seasonality)이 있으면 단순회귀모형의 적합 결과가 좋지 않다(위 그림 참조).  단순회귀모형의 그런 단점을 개선하는 데는 두 가지 방법이 있다. 하나는 다항회귀(polynomial regression)를 사용하는 방법이다. 시구간의 2차항이나 3차항을 추가하거나 사인, 코사인 함수를 포함한 항을 추가하여 다항회귀모형을 만든다.

다른 하나는 계열 데이터의 각 시구간에 더미변수를 도입하는 방법이다. 만약 12개의 시구간이 있다면 11개의 더미변수를 도입하면 된다(12월은 기준 범주가 되어 더미변수가 생략된다). 시간 변수를 포함해서 모두 12개의 독립변수를 지닌 회귀모형이 되며 각 더미변수는 계절성을 포착한다. (아래 그림 2개 참조)

자기회귀모형(Autoregressive model, AR 모형)은 지연 계열(lag series)에 적용되는 회귀모형이다. 측정된 데이터가 1년씩 미룬 지연(lag) 데이터 혹은 2년 지연 계열, 3년 지연 계열 등과 상당한 정도의 상관관계를 가지는 경우 자기상관관계(autocorrelation)이라고 부르며 예측과정에 활용할 수 있다. 자기상관이 존재할 때 자기회귀모형을 적용하는 것이 하나의 해법이 된다. 자기회귀 모형의 일반식은 다음과 같이 표시될 수 있다.

1차 지연계열 데이터만을 가진 자기회귀모형을 AR(1), 2차 지연계열 데이터를 가진 자기회귀모형은 AR(2) 등으로 표시한다(아래 그림 참조).

지연계열 데이터를 만드는 방법은 간단하다. 아래 그림에서처럼 원 데이터를 복사해서 한 칸(여기서는 1개월)을 아래로 내리거나(Lag_1), 두 칸을 내리거나(Lag_2), 세 칸을 내리면 된다(Lag_3). 아래 사진에서처럼 공통의 데이터(노란색 부분)를 가지고 상관관계를 구하거나 회귀모형을 적합하면 된다.

아래 그림에서 보듯이 Yt와 Lag_1의 자기상관은 0.487451, Yt와 Lag_2의 자기상관은 -0.13216, Yt와 Lag_3의 자기상관은 -0.45576으로, 자기회귀모형의 적합이 필요함을 시사한다. 상관분석과 회귀분석은 모두 엑셀의 데이터-데이터분석 기능을 사용해서 수행하였다. 회귀분석 결과를 보면, 결정계수가 0.7557로 위에서 본 단순회귀모형의 결정계수 0.1798보다 크게 향상되었다.

AR 모형은 정상 시계열 데이터(stationary time series data)인 경우에만 사용 가능하다. 정상 시계열 데이터란 추세(trend)와 계절성(seasonality)이 없고 백색 소음(white noise)만 있는 시계열 데이터이다(아래 그림 참조).

이 조건이 충족되기가 보기만큼 까다롭지는 않다. 약간의 변형만 가하면 비정상 시계열 데이터를 정상 시계열 데이터로 전환할 수 있기 때문이다.

정상성(stationarity)을 확보하는 흔한 방법은 차분(differencing)을 이용하는 것이다. 차분이란 아래 식처럼 금년도 값에서 전년도 값을 뺀 것을 말한다.

만약 그렇게 차분을 해서도 정상성을 확보하지 못하면  아래 식처럼 다시 한번 차분을 할 수 있다(제2차 차분, 차분 차수가 2).

비정상 시계열 데이터의 경우 차분을 사용하지 않고 엑셀이 제공하는 지수평활법 함수를 사용해도 좋다. 2016 엑셀은 예측 함수를 4가지 제공한다. 시구간만을 독립변수로 갖는 단순선형회귀 예측을 계산하는 함수인FORECAST.LINEAR, 지수평활법 예측을 계산하는 함수 FORECAST.ETS, 지수평활법의 95% 신뢰구간을 보여주는 FORECAST.ETS.CONFINT, 계절성의 주기를 보여주는 FORECAST.ETS.SEASONALITY, 세 가지 계수를 보여주는 FORECAST.ETS.STAT를 제공한다.

사용법은 간단하다. 단순선형예측의 경우 예측하려는 셀에 =FORECAST.LINEAR를 치고, 예측하는 날짜(여기서는 A38), 표적변수 데이터(여기서는 B2:B37), 데이터가 있는 날짜(여기서는 A2:A37)를 입력하면 된다. 그리고 그 이후 날짜에 대한 예측을 추가하려면 그 수식을 복사하면 된다. 지수평활법도 마찬가지이다.

FORECAST.ETS는 편리한 함수이나 약간 자세한 설명이 필요함으로 다음 포스팅에서 독립해서 다루겠다.

Excel로 하는 미래 예측(2): 시계열 예측

미래 예측에는 다양한 유형이 있을 것이다. 우선 미래를 하나의 가능성으로 바라보는 경우 — 예측(forecasting)과, 미래를 여러 가지의 가능성으로 바라보는 경우 — 시나리오 플래닝(scenario planning)이라는 유형으로 나눌 수 있을 것이다. (미래 예측에 관한 본 블로그의 다른 글을 참조할 것) 그리고 예측은 단기 예측장기 예측으로 나눌 수 있을 것이며, 예측 변수(predictors)가 몇 개냐에 따라서 나눌 수도 있다. 예측되는 표적 변수(target)의 과거 데이터만을 가지고 하는 시계열 예측(time sceries forecasting)과, 하나 이상의 예측 변수를 사용하는 지도학습 모형 예측(supervised learning model forecasting)으로 나눌 수도 있을 것이다. 그 밖에도 선형예측(linear forecasting)비선형 예측(non-linear forecasting), 시뮬레이션(simulation)실데이터 예측(real data based forecasting)으로 나눌 수도 있을 것이다.

이번 포스팅에서는 엑셀을 가지고 표적 변수의 과거 데이터만으로 수행하는 시계열 예측을 시도해 보자. 시계열 예측은 특정한 변수의 값이 과거의 시간의 흐름에 따라 어떻게 변화했는지를 알고 있다는 가정 아래 그 변수가 미래에 가질 값을 예측하는 데 관심을 둔다. 때문에 시간적 요소가 중요하다. 예컨대 주가나 날씨가자주 그러한 방법으로 예측된다.

시계열 예측에는 데이터 추동 예측(data-driven forecasting)과 모형 추동 예측(model-driven forecasting)이 있다. 데이터 추동 예측은 예측 변수와 표적 변수 사이의 구분이 없는 시계열 분석 방법이다. 예측변수는 동시에 표적 변수이다. 데이터 추동 예측에는 평균화(averaging) 또는 평활화(smoothing) 같은 기법이 사용된다. 모형 추동 예측은 독립변수와 종속변수를 포함한다. 그런데 독립변수가 시간(time). 가장 간단한 방법은 다음과 같은 형식을 지닌 선형회귀모형이다.


위의 식에서 y(t)는 시간 t에서의 표적변수의 값이다. 학습용 데이터가 주어지면 미래의 y 값을 예측하기 위해서 계수 a와 b를 추정한다.

먼저 데이터 추동 예측부터 알아보자. 엑셀로 구현하기 전에 개념적인 설명이 필요하다.

기본 개념: 시계열 예측에서는 시구간(time period)이라는 개념이 중심이다. 시구간은 문제에 따라 초, 일, 주, 월, 분기, 년 따위의 단위를 갖는다. 그리고 시구간에 대응하는 데이터 계열(time series)인 이 있고, 또한 시계(horizon)에 대한 예측(forecast)으로 라고 표기하며, n 이후 h번째 시구간에 대한 예측을 의미한다. 보통 h=1인데 그것은 마지막 데이터 포인트 직후의 시구간을 말한다. 그러나 h는 1보다 클 수 있다. 끝으로 주어진 시간 t에 대하여 예측 오류(forecast error)  가 있다.

(1) 단순 예측(naive forecast): 계열의 다음 시구간에 대한 예측 즉, 은 계열에서 마지막 데이터 포인트 와 같다고 추정된다. 식으로 표시하면,

(2) 단순 평균: 다음 시구간의 데이터 포인트를 계열의 모든 데이터 포인트의 평균으로 계산한다.

1월부터 12월까지 월간 데이터가 있다면, 다음 해 1월(n+1)의 값을 예측하기 위하여, 간단하게 1월(n=1)부터 12월(n=12)까지의 값을 평균한다.

(3) 단순이동평균(simple moving average, SMA): 단순 평균은 한 시점에서 측정치들의 평균을 가리키나 시간이 들어간 측정치들의 평균에는 이동평균을 사용한다. 시간이 흐름에 따라 측정치가 어떻게 변화되었는지를 알고 싶기 때문이다. 동일한 시구간을 잡아서 각 기간에서의 측정값들의 평균을 구한다. 이것을 단순이동평균이라고 부른다. 2일 이동평균, 5일 이동평균, 10일 이동평균, 50일 이동평균 등등. 시구간이 짧아지면 원 데이터와의 차이가 없어진다. 

만약 5일 이동평균을 계산한다면, 첫 4일은 이동평균이 없고, 5일째 되는 날 측정값의 첫 이동평균을 갖는다. 그 다음부터는 하루씩 더해진 날짜들에 해당되는 측정값들의 이동평균을 갖게 된다. 만약 25일 동안의 5일 이동평균을 구하면, 20개의 이동평균을 갖게 될 것이다.

(4) 가중이동평균(Weighted Moving Average, WMA): SMA에는 항상 현재의 측정값과의 차이가 존재한다. 이 차이를 줄이는 대안이 WMA이다. 어떤 경우에는 가장 최근의 값이 이전의 값들보다 더 큰 영향을 미친다. 대부분의 지수적 증가가 이러한 효과 때문에 발생한다. 다음 구간의 예측은 다음과 같은 모형으로 계산할 수 있다.

위 식에서 이며, 일반적으로 이다. 

(5) 지수이동평균(Exponential Moving Average, EMA): EMA는 WMA의 한 유형이다. EMA에서는 가중승수(weighting multiplier)를 사용한다.  가중승수는 로 구할 수 있다. n은 시구간의 크기이다. 만약 2일 이동평균이라면 가중승수는 2/3(2+1)이다. 시구간이 길어지면 가중승수가 작아진다.

EMA는 다음 공식으로 구할 수 있다.

  • EMA={(금일 종가 – 어제의 EMA)*가중승수}+어제의 EMA

이 식을 곰곰히 살펴보면, 어제 범한 예측오류(금일 종가 빼기 어제의 EMA)에 가중 승수를 곱하고, 그것을 어제의 예측값(EMA)에 더해 오늘에 대한 예측(EMA)로 사용한다는 의미이다.

  • 최초 EMA = 첫 계산 기간의 SMA

(6) 지수 평활화(exponential smoothing): 평활화(smoothing)의 정신은, 어떤 변수의 매일 매일의 변동에는 신호와 소음이 함께 포함되어 있기 때문에 트렌드를 발견하기 위해서는 소음을 제거함이 바람직하다는 것이다. 그런 의미에서 앞에서 서술한 이동평균들도 평활화 기법이다. 그런데 지수 평활화는 아예 평활화를 이름으로 달고 있다.

 지수평활화는 다음 시구간의 값을 예측하기 위해 이전 시구간의 예측값을 사용한다. 그런데 이전 시구간 예측에서 예측오류가 났으면 그 오류를 다음 시구간 예측에 일정 정도 반영해 주는 방법이다. 만약 예측이 지나쳤으면 이번 예측에 일정한 값을 감해서 다음 번 예측에 투입하고, 예측이 낮았으면 이번 예측에 일정한 값을 더해서 다음 번 예측에 투입한다.

 

(1)식을 아래와 같이 바꾸어 쓸 수 있다. 그러면 다음 시구간 값()이 전년도의 예측값()에, 전년도의 예측오류()에 가중치()를 곱한 값을 더한 결과라는 점이 분명해진다.   

지수평활화를 이용해서 월간 예측을 한다면, 2월의 예측값을 구하기 위하여 1월의 실제값뿐 아니라 1월에 대한 예측값을 사용한다.  위의 식에서 가중치  는 일반적으로 0과 1 사이의 값을 갖는다. 가 0에 가까우면 다음 시구간의 예측값은 이전 예측값과 유사하고, 가 1에 가까우면 다음 시구간의 예측값은 이전 실제값과 유사해 진다. 가 1이라면 위에서 소개한 단순예측이 된다. 에 대한 일반적인 값은 경험적으로 0.2부터 0.4 사이의 값이다.

엑셀을 사용해서 데이터 추동 예측 다섯 가지 방법(단순 평균 제외)을 하나의 사례에 적용해 보자. 아래 엑셀 자료는 어느 기업이 13개월 동안 달성한 월별 매출액(단위 백만원)이다. 

단순예측은 금월 매출액을 다음 달 예상 매출액으로 잡는다. 12월의 실제 매출액 720억4천5백만원(B3)이 1월의 예상 매출액(C4)가 되었으며, 1월의 실제 매출액(B4)은 2월의 예상 매출액(C5)가 되었다. 이하 마찬가지이다.

D열에 있는 3월 이동평균(SMA(3))은 12월, 1월, 2월의 실제 매출액을 평균하는 값(=AVERAGE(B3:B5))으로 63,304.33(D6)이다. 4월 SMA(3)(D7)은 (=AVERAGE(B4:B6))이고, 5월 SMA(3)(D8)은 (=AVERAGE(B5:B7)이며, 이하 동일한 방식으로 계산된다.

E열의 3월 가중이동평균(WMA)을 구하는 데는 세 개의 가중치가 필요하다. 시구간의 첫월에 대한 가중치는 0.2, 둘째월에 대한 가중치는 0.3, 셋째월에 대한 가중치는 0.5이다. 현재에 가까워질수록 더 큰 가중치를 주고 있다. 3월 WMA(3)(E6)은 (=B5*$E$19+B4*$E$18+B3*$E$17)로 계산된다. 4월 WMA(3)(E7)은 (=B6*$E$19+B5*$E$18+B4*$E$17)로 구할 수 있다. 이하 동일한 방식으로 계산된다.

F열의 3월 지수이동평균(EMA)을 구하려면 먼저 가중승수를 구해야 한다. 시구간이 3이므로 가중승수는 2/(3+1)=0.5이다. 첫번째 EMA(3) 값(F6)은 3월의 SMA(3) 값과 동일하다. 두번째 EMA(3) 값(F7)은 (=0.5*(B7-F6)+F6)로 구해진다. 실제값에서 예측값을 뺀 예측오류에 가중승수 0.5를 곱하고 그것을 예측값에 더하면 된다. 세번째 EMA(3) 값(F8)은 (=0.5*(B8-F7)+F7)로 구하면 된다. 이하 동일한 방식으로 계산된다. 

G열의 지수평활화(exponential smoothing)를 구하려면 가중치 Alpha가 필요하다. 여기서는 임의로 Alpha=0.3이라고 하자. 첫번째 지수평활화의 1월 예측값(G7)은 12월의 실제 매출액을 가져온다. 2월 예측값(G5)은 ( =$G$17*B4+(1-$G$17)*G4)로 구해진다. 3월 예측값(G9)은 (=$G$17*B5+(1-$G$17)*G5)로 구할 수 있다. 이하 동일한 방식으로 구해진다.

이 서로 다른 예측 평활화들을 어떻게 평가할까? 한 가지 방법은 오류를 비교하고 가장 작은 오류를 낸 기법이 이 데이터에 가장 잘 맞는 방법으로 간주될 수 있을 것이다.

통계학의 분산분석이나 회귀분석에서 오류를 실제값과 예측값의 차이(즉, 오차)의 제곱(보다 정확히는 오차 제곱의 평균)을 이용하여 모형 검정값을 측정한다. 마찬가지로 시계열 예측에서도 오류의 크기를 예측오류의 제곱의 평균(Mean Squared Errors, MSE)로 측정할 수 있다. 위 다섯가지 예측 평활화의 MSE가 아래와 같다.

MSE의 크기가 SMA(3)가 가장 크고(95,175,919), EMA(3)가 가장 작음(23,599,945.7)을 알 수 있다. 즉, 이 사례에서는 EMA(3)가 가장 정확한 예측값을 내고 있다는 것이다. 흥미 있는 사실은 금년도 실제 매출액으로 내년도 매출액을 예상하는 단순예측의 성능도 그다지 나쁘지 않다는 점이다.

Excel로 하는 미래 예측(1): 가상분석(What-If Analysis)

미래 시나리오(scenarios) 자체가 ‘이론(theory)’ 없이 데이터만으로 고안될 수는 없다. 예컨대 내년도 경기 전망 시나리오는 경제 이론에 기반해서 만들어지고 남북한 관계 시나리오는 정치 이론에 기반해서 만들어 진다. 아직까지 어떤 컴퓨터 소프트웨어도 그러한 시나리오를 개발하지 못한다. 언젠가 도메인 이론, 시나리오 개발 방법론, 그리고 데이터를 충분히 입력해주면 AI가 그러한 시나리오를 개발해 낼 수 있겠지만 아직 시나리오 개발은 인간의 영역이다.

하지만 일단 시나리오가 주어지면 그것에 기반한 예측은 엑셀로 구현된다. 엑셀 상단 메뉴 중 ‘데이터’ 하위 메뉴에 가상분석(what-if analysis)을 이용하면 된다.

어떤 서점이 있다고 하자. 그 서점에 A라는 책 100권이 들어왔다. 그 책은 모두 정가에 팔릴 수도 있고 일부가 세일 가격에 팔릴 수도 있다. 그에 따라 기대 수익이 달라질 것이다. 만약 60%가 정가에 팔리고 그 때 권당 수익이 3천원이며, 나머지 40%가 세일 가격에 팔리고 그 때 권당 수익이 1천원이라면 A를 판매한 총수익은 22만원일 것이다. 그런데 정가에 판매되는 비율을 70%, 80%, 90%, 100%로 올리면 총수익이 어떻게 달라질까? 이러한 다양한 시나리오를 엑셀을 가지고 보여줄 수 있다.

먼저 기본 정보와 계산식을 가지고 데이터 시트를 작성한다(아래 그림 참조). 그림에서 C6 셀에는 =B3*C3을 넣고, C7 셀에는 =B3*(1-C3)를 넣는다. 총수익이 표시되는 D9에는 =(C6*D6)+(C7*D7)을 넣는다. 그런 다음 상단 메뉴에서 데이터-가상분석-시나리오 관리자를 연다.

위 창이 열리면 오른편 상단의 추가 단추를 눌러서 시나리오를 정의한다. 먼저 60%가 정가로 팔리는 시나리오를 “60% 정가”로 이름 붙이자. 변경 셀은 $C$3를 넣는다. 고정주소로 표기하자. 그리고 확인 단추를 누르면 변경 셀에 해당하는 값을 입력하라는 메시지가 뜬다. 0.6을 넣고 확인. 그러면 아래 그림처럼 60% 정가라는 시나리오가 정의되어 있을 것이다.

동일한 방식으로 70% 정가, 80% 정가, 90% 정가, 100% 정가 시나리오를 추가한다. 그러면 아래처럼 다섯가지 다른 시나리오가 정의될 것이다.

위 창에서 표시를 누르면 선택된 시나리오에 따라 계산 총수익이 표시된다. 예컨대 70% 정가를 선택하고 표시를 누르면 원래의 데이터 시트가 아래처럼 변할 것이다. 70%가 정가에 팔리면 총수익이 24만원이 된다.

이 시나리오들에 의해 예상되는 총수익을 한꺼번에 보여줄 수 있는 기능이 ‘요약’이다. 시나리오 관리자 창에 있는 요약 버튼을 누르고 시나리오 요약 창이 뜨면 보고서 종류를 선택하고 결과 셀에 $D$9을 넣는다. 그러면 아래 그림처럼 새 시트에 요약 보고서가 뜰 것이다. 정말 사용이 쉽다.

내친 김에 가상분석에 있는 ‘목표값 찾기’도 사용해 보자. 그 기능은 여러가지로 사용될 수 있지만 여기서는 위 사례에서 수익 28만원이 나려면 몇 %를 정가에 팔아야 하는가 하는 문제에 답을 찾아보자. 목표값 찾기를 클릭하여 나타난 창에 아래 그림과 같이 해당 값을 넣는다.

그러면 원 데이터 시트에서 C3 셀이 90%로 바뀔 것이다. 정가로 90%를 팔아야 28만원이 남는다는 말이다.

가상분석에서 다른 하나의 기능은 ‘데이터 표’이다. 이는 엑셀에게 계산식을 알려주고 입력값을 변경하면 결과값이 어떻게 달라지는 지를 보여달라는 명령이다. 예컨대 가격이 100원인 품목를 판매한다고 하자. 다양한 판매 개수에 따른 매출액을 제시할 수 있다. 5개를 팔면 500원이 나오는 계산식 =B1*B2을 E2에 넣는다. 그런 다음 계산을 원하는 품목 B의 개수를 D 열에 나열한다. 이제 D2부터 E6까지를 모두 선택한다. 메뉴에서 데이터-데이터표를 연다. 그리고 아래 그림처럼 B 품목의 개수가 있는 셀인 $B$1을 열에 넣는다. 그러면 원 데이터 시트의 E3부터 E6에 각 개수에 따른 판매액이 표시된다.

이상으로 엑셀의 가상분석(What-If Analysis)의 세 가지 기능을 살펴보았다. 이는 간단하지만 현업에 유용한 기능으로 생각된다. 이제 엑셀에 있는 좀 더 심각한 미래 예측 기능에 대해 알아보자.

Excel, 흔한, 그러나 편하고 강력한 데이터 분석 tool

세 해째 통계와 데이터과학 수업에 마이크로소프트 엑셀을 사용하면서 여러가지로 느끼는 게 많다. 아쉬운 점이 없지 않지만 이렇게 좋은 도구가 또 있을까 싶다. 어차피 업무에서 엑셀을 사용하니 소프트웨어를 구입해야 하는 비용 부담도 없고, 배우기 쉬울 뿐 아니라 업무에 필요한 기능을 대부분 갖추고 있다. 대규모 데이터를 다루는데 불편하고 종종 찾는 기능이 없어 당황하곤 하지만 말이다(비주얼 베이직 프로그래밍을 할 수 있다면 그런 경우가 훨 적을 것이다). 뭐 값비싼 다른 통계 전문 패키지를 사용한다고 해서 그런 불편이 없는 것도 아니니 그것이 꼭 엑셀만의 문제라고 할 수는 없다. 파이썬이나 R로 스스로 프로그래밍을 하지 않은 다음에야 피할 수 없는 문제이리라.

그렇게 놓고 보면 엑셀을 배우는데 들이는 투자는 가성비가 아주 높다. 그래서 데이터 분석에 엑셀을 어떻게 사용할 수 있는 지를 조금 소개해 볼까 한다.

먼저 미래 예측에 대한 기능을 보자. 미래 예측이라면 거창한 것 같지만 사실 현업에서는 알게 모르게 늘 하는 일이다. 다음 달(혹은 다음 분기나 내년도 좋다) 매출이 얼마나 될까? 투자액에 따라 성과가 얼마나 달라질까? 다음 주 A기업의 주가는? 향후 6개월 간 A기업의 주가는 어떻게 변할까? 뭐 그런 의문에 대해 답하는 일이 미래 예측에 다름 아니다.

놀랍게도 그 정도의 예측은 엑셀 가지고 훌륭히 해낼 수 있다. 내 수업에서 다룬 시나리오 예측, 선형회귀 모형 예측, 시계열 예측을 소개한다.

세상에 관한 몇 가지 진실(1): 일과 잉여

매월 급여 명세서를 읽을 때마다 나는 화를 누르기 쉽지 않다. 정부가 가져가는 세금 때문이다.

오해하지 말라. 세금이 많아서가 아니다. 내 몸에 빨대를 꽂고 있는 잉여들, 세금 도둑들 때문이다.

세상에 관한 가장 중요한 진실은 “쓸데없는 일은 ‘일’이 아니라 ‘잉여’다” 라는 명제이다. 적어도 정부 부문에 관한 한 “쓸데없는 일”는 형용모순이다. 쓸데없는 일은 일이 아니다.

정부에 관해서 ‘쓸모’에 대한 판단 기준은 딱 두 가지이다. 하나는 국민 혹은 주민의 입장에서 도움이 되는가, 둘째는 그 일을 직접 수행하는가이다. 이 두가지 기준을 충족하지 않으면 잉여이다.  실내에서 하는가 실외에서 하는가, 기획인가 집행인가 따위와는 근본적으로 관련이 없다.

(일과 잉여의 구분에 대한 예시)

1. 환경미화

일: 동네 쓰레기통에 버려진 쓰레기의 수거 행위

잉여:  쓰레기를 치우라고 지시하는 행위, 쓰레기 수거를 민간 업체에게 용역을 주고 관리하는 행위

2. 재난 예방

일: 태풍이 몰아 닥칠 때, 취약 지역, 취약 가구를 방문하여 피해가 일어날 요인을 줄이는 작업

잉여: 면사무소 안에서 확성기를 통해서 피해 방지에 유념하라고 방송하는 행위

3. 사회복지

일: 취약 가구를 방문하여 노약자를 살피고 도와주는 행위

잉여: 사회복지정보시스템을 개발하기 위해 외부 업체에 용역을 주는 행위

4. 교육

일: 학생을 지도하는 행위

잉여: 교사나 학교 운영을 감독하는 행위

5. 범죄 예방

일: 동네와 마을 순찰을 도는 행위

잉여: 마을 CCTV 설치와 관리 업무를 외부업체에게 용역 주는 행위

6. 정책 수립과 예산

일: 정책을 기획하고 예산을 수립하는 행위

잉여: 정책 기획과 예산 수립을 용역화 하는 행위

몇 가지 사례를 보았다. 어떤 공무원의 업무가 일인가 잉여인가를 판단하는 업무는 잉여이다. 그것은 머슴(공무원)의 역할이 아니라 주인(국민 혹은 주민)의 역할에 해당된다.

우리나라 정부는 수백년 묵은 잘못된 공무원 제도 때문에 발생하는 잉여가 너무 많다. 왕정과 독재정은 오래 전에 종식되었지만 그 시대에 형성된 관료 제도와 문화가 온존되어 왔다. 더구나 안정성 중심의 관료체제는 21세기 급속히 변화하는 세상과 너무 맞지 않다.

지금과 같은 신분보장=정년보장이라는 등식이 성립되는 직업공무원제도 아래에서는 세상이 빨리 변할수록 정부 내에 잉여의 비중이 급격히 증가한다. 신분보장=정년보장이 신분보장=임기보장이라는 원칙으로 바뀌어야 한다. 약간의 예외를 둘 수는 있겠지만 공무원제도의 기본틀이 임기제 혹은 계약제로 바뀌어야 한다는 말이다.

그렇지 않으면 우리 정부는 ‘용역’ 국가로 전락해 버릴 것이다. 현재도 정부의 일 중 상당 부분이 용역화된다. 공무원은 용역 관리자이고 외부 업체가 실제 일을 수행하는 방식이다.

용역을 법으로 금지해야 한다.  대신에 그 정책이 꼭 필요하다면 그 정책을 잘 수행할 수 있는 사람들을 공무원으로 채용해야 한다. 아예 해당 정책을 수행하는 부서 전체를 모듈식으로 꾸릴 수도 있을 것이다.

그것은 현재의 관료 체제에서는 불가능한 대안이다. 하지만 법적으로 한 가지만 손질하면 가능하다. 정년보장이라는 제도를 없애고 모든 공무원을 임기제 혹은 계약제로 바꾸는 것이다. 만약 전문성이 필요해서 장기 계약이 필요한 경우라면 그런 자리는 보수를 낮게 책정하고, 반대로 계약 기간이 짧은 자리는 보수를 더 많이 주어서 보상에 균형을 맞춰야 할 것이다. 지금처럼 이긴자가 다 가져가는 방식으로는 정부의 잉여를 줄일 길도, 효율적인 정부를 실현할 길도 없다.

인간의 지식은 쉽게 업그레이드되지 않는다. 반드시 많은 노력을 들여서 학습을 해야 새로운 지식을 얻을 수 있다. 그러나 빠르게 변하는 세상에서는 그런 업그레이드에 한계가 있다.  인간은 언젠가 여러가지 이유로 적응 불능 상태에 빠지게 된다. Fortran과 DOS를 배워서 컴퓨터를 시작한 기술자에게 AI 개발 업무를 맡긴다고 상상해 보라. 그냥 그것은 불가능하다.

정부 내에서 그 불가능을 가능으로 만드는 요술 방망이가 바로 ‘용역’이다.  용역 관리자는 얼마든 변신이 가능하다. 심지어 자신이 용역을 내주는 업무를 제대로 이해하지 못해도–실제로 그런 경우가 흔하다–용역을 관리할 수 있다. 업무 수준이 엉터리일 것이 불을 보듯하고 벤더(vender)들의 손바닥에서 놀아날 가능성이 매우 높지만 말이다.

용역 관리를 감독하는 사람은 없다. 왜냐면 감독자들도 그 업무를 이해하지 못하기는 마찬가지이기 때문이다. 거기에 거대한 용역 비즈니스가 발생한 공간이 존재한다.  그 공간에서 잉여로 가득찬 용역 정부가 탄생하는 것이다.

일하는 공무원은 많아도 무방하다. 비용은 좀 많이 들지만 국민, 주민이 편해진다.

그러나 잉여는 과감히 제거되어야 한다. 아마도 그러면 정부 예산의 3분의 1정도, 잘하면 절반 정도는 절약 가능할 것이다.  그것은 이 나라에서 천년 래의 사회혁명이 될 것이다.

우리 나라에는 두 종류의 사회계급이 존재한다. 공무원과 일반인이다.  헌법에는 이 나라의 주인이 국민으로 되어 있지만, 현실에서 이 나라의 주인은 공무원이다. 머슴이 주인 자리를 차리하고 있는 것이다! 엄청난 모순이다. 그들은 제 위치에 돌려보내고 국민이 주인 자리를 차지하는 것이 21세기의 진정한 혁명이다. (2018-08-25)

지능이라는 이름의 게임(18): 집단지능과 블록체인(10)

관련 이미지

블록체인은 분산원장(distributed ledger)이다. 즉, 블록체인이라는 원장을 구성원 모두에게 공유토록 하는 시스템이다.

그런데, 블록 체인의 거래가 크게 증가하고 참여자가 아주 많아지면 블록과 블록체인에 담긴 데이터의 양–대부분 거래 기록(transaction list)이겠지만–이 폭발적으로 증가할 것이다. 그러면 데이터의 유효성이나 무결성 검증에 있어 효율성 확보가 심각한 문제로 대두될 수 있다.

더구나 구성원들의 블록체인 참여는 인터넷에 연결된 단말기를 통해서 이루어지는데 단말기의 성능이 제각각일 것이다. 어떤 참여자들은 스마트폰 앱을 사용하기도 할 것이다. 거래 원장의 공유라는 원칙을, 그런 참여자들까지 포함해서 블록체인 참여자 모두가 과연 어떻게 따르게 할 수 있을까?

그러한 문제를 해결하는 요소 기술이 머클 루트(Merkle root)–루트 해시(root hash)라고도 부름–이다. 머클 루트는 해싱을 이용하여 누적된 거래 기록을 최대한 가볍게, 그러면서도 신뢰를 창출하는 원래 기능을 유지하게 해주는 데이터 축소 방법이다. 아래 그림은 모의 블록체인이고, 각 블록의 헤더(block header)는 머클 루트를 가지고 있다.

How can merkle trees help validate the content of a block in a ...

머클 루트는 다음과 같은 방식으로 생성된다. 아래 그림을 가지고 설명한다.

나무–이 나무를 Merkle tree라고 부른다–의 가장 바닥에 있는 각 거래(Transaction A, B, C, D)는 해싱되어 Hash A, B, C, D가 된다. 그런 다음 그 해시들은 두 개씩 짝을 지어 다시 해싱된다. Hash A와 B는 Hash AB로 해싱되고, Hash C와 D는 Hash CD로 해싱된다. 그리고 그 두 해시는 다시 결합, 해싱되어 머클 루트(Merkle Root/Root Hash)를 형성하게 된다. 머클 루트에는 나무의 바닥에 있는 거래 기록 자체는 포함되지 않고 해시들만 포함되어 있다. 이렇게 사다리 타기 하듯이 연쇄적으로 해싱하면 아무리 많은 데이터라도 매우 가벼운 머클 루트로 변환될 수 있다.

이 머클 루트가 블록 헤더(header)에 포함되어 있으면 블록 바디(body)에 있는 거래 기록을 빼고 블록 헤더만 포함시켜 해싱을 해도 데이터의 무결성과 유효성이 충분히 검증될 수 있다. 그리고 블록 헤더에 담긴 머클 루트는, 그 블록에 포함된 거래 기록들의 머클 루트를 계산해서 비교해 보면, 그것의 유효성을 확인할 수 있다.

머클 루트는, 많은 거래 기록을 효율적으로 해싱하는 기술이며 다수의 참여자들이 많은 거래 기록을 손쉽게 공유할 수 있게 해주는 기술이기도 하다. 머클 루트는 블록체인에서 해시함수가 참으로 중요한 요소 기술임을 다시 한번 확인시켜 준다.

이상으로 블록체인이라는 집단지능을 구현하는 요소 기술들을 살펴보았다. 아마도 블록체인에 대해 낯설었던 독자들도 이제 그 기술과 조금은 친숙해 지지 않았을까 생각된다.  다음에는 블록체인의 다양한 구현체–아직은 주로 암호화폐들이지만–와 그것이 지닌 사회적 잠재성에 관해 성찰해 보기로 하자. (윤영민, 2015-05-14)