데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

[분석5기] 베스트셀러는 빅데이터가 먼저 알아본다!

데이터 이야기
작성자
dataonair
작성일
2014-07-28 00:00
조회
6026


Dreaming the Dream Team의 신간 서적의 판매량 예측 모형 (1회)

베스트셀러는 빅데이터가 먼저 알아본다!



글: KPDCH (빅데이터 아카데미 분석 전문가 과정 5기)


>> KPDCH팀 인터뷰 : [나성호] 하나보다 둘이 강한 이유

전체 시장의 50% 이상을 점유하며 어느 나라보다 활성화된 한국의 인터넷 출판 유통 분야. 하지만 인터넷 서점에서는 신간 판매 예측은 담당 MD들의 경험과 직감이 더 크게 작용하고 있다. 경험의 한계를 뛰어넘자! 빅데이터 분석 전문가 과정 5기 KPDCH팀이 ‘신간 서적의 판매량 예측 모형’을 개발하여 경험과 직감의 한계 뛰어넘기에 도전했다.



Challenges



우리는 KPDCH입니다

안녕하세요 저희는 빅데이터 아카데미 분석 5기 중 최우수 팀의 영예를 얻은 ‘KPDCH’입니다. 이 발음하기 어려운 영어 단어는 팀 이름인데요. 저희 팀원들의 영어 이름의 앞 자를 따온 것입니다. 먼저 간단하게 팀원들을 소개할게요. 팀장은 Kevin(나성호)이고요. Peter(고민정), David(박대건), Camel(최태웅), Harvey(유성용) 이렇게 다섯 명으로 구성된 팀입니다. 저희는 향후 실력 있는 데이터 사이언스팀이 되겠다는 비전을 담아 ‘(Dreaming) The Dream Team’이라는 캐치프레이즈를 만들었습니다.

비록 팀 구성원 개개인의 경험과 실력은 미약했으나 각자의 주특기를 모아 시너지를 낼 수 있었고, 유능한 멘토의 지원까지 받게 되어 저희는 프로젝트 기간 내내 ‘한 번 제대로 해보자’는 의욕으로 충만했습니다. 부족한 실력을 열정으로 채웠던 지난 9주간의 경험들을 여러분께 공유할 수 있게 되어 매우 영광입니다. 한편으론 별거 아닌 결과물을 가지고 호들갑을 떠는 것처럼 보이는 건 아닌지 심히 걱정도 됩니다. 다만 작은 성공을 발판 삼아 큰 도약을 하려는 저희의 노력을 가상히 보시고 격려의 박수를 보내주시면 정말 감사하겠습니다.



프로젝트 주제를 정하다

빅데이터 아카데미에서 같이 교육 받으며 3일쯤 지났을 때였습니다. 김경태 지도 교수께서 5명씩 한 팀을 꾸리고 프로젝트 주제를 미리 선정하라는 미션을 주었습니다. 대개의 경우가 그렇듯이 한 곳에 모여 앉아 있던 4명의 남자들은 수줍은 듯이 함께 팀을 하자는 이야기를 나누었고, 나머지 한 명은 누가 좋을지 고민하던 중 ‘Peter(고민정)’가 그 고민을 해결해주겠다는 듯 저 멀리 대각선에 위치한 곳에서 남자들의 자리로 달려와 ‘함께 팀을 하시죠’라고 하더군요. 거절할 이유가 없었지만 처음엔 어리둥절하여 잠시 머뭇거렸던 기억이 납니다. 아무튼 그렇게 팀이 짜졌고, 이제 프로젝트 주제를 정해야 하는데 소심한 갑론을박이 있었습니다. 각자의 관심이 다양했으나, 어느 누구도 강하게 밀어붙이지 못했던 거죠. 좋게 보면 상대를 배려해준 셈인데, 처음에만 그런 줄 알았지만 프로젝트 끝날 때까지 그랬던 걸로 보아 다들 천성이 착한 사람들입니다.

저희는 꽤 많은 시간을 들여 주제 선정을 위한 아이디어 회의를 가졌습니다. 금융회사 출신인 Kevin은 공공 데이터를 활용하여 대출을 받으려는 사람들의 신용을 평가하는 모형을 만들어보길 원했고, 텍스트마이닝 전문가인 Peter는 6/4 지방선거를 앞두고 소셜 네트워크의 감성분석을 통해 선거 결과를 예측을 해보자는 의견을 냈습니다. 한편 온라인서점의 개발자 출신인 David는 도서 추천 시스템이나 신간 서적의 판매량을 예측해보는 것이 어떻겠냐고 했습니다. GIS 분야에 경험이 있는 Camel은 상권분석 프로젝트 경험을 공유해줬으며, 국민건강관리공단에 다니는 Harvey는 건강검진 결과로 질병을 예측하는 것이 요즘 빅데이터의 주요 트렌드 중 하나라고 하자, 우리의 대화는 ‘당뇨병에 좋은 맛집 정보를 제공’하는 사업 아이템 이야기에 잠시 빠진 적도 있었습니다.

