데이터에서 가치를 추출하기 위해 떠나는 여행, 그 출발선에서 (데이터 탐험, 해석, 그리고 추론의 중요성)
클릭 >> Hello, world !! (from ShadowEgo)
“데이터 분석과 마이닝이란, 나름대로의 전략과 체계를, 그리고 무엇보다 중요한 “기꺼이 방황할 마음의 준비”를 갖춘 후 성격이 매우 못된 데이터 귀신들과 용감하게 싸우는 행위이다.”
……… 2014년 7월, 필자.
1. 들어가는 말
우리 눈에는 잘 보이지 않지만, 그래서 피부로 느껴지지 않을 수도 있지만, 우리는 현재 그야말로 데이터가 쏟아지는 시대에 살고 있다. 우리가 늘 사용하는 이메일 계정에, 메신저 앱에, SNS에, 커뮤니티 사이트에, 상품 구매 사이트에, 포털이나 뉴스 사이트에, 통신사에, 은행 및 카드 회사에, 그리고 공공 기관에도 다양한 데이터가 존재하고 있고 지금 이 순간에도 새로운 데이터들이 계속해서 생성, 축적되고 있다. “자고 일어났더니 유명해져 있더라” 라는 말처럼, 자고 일어나면 엄청난 양의 새로운 데이터가 쌓여있게 되는 것이다. 또한 이러한 데이터들이 누군가에 의해 수집되고, 어딘가에서 분석되어 더욱 스마트해진 서비스가 제공되는 시대이다. 우리는 이러한 현상 및 행위들을 표현할 때 빅데이터, 데이터 분석, 데이터 마이닝 등과 같은 용어를 자주 쓴다.
이렇듯 최근에 데이터 관련 용어들이 사람들의 입에 많이 오르내리고 있지만, 사실 데이터를 분석하는, 마이닝하는 분야와 관련된 기술들이 발전해 온 역사는 상당히 길며, 필자는 2000년대 초반 석사과정 시절에 데이터 마이닝 관련 분야의 기술들을 본격적으로 접하기 시작했다. 2001년도에는 “Managing Gigabytes” [1] 라는 묘한 제목의 책이 지도교수님의 책장에 꽂혀있었는데, 요즘 같은 시대에는 1GB 를 대용량이라고 말할 사람이 있을 리 없지만 당시에는 그 정도면 꽤나 큰 용량을 의미했었다. (갑자기 2002년도에 128MB 짜리 USB 메모리 스틱을 돈 주고 사서 썼던 기억이 난다) 즉, 용량이 큰 데이터를 활용해야 할 필요성은 꽤 오래 전부터 존재해왔고 그와 관련한 기술들도 계속 개발되어왔다. 다만 컴퓨터 성능의 비약적인 발전, 컴퓨터 기기의 모바일화, 다양화, 그리고 그에 따른 서비스의 다양화 등으로 인해 수집 가능한 데이터의 종류와 양이 최근에 들어서 급격하게 커진 것이다. (사실, 관련 업계의 마케팅도 한 몫 했을 거라고 본다)
데이터 마이닝 분야에서 세계적으로 가장 널리 읽히는 대학원 교재 중의 하나인 “Jiawei Han, Micheline Kamber, and Jian Pei, Data Mining: Concepts and Techniques, 3rd edition, Morgan Kaufmann, 2011.” 에 의하면, 데이터 마이닝 과정은 아래의 그림과 같이 여러 단계로 구성된다. [2] 그리고 이러한 단계는 데이터에서부터 활용 가치를 추출하고자 한다면 데이터의 크기나 저장방식, 처리방식 등과 관계없이 반드시 고려해야 할 것들이다.
필자는 공학자이므로, 위의 단계들을 완전히 자동화할 수 있게 되는 꿈을 꾸기도 한다. 어떤 데이터를 입력해도 엔터키만 누르면 알아서 자동적으로 유용한 분석 결과를 아주 예쁘게 추출해 주는 소프트웨어. 얼마나 멋진가? 그러나 이 세상에 존재하는 데이터는 너무나 다양하고 많으며, 데이터를 기반으로 제공하여야 할 서비스의 목적, 종류, 특성들 역시 다양하므로, 완전한 자동화를 꿈꾸는 것은 현재로서는 비현실적으로 보인다. 그렇다면, 한 발 물러서서, 데이터에서부터 소중한 가치를 추출하기 위해 어떠한 작업들이 필요하고, 그 작업들은 어떻게 수행해야 하는지 진지하게 살펴볼 필요는 있지 않겠는가?
2. 빅 데이터 시대 – 저장과 처리의 중요성을 넘어
데이터가 커지고 다양해지고, 그 생성속도가 매우 빨라지다 보니, 덩치가 큰 데이터를 저장하고 신속하게 처리하는 것이 가장 먼저 중요한 문제로 대두되었다. 도대체 그렇게 큰 데이터들을 어디에, 어떻게 담아서 처리할 것인가? 그런데 다행스럽게도 하둡을 대표로 하는 많은 빅 데이터 솔루션들이 나타나 데이터를 저장하고 처리하는 기술적 해결책들에 대한 방향을 제시해 주고 있다. [3] 더 나아가 이제는 실시간 데이터 처리 및 스트림 처리를 위한 플랫폼 솔루션들도 많이 소개되고 있다. [4] 조금 이를 수도 있지만, 기술의 발전 추세로 볼 때, 어쩌면 이제는 데이터의 저장과 처리에 관련된 기술들은 쉽게 응용할 수 있을 만큼 발전 되어 사용자 또는 응용 서비스 개발자들이 활용할 때 “굳이 크게 고민할 필요가 없는” 이야기가 될 것이라 생각될 정도로 이제 대용량의 데이터를 저장하고 처리하기 위한 기술들은 결실을 맺어가고 있는 추세다. 관련 기술자들의 노력의 결과에 박수를 보내지 않을 수 없다.
그러나 많은 사람들이 주장해 온 데이터 활용의 중요성과 당위성에 비해, 우리가 데이터를 잘 활용하면 실제로 무엇을 할 수 있는지, 우리의 생활에 어떤 변화를 가져다 줄 수 있는지에 대한 구체적인 실례들은 상대적으로 부족해 보인다. 효율적인 저장 플랫폼에 데이터를 담았고, 이제 신속하게 처리할 수도 있을 것 같은데, 더 나아가 앞으로도 계속 데이터를 수집할 예정인데, 정작 수집된 데이터를 가지고 무엇을 해야 하는지, 어떤 부가가치를 뽑아내야 하는지 확실하지 않은 셈이다. [5] 명심할 것은, 이러한 의문에 답을 제시할 수 없다면 빅데이터 시대의 환상은 얼마 지나지 않아 무참히 깨져 버릴지도 모른다는 사실이다.
혹자는 어떤 데이터를 수집할 수 있는지 알 수 없어서 그런 것이라 생각할 수도 있다. 그렇다면 구체적인 데이터를 보유한 상태에서 데이터를 열심히 들여다 보면 그것들을 어떻게 활용하면 좋을 지 쉽게 파악할 수 있을까? 여러분에게 아주 훌륭한 플랫폼에 잘 저장된 데이터가 주어져 있다고 가정해 보자. 그럼 무엇을 하겠는가? 예를 들어, 여러분이 Gmail 계정을 활용하고 있다면, 여러분은 지금까지 받아 온 모든 메일 데이터를 다운받아 활용할 수 있다. 뿐만 아니라 수 년에 걸쳐 자신의 블로그나 페이스북에 포스팅해 온 컨텐츠들, 클라우드에 저장해 둔 문서들, 카드 사용 내역, 통화 내역들도 조금만 노력하면 어렵지 않게 활용할 수 있다. 더 나아가 특정 그룹에 속한 여러 사람들에 의해 생성된 데이터는 더 큰 위력을 발휘할 수 있는데, 여러분이 쇼핑몰이나 커뮤니티 등을 운영하고 있다면 고객 및 사용자들이 남긴 많은 로그 데이터들을 수중에 넣을 수 있게 될 것이다. 아니, 조금만 더 노력하면 트위터 데이터도 직접 다운로드 받아서 분석해볼 수 있다. [6] (직접 하기 힘들면 프로그래밍을 할 줄 아는 친구에게 부탁해서라도) 또한 최근에는 공공기관들이 데이터 포털을 통해 정기적으로 공개하거나 실시간으로 업데이트해 주는 데이터들도 무료로 수집할 수 있다. [7] 사실, 지금 언급한 데이터들은 빙산의 일각에 불과하며, 조금만 관심을 가지면 우리가 직접 수집, 활용할 수 있는 데이터들은 무궁무진하다. 자, 그럼, 지금 언급한 데이터들 중의 하나를 가지고 있다면 무엇을 할 수 있을지 쉽게 감이 오는가?
내친 김에 일을 더 크게 키워서, 여러분이 꽤 큰 기업의 기획 부서에서 근무한다고 가정해 보자. 어느 날 갑자기 최근 10년 동안의 회사의 재무상황과 관련한 모든 데이터를 총체적으로 분석하는 프로젝트를 기획하라는 지시를 받는다면, 어디서부터 무엇을 시작하면 좋을 지, 과연 쓸만한 결과를 얻을 수는 있을 지, 이 작업에 얼마의 예산을 투자해야 할 지 금방 감이 오겠는가? 혹시, 큰 돈과 비싼 시간을 투자하여 기획을 하고 분석작업도 진행했는데 쓸만한 결과를 전혀 얻지 못하는 것은 아닐까 걱정되지는 않겠는가?
3. 가치 추출 과정 – 탐험, 해석, 추론의 중요성
사실, 우리가 대용량의 데이터를 수집하고 저장하는 이유는 그 데이터로부터 가치를 추출할 수 있다는 믿음 때문일 것이다. 그것은 아주 유용한 기반 지식일 수도 있고, 수익과 직결되는 숨겨진 요소일 수도 있다. 그러나 앞에서도 언급했듯이, 우리가 수집할 수 있는 데이터는 너무도 다양하고, 심지어 지저분하다. 그래서일까, 그냥 얼핏 봐서는 이 데이터가 무슨 역할을 할 수 있을지 파악하기가 쉽지 않다. 무의미해 보이는 숫자의 나열이거나, 기호의 연속이거나, 아니면 이도 저도 아닌 복잡하게 작성된 문서들의 집합일 수도 있으니까. 그렇다면 별 수 없지 않은가. 차근차근 단계를 밟아가며 (마치 사냥감을 찾아 나서는 숲 속의 사냥꾼과 같이, 적을 찾아 나서는 수색병과 같이) 탐험해 보는 수 밖에.
필자는 데이터로부터 가치를 추출하는데 필요한 작업을 크게 나누어 탐험, 해석, 추론의 3가지로 구분해 보았다.
3.1 데이터 탐험 (exploration)
데이터를 분석하거나 마이닝한 결과를 기반으로 의사결정을 하거나 서비스를 개선하거나 데이터 마이닝 활용 서비스를 만들고자 한다면, 가장 먼저 해야 할 일들 중의 하나는 우리가 필요로 하는 패턴이 그 데이터에 포함되어 있는가의 여부를 먼저 살펴보는 것이다. 데이터가 수중에 있을 때, 그 데이터와 관련한 배경지식을 어느 정도 보유하고 있다면 우리는 그 데이터가 어떠한 특성과 패턴을 나타낼 지에 대해 비교적 쉽게 가설을 세워볼 수 있다. (마치 기후 전문가가 날씨 데이터를 들여다 보는 경우처럼) 그리고 그 가설을 검증해 보는 단계로 바로 진입할 수도 있다. 그러나 그렇지 못하다면, 일단 우리는 데이터를 이리저리 흔들어 보고 뒤집어 보고, 쪼개보는 등의 “탐험” 작업을 하면서 데이터와 친숙해져야 하며, 이 과정을 통해 데이터의 특성에 대한 가설을 구체화해야 한다. 이렇게 세운 가설들은 앞으로 해야 할 작업의 방향을 결정하는 매우 중요한 이정표가 된다.
일단 가설을 세우게 되면, 해당 가설을 검증하기 위한 작업을 하게 된다. 이 과정에서는 데이터들의 시간에 따른 변화 추이를 보기 위해 그래프를 그려 보기도 하고, 세부 데이터들을 서로 비교해 보기 위해 구간 별로 데이터를 잘라 서로의 평균값을 비교해 보기도 하며, 상관관계를 구해 보기도 한다. 더 많은 작업들에 대해서는 [2] 를 참고해 보면 좋다. 세워놓은 가설이 복잡하거나 고차원적일 경우에는 그 검증을 위한 데이터 탐험 과정 역시 높은 수준의 기술을 필요로 할 것이다. 물론, 높은 수준의 분석 기술을 보유했다고 해서 모든 가설들을 채택할 수 있게 할 수 있는 것은 아니다. (사실 고차원적인 가설이 꼭 의미가 있는 것도 아니다.)
이 과정에서 자신이 세운 가설이 검증되거나, 검증될 가능성이 높아 보이는 결과를 얻게 되면 다행스러운 일이겠으나, 그렇지 않을 경우에는 새로운 가설을 세울 필요가 있다. 또한 구체적인 가설 없이 데이터를 탐험하였는데도 유용해 보이는 패턴들을 찾아냈다면 다행이겠지만, 그렇지 않다면 더 많은 시간을 투자해야 할 것이다. 어쩌면 추가적인 데이터가 필요할 수도 있다.
3.2 통계적 패턴의 해석과 활용
분석자가 미리 세운 가설은 나름대로의 가치를 이미 가지고 있기 때문에 검증 대상으로 선택되었을 것이며, 이러한 가설이 데이터를 통해 검증되었다면 그 이후의 작업들은 훨씬 수월해질 것이다. 그러나 탐험 단계에서 우연히 새로운 패턴을 발견할 수도 있고, 가설을 검증했다고 하더라도 그 결과를 이후의 단계와 어떻게 접목할 것인가에 대해 고민을 해야 할 수도 있다. 이 과정에서 중요한 것은 새롭게 발견한 패턴 또는 검증된 가설이 어떠한 의미를 가지는가에 대해 명확한 해석 결과를 도출하는 것이다. (필자는 이 단계를 자동화하는 것이 가장 어려울 것이라고 생각한다.) 이 작업은 통계 분석 지식이나 데이터 마이닝과 관련한 전문 지식을 가진 사람들 – 우리는 이런 사람들을 Mining Expert 라고 한다 [8] – 보다는 오히려 데이터의 내용에 대한, 생성 과정과 상황에 대한 경험적 지식을 보유한 사람들 – 우리는 이런 사람들을 Domain Expert 라고 한다. – 이 더 중요한 역할을 할 수 있다. 물론 한 사람이 두 사람 몫의 일을 할 수도 있다.
나름대로 충분한 수준의 탐험과 해석과정을 마치게 되면, 발견된 패턴과 그 의미를 기반으로 이후의 의사 결정 과정 또는 실제 서비스와의 연계 과정을 디자인하게 된다. 과거의 특정 기간에 비해 현재의 데이터 값이 유의미한 수준으로 변화했으니 그에 맞추어 새로운 서비스 정책을 기획하고 실행하는 작업 등이 대표적인 예이다.
3.3 기계학습, 그리고 추론 – 소프트웨어가 데이터 패턴에 스스로 반응하도록 하자.
필자는 석, 박사과정을 거치는 동안 기계학습 (Machine Learning) 분야의 대표적인 알고리즘들을 공부했고, 실제로 그것들을 연구에 활용해왔다. 기계학습을 활용한 데이터 마이닝은 수학적 프로세스를 기반으로 데이터에 포함된 특성을 탐색하여 학습하고, 그 학습결과를 활용하여 새롭게 입력될 데이터의 특성을 평가하거나 예측한다는 점이 특징이다. 마치 친구가 아침에 늘 늦잠을 잔다는 사실을 경험적으로 알게 되면 내일도 그 친구가 늦잠을 잘 것이라고 생각하는 것과 비슷하다고나 할까. 데이터 마이닝 분야에서 가장 많이 언급되는 예가 바로 “기저귀와 맥주”의 예 [9] 인데 이것 역시 수많은 데이터로부터 패턴을 찾아 그것을 모델화하고 그 모델을 활용하여 비슷한 패턴을 보이는 케이스의 특성을 미리 예측하는 대표적인 예이다. (기저귀를 구매하는 사람은 정말로 맥주도 함께 구매하는가? 나도 궁금하다) 즉, 과거의 패턴을 기반으로 미래의 특성을 추론해 내는 것이다. (물론, 과거에 전혀 발견되지 않은 완전히 새로운 패턴이 미래에 나타날 것이라고 예측할 수 있는 알고리즘은 없다.)
기계학습 모델을 활용하는 과정은 크게 나누어 보면 입력 데이터의 특성을 반영한 수학적 학습모델을 만드는 과정 (Training)과 그 모델을 기반으로 새로운 데이터의 특성을 평가, 예측해 내는 과정 (Generalization) 으로 구성된다. 또한 기계학습 분야의 연구자들에 의해 발전되어 온 많은 기계학습 모델들 중에는 Generalization 과정에서 추론 (Inference) 개념을 활용하는 것도 있다. 예를 들어, 사용자의 나이, 성별, 현재의 날씨, 사용자의 위치, 현재의 날짜 정보, 같이 있는 사람 정보, 사용자가 구매한 상품 등에 대한 많은 케이스들을 수집하고 나름대로의 수학적 학습 모델을 구축한 후에는 사용자의 성별, 현재의 날씨, 같이 있는 사람 정보 등의 일부 데이터만으로 그 사용자가 어떤 상품을 구매할 것인가를 추론해 내는 것이다. (물론 이 추론의 정확도는 선택한 알고리즘에 따라, 데이터의 내용과 양에 따라 매우 크게 달라질 수 있다) 더 나아가, 이러한 학습과 추론 과정의 상당 부분을 실제로 동작하는 소프트웨어에 적용하여 사용할 수 있다는 점이 큰 장점이다.
일반적으로 기계학습을 적용한 연구를 수행할 때에는 우선 나름대로의 가설을 세우고, 그 가설의 타당성을 수많은 참고 논문이나 기술자료들을 기반으로 1차적으로 검증해 보게 된다. 그리고 나서 필요한 데이터를 결정하고, 그 데이터를 확보할 방안을 고민한다. 대개는 실제로 실험을 수행하여 데이터를 확보하게 되는데, 가끔은 비슷한 연구를 한 사람이 공개해 놓은 데이터를 운 좋게 얻을 수도 있다. (사실 이런 경우는 현재의 연구 주제가 그다지 새롭지 않다는 의미일 수도 있다. 정말 새로운 주제인 경우, 데이터도 직접 실험을 수행하여 확보해야 하는 경우가 많다) 그 후에는 데이터를 탐험하고 해석하는 단계로 들어가는데, 이 과정에서 이전 단계에서 세운 가설을 검증하는 것뿐만 아니라 전혀 예상하지 않았던 흥미로운 패턴을 발견하기도 한다. 이 단계가 가장 재미있기도 하지만, 한편으로는 실험자가 방황할 가능성이 가장 높은 단계이기도 하다. 그 동안 세운 가설에 문제가 있거나, 데이터 수집 과정에서 빠뜨린 내용이 있으면 다시 처음 단계로 돌아가야 할 수도 있기 때문이다. (사실 이런 일은 자주 일어난다) 그리고 마지막으로, 가설에 기반한 판단을 자동으로 수행할 수 있도록 하는 기계학습 모델을 만들고 그 성능을 평가하게 된다.
위와 같은 과정을 모두 거치고 나면, 이제는 데이터를 기반으로 자율적인 판단을 하는 시스템을 만들 수 있게 되는 것이다. 그러나 중요한 것은, 각 단계에서 어떤 가설을 세울 지, 어떤 데이터를 수집할 지, 그리고 그 데이터에서 어떤 유의미한 패턴을 발견할 수 있을 지 등에 대한 세부적인 연구와 탐험 과정을 참을성 있게 거쳐야 한다는 점이다. 충분한 검증과 확인과정을 거치지 않고 속성으로 만든 모델을 적용할 경우, 우리의 소프트웨어는 우리를 산으로 인도할 것이다.
4. 탐색, 해석, 그리고 추론을 향한 여행
이 글에서 필자는 데이터를 저장하고 처리하는 것을 넘어서서, 이제는 데이터를 탐험, 해석하고 그 결과를 실제로 동작하는 소프트웨어에 적용하는 것이 중요하다는 점을 언급했다. 또한 이러한 작업을 수행하는데 필요한 기술적 요소들도 이미 충분히 준비되어 있다. (잘 찾아서 공부하면 된다. 물론, 공부는 늘 어렵다.) 즉, 이제는 데이터를 잘 활용할 수 있는 방법을 고민해야 하며, 그 성공 여부는 데이터를 충실히 탐험하고 해석했는가에 의해, 그리고 그 결과를 충분히 잘 활용할 수 있는가에 의해 결정될 것이다. 더 나아가 데이터를 기반으로 앞으로 나타날 패턴을 예측하거나 현재의 불완전한 데이터를 기반으로 상황을 정확하게 추론, 판단할 수 있는 지능적인 시스템을 만드는 것이 더욱 중요해질 것이다.
그럼 이제부터 자신이 수집한 데이터가 품고 있는 패턴을 탐색, 해석하고, 그 결과를 기반으로 지능적인 판단과 추론을 수행하는 시스템을 만들기 위한 여행을 떠나보자.
Reference
[1] http://ww2.cs.mu.oz.au/mg/
[2] http://www.cs.uiuc.edu/~hanj/bk3/
[3] http://hadoop.apache.org/
[4] http://hortonworks.com/hadoop/storm/
[5] http://readwrite.com/2013/09/18/gartner-on-big-data-everyones-doing-it-no-one-knows-why
[6] https://dev.twitter.com/
[7] https://www.data.go.kr/
[8] http://www.sciencedirect.com/science/article/pii/S1045926X07000134
[9] http://www.dba-oracle.com/oracle_tips_beer_diapers_data_warehouse.htm