/[Kaggle] KKBox’s Music Recommendation Challenge #1 EDA, 전처리, 시각화

[Kaggle] KKBox’s Music Recommendation Challenge #1 EDA, 전처리, 시각화

이 프로젝트는 서울대학교 4차산업혁명 아카데미 비즈니스 애널리틱스 과정을 들으며 진행했다. 3학기때 진행했고 팀 구성원은 3명이었다. 나는 주로 EDA와 시각화, Feature Engineering을 담당했다. 쓰다보니 글이 길어져서 여러 개로 나누었다. 이 글에는 EDA, 전처리, 시각화와 관련된 내용을 다루었다.

KKBox란?

KKBox는 대만의 음악 스트리밍 서비스이다. 주로 동남아쪽에서 많이 이용하는 서비스이다. 왜인지 모르겠지만 한국에선 현재 이용이 불가능 하다. 한국 구글 플레이스토어에서는 검색 자체가 되지 않고, APK를 다운 받아서 설치해도 이용이 불가능한 지역이라는 알림만 뜬다. 하지만, 어플을 써보지도 않고 데이터 분석을 한다는 게 말이 되지 않는 것 같아 VPN을 써서 접속했다. 이 과정에서 다양한 방법으로 시도하느라 시간은 많이 소요됐지만, 이후에 데이터를 이해하고 인사이트를 발견하는 데 큰 도움이 됐다.

문제 정의

해당 컴피티션의 문제는 사용자의 과거 청취 데이터(앱)를 기반으로 해당 노래 재청취여부를 예측하는 것이다. 좀 더 구체적으로 말하자면, 특정 노래를 최초로 재생한 시점에서 해당 노래를 한달 이내에 다시 재생할지 여부를 예측하는 문제다. 컴피티션의 이름은 추천시스템처럼 보이지만, 사실은 예측문제다.

데이터셋

데이터셋에는 아래와 같이 총 6개의 테이블이 있다.

  • Members : 유저 관련 데이터(성별, 나이, 가입일 등)
  • Songs : 노래 관련 데이터(제목, 길이, 작곡가, 작사가 등)
  • Song_extra_info : 노래 관련 추가 데이터(ISRC 코드 등)
  • Train : 노래가 재생된 탭, 한달 내 재청취 여부 등
  • Test : Train 테이블에서 target 변수만 제외
  • Sample_submission
데이터셋 요약
데이터셋을 요약한 표

프로젝트를 몇번 진행하면서 데이터를 받자마자 요약하고 정리해두는 게 얼마나 중요한 일인지 깨달았다. 이번에도 데이터를 받자마자 엑셀 파일에 위와 같이 정리해 두었고, 이후 분석을 하면서도 자주 꺼내 참고하곤 했다.

전처리 및 분석을 하며 던진 몇가지 질문들

전처리 및 분석을 하며 던진 몇 가지 재미 있는 질문들에 대해 써 보았다. 분석에서 ‘질문’을 던지는 건 굉장히 중요하다고 생각한다. 데이터를 보다보면 호기심이 생겨 질문을 던지게 되고, 그 질문에 답하다보면 조금씩 데이터에 대한 이해가 높아진다. 파생 변수를 만들 때도 결국 이러한 데이터에 대한 이해가 바탕이 되어야 할 것이다.

Q1. City, Age, Gender의 결측치가 함께 발생하는 이유는 무엇일까?

members 테이블의 결측치
members 테이블의 결측치

members 테이블의 결측치 개수를 확인해 보니 gender 변수에만 19,902개(전체 행 개수 대비 57%)의 결측치가 있었다. 하지만 위의 코드는 NaN으로 입력된 데이터만 확인하는 코드다. 실제로는 정상적으로 입력된 것처럼 보이는 데이터도 결측치인 경우가 있다. 이에 해당하는 적절한 사례가 바로 이 데이터다.

결측치
city, age, gender 변수의 결측치

먼저 age 변수에는 이상한 데이터들이 있었다. 나이가 0으로 입력된 유저들이 있었는데 그 수가 19,934명이었다. gender 변수의 결측치 개수인 19,902개와 유사하다. 또, city 변수에서 1번 도시에 거주중인 유저수가 19,445명이다. 세 개의 수치가 매우 비슷하다. 하지만 아직 심증은 있지만 물증은 없다. 좀 더 확실한 증거들을 모아보기로 했다. 참고로 나이가 70세를 초과하는 경우(45건)도 결측치로 판단했다.

세 변수의 결측치가 동시에 발생하는 경우
세 변수의 결측치가 동시에 발생하는 경우

