Share           Pin It
워드임베딩과 팩토라제이션을 설명한 지난 글에서 http://bahnsville.tistory.com/1139 저는 그 기술들을 크고 다양한 데이터 기반의 개인화 추천 data-rich personalization에 적용하는 것에 관심있다고 밝혔습니다. 이번에는 어떻게 개인화 추천에 활용할 수 있을 것인가?에 대해서 아이디어 차원의 글을 적습니다. 좀 naive할 수도 있음을 미리 밝힙니다.

불가능한 것은 아니지만 word2vec같은 워드임베딩 기술이나 SVD, NMF같은 팩토라이제이션 기술을 바로 개인화 추천에 이용하는 데는 한계가 있습니다. 유저별로 조회했던 아이템을 시간순으로 나열하고, 아이템을 word/vocabulary로 가정해서 아이템의 벡터를 만들 수 있습니다. 아이템 벡터의 cosine 유사도를 구해서 관련 아이템을 찾아내는 식으로 아이템 기반의 개인화 추천에 이용할 수가 있습니다. 또는 유저-아이템 행렬을 바로 팩토라즈해서 유저간, 아이템간, 또는 유저-아이템간의 연관도를 측정해서 추천하는 방식이 (추천 알고리즘 중에서) MF방식으로 알려져있습니다. 단순히 유저-아이템 sequence 또는 co-occurrence를 이용해서 추천에 사용할 수 있지만, 한정된 정보를 이용하는 데서 오는 한계가 명확히 존재합니다.

아래 그림은 워드임베딩과 딥러닝 기술을 이용해서 개인화 추천에 어떻게 적용할지를 설명하는 모델입니다. 그림에는 표시하지 않았지만 레이어 사이에 여러 은닉층이 있을 수도 있습니다. 이 모델의 핵심은 사용자와 아이템의 정보를 수치 벡터로 우선 표현하고, 다시 공통의 Latent Vector로 만드는 것입니다. 그렇게 만들어진 LV를 이용해서 유저간, 아이템간, 또는 유저-아이템간의 연관성을 계산합니다. 

유저 및 아이템 정보를 같은 체계인 Latent 벡터로 표현하는 네트워크 모델

** OUV/OIV, CUV/CIV, LUV/LIV: Original/Compressed/Latent + User/Item + Vector

