대외활동/Brightics 서포터즈

[Brightics | 실습] 스포티파이(spotify) 데이터로 음악 취향 고르기 :: 군집분석(k-means)

케이와이엠 2021. 6. 29. 16:16

안녕하세요 ! 브라이틱스 서포터즈 2기 김유민입니다.

저번 시간 회귀분석으로 진행한 코로나19 데이터 실습 내용은 잘 보셨나요?

우리가 앞으로 공부할 머신러닝의 방법에는 예측이 가능한 지도 학습 / 라벨링이 되어 있지 않아 직접 데이터로부터 패턴을 찾아내는 비지도학습 있는데요. 지도학습에는 회귀(regression)과 분류(classification) 그리고 비지도학습에는 군집(clustering)이 대표적입니다.

따라서 이번 시간에는 머신러닝의 '비지도 학습' 중 하나인 'k-means'로 실습을 진행해보겠습니다.

 

 

 

오늘의 주제는 바로 ! 스포티파이 (spotify) 데이터 입니다 !

 

주제 선정 및 DATA 수집

SPOTIFY, 스포티파이는 전 세계 최대의 음원 스트리밍 서비스입니다.

스포티파이는 대부분 유럽 및 아메리카, 오스트레일리아, 뉴질랜드, 아시아 등 글로벌한 유저들을 보유하고 있는데요,

사용자가 선택, 팔로우한 아티스트나 주로 감상하는 곡의 장르를 기반으로 관련된 곡들로 자동 플레이리스트를 생성해주는 기능을 갖고 있어 많은 분들이 선택하는 스트리밍 사이트입니다.

따라서 글로벌 대규모 음악 스트리밍 및 미디어 서비스 제공업체인 스포티파이 데이터를 활용하여 '빅데이터 마케팅'을 해보자 ! 는 생각이 들었어요. 여기서 잠깐 ! 빅데이터 마케팅이란

빅 데이터 마케팅은 마이크로 마케팅(Micro marketing)으로서 빅 데이터를 통해 고객의 소비패턴과 선호도, 정보 등을 분석하여, 구매할 가능성이 높은 고객에게 맞춤형 혜택을 제공하는 것을 말한다.

출처 : 위키피디아

즉, 서비스의 유저들을 소비 패턴과 취향을 파악해서 관련 서비스를 추천하여 고객 맞춤형 마케팅 전략을 도입하는 것입니다. 마케팅의 기본은 소비자의 심리와 욕구를 파악하는 것이죠! 그런 만큼 최근 빅데이터 마케팅에 대한 관심이 증가하면서 해당 분석 방법으로 '군집화'를 사용하고 있어요.

따라서 스포티파이의 TOP50 음원차트를 군집화해서 대중들에게 사랑받은 음원들에 대해 알아보고자 합니다.

실습 데이터는 <TOP 50 Spotify Songs - 2019> 를 사용하였습니다.

top50.csv
0.00MB