만약 세 변수의 결측치가 서로 연관되어 있다면, 결측치가 동시에 발생할 것이라고 가정했다. 이를 토대로 한 행에 해당 값들이 동시에 발생하는 경우를 확인했다. 확인 결과, 대부분 거의 세 값이 동시에 등장했다. 예를 들어 총 34,403의 행 개수 중 city가 1, age가 0 미만 또는 70 초과, gender가 결측치인 경우가 18,356건이나 되는 것이다.

KKBox 어플 가입 화면

또한 어플을 어렵게 다운받아 확인한 결과도 이러한 주장을 뒷받침해주었다. 어플을 다운받아 가입할 때 나이, 성별, 도시와 같은 정보를 입력하지 않고 건너뛰는 것이 가능했다. 즉, 유저가 해당 정보를 입력하지 않고 건너뛰는 경우 city는 1, age는 0, gender는 결측치로 입력되는 것이다. 이를 근거로 해당 값들은 모두 결측치로 변환했다.

Q2. 인기 있는 노래는 재청취율도 높을까?

굳이 데이터를 들여다보지 않아도 쉽게 떠올릴 수 있는 의문이다. 정말로 그런지 확인해보고자 한다. 먼저 ‘인기 있는 노래’는 재생횟수가 많은 노래로 정의했다.

노래의 재생횟수와 평균 재청취율간의 관계
노래의 재생횟수와 평균 재청취율간의 관계 (via Tableau)

위 그래프의 X축은 곡의 재생횟수, Y축은 해당 재생횟수에 해당하는 곡들의 평균 재청취율이다. 즉, X축이 1인 경우는 딱 한번 재생된 곡들이고 이에 해당하는 Y축의 값은 해당 곡들의 평균 재청취율을 의미한다.

그래프를 보고 알 수 있듯이, 대체로 노래의 재생횟수가 많을 수록 재청취율도 올라가는 경향이 있다. 특히, 재생횟수가 낮은 구간에서는 재생횟수의 증가에 따라 평균 재청취율이 급격하게 증가하고, 재생횟수가 1,000회를 넘어가는 곡들부터는 평균 재청취율이 상대적으로 완만하게 증가한다. 또한, 두 변수간의 상관관계를 수치적으로 확인하기 위해 상관계수를 확인한 결과, 0.66이었다. 즉, 대체로 인기 있는 곡일수록 재청취율도 높다는 결론을 내릴 수 있다. 하지만, 이는 유행과 시점에 민감한 음악 스트리밍 데이터 특성상 일반화하긴 어려울 것이다.

Q3. 노래를 많이 듣는 유저는 재청취율도 높을까?

위에서 확인했듯이 인기 있는 곡들은 대체로 재청취율도 높았다. 그렇다면, 유저 관점에서는 어떨까? 노래를 많이 듣는 유저들의 재청취율은 어떻게 달라지는지 확인해보고자 한다.

한 가지 명확히 하자면, 여기서 말하는 ‘노래를 많이 듣는 유저’는 ‘많은 노래를 듣는 유저’ 즉, ‘다양한 노래를 듣는 유저’를 의미한다. 아쉽게도 Train 테이블에는 유저가 특정 노래를 두 번 재생했어도 한 번만 기록되어 있었다.

유저의 노래 재생 곡 수와 평균 재청취율간의 관계 (via Tableau)
유저의 노래 재생 곡 수와 평균 재청취율간의 관계 (via Tableau)

그래프를 크게 세 구간으로 나눌 수 있다. 재생 곡수가 약 400개 미만인 유저는 많은 노래를 들을 수록 평균 재청취율도 증가했다. 그리고 재생곡수가 400개 이상, 약 2,500개 미만인 경우 평균 재청취율은 크게 변동이 없었다. 그리고 그 이후부터는 평균 재청취율이 조금씩 감소했다.

여기서 세 번째 구간의 유저들을 보니 흥미가 생겼다. 나름대로 하나의 가정을 세웠다. 노래를 수천곡이나 듣는 유저들이 설마 자신의 재생목록에 저 많은 노래들을 모두 저장해놓았을리는 없을 테고, 라디오를 많이 듣는 유저들이 아닐까? 카페나 매장에서 노래를 틀어놓는다거나 일을 하면서 노래를 듣는 사람들을 종종 볼 수 있는데, 다른 나라도 크게 다르지 않을 것이다. 흘러나오는 노래를 수동적으로 듣는 유저들이라면 노래를 저렇게 많이 듣는 것과 평균 재청취율이 낮아지는 것도 당연할 것이다.