brunch

You can make anything
by writing

C.S.Lewis

by 지은 x NULL Apr 22. 2017

버즈분석으로 미래 예측이 가능할까?

[스몰데이터] 프로듀스 101 시즌2 - 3화

[빅데이터도 스몰데이터부터]

실생활에서 직접 활용해볼 수 있는

데이터마이닝/데이과학/프로그래밍의

응용편입니다.



무척 피곤한 하루를 보내고 멍하니 TV를 보다가

엠넷의 '프로듀스 101 시즌2' 3화를 끝까지 다 보게 됐습니다.

오히려 시즌1은 한 편도 챙겨본 적 없었는데 희한하게도요. 때아닌 감상평을 쓰려던 건 아니



그러다 문득

'인터넷(SNS/게시판/댓글 등등)의 반응으로 순위를 가늠해볼 수 있지 않을까'라는 생각이 들더군요.

여타 오디션 예능프로그램과는 다르게 시청자들의 투표를 통해 순위가 가려지는 만큼,

인구(人口)에 회자되는 출연자가 높은 순위를 얻을 수 있을 것 같았습니다. (가설1)

※ 버즈분석(Buzz Analytics)
버즈 데이터는 흔히 말하는 빅 데이터와 그 실체가 같다. 다만, 버즈 데이터 혹은 소셜 버즈 데이터라고 부를 때에는 마케팅을 목적으로 해서, 수집하고 분석한다는 뉘앙스가 강하다. 아무튼 그 통계 분석 결과를 클라이언트가 쉽게 알 수 있도록 적절하게 시각화하고 수치화하기까지의 과정이 바로 버즈 분석이고 소셜 분석이다.
(출처 - 한국일보 : 오피니언 [이재현의 유행어사전] 버즈)


사실은 그 전에, 101명 중에 수십 명, 아니 십수 명만 부각되는 편집에 감탄(?)하며

각 출연자가 화면에 잡힌 시간을 측정해보면 현재 순위와 높은 상관관계가 있을 것이라고 생각했습니다. (가설2)

닭이 먼저냐 달걀이 먼저냐의 문제처럼 인기가 많은 출연자를 더 방송에 내보내는 것일 수도 있고, 반대로 오랜시간 노출된 사람이 더 관심을 받을 수도 있겠죠. 인과관계를 알아내긴 힘들어도 상관관계만큼은 확신(!)했으나 영상분석을 초단위로 하기에는 능력도 자원도 부족하여 일단 포기...






주말을 맞이하여 첫번째 가설을 확인해보기 위해

밤을 새워 약 1만 건 이상의 데이터를 모았고, 도배글 등 중복을 제외한 9,023개의 문장을 대상으로 살펴봤습니다.

(데이터 수집에는 파이썬을 썼지만 중복제거와 기본적인 데이터 정제에는 가장 익숙하고 편한 엑셀을 써서 따로 코드는 없습니다. ^^;;)


여러 방법으로 이리저리 분석을 해보고 '예상 순위까지 나열해봐야'라며 의욕은 컸으나

Trial and error 방식의 코드 작성빌드에 번번이 실패하고......

해가 떴습니다.



워드클라우드 예제코드를 이용한 그림으로 곧바로

결론입니다.




1만 개에 가까운 버즈(잡담)가 만들어낸 그림입니다. (출처는 자체제작)




앞으로 누구의 순위가 어떻게 오르내릴까요?



그림의 해석은 여러분들께 맡기겠습니다.

여기서 누군가의 이름이 눈에  들어온다면,

당신은 이미 그 사람의 팬!

(아마 보시는 분마다 모두 다르겠죠.)





문제해결 과정 없이 너무 급 마무리해버린 것 같아 태그클라우드를 그리면서 적용해본 옵션들을 공유합니다.


# 빈도순으로 상위 100개 선정

most = count.most_common(100)

# 태그 크기와 색상을 옵션으로 적용하여 클라우드용 태그 생성

tags = make_tags(most, maxsize=150, colors=cool)

# 이미지 크기, 레이아웃(방향) 등을 설정하여 이미지로 저장