dbin_268.jpg

우리는 수많은 대안 중에서 데이터 수집이 가능한 프로젝트로 결정했습니다. 마침 1인 기업을 운영하고 있던 David가 과거 근무했던 온라인서점과 새로운 비즈니스를 시작하기 위해 몇 가지 아이템들을 제안했고, 온라인서점도 신간 서적이 나올 때마다 얼마나 팔리게 될지 궁금했던 터라 서로의 입장이 일치했습니다. 이번 프로젝트가 잘 되면 David의 사업에도 작으나마 도움이 될 테고, 팀원들도 공통적으로 책에 대한 관심이 많았기 때문에 ‘2013년 신간 서적의 판매량 예측 모형 개발’로 주제를 결정했습니다.



Solution



분류분석 vs 회귀분석

프로젝트 시작 단계에서 저희는 분석 방법론으로 분류분석과 회귀분석을 놓고 무엇으로 할지 고민했습니다. 사실 처음에는 분류분석에 무게를 두고 검토했는데요. 그 이유는 빅데이터 아카데미 교육 과정 중 주식 데이터를 가지고 간단하게 분류분석 실습을 해본 경험도 있고, 회귀분석보다는 쉽게 할 수 있을 것이라는 판단 때문이었습니다. 하지만 분류분석으로 정하기엔 몇 가지 걸리는 점이 있어 결국엔 회귀분석으로 결정해야 했습니다. 먼저 분류분석은 종속변수가 Factor 형태여야 한다는 특징이 있습니다. 따라서 서적 판매량과 같은 Count data를 Factor 형태로 변환하려면 몇 개의 구간으로 나눈 등급을 부여해야 하는데, 이 때 구간을 나누는 기준들이 다소 주관적으로 설정된다는 점이 문제였습니다. 또한 완성된 분류분석 모형으로 추정하는 경우 판매량 등급(구간)을 얻을 수 있는데 반해, 회귀분석은 구체적인 추정값을 제공한다는 점에서 회귀분석의 활용도가 더 높다는 결론을 내렸습니다.



빅데이터 분석의 8할은 데이터의 수집과 정제

누군가 빅데이터 분석의 8할은 데이터의 수집과 정제에 있다고 써놓은 것을 읽은 적이 있습니다. 이번에 한 번 해보니 절대 과한 이야기가 아니었습니다. 우리 팀은 이번 프로젝트를 위해 42개의 독립변수들을 만들었습니다. 결코 많다고 할 수는 없으나 우리팀이 구글링과 브레인스토밍을 통해 당시 확보할 수 있었던 최대값이었고, 이 변수들을 생성하는 데에도 상당한 시간이 소요되었습니다.

데이터 수집 과정을 설명하기에 앞서 먼저 종속변수를 정의하는 게 순서일 듯 합니다. 앞서 말씀 드린 바와 같이 우리팀이 알고 싶었던 것은 신간 서적의 판매량입니다. 좀더 구체적으로 정의하려면 ‘기간’ 조건이 필요한데요. 저희에게 이번 프로젝트를 의뢰한 온라인서점의 상품기획자(MD)는 신간 서적이 판매되고 2주 정도 지나면 이 책이 잘 팔릴 책인지 아닌지 여부를 경험으로 알 수 있다고 하여, 저희는 ‘신간 서적의 출판일자로부터 14일간의 판매량’으로 종속변수를 정했습니다. 온라인서점의 정형 데이터는 David가 열심히 확보해 주었습니다.

이제 종속변수를 설명해줄 수 있는 독립변수들을 찾아볼 차례입니다. 우리팀은 온라인서점으로부터 전체 서적의 저자와 출판사 정보 및 일별 판매량 자료를 제공 받아 여러 가지 파생변수들을 만들었는데요. 우선 저자 및 출판사별로 ‘서적 종 수’와 ‘누적 판매량’ 및 누적 판매량을 서적 종 수로 나눈 ‘평균 판매량’ 변수들을 만들었습니다. 또 서적의 속성 중 장르와 가격도 독립변수에 포함하였습니다.

처음에는 모든 장르의 서적을 아우르는 모형으로 만들고 싶었으나, 장르별로 판매되는 이유가 서로 다르므로 최종 모형에는 국내 문학 서적으로 한정해야 했습니다. 한편 저자와 출판사의 ‘누적 총 판매량’은 최신성을 반영하지 못하므로 신간 서적의 출판 월을 기준으로 최신 판매량 변수들을 새로 만들었습니다. 즉, 출판 전월과 3, 6, 12개월 전 판매량을 계산한 것입니다.