첫번째 단계는 일단 사용자의 정보와 활동 이력 User History나 아이템의 설명 Item Description을 숫자 벡터 Original Vector로 표현하고, 다시 정형화한 Compressed Vector로 정제하는 것입니다. 먼저 사용자 정보는 사용자의 성별이나 연령, 거주지 등의 부가정보나 서비스에서의 행동 이력 (검색쿼리, 봤던 글이나 사진, 댓글, 좋아요활동, 구매 등)을 포함합니다. 텍스트나 ID로 표현되는 정보는 워드임베딩 기술로 벡터화, 사진/이미지는 CNN으로 벡터화 (또는 이미지에서 객체를 인식한 후 워드임베딩할 수도...), 또는 다른 형태의 정보도 수치벡터화 합니다. 아이템 정보도 비슷한 과정으로 Origina Vector를 만듭니다. 단순히 짧은 광고나 상품정보 뿐만 아니라, 장문의 컨텐츠나 관련 이미지 등을 벡터로 만든다면 벡터의 길이가 천차만별일 것입니다. 그래서 모든 유저 벡터 또는 모든 아이템 벡터의 길이를 맞춰주기 위해서 Original Vector를 Compressed Vector로 정형화할 필요가 있습니다. 압축된 CUV나 CIV의 길이가 같을 필요는 없지만 data loss가 크지 않다면 같게 만들어주는 것이 좋고, CV는 수백차원 이상으로 적당히 길어도 무관합니다. 짧을수록 실시간 연산에 용이하겠지만 정보 손실 information loss는 감내해야 합니다. 유저의 이력에서 시간이 중요한 요소라면 RNN을 사용하는 것도 괜찮고, 그저 전체를 스냅샷처럼 요약하는 것이라면 CNN으로 압축하는 것도 고려할 수 있습니다. (참고. 텍스트 convolution 방법: http://www.jmlr.org/papers/volume12/collobert11a/collobert11a.pdf Compressed Vector/Layer를 Convolution Vector/Layer로 불러도 될 듯.)
솔질히 말씀드리면, 이 부분에 대해서 구체적으로 어떤 기술을 어떻게 사용하면 좋을지를 고민/연구하지 못했습니다. 어쨌든 비수치형 데이터인 유저 및 아이템 정보를 간결한 수치벡터 CV로 표현합니다. 이번 글은 다음 단계에 초점을 맞췄지만 대부분의 기계학습에서 인풋을 어떻게 잘 정의/표현하느냐 (knowledge representation)는 기계학습의 성패에 결정적인 부분입니다.

위에서 CUV와 CIV의 길이를 같게 만들었만, CUV와 CIV의 내적 또는 코사인 유사도로 유저-아이템의 관계를 파악할 수 없습니다. 각 CV는 unsupervised로 구축했기 때문에 서로 간의 (CV벡터의 각 엘리먼트 간의) 연관성이 없습니다. 유저-아이템 행렬을 MF한 경우라면 사용자벡터와 아이템벡터의 내적이 곧 사용자와 아이템의 관계를 암시하지만, 위의 관계에서는 그렇지 않습니다. 즉, 사용자와 아이템을 표현하는 벡터의 길이만 같지 벡터의 각 element를 이루는 구성요소/방식이 서로 다릅니다. Bi-linear regression 모델을 이용해서 모든 '유저x아이템'의 계수를 측정할 수도 있지만, 앞서 말했듯이 CV는 수백차원의 벡터이기 때문에 데이터 차원 폭발 dimension explosion이 발생합니다. CUV과 CIV가 각각 100차원이라 하더라도 10,000개의 계수를 예측해야하는 문제가 됩니다. (처음에 유저 및 아이템 벡터를 만들려고 생각했을 때는 bi-linear regression을 고려했었지만 차원 폭발 문제가 우려돼서 포기함) 그래서, CUV와 CIV를 같은 조건으로 표현한 Latent Vector로 만드는 것이 다음 단계입니다.

CV는 여느 차원축소 dimension reduction 기술이 그렇듯이 unsupervised로 만들면 됩니다. 단 새로운 정보가 들어왔을 때도 기존의 변환 구조/결과를 크게 훼손하면 안 됩니다. 비슷한 정보를 가진 사용자는 결과 CUV가 비슷해야 합니다. A라는 사용자의 현재 CUV와 며칠 후 (행동 이력이 조금 추가/변경된)의 CUV가 크게 달라지면 안 됩니다. 데이터가 업데이트되면서 CV가 달라지겠지만 일관적이어야 한다는 것입니다. 한편, CV를 LV로 만드는 것은 이미 확보한 유저-아이템 관계를 이용한 supervised 방식으로 학습시킵니다. 즉, 어떤 사용자 U가 아이템 I를 구매했다는 정보를 이용해서 U의 CV를 LV로 변환 encoding하고 그 LV를 다시 CIV로 변환 decoding한 결과가 I의 CV가 되도록 학습시킵니다. word2vec처럼 LV가 유일한 은닉층일 수도 있고, 통상의 auto-encoder처럼 은닉층이 여러 겹일 수도 있습니다. word2vec의 skip-gram에서 입력 단어 벡터는 CUV가 되고 출력 맥락(단어) 벡터는 CIV가 되는 형태, 또는 번역할 언어의 문장을 CUV로 보고 번역될 언어의 문장을 CIV로 가정했을 때는 번역 시스템의 구조와 같습니다. 유저-아이템 네트워크를 처음 생각했을 때 NMT (Neural Machine Translation)과 개념상 구조가 같다고 봤습니다. NMT의 구조는 auto-encoder나 word2vec의 그것도 개념적으로 같습니다. 앞의 설명에서는 CUV-LV-CIV 순으로 학습시켰지만, 역순(CIV-LV-CUV)으로도 함께 학습시켜서 유저와 아이템이 동일한 LV체계를 갖도록 학습시킵니다. 그래서 CUV와 CIV의 차원을 같게 만들어야 한다고 적었습니다. (굳이 따를 필요는 없음)

중간을 많이 생략했지만, 사용자의 정보 및 이력을 LUV로 만들고, 아이템의 정보를 LIV로 표현했다면 추천 및 개인화에 필요한 모든 것이 끝났습니다. LUV1과 LUV2의 유사도를 구하면 사용자 U1과 U2의 유사도가 나옵니다. 즉, 나와 비슷한 취향의 사용자를 바로 확인할 수 있습니다. 비슷하게 LIV1과 LIV2의 유사도를 구해서 유사 아이템도 구할 수 있습니다. (유저-유저 또는 아이템-아이템 유사도는 그냥 CV의 연산으로 처리해도 됨) LUV와 LIV을 같은 식으로 표현했기 때문에 LUV와 LIV의 유사도를 이용해서 유저에게 가장 적합한 아이템들을 바로 선별할 수 있습니다. 그리고 한 가지 더 장점이 있습니다. 이제껏 단순히 유저-아이템 관계라고 설명을 했지만, 종류가 다른 아이템을 한꺼번에 학습시킬 수가 있습니다. 즉, 사용자 U는 컨텐츠 C도 봤고 광고 A를 봤다면 U-C, U-A의 관계로 학습시켜서 C와 A의 유사도도 측정할 수 있습니다. (설명을 많이 생략했지만...) 그래서 컨텐츠 C가 노출되는 화면에 다른 종류의 컨텐츠인 광고 A를 함께 노출시켜줍니다. 기존에는 단순히 사용자 U가 어떤 페이지에 접속했을 때 'U'의 정보만 고려해서 컨텐츠 C의 추천과 광고 A의 노출이 독립적으로 이뤄졌는데, 새로운 scheme에서는 C와 A가 같은 공간에서 LV로 만들어져서 LVc와 LVa의 유사도를 계산해서 문맥(현재 보는 컨텐츠)에 맞는 광고나 관련 상품 등을 노출할 수 있습니다. (유저와 무관한 맥락 광고를 제공. 물론 사용자를 고려했을 때 효과가 더 높겠지만...)

학습 Training
위에서 설명한 프레임워크가 제대로 작동한다는 것을 증명하기 위해서 어쨌든 CV-LV-CV (CLC)로 이어지는 네트워크를 supervised 방법으로 학습시켜야 합니다. OV에서 CV로 차원을 축소해서 정형화하는 바른 방법은 존재한다고 일단 가정합니다. CLC 네트워크의 구조나 가중치W 업데이트 방법 등은 보통의 ANN (MLP, auto-encoder, word2vec 등)과 동일해서 별도의 설명은 생략합니다. 관건은 어떤 데이터로 학습시키느냐입니다. 번역에서는 번역할 문장과 (인간이 번역한) 정답 문장이 존재하기 때문에 입력층에 번역할 문장을 넣고 출력층에 정답문장을 넣어서 W를 업데이트합니다. 추천에서는 이런 매핑 관계는 결국 유저-아이템 간의 interaction 유무를 정답세트로 봐야합니다. 예를 들어, 유저 U가 컨텐츠 A, B, C를 조회했다면 (U, A), (U, B), (U, C) [그리고, (A, U), (B, U), (C, U)]를 학습데이터로 보는 것입니다. 기존의 추천에서 사용하던 유저-아이템 행렬과 동일한 데이터입니다.

하지만 우려되는 점은 도메인마다 어느 수준까지를 유저-아이템 사이에 관계가 있다고 볼 것인가입니다. 광고를 예로 들면, 사용자 U가 광고 A, B를 클릭해서 광고주 페이지로 이동했을 때, 그 중에서 광고 B와 연결된 상품만을 구매(전환발생)했습니다. 광고를 클릭한 것만으로도 유저-광고를 연결해도 되는가 아니면 전환이 발생한 B만이 U에게 유효한 광고인가의 문제가 있습니다. 몇 년전까지만해도 트래킹 이슈가 있어서 클릭을 광고의 주요 지표로 봤지만 최근에는 실제 전환을 더 중시하기 시작했고 또 그에 따라서 다양한 트래킹 업체들이 등장했습니다. 하지만 전환 데이터는 여전히 수집의 어렵고 또 실제 전환 발생 빈도가 낮아서 데이터 양이 부족한 경우가 많습니다. 정답세트가 부족하다면 아무리 우수한 모델이 있더라도 제대로 학습시키지 못해서 좋은 성능을 기대하기 어렵습니다. 역으로 클릭 정보는 다소 많이 있지만 어뷰징을 포함해서 실제 매핑 관계가 아닐 가능성이 높습니다. ... 현실적으로 클릭과 전환을 모두 정답 세트로 사용하는 것입니다. 전환이 발생했다는 것은 이전에 클릭이 존재한다는 의미입니다. 그래서 클릭은 가중치가 1이 되고, 전환은 (클릭 1 + 전환 1) 가중치가 2가 됩니다. 전환에 더 fit한 모델을 만들면서 부족한 부분은 클릭으로 어느 정도 커버하는 형태입니다.

(바라건대 제대로 작동한다고 가정하고...) 일반적인 상품이나 컨텐츠 추천에서는 위에서 설명한 방법이 별로 문제될 것이 없는데 (제대로 동작한다면), 제가 지금 맡고 있는 광고는 추천과 결이 조금 다릅니다. 추천에서는 그저 1등 또는 상위 N개의 아이템만 선별해서 순서에 맞게 노출시켜주면 되는데, 광고에서는 예상CTR (Clickthrough rate)를 계산해야 합니다. 유저-아이템의 연관도가 높을수록 pCTR이 높게 나옵니다. 이는 보통 광고는 ecpm (expected cost per mille) 순으로 랭킹하는데, ecpm = pCTR * BA (Bidding Amount)로 계산되기 때문입니다 (보통 CPC광고에 한함). 즉, 유저와 아이템 (광고)의 연관도가 높거나 광고주가 높은 값으로 광고기회를 구매한 광고를 우선 노출시켜줘서 광고 플랫폼의 기대 수익을 높이는 방식입니다. 그리고 보통 과금액을 정할 때 Dutch auction으로 알려진 second-price로 과금합니다. 그래서 정확한 기대 CTR을 예측하는 것이 광고 사업에서 매우 중요합니다. (기대수익 계산과 과금액 산정이 일반 추천과 조금 상이할 수 있음) 그런데 앞서 설명한 방식에서는 CTR 수치를 얻지 못해서 기존 광고 시스템과 어긋나는 부분이 있습니다. 그런데 CTR이 유저와 아이템 간의 연관도 (즉 순서와 정도)를 나타내는 지표라면, 그냥 Sim(LUV, LIV)를 CTR의 대체제로 사용해도 크게 문제될 소지가 없지 않을까?라는 확신이 강하게 듭니다.

요즘은 기-승-전-딥러닝입니다. 이미지 객체 인식, 음성 인식, 자연어처리 등의 분야에서 딥러닝이 괄목할만한 성과를 냈습니다. 세계의 어딘가에선 딥러닝을 이용한 추천 시스템도 개발해서 활용하고 있으리라 봅니다. 논문이나 연구결과를 별로 못 봤는데, 글을 적으면서 좀 찾아보니 논문이 전혀없는 것은 아닙니다. 기존의 여러 알고리즘을 딥러닝에 맞게 변형한 것이나 딥러닝의 구조에 입력층만 잘 끼워맞춘 것 등의 논문들이 눈에 띕니다. 제가 구상한 것과 비슷한 구조의 논문도 눈에 띕니다. (참고. https://arxiv.org/pdf/1701.04783.pdf CV를 만드는 것까지는 유사하나 유저와 아이템 관계를 학습하는 부분에서 상이함) 직접 구현해서 테스트해보기 전까지는... 학교 다니면서 ANN을 야매로 공부했고, 3년 전에 딥러닝을 주목했고, 2년 전에 서베이 수준에서 딥러닝을 공부했는데, 추천에 딥러닝을 활용하는 방안에 대한 고민은 있었지만 팀을 옮기고 생각의 발전이 별로 없었습니다. 올해는 다시 공부하는 해로 정하고 이것저것 훑어보면서 다시 오래된 고민을 정리하고 있습니다. 실마리는 거의 다 찾았고 이젠 구현해서 테스트만 해보면...

... 직접 코딩해서 테스트해보기가 참 싫다. 내가 프로그래밍을 조금만 더 좋아하고 소질이 있었더라면 세상이 약간은 더 바뀌지 않았을까? 이게 글의 결론은 아닌데...

===
B: https://brunch.co.kr/@jejugrapher
F: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It
데이터 과학 Data Science 또는 데이터 과학자 Data Scientist에 대해서 검색해보면 아래의 다이어그램 또는 비슷한 설명을 필히 보게 된다. 데이터 과학자는 프로그래밍 능력과 수학과 통계에 대한 지식과 도메인/비즈니스에 대한 이해가 있어야 한다는 내용이다. 물론 이 세가지 영역에서 모두 또는 특정 영역에서 확연히 뛰어나면 좋겠지만 전문 개발자들보다 프로그래밍에 능할 수 없고 수학만 파고든 사람들이나 한 분야에서 수년간의 경험을 쌓은 이들보다 더 뛰어날 수가 없다. 그러나 이 세분야에서 고른 지적 능력을 가져야 함을 부인할 수 없다. 

데이터 과학자는 어떤 능력이 필요한가? (출처. Quora, 아래링크)


데이터 과학에 대해서 더 자세히 알고 싶은 이들은 다음의 Quora 쓰레드를 참조하면 된다.

오늘 글을 적는 것은 단순히 위의 다이어그램을 소개하거나 각 영역에 대해서 자세히 알려주기 위함이 아니다. 페이스북을 통해서 수학을 전공하는 어느 대학생이 금융공학에서 데이터마이닝을 해보고 싶다는 진로 상담을 해왔는데, 질문을 제대로 읽지 않고 바삐 출근하는 길에 잠시 생각했던 생각을 적으려는 것이다.

질문을 제대로 읽기 전에는 이 세 영역의 중요성을 말해주면서 지금 어차피 수학을 전공하고 있으니 어떻게 해서라도 프로그래밍 언어 하나 정도는 마스터하라는 조언을 해줄 참이었다. 그리고 비즈니스/도메인 지식을 습득하는 것이 가장 중요하지만, 이것은 학부 과정 학생이 쉽게 얻을 수 있는 것도 아니고 나중에 대학원에 진학하거나 취직을 해서 여러 프로젝트에 참여하고 경력을 쌓다보면 자연히 얻게 되는 것이다정도로 조언을 해줄 참이었다. 물론 질문의 요지는 이게 아니었기 때문에 다른 대답을 해줬지만...

그런데, 프로그래밍, 수학/통계, 그리고 도메인 지식… 이 세 영역의 의미를 다시 생각하면서 데이터 과학에 대한 생각이 좀더 발전했다. 첫째, 수학/통계 지식은 데이터 과학의 원리나 기초를 제공해주는 것 같다. 소위 말하는 데이터 분석 또는 마이닝에서 (고급) 수학이 핵심이 되지 않는 경우가 많기는 하지만 -- 특히 데이터가 충분히 많은 경우 --, 적어도 데이터에 내재한 패턴/의미를 이해하는데 기초 수학과 통계는 원리적 가이던스를 제공하다.

둘째, 프로그래밍은 데이터 과학의 실행을 담당한다. 요즘은 많은 통계 및 분석 패키지나 오픈소스가 존재하기는 하지만, 여전히 많은 경우 코딩이라는 행위가 이뤄져야 한다. 수학 지식만으로 많고 다양한 데이터 속의 패턴과 의미를 밝혀낼 수가 없고, 많은 도메인 경험은 중요한 인사이트를 주지만 인사이트가 결론이 될 수가 없다. 결국 인사이트를 검증하기 위해서 데이터를 하나하나 캐나가는 과정이 필요한데 그 과정이 결국 코딩/프로그래밍의 도움없이 이뤄지지 않는다. 멋진 툴들이 이런 과정을 쉽게 해주기도 하지만, 아직 만능의 툴은 없다. 손으로 직접 해봐야 한다. 코드를 한 줄씩 짜가면서 실행해야 한다는 거다.

세째, 도메인 또는 비즈니스 지식은 경험이다. 이 경험이라는 것이 문제 (도메인)에 대한 경험일 수도 있고, 방법(분석/마이닝)에 대한 경험일 수도 있다. 그리고 앞서 말했듯이 경험은 인사이트라는 결실을 맺는다. 뛰어난 추론 능력과 실행 능력이 있더라도 인사이트가 없으면 삽질의 연속이다. 물론 그런 삽질을 통한 경험이 유능한 데이터 과학자를 만들어낼 수도 있지만… 내가 풀어야 하는 문제를 잘 이해하는 것 그리고 그걸 풀어가는 과정을 빨리 파악하는 것은 경험이 주는 귀한 선물이다.

위의 다이어그램은 데이터 과학을 설명하는데 유용하지만, 한가지 빠진 게 있다. ‘데이터’에 대한 직접적인 내용이 없다는 점이다. 도메인이 데이터를 약간 내포하고 있지만 명시적으로 데이터의 중요성이 그림에 나타나지 않는다는 거다. 데이터를 다루는 수학, 데이터를 다루는 프로그램밍, 데이터를 다루는 경험은 그냥 수학과 코딩과 도메인과 다를 수가 있다.

그리고, 수학/통계와 프로그래밍이 만나서 — 다이어그램에서는 ‘머신러닝'이라 표현했지만 — 알고리즘이 나온다. 데이터 분석 업무에서 (고급) 알고리즘이 불필요한 경우가 허다하지만 어쨌든 수학과 프로그래밍 양쪽을 마스터해야지 제대로된/쓸만한 알고리즘을 만들 수 있다. 그리고 이 알고리즘과 도메인 지식이 결합해서 일종의 지혜가 된다. 뭐, 그냥 데이터 지식이라고 말해도 된다. 데이터 과학은 결국 원리와 실행과 경험이 만나서 지혜를 구축해나가는 학문이다. 끊임없이...

===
F: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It
다음 검색에서 '데이터마이너'라는 검색어가 갑자기 많이 들어온 날이 있었다. 강풀 작가의 '마녀'라는 작품 속에서 PC 캡쳐 화면과 함께 주인공이 데이터마이너가 됐다라는 짧은 문구가 등장했던 때다. 해당 캡쳐 화면에는 SAS라는 데이터분석툴 아이콘도 있었고 지금은 없어진 마이피플 아이콘도 등장했다 (유료화로 화면캡쳐는 생략. 9화였음.). 강풀 작가님이 웹툰을 그리기 위해서 예전 같은 팀의 팀원에게 자문을 얻었는데, 그 분의 (의도된) PC화면으로 유추된다. 당시에 내가 서울에서 근무했다면 미팅에 함께 참석했지 않을까?라는 생각도 해본다.

빅데이터, 데이터 사이언스, 인공 지능, 딥러닝, 머신러닝 (기계학습) 등의 많은 용어/개념들이 버즈buzz되고 있지만 관련 분야의 사람들이 아니라면 여전히 데이터마이닝 또는 데이터마이너라는 용어가 생소한 것 같다. 그래서 데이터마이닝/너에 대한 지극히 개인의 의견을 적으려 한다.

데이터마이너는 무엇을 하는 사람인가? 데이터를 보는 사람이다. 왜 데이터를 보는가? 데이터에 내재한 패턴 pattern을 찾거나 규칙 rule을 만들기 위해서다. 그런 패턴이나 규칙은 왜 찾고 만드는가? 문제를 해결하기 위해서다. 그렇다. 내가 생각하는 데이터마이닝은 여러 문제와 관련된 데이터를 관찰함으로써 규칙을 찾고 적용해서 문제를 해결하는 것이다. 문제를 해결하는 접근법은 다양하겠지만 데이터에 근거를 둔다는 점에서 다른 것들과 차별점이다. 물론 데이터가 데이터마이너만의 것은 아니다.

문제를 해결하기 위해서 데이터를 본다라고 표현했지만 때로는 문제를 찾아내기 위해서 데이터를 보는 경우도 종종 있다. 즉, 주어진 문제를 해결하기 위해서 근거 데이터를 수집하고 추론하는 것도 마이너의 일이지만, 이미 가진 데이터에서 시스템에 내재된 문제점을 찾아내는 것도 마이너의 역할이다. 그래서 단순히 수학적, 공학적 기술/기법 뿐만이 아니라, 다양한 경험과 (잡) 지식이 마이너에게 요구된다. 마이너가 활용할 수 있는 데이터는 단순히 시스템 구동에 필요한 데이터 (보통 DB나 텍스트 형태)나 시스템이 찍어내는 로그에만 한정된 것이 아니다. 

머신러닝 (또는 인공지능)은 데이터마이닝과 밀접한 관계가 있지만 같다라고 말하기는 어렵다. 밴다이어그램을 그린다면 상당한 공통 영역이 존재하지만 또 다른 영역이 분명 있다. 머신러닝은 특정 미션을 완수하기 위해서 근거 데이터로 학습시켜서 모사하는 것이 목적이다. 주어진 데이터 이상의 추론이 가능하다면 인공지능이라고 불러도 좋다. (Exploitation vs Exploration) 머신러닝/인공지능은 '기계를 사람처럼'이 모토이자 목적이다. 데이터마이닝은 많은 머신러닝 기술을 활용하지만 엄격함을 요구하지는 않는다. 인간 친화적이라고 표현하면 좋을 듯하다. 머신러닝에 일부러 모호함을 추가하는 연구도 진행되고 있지만...

데이터마이닝을 잘 하기 위해서 다양한 수학, 통계 지식이 필요하고, 고도의 알고리즘들도 만들어졌다. 그러나 그런 지식이나 알고리즘은 데이터를 잘 보기 위한 보조 기능을 하는 것일 뿐이다. 많은 지식과 알고리즘을 알고 있다고 뛰어난 데이터마이너가 되지는 않는다. 데이터를 잘 보는 능력과 그걸 돕는 기술을 많이 아는 것은 분명 같지 않다. 원시적이지만 -- 한계도 분명한 -- 텍스트나 엑셀의 테이블에 펼쳐진 (적은/제한된 양의) 수치나 데이터를 눈으로 확인해서 패턴/규칙을 발견할 수 있다면 HDFS에 쌓인 수 테라바이트의 데이터를 고도의 알고리즘으로 확인하는 것보다 더 낫다. 좀 극단적으로 표현했지만, 데이터마이닝은 기계가 이해하는 규칙이 아나라 사람이 이해하고 설명가능한 규칙을 찾는 것에 더 가깝다고 생각한다. (엄격함을 덜 요구한다는 의미도 이의 연장선에서 말한 것이다.)

R이나 SAS 등의 통계분석툴이나 파이썬이나 자바같은 프로그래밍 언어, 또는 Mahout이나 Spark MLlib 같은 (오픈소스) 라이브러리에 능한 것도 데이터마이너의 필수 덕목이 됐지만, 데이터를 보는 눈이 없다면 무용지물이다. 파리를 잡기 위해서 소잡는 칼을 휘두르는 모양새다. 수학이나 알고리즘 지식, 그리고 프로그래밍 스킬보다 도메인 지식 또는 비즈니스 로직을 개인적으로 더 중요하게 생각하는 이유도 데이터가 만들어지고 활용되는 곳을 잘 알아야지 데이터를 더 잘 볼 수 있기 때문이다. 물론, 때론 도메인 지식 (또는 지식 편향)이 데이터를 객관적으로 보는 것에 장애가 된다. 수학/통계/알고리즘과 프로그래밍 스킬, 그리고 도메인 지식은 데이터마이너가 되기 위한 일종의 트리니티라서 고른 역량이 필요하지만, 그렇지 않다면 각각의 능력을 가진 사람들을 모은 그런 팀을 구성하는 것이 필요하다. (그리고 모든 개발자들이 그렇듯이 영어를 읽고 이해하는 능력인 필수다. 유학 또는 취업으로 외국에 가지 않는 이상 영어를 듣고 말하고 쓸 기회는 별로 없지만 영어 문서를 읽어야할 일은 흔하다.)

수학이나 프로그래밍보다 도메인 지식이 더 중요하다고 얘기하는 가장 큰 이유는 우리가 일상에서 만나는 마이닝 문제 또는 해결책이 그렇게 복잡하지 않다는 점이다. 아주 간단한 연산으로 해결되는 경우가 많다. 물론 음성 인식이나 이미지 처리, 기계 번역과 같이 복잡한 태스크를 해결하기 위해서 사용되는 다양한 딥러닝 및 관련 기술들을 온전히 이해하고 구현하기 위해서는 수학과 프로그래밍 스킬이 필요하다. (딥러닝이 구조적으로 복잡해 보이지만 요소요소를 보면 사실 복잡한 연산은 아니다.) 하지만 일상에서 데이터를 가지고 하는 문제들은 그저 데이터를 연결하고 순위를 매기는 것에 불과한 경우가 허다하다. 대표적으로 추천 및 개인화 시스템이라는 것도 아이템과 아이템, 사용자와 아이템, 그리고 사용자와 사용자를 잘 연결시켜서 기준에 따라서 정열해서 상위 N개를 보여주는 것에 불과하다. 특히 독립적인 데이터 샘플이 많아지는 경우라면 더더욱 그렇다. 정성적인 추천의 품질을 가르는 것은 결국 도메인 지식이다. (정량적 지수는 다를 수 있다.) 흔히 말하는 클러스터링, 클래시피케이션 및 레그레션 등의 모든 개념들도 결국 데이터를 연결하고 나열하는 것, 또는 이를 잘 하도록 돕는 것 그 이상도 이하도 아니다.

야구 투수에 비유하면, 데이터마이너의 특기는 강속구가 아니라 제구력이다 (Control Artist). 데이터마이너는 데이터를 보는 사람이고 데이터에서 규칙을 찾는 사람이라는 정의의 연장선에서 생각하면 된다. 완벽한 모델을 찾고 모든 파라메터를 자동으로 최적화하려는 것도 연구의 한 축이겠지만, 여전히 대부분의 알고리즘들이 사람의 손을 타기 마련이다 (Human Intervention). 만능의 인공지능이 등장하지 않은 이상, 어떤 모델 또는 방법론을 선택하고 필요한 다양한 파라메터를 얼마나 잘 설정하느냐가 평범한 마이너와 좋은 마이너의 차이를 가른다. 도메인 지식과 경험이 중요하다는 이유도 제어 능력의 차이를 주기 때문이다. 딥러닝과 같은 강력한 한방 (강속구)를 가졌더라도 제어 능력이 없으면 의미가 반감된다.

데이터 엔지니어도 아닌 사이언티스타라는 사람의 입에서 경험 (또는 경험에 따른 감 — 고급지게 표현해서 인사이트)이 중요하다고 말하는 것이 참 이상할 법하다. 그건 내가 사이비라서 그렇기도 하지만, 실제 그렇기 때문이다. 문제 상황에서 가설을 세우고 데이터로 검증하기 때문에 데이터 사이언스라 불린다. 문제를 인식하고 적절한 가설을 세우고 실험 계획을 통해서 필요한 데이터를 모으고 분석 및 검증으로 얻은 결과를 해석해서 액션을 취하는 일련의 과정이 필요하다. 매우 간단한 과정이지만 이를 어떻게 실행하느냐에 따라서 투입되는 비용과 시간, 반복 그리고 승패가 결정된다. 이때 필요한 것이 -- 천재가 아닌 이상 -- 경험이다. 어차피 초보 마이너나 베테랑 마이너가 가지고 있는 기본 기술셋은 비슷하다.

이전 글에도 적었지만 데이터 문제가 아주 정확한 모델과 설정값을 요구하는 것 같지만 대부분의 경우 설명하기 쉬운 단조로운 모델과 설정하기 쉬운 근사값이 필요한 경우가 많다. 그리고, 경험이 쌓인다는 것 그리고 감이 생긴다는 것은 그저 오랜 시간동안 많은 데이터를 다뤘다고 해서 얻어지는 것은 아니다. 어쩌면 내가 이 글을 적으면서 그냥 데이터마이너라고 적었지만 실제 의미는 시니어 데이터마이너를 뜻했던 것 같다. 그냥 기계적으로 데이터를 분석하는 사람이 아니라 데이터로 생각하고 데이터와 함께 숨쉬는 사람을 생각했던 것이다. 오해를 막기 위해서 경험은 깊은 수학적 지식과 다양한 프로그래밍 연습 위에 쌓인다.

훌륭한 데이터마이너는 데이터를 잘 보는 사람이다. 특별한 재능과 기술을 가진 사람이 아니라 그저 데이터 위에 노는 사람이다.

P.S., 딱 4년 전인 2012년 3월 9일에도 같은 제목의 글을 적었습니다. http://bahnsville.tistory.com/546

===
B: https://brunch.co.kr/@jejugrapher
F: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It
과학자는 자신이 가진 솔루션을 적용할 문제를 찾고 엔지니어는 자신의 문제를 해결할 솔루션을 찾는다라는 말로 과학(자)과 엔지니어링을 구분한 글을 본 적이 있다. 적절한 구분인 것같다. 데이터 분석/마이닝도 같은 관점에서 구분할 수 있을까? 문제에 맞는 솔루션을 찾는 사람은 데이터 마이너고, 알고리즘에 맞는 문제를 찾는 사람은 데이터 사이언티스트라고 부를 수 있을까? 별로 좋은 구분인 것같지 않다.

최근 빅데이터나 데이터 사이언스 등에 관심이 조금 쏠리고 데이터 기반의 무엇 (Data-driven X)이라는 표현을 자주 접하게 된다. 선무당이 사람잡는다는 말도 있지만, 데이터와 연결된 용어들이 범람하면서 데이터 선무당들도 많이 늘고 있는 것같다. 간혹 지난 몇 년동안 엄청나게 많은 데이터를 모아놓았는데 이걸로 빅데이터 분석할 수 있지 않을까요?라는 류의 질문을 받곤 한다. 가혹 (데이터 분석의 생리를) 알만한 사람들도 비슷한 요청을 한다.

앞서 엔지니어와 과학자를 구분하면서 문제와 솔루션 중 어느 것에 익숙한가로 정했다. 데이터 마이닝이 과학이냐 엔지니어링이냐를 구분하기는 문제와 솔루션이 적당한 측도는 아니지만, 데이터를 접근하는 방식에 대해서는 좋은 설명이 될 것같다. 데이터 마이닝은 문제와 솔루션 사이에 데이터가 존재한다. 데이터가 문제와 솔루션 사이를 연결한다고 봐도 좋다. 그래서 크게, 문제(서비스)에 맞는 데이터를 수집해서 적당한 솔루션을 찾는 방향과 솔루션이 적용될 문제를 찾아서 데이터 인사이트를 얻는 방향이 있을 수 있다. 서비스에 익숙한 사람이라면 나이브하더라도 그것에 맞는 알고리즘을 찾아서 적용해보고 필요하면 더 나은 알고리즘을 찾거나 기존 것을 개선하면 된다. 반대로 알고리즘에 익숙하다면 서비스를 조금씩 이해하가면서 자신의 솔루션을 끼워넣으면 된다. 일반적으로 그렇다는 얘기다.

다른 접근법이 있기는 하다. 주변에서 흔히 접하는 것인데, 가장 이해하기 힘들고 피했으면 하는 접근법이다. 앞서 말했듯이, 우리한테 데이터가 많이 있으니 괜찮은 서비스 하나 만들어볼까요?라는 접근이다. 데이터만 (많이) 있으면 서비스가 하늘에서 뚝 떨어진다는 생각이다. 그래서 많은 경우 데이터 접근법이 실패한다. 모든 것은 컨텍스트 내에서 정의된다. 데이터의 컨텍스트는 서비스다. 유능한 사람은 데이터 더미에서 인사이트를 얻을 수 있겠지만, 나같은 범인은 그러지 못한다. 데이터가 많다고 데이터 기반의 실행이 이뤄지는 것이 아니다.

그리고 이런 경우 데이터가 많기는 한데 데이터 분석에 바로 사용할 수 있는 것도 아니다. 그냥 언젠가 필요할 것같으니 다 모아두자는 식으로 데이터를 쌓아둔 경우가 대부분이다. 물론 많은 회사에서 그런 데이터조차도 관리하고 있지 않지만... 불필요하게 공간만 차지하는 필드들도 많고, 정작 필요한 데이터는 애초에 없는 경우가 많다. 데이터를 분석하고 적용하려면 처음부터 다시 데이터를 모으거나 필요한 형태로 가공해야 한다. 데이터가 잘 정립된 곳에서도 데이터를 가지고 새로운 분석을 하거나 서비스를 만들 때 5할은 데이터 정의/변환에 소요되는데, 그냥 데이터만 쌓아둔 경우라면 9할을 여기에 허비하게 된다. 그러면서 서비스를 이해하게 되는 경우도 발생하지만, 깔끔하지는 않다. 어디에 어떻게 활용할지에 대한 목적없이 데이터를 수집해서 분석가들을 힘들게 만들지 않았으면...

데이터에 맞는 문제, 데이터에 맞는 솔루션은 없다. 데이터가 왕이 아니라, 왕이 될 데이터는 따로 있다.

==
페이스북 페이지: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It

VentureBeat의 기사를 읽고 글을 적습니다. (참고. Big data is dead. What's next?)

언제나 기술용어가 마케팅용어로 변하는 시점이 되면 죽음 death이라는 단어가 등장합니다. 마케팅의 탄생 시점이 늘 기술의 사망 시점과 묘하게 겹치는 것같다. 인터넷만 국한시켜 생각해보면, 한 때 웹2.0이 기술용어인가 마케팅용어인가를 두고 논쟁이 벌어졌습니다. 그런 논쟁은 기술이 번성하고 이제 마케팅이 시작되는 시점에 벌어졌습니다. 그리고 최근에는 소셜이 그런 과정을 거쳤고, 이제는 클라우드나 빅데이터가 같은 운면에 접어들었습니다. 늘 그랬습니다. Geek의 손을 떠난 새로운 제품/서비스는 결국 마케터들의 손에 전달됩니다. 그 순간 매번 기술의 죽음이 언급됩니다. 마케팅이야 말로 기술과 인물의 결합에서 만들어진 것이고, 기술이 뿌리면 마케팅이 거두는 것입니다. 그러나 마케팅이 시작되는 시점에 기술이 힘을 잃게 됩니다. 그러나/그래서 또 다른 새로운 기술이 등장합니다.

기사에서도 바로 이 점을 말합니다. 많은 회사들과 서비스들이 빅데이터라는 이름 아래 모임으로서 빅데이터의 본래적 의미가 사라졌습니다. 사실 빅데이터라는 말 자체에 -- 데이터를 제외하고는 -- 특별한 기술적 향기가 전혀 없었습니다. 대용량처리, 분산처리 또는 병렬처리에서 느껴지던 기술적 향기가 클라우드 컴퓨팅이나 빅데이터라는 이름으로 불려지면서 이미 사라진지 오래입니다. 일반인들이 이해하는 과정에서 클라우드니 빅데이터라는 말이 마케터들에 의해 만들어진 점을 부인할 수가 없습니다. 실제 많은 이들이 클라우드나 빅데이터를 입에 달고 다니지만 그 본질과 속성을 제대로 알고 말하는 이들이 과연 몇이나 될까?가 항상 궁금했습니다. 10%로 잡는다면 제가 너무 긍정적인 사람일 것입니다.

저자는 빅데이터 이후를 스마트데이터 Smart Data, 데이터 사이언스 Data Science, 뉴에스큐엘 NewSQL, 그리고 예측분석 Predictive Analytics 등에 주목하라고 말합니다. SQL의 관계형 데이터가 최근 NoSQL이라는 비정형 데이터로 변해가고 있고, 더 복잡한 데이터를 위한 새로운 SQL의 필요성은 생길 듯합니다. 그러나 SQL은 너무 기술적인 부분이라 제가 더 자세히 언급할 엄두가 나지 않습니다. 그리고 최근에 종종 듣는 데이터 과학도 기존의 데이터 수집, 분석, 활용을 아우르는 총체로써의 메타포를 제공해주기 때문에 짧게 다루기가 어려운 주제입니다. 제가 처음 기사를 보면서 스마트데이터라는 표현이 눈에 띄었고 (그런데 이것도 너무 마케팅 냄새가 납니다), 오래전부터 스스로 선제적 대응이라 부른 예측 분석은 늘 주목하고 있던 부분입니다. 그런데 스마트데이터와 예측분석을 굳이 따로 떼어서 설명하는 것이 맞지 않다고 생각합니다.

구슬이 서말이라도 꿰어야 보배다라는 속담이 있습니다. 우리에게 많은 데이터가 있지만 그 속의 의미를 찾아내고 서로 연결시키는 정보화 과정이 없으면 데이터는 그저 널부러진 구슬에 불과합니다. 그리고 정보에 가치를 부여하지 못하면 지식으로 진화하지 못하고, 그런 지식을 실생활에 적용해야지 그제서야 삶의 지혜가 됩니다. 데이터를 정보로, 지식으로, 지혜로 만드는 것이 데이터 처리 data processing, 데이터 분석, data analysis, 그리고 데이터 마이닝 data mining입니다. 이런 과정이 없으면 데이터는 그냥 메모리/디스크 공간만 차지합니다. 빅데이터가 대용량 다양성 속도 등에서 장점이 있지만, 가공과 분석의 과정이 없으면 빅데이터도 그저 많은 공간만 차지하는 애물단지입니다. 빅데이터를 분석해서 실서비스에 반영되고 그 서비스를 통해서 사용자들에게 가치를 제공해주는 것이 스마트 데이터입니다.

데이터 분석이 그저 과거의 트렌드와 패턴만 확인하는 것이라면 이 또한 -- 그저 자기 만족일 뿐 -- 큰 의미가 없습니다. 과거는 미래를 가리킵니다. 미래가 항상 과거에 있다는 말이 아니라, 미래에 대한 많은 힌트를 준다는 의미입니다. (그리고, 어떤 미래는 분명 과거에 있습니다.) 데이터 마이닝은 과거를 보지만 항상 미래를 염두에 두고, 모든 결과는 미래의 액션을 위한 것입니다. 기사에 언급된 다양한 추천엔진이라든가 사기방지시스템 등이 모두 미래의 액션을 촉진 또는 억제시키는 것입니다. 데이터를 통해서 미래를 예측하는 것이 예측분석이고, 이를 통해서 사용자의 미래 행동/판단을 지원하는 것이 스마트데이터입니다. 그러나 항상 염두에 둬야하는 점은 '예측분석은 당위성이 아니라 가능성을 제공한다'는 것입니다. 모든 미래가 과거에 있지 않다는 말의 의미입니다. 소위 말하는 블랙스완은 많은 데이터나 정교한 알고리즘으로 찾지 못할 수도 있습니다.

빅데이터 시대는 갔다라고 적었지만 여전히 빅데이터는 스마트데이터와 예측분석의 기저/인프라를 제공합니다. 그 인프라 위에 어떤 알고리즘/창의성을 올려놓을 것인가가 어떤 새로운 시대를 맞을 것인가?를 결정해줍니다. 향후에도 데이터의 양은 더더욱 늘어날 것이고 데이터의 종류도 더더욱 다양해질 것이고, 또 그것들을 가공하고 피드백하는데 필요한 시간은 더더욱 짧아질 것입니다. 이런 환경적 추세에 우리 인간의 지능/창의성을 더하여 미래를 대비하는 것이 미래예측이고 스마트 데이터입니다. 빅데이터 시대에는 '할 수 있다'를 내세웠다면, 스마트 데이터 시대에는 '이룩했다'고 자랑할 수 있어야 합니다. 빅데이터를 잘 활용하면서도 회의적으로 보는 이유가 많은 이들이 그저 '이것도 할 수 있다'만 말하기 때문입니다. 그것을 띄어넘어서 실생활에 진정한 가치를 줄 때 진정한 스마트 데이터 시대가 열립니다.

...

글을 적는 중에 재미있는 그림이 있어서 공유합니다. 데이터마이닝책을 찾아보다가 "Data Mining: Practical Machine Learning Tools and Techniques, 3rd Edition"을 발견했습니다. 2nd 에디션에 서는 녹색 나뭇잎 사이에 있는 녹색 도마뱀 사진을 표지로 삼았는데, 3rd 에디션에서는 아래와 같이 황금들판에 한마리 맹수 사진을 담고 있습니다. 만약 녹음이 우거진 숲속의 누른 맹수라든가 누른 벌판의 초록색 도마뱀이라면 눈에 잘 뛰었을 것입니다. 데이터 속의 의미라는 것이 때로는 그렇게 쉽게 발견되기도 하지만, 많은 경우 아래의 표지와 같이 우리 눈에 쉽게 띄지 않습니다. 아래의 사진과 같이 모호함에서 조금 덜 모호함을 만드는 과정이 데이터마이닝입니다. 집단지성이라는 이름으로 빅데이터가 모든 것을 해결해줄 것같지만, 때로는 더 많은 데이터가 그저 모호함만 가중시킬 수도 있습니다. 그래서 스마트함이 필요합니다. 아래의 맹수는 나의 행동을 경계하는 것일까요 아니면 나를 잡아먹으려고 준비하는 것일까요? 맹수를 발견하는 것이 데이터마이닝이었다면 맹수의 다음 행동을 예측해서 대비하는 것이 스마트 데이터마이닝입니다.

Data Mining: Practical Machine Learning Tools and Techniques, 3rd Edition

이번 글은 어느 때보다 더 두서없이 적었습니다.
(2013.02.25 작성 / 2013.03.06 공개)

댓글을 달아 주세요