(출처 : kaggle, https://www.kaggle.com/leonardopena/top50spotify2019)

 

DATA 로드 및 전처리

[LOAD 하기]

새로운 모델 <spotify> 를 만들어줍니다.

  

Load 함수로 뚝딱뚝딱 data를 업로드해주었습니다.

Track.Name Artist.Name Genre Beats.Per.Minute Energy Danceability Loudness..dB.. Liveness Valence. Length. Acousticness.. Speechiness. Popularity

변수가 id를 포함해서 모두 14개 였는데요, 이 중 Beats.Per.Minute(BPM) 과 Length(음원 길이)에 따라서 나누어보려고 해요! 이때 무슨 이유에서인지 LOAD 과정에서 칼럼이 선택이 안되던군요.

당황했지만 Select Column 함수로 필요한 5가지 칼럼만 선택해주었어요.

 

Statistic Summary 함수를 통해 null 값을 확인해보니 다행히 0개더군요 !!!!! 헤헤

그리고 max값과 min값으로 범위를 확인해주었어요.

가장 긴 음원은 309분(=5분 9초), 짧은 음원은 115초(=1분 55초) 였습니다.

그 후 음원 길이에 대해서 초 단위와 더불어 분 단위까지 Add Column을 통해 만들어보았답니다.

정규화 Normalization

이제 불러온 데이터를 정규화해주는 작업을 해줍니다.

오늘 사용할 K-means 방법은 데이터를 k개의 클러스터로 묶어주는 알고리즘인데요,

각 클러스터와 거리 차이의 분산을 최소화하는 방식이에요.

다시 말해, 데이터의 평균값에 따라서 군집이 형성되기 때문에 "거리"에 민감해요!

따라서 각 값들을 특정 값들 사이로 맞추어주는 정규화 작업이 필요합니다.

이때 정규화하는 방식에는 min-max-scaler 그리고 standard scaler가 자주 사용되는데요,

min-max-scaler 는 칼럼은 0에서 1사이 값으로 만들어주고

standard scaler는 표준정규분포인 z분포를 활용하여 -1에서 1 사이 값으로 만들어줍니다.

저는 두가지 변수를 사용하다보니 이번 실습에선 Standard Normalization 으로 진행해보았어요.

군집화

드디어 데이터를 군집화하여 모델링해볼 시간입니다 !

K-Means 알고리즘을 이용하기 위해 k-means(sillhouette) 함수를 선택해주세요.

이때 브라이틱스는 군집화를 위해 최적의 군집 개수를 찾기 위해서 Sillhouette계수를 활용합니다.

K-Means(Silhoutte) 함수의 옵션들이에요.

이때 정규화 시킨 값들을 input column에 넣어주세요.

그리고 number of cluster에는 군집개수를 지정해주세요. 저는 2~7개의 군집으로 설정해주었습니다.

그 결과 !

그 결과, 4개의 군집을 형성하면 실루엣 계수의 평균이 높게 나타나고 있었습니다 !

​군집의 개수는 k=4로 4개의 집단으로 분류할 수 있겠네요!

더 자세히 보자면,

 

검은색은 군집 '0' / 파란색은 군집 '1' / 초록색은 군집 '2' / 노란색은 군집 '3' 에 해당하는데요

군집 0은 Length가 짧고 BPM은 보통이거나 느린 집단이고

군집 1은 Length가 길고 BPM은 느리고 집단이고

군집 2는 BPM은 빠르고 Length는 짧은 집단이고

군집 3은 BPM이 빠르고 Length도 긴 집단이네요.

 

막대 차트와 파이차트로 군집들의 분포를 살펴보면,

2019년도에 스포티파이 음원에서는 군집0(bpm 보통~느림 & length 짧음) 의 비율이 50%로 가장 많았어요!!

그 다음으로는 군집2(bpm 빠르고 length 짧음)이 30%로 많았습니다.

ㄴ이로써 아마도 길이가 짧은 음악들이 긴 음악보다 사랑받을 가능성이 높아지진 않을지도 예측해볼 수 있겠네요.​


오호 ~ 그럼 군집0(bpm 보통~느림 & length 짧음)이 뭐였는지 잠깐 확인하고 올까요 ?

Filter 함수를 사용해주면,

짠 ! 25개의 음원이 나오네요 ! 이 중에 제가 아는 노래들은 하트 표시를 해주었답니다 ㅎㅎㅎ

ㄴ 제가 워낙 팝송 듣는 걸 평소에 좋아하는데 25개 중에 12개 정도 알고 있네요 ! 진짜 다 명곡들이랍니다 ...

그 다음으로 많은 군집2(bpm 빠르고 length 짧음)​에 속하는 음원은 다음과 같아요.

저는 15곡 중 8개 알고 있네요!

마지막으로 군집1(bpm느리고 length 김) 과 군집 3(bpm빠르고 length 김) 노래들도 소개해드릴게요.

군집 1

군집 3

ㄴ정말 신기하게도, 저의 취향은 가장 비중이 많았던 군집 0과 군집 2에 속해있었네요!

여러분들은 어느 군집의 노래를 즐겨들으시나요 ~?

찬찬히 음원 리스트를 살펴보시고 댓글로 알려주세요

 

이로써 스포티파이로 본 군집분석 (k-means) 도 성공적으로 끝이 났습니다.

평소 팝송을 즐겨 듣는 저로썬, top50 플레이리스트를 재생시켜놓으면서 이번 실습을 준비해보았는데요

제 관심사가 뚝뚝 묻어나는 정말 재밌는 시간이었습니다.


*해당 게시글은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.

게시글 관련 문의 및 소통을 원하신다면 아래 댓글로 남겨주세요

브라이틱스 사용 중 문의사항은

brightics@samsung.com으로 연락주세요 :)