dbin_269.jpg

이번에는 우리팀이 심혈을 기울여 만든 비정형 변수들의 생성 과정을 소개해드리겠습니다. 사실 베스트셀러 작가의 책이 무명 작가의 책보다 많이 팔리는 건 당연한 것이지만, 저희는 베스트셀러 정보가 신간 서적의 판매량에 어떻게 영향을 미치는지를 밝혀내고 싶었습니다. ‘네이버 북’ 사이트에 예스24, 교보문고, 알라딘, 인터파크, 반디앤루니스, 영풍문고 등 대형 온라인서점들의 베스트셀러 리스트가 매주 갱신되고 있어 이 사이트의 데이터를 크롤링하기로 했습니다. 기간은 2012년 12월부터 2013년 12월까지 총 56주간이며, 이 기간 중 온라인서점마다 상위 100권씩만 가져왔습니다. 그리고 저자 및 출판사별 ‘주간 베스트셀러 등록 횟수’라는 변수를 만들었는데요. 만약 A라는 저자의 책 한 종이 온라인서점 한 곳에서 베스트셀러로 등록되었으면 1, 온라인서점 6곳에서 베스트셀러로 등록되었으면 6, 이런 식으로 합산한 것입니다. 이렇게 만든 변수들은 신간 서적의 출판일로부터 4주 전까지 총 4개씩입니다.

우리팀이 저자 및 출판사별 등록 횟수보다 더 정성을 들인 변수가 있었는데요. 바로 ‘장르별 지수’입니다. 주마다 장르별 베스트셀러 서적의 개수를 합산한 후 온라인서점의 2012년 기준 시장 점유율을 곱해서 만든 것인데요. 각 장르별 실제 판매량을 알 수 없으므로 이런 방식의 가중평균 방식을 차용한 것입니다. 비정형 데이터는 Peter와 Harvey가 R로 만든 크롤러로 작업하였습니다.

그 밖에 구글 검색을 통해 ‘불황기에는 소설이 잘 팔린다’거나 ‘가계의 가처분소득이 증가하면 서적을 소비할 여력이 늘어날 것’과 같은 가설들을 세웠고, 이를 검증하기 위해 매월 혹은 분기마다 통계청에서 발표하는 통계자료 중 가계 소득 및 지출(분기), 온/오프라인 서적 판매량(월), 소비자심리지수(월) 및 실업률(월) 등을 독립변수로 추가하였습니다.

이상과 같이 이번 프로젝트에 활용된 독립변수들은 총 42개였으나, 처음부터 데이터 분석에 활용된 것이 아니고, 분석 업무를 진행하는 도중에 필요에 따라 지속적으로 첨삭하였습니다. 결국 프로젝트 9주 동안 데이터의 확보 및 정제 노력은 6주 가까이 진행된 것이라 할 수 있습니다.



데이터 마트를 구축하다

종속변수와 독립변수를 정의했으니 분석에 앞서 데이터 마트를 구축해야 했는데요. 마침 저희 팀에 데이터 모델러 Camel이 어려운 일을 금세 처리해주었습니다. 처음에는 오라클을 이용해 관계형 DB 형태로 만들겠다고 하여 우리가 다루려는 데이터가 그 정도 대접을 받아도 되나 싶었습니다. 비록 프로젝트의 분석 대상인 2013년 국내 문학 신간 서적은 866권에 불과했지만, 온라인서점으로부터 받은 전체 데이터는 서적의 종류만 20만권이 넘었고, 일별 판매량은 100만 건이 넘었으므로 데이터 모델러가 없었으면 작업이 불가능했습니다.



독립변수의 선별 기준, 상관분석

앞서 종속변수를 설명해줄 수 있을 것이라고 예상하고, 모은 독립변수가 모두 42개라고 말씀 드렸습니다만, 회귀분석을 할 때 이 독립변수들을 모두 이용할 수는 없었습니다. 독립변수와 종속변수 간의 상관분석을 하여 선형관계가 있을 것으로 판단되는 변수들만 사용해야 했는데요. 저희는 유의수준을 0.05로 정했습니다. 종속변수인 ‘신간 서적의 출판일자로부터 14일간의 판매량’과 42개의 독립변수들을 차례로 상관분석을 하여 유의확률이 0.05 미만인 변수들만 선별한 것이죠. 실제로 이 작업을 거쳐 18개의 변수를 제외한 24개의 독립변수만 사용할 수 있었습니다.



dbin_270.jpg
<표> 주요 독립변수 리스트. 종속변수와의 상관분석을 통해 얻은 유의확률을 선별 기준으로 사용

출처 : 컴퓨터월드 7월호

제공 : DB포탈사이트 DBguide.net