심화 프로젝트

심화 프로젝트 복기 (1)

whateveryouwish 2024. 8. 30. 21:35
- 여러분은 Spotify에 재직하는 머신러닝 분야에 특화된 데이터 분석가입니다.
고객이 선호하는 곡과 유사한 곡을 연이어 재생할 수 있는 ‘음악 추천 서비스’를 기획하고자 합니다.
- Spotify는 서비스 개선 목적 외에도 연구나 자유로운 분석을 위해 API 및 데이터셋을 공개했습니다.
이를 통해 수많은 곡에 대한 특성을 분석하며 분류를 시도해 볼 수 있습니다.
- 데이터 시각화와 탐색적 데이터 분석(EDA)을 통해 데이터를 이해하고,
추천 시스템을 구성할 수 있도록 기초 정보를 제공하는 음원 군집화의 방향성에 대해 고민이 필요합니다.
선호하는 노래와 ‘비슷한’ 곡이라는 정의를 어떻게 내릴 수 있을까요?
- 곡의 구성요소 별로 군집화
- 클러스터링 선택에 도움이 될 수 있는 데이터셋의 특성을 파악하고 다양한 모델을 시도해 결과를 비교하는것이 필요합니다.
유의미하고 서비스 목적에 맞는 결과들을 채택하여 인사이트 공유를 부탁드립니다.

 

이것 외에도 여러 분석 목적과 기법을 설명해주고 시작한 심화 프로젝트

 

[군집] 프로젝트였기 때문에 클러스터링이 주된 목적이었다. 사실 이 프로젝트를 고를 때엔 이렇게 될줄 몰랐는데, 생각보다 어려운 주제였다. 심지어 오늘 발표할 때 보니 이 주제를 고른 건 우리조밖에 없었다. 그래서 임팩트가 더 있었다면 좋겠는데~?

 

사실 전 프로젝트 때 스포티파이를 못했던 것이 꽤나 한이 됐었다. 좋아하는 일을 하고 싶어서.

플레이리스트를 만드는 것은, 음악 추천을 해준다는 것은 내게는 꽤나 큰 의미라서.

아버지가 20대 초 DJ를 하셨던 것도, 여직까지도 수없이 많은 곡들을 내게 추천해주는 것도 같은 의미렸다.

 

근데 스포티파이 데이터는 음원의 요소들이 평균적으로 추출되어 있는 음원 분석 데이터였다. 예를 들어 곡의 긍정적인 정도, 악기로 채워진 정도, 템포 등등이다. 이런 raw하고 rough 한 데이터로 음악을 분류할 수 있나? 아직도 모르겠다..!

 

게다가 장르라는 것은 얼마나 많은가, 같은 곡을 추천할 때 장르를 고려하지 않을 수 있겠는가?

나는 발라드를 별로 안좋아하는 사람으로서, 힙합 틀었는데 혹은 rnb 틀었는데 발라드 나오면 그 앱 안쓴다.

 

아무튼 프로젝트가 시작되고 차갑던 우리 조가 서서히 친해지면서 지금까지의 관계로 형성됐던 과정이 참으로 신기하다.

 

귀여운 사람들. 내가 최고령이더라.

글쎄, (나이) 그딴건 모르겠고, 똑똑한 사람, 차분한 사람, 사랑스러운 사람, 밝은 사람 정도로 생각된다.

플젝 끝날 때에야 나이를 공개했는데 나보고 또래인줄 알았다고 해줘서 기분 좋았다.

 

아무튼!

주제를 선정하고 전 조에서 의견을 자유롭게 말하지 못했던 내가 생각이 나서

이번 조에서만큼은 하고싶은 주장 다 하겠노라 생각하고 들어갔다.

 

그래서 첫날부터 아주 그냥 내 생각을 주저리 주저리 써넣었다.

프로젝트가 끝난 지금, 다시 첫 회의 때 노션에 정리했던 것을 보고

내가 주장했던 것 그대로 주제가 정해졌음을 깨달았다. 

사실 그때는 아무 반응 없었는데 ㅋㅋ

 

더보기



1. 선호하는 노래와 비슷한 곡에 대한 정의
2. year가 최신일수록 인기도 상승 > 젊은 유저가 많다? 나이든 사람도 최신곡 위주로 듣는다?



특성별 군집 → 군집별 중심점에 가장 가까운 음악으로 추천, 즉 ‘비슷한 음악’ 

추천 시 연도, 인기도 고려 (특성이 비슷하다고 갑자기 80년대 노래가 끼면 이상할듯..) 



선호 장르별 추천 시스템

템포가 빠른 음악은 아무래도 댄스곡과 같이 신나는 노래가 대부분
반면 템포가 느리면 발라드..
→ 템포뿐만 아니라 음량, 어쿠스틱 정도, 악기 정도, 감정적 긍정성, 박자 별 인기or평균점 노래를 추천? (우선 전처리가 먼저 일듯)

인기있는 노래는 굳이 추천을 하지 않더라도 인기차트나 많은 미디어를 통해 접하게 되기 때문에 인기차트나 검색을 통해 들을 확률이 높다고 생각 따라서 추천을 굳이...?



1. 컬럼 정리 필요 → 비슷한 컬럼들 ex) danceability , energy 등을 묶어서 하나의 지표로 만들기
2. 비슷한 점수가 나오는 순서대로 음악 추천하기 
3. 아무튼 곡의 특성을 파악하는게 제일 중요해요 ...

강하주 : 

사용자가 자신이 듣고싶은 음악을 입력하게 되면 해당 음악과 대부분의 특성에서 비슷한 군집에 해당하는 곡들을 추천해주는 시스템

사실 기존의 스포티파이 추천 메커니즘보다 더 잘 예측할 수는 없을 것 같아서
타사인 유튜브 뮤직처럼 한 곡 누르면 그거랑 같은 군집에 있는 음악들 쫙 뽑아서 추천해주는 메커니즘을 우리만의 방식으로 구현해보고자 한다
근거는 유튜브 뮤직의 성장세와 편의성

스포티파이 유저 데이터에 따르면 새로운 음악을 발굴하는 가장 큰 (20퍼센트) 방법이 추천시스템이기에 추천 시스템을 조금 더 유저 친화적으로 할 필요가 있다.

현재 스포티파이에선 ui 자체가 가수를 누르고 믹스가 나오고 그걸 다시 재생버튼을 눌러야 음악이 나오는 구조인데 유튜브 뮤직의 경우 그냥 듣고싶어할만한 음악이 나열되어 있고 그걸 누르자마자 음악이 재생되는 구조

또한 스포티파이는 ‘믹스’라는 이름으로 음악 추천 시스템을 최상단에 띄워놓기는 하지만, 아티스트별 믹스고 음악 추천 믹스가 아니기 때문에 특정 장르의 음악이 ‘특정’될 수는 없는 구조이다.

예를 들어 오늘은 이 가수 음악 듣고 싶어 가 스포티파이에서 밀고있는 셀링 포인트라면 유튜브뮤직은 오늘은 이 음악 듣고싶어인 셈 —> 하지만 

우리가 가지고 있는 데이터인 음악의 유사성을 강조하여 음악 추천 시스템을 만들기 위해서는 가수의 음악을 추천하기보단 특정 음악이 입력되었을 때 해당 음악과 유사한 특성들을 가진 곡들을 추출하여 추천해주는 시스템이 필요

 

뭐 이런 주장이 어렵다는 것은 절대 아니고, 항상 질문이 뭐였는지 그리고 어떠한 방향성을 가지고 이 문제에 접근하는지를 고민했기 때문이 아닐까. 전 조에서도 데이터 분석보다는 코딩에 집중하는 느낌이 있었어서 나는 도메인 지식과 액션 플랜을 위한 자료들을 모으는 데에 고군분투 했었다. 그리고 '발표'와 '회사'라는 내가 서있는 지점을 놓치지 않으려고 노력했다.

 

클러스터링, 중요하다. 이번 주제니까. 근데 우리가 무슨 기법을 쓰느냐가 중요하기보단 왜 그걸 쓰느냐가 중요하다. 그래서 내가 강의를 잘 못듣나보다. 왜 써야하는지가 납득이 안가면 잘 안와닿는다. 개념 dumping은 자꾸 학습을 나중으로 미뤄두게 된다.

 

나는 초반부터 우리가 어떤 방향성을 가져야하는지, 액션플랜으로는 뭘 제시할지를 생각했던 것 같다. 이게 데이터 드리븐이냐? 하면 그건 또 아닌 것 같다. 처음 주장했던 것이 데이터를 확인하고서도 그대로 됐다는 것은 내가 똑똑하거나 억지를 부렸거나 둘 중 하나 혹은 그 사이 어딘가일 뿐이니. 그래서 뿌듯하면서도 내가 옳았다고는 생각지 않는다 ㅎㅎ

 

그 다음부터는 데이터를 살펴보고 전처리를 했다.

전처리 과정에서 지금 생각해보면 많은 훼방을 놓았던 것 같다, 내가. spotify의 막대한 음원 보유라는 장점을 유지하기 위해서 웬만한 데이터를 이상치라고 생각되어도 버리지 말자는 의견을 냈었다. 조원들은 탐탁치않아 하면서도 내 의견을 어느정도 반영해줬던 것 같다.

근데 지금 생각해보면 전처리 했어야 한다. ㅋㅋ 아 물론 계층적 군집화가 아닌 kmeans나 dbscan을 사용하게 되면서 다시 필요 없어지긴 했지만 말이다.

 

아무튼 그때 왜 그런 주장을 했냐하면, 클러스터링이랑 유사곡 추출이랑은 별개이기 때문이다. 우리가 최종적으로 진행한 프로젝트에서는 군집 내에서 유사곡 추출이라는 조건이 붙었기에 연결점이 생겨 주제와 이어지는 액션플랜이 됐지만, 클러스터링을 하지 않아도 유사곡을 추천하는 것은 충분히 가능하기 때문이다. Nearest Neighbor 라는 개념을 활용할 테니까. 거리만 구하면 되니까.

 

그래서 내가 계속 괴리감이 들었던 것 같다. 우리가 공부하고 있는 개념이 어려운 게 아니고(그리고 어차피 지피티가 대부분 해주니까) 현재 하고 있는 작업의 목적성이 뚜렷하게 느껴지지가 않았다. 그래서 멘붕 온다고 했는데 ㅋㅋ 조원들이 쉬시라고 해서 너무 귀여웠다. 여기에 소심하게나마 적어보지만 그런 문제가 아니었어요~ ㅋㅋㅋㅋㅋㅋㅋ

 

피피티로 빠지게 되었을 때, 그때도 너무 웃겼다. 내가 피피티로 빠지겠다고 한 건 그저 안해본 걸 해보고자 함이었다. 사실 발표도 마찬가진데 발표는 아직 무섭다. 근데 ㅋㅋ 조원이 "피피티 맡으셔서 얼굴 환해지셨는데요? 피피티도 열심히 하셔야돼요! 오타 나면 화낼거예요!" 이래서 ㅋㅋㅋㅋ 어우 내 이미지가 말이 아니구나 싶었다. 사실 나는 회고에도 수차례 적었지만 프로젝트 때 비로소 빛을 발하기 때문에... 그 전 강의 과정 때의 나의 모습을 아는 사람들은 당연히 내가 열심히 안한다고 생각할 걸 알고있다.

 

음원 분석 데이터를 살펴보면 일단 이렇게 되어있다.

 

대부분의 데이터가 0 - 1 인 것을 확인할 수 있다. 이는 즉 minmax scaling이 이미 되어있다고 볼 수 있다.