create_tag_image(tags, '이미지명.png', size=(900, 600), layout=LAYOUT_HORIZONTAL, fontname='폰트명')


※ 파이썬의 PyTagCloud를 이용했는데, 옵션들을 바꿀 때마다 배치가 다르게 나오네요. 심지어 색깔만 바꿔도. 옵션들을 random seed로 쓰는 건 아닐까 추측해봅니다.








주의 혹은 참


데이터 수집부터 비과학적이며 가볍게 시작한 작업이라 결과의 정확성은 전혀 담보할 수 없습니다.

의도적인 조작은 일절 없었지만 데이터 및 그 결과에 대해 어떠한 보증도 하지 않아요.

문장에서의 단어 추출을 위해 아래 두 가지를 써봤습니다.

보시는 것처럼 같은 사람을 다른 이름으로 부르는 경우도 있어서 빈도 순위가 절대적이지는 않습니다.


from konlpy.tag import Twitter

[('휘', 1036), ('투표', 735), ('데뷔', 672), ('이대', 522), ('문복', 479), ('하자', 465), ('진짜', 443), ('실력', 418), ('윤지성', 385), ('박지훈', 377), ('현', 368), ('명', 356), ('황민', 356), ('점', 344), ('기', 310), ('다니엘', 305), ('김종현', 302), ('박우진', 300), ('최민', 293), ('애', 290), ('좀', 284), ('강동호', 281), ('조가', 264), ('너무', 263), ('왜', 256), ('지성', 253), ('안', 249), ('조', 243), ('강', 239), ('학년', 238), ('등', 236), ('평균', 231), ('정세운', 216), ('센터', 215), ('픽', 212), ('지훈', 212), ('노태현', 206), ('엠넷', 205), ('주', 202), ('위', 202), ('섭', 194), ('사무엘', 193), ('김', 183), ('만점', 172), ('관린', 172), ('합산', 168), ('사람', 167), ('순위', 167), ('제발', 166), ('더', 165)]


from konlpy.tag import Komoran

[('휘', 735), ('거', 462), ('투표', 457), ('데뷔', 408), ('명', 394), ('복', 391), ('이대', 387), ('문', 341), ('지성', 334), ('점', 316), ('애', 305), ('실력', 273), ('우진', 259), ('안', 259), ('박지훈', 258), ('다니엘', 243), ('형', 239), ('평균', 224), ('민', 219), ('등', 210), ('주', 209), ('윤', 206), ('박', 203), ('황', 191), ('위', 189), ('섭', 189), ('강', 185), ('것', 182), ('엠넷', 182), ('학년', 179), ('센터', 173), ('정세운', 169), ('대', 163), ('합산', 162), ('만점', 162), ('사람', 156), ('하', 150), ('사무엘', 149), ('진영', 146), ('김종현', 141), ('태현', 137), ('순위', 136), ('건', 132), ('오늘', 130), ('지훈', 126), ('김', 125), ('강동호', 124), ('관리', 119), ('욕', 117), ('표', 115)]




사실 거창하게 '예측'이라기 보다는 현상 분석에 가까운 내용인데요,

그림이 어느 정도 들어맞을 거라고 봅니다.

꾸준히, 마치 도배하듯 적극적으로 버즈를 생산하는 네티즌들이 바로 현재와 미래의 순위를 만드는 사람들이니까요.

같은 RAW데이터를 가지고도 사용하는 솔루션에 따라 결과가 확연하게 다른 만큼

정말 중요한 프로젝트라면 좀 더 신중하게 모델링하는 것이 좋겠다는 생각이고,

다음에(다음주 방송 때 또~?) 여유가 생기면 감성어 분석을 결합하여 더 나은 결과를 도출해볼 수도 있을 듯합니다.

참고로 위 그림에서는 'ㅁㅁㅁ 별로다', 'ㅇㅇㅇ 마음에 안 든다'는 글들도 빈도 순위에 그대로 반영이 됐습니다. 악플이 무플보다 낫다고 했으니 아예 틀린 건 아닐 거예요..;



-.NULL





(막간홍보) 이어지는 글입니다.

https://brunch.co.kr/@llun/12


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari