안녕하세요, 그리고 오후 안녕하십니까. 저는 JMP Discovery Summit에서 "감정 및 텍스트 분석을 활용한 21세기 음악 트렌드 분석" 연구 프로젝트를 발표하기 위해 이 자리에 왔습니다. 저는 스리찬드리카 가데이고, 연구 파트너인 딜라니 캐럴과 함께 이 자리에 있습니다. 저희는 오클라호마 주립대학교에서 비즈니스 분석 및 데이터 과학 과목을 수강하는 대학원생입니다.
이 프로젝트에 대한 개요입니다. 이 프로젝트는 오클라호마 주립대학교 대학원 과정의 일환으로 진행되었습니다. 이 프로젝트의 목표는 가사의 감정 및 텍스트 특징을 분석하여 시간 경과에 따른 음악 트렌드의 변화를 파악하고, 어떤 특징이 노래의 상업적 성공에 영향을 미치는지 확인하는 것입니다. 이 프로젝트에서는 JMP Pro 18 학생용 버전을 사용하여 프로젝트를 완료했습니다. 워크플로는 일반적인 워크플로를 따라 데이터를 전처리하여 분석에 적합하도록 준비했습니다. 기본적으로 몇 개의 열을 정리하고 대치 작업을 수행했는데, 곧 자세히 설명하겠습니다. 그런 다음 가사 분석으로 이동하여 감정 및 텍스트 분석을 수행하고, EDA로 넘어가 이러한 특징을 분석하여 변화와 트렌드를 파악합니다. 마지막으로 차트 인기도 및 지속 기간과 같은 상업적 성공 요인을 예측하는 몇 가지 예측 모델을 구축합니다. 마지막으로 검증 작업을 진행합니다.
이 데이터에 대한 간략한 개요입니다. 저희는 Kaggle에서 데이터 세트를 확보했으며, 미국 음악 시장에서 성공한 곡들을 보여주는 업계 표준 차트인 Billboard Hot 100 차트를 분석하고 있습니다. 저희는 세 가지 데이터 세트를 사용하는데, 주로 Billboard Weekly Chart 데이터 세트, Spotify 오디오 기능, 그리고 2020년부터 2022년까지 Billboard Hot 100 곡들의 가사 데이터 세트입니다. 이 세 가지 데이터 세트를 병합하여 변화와 트렌드를 분석하고 파악했습니다. 이는 가장 인기 있는 곡들에 어떤 음악적 트렌드가 존재했는지 파악하는 저희의 핵심입니다.
데이터 전처리에서는 Python을 사용하여 텍스트 열, 노래, 아티스트 이름 몇 개를 정리하여 모두 동질화했습니다. 이를 통해 데이터 세트를 더 쉽게 병합할 수 있었습니다. 그런 다음 누락된 피처 몇 개를 식별했는데, JMP를 사용하여 평균 대체법을 사용하여 누락된 레코드를 대체했습니다. 마지막으로 차트의 총 주 수, 피크 위치, 상위 10위 등 몇 가지 변수에 대한 피처 엔지니어링을 수행했습니다. 이 작업의 내용은 곧 살펴보겠습니다. 이것이 데이터 전처리였습니다.
이제 가사 분석으로 시작합니다. 이 단계에서는 기본적으로 2000년에서 2022년 사이 감정이나 가사의 복잡성이 시간이 지남에 따라 어떻게 변했는지와 같은 몇 가지 질문에 답하려고 합니다. 또는 장르나 장르의 추세가 수년에 걸쳐 어떻게 발생했는지와 같은 질문을 할 것입니다. 이 분석을 위해 JMP 내의 Python 스크립트를 사용하여 감정 분석과 텍스트 분석을 수행했습니다. 감정 분석에서 Vader를 사용했는데, 기본적으로... 긍정적 및 부정적 감정 점수를 계산합니다. 사전, 규칙 기반 감정 분석 도구로 텍스트의 전반적인 감정을 식별하는 데 도움이 됩니다. 이를 사용하여 가사의 감정을 식별합니다. Vader 긍정적, Vader 부정적, Vader 중립적, Vader 복합적의 네 가지 특징을 만들었습니다.
다음 단계는 텍스트 분석입니다. 여기서는 TTR, Hapax Legomena, Lexical Density, Lyrical Complexity라는 네 가지 특징을 만들었습니다. TTR은 전체 단어 중 고유 단어의 수를 나타냅니다. Hapax는 텍스트 콘텐츠에 한 번만 등장하는 단어의 수를 확인하는 기준입니다. Lexical Density는 명사, 동사, 형용사 등 텍스트 콘텐츠와 콘텐츠의 비율을 나타냅니다. 이는 가사의 복잡성을 높이는 데 도움이 되지 않는 매력적인 문구나 불필요한 문구를 걸러냅니다. 가사의 복잡성은 상위 세 가지의 합입니다. Vader 복합어 역시 마찬가지로 전체적인 감정을 긍정적에서 부정적까지 보여줍니다. 이렇게 여덟 가지 특징을 만들었습니다. JMP를 사용하여 이러한 특징들이 시간이 지남에 따라 어떻게 변화하는지 살펴보겠습니다.
먼저, 베이더의 특징을 살펴보면, 베이더에 대한 긍정적인 측면을 확인할 수 있습니다. 이는 비교적 동일하게 유지되었습니다. 2005년과 2015년 사이에는 약간의 변동이 있었지만, 2022년 말까지는 2000년과 거의 동일한 수준을 유지했습니다. 베이더 중립(Vader Neutral)에 대해 알아보겠습니다. 이 베이더 중립은 가사에 중립적인 내용이 얼마나 포함되어 있는지를 나타냅니다. 2000년에서 2020년 사이에 약간 감소했다가 2021년에 약간 증가했지만, 가사의 전반적인 중립적 요소는 약간 감소했습니다. 베이더 부정(Vader Negative)에 대해서는, 이 수치가 확실히 증가했습니다. 2000년에서 2020년 사이에 크게 증가했다가 감소했지만, 전반적인 베이더 부정(Vader Negative) 요소는 증가했습니다. 베이더 복합(Vader Compound)은 기본적으로 가사의 전반적인 정서이며, 이는 확실히 약간 감소한 것을 볼 수 있습니다.
2006년과 2015년 사이에 다시 한번 변동했지만 2022년 말까지 약간 감소했습니다. 수년에 걸쳐 텍스트 기능에 관해서도 TTR은 2020년 이후와 2020년경에 확실히 상승했습니다. Hapax는 TTR과 매우 유사한 추세를 따르는 것을 볼 수 있습니다. 이는 주로 유사한 어휘 다양성을 측정하기 때문입니다. Hapax는 TTR에 거의 정비례하므로 매우 유사한 추세를 따릅니다. 내용 단어인 어휘 밀도는 2000년에서 2022년 사이에 확실히 증가했는데, 이는 가사에 더 많은 어휘가 사용되었고 더 다양해졌다는 것을 의미합니다. 상위 3개를 합친 가사 복잡성 점수는 2020년 말까지 확실히 증가했습니다. 이제 장르 전반에 걸친 Vader 화합물의 평균을 살펴보겠습니다. 이는 다양한 장르에 걸친 전반적인 감정입니다. 성인 표준 또는 코미디 또는 K-pop 또는 소울 및 워십 장르가 해당 장르 테마와 일치하는 매우 높은 감정을 가지고 있음을 알 수 있습니다. 베이더 요소가 가장 적게 들어간 곡은 랩, 펑크, 라틴입니다. 베이더 요소가 가장 적게 들어간 곡들이죠. 이를 통해 장르가 가사의 전반적인 정서에 영향을 미친다는 것을 알 수 있습니다. 펑크나 록 같은 장르는 부정적인 성격이 강하기 때문에 전반적인 정서가 훨씬 약할 것입니다.
다음으로 넘어가겠습니다. 여기서 우리는 장르별 베이더 부정적 및 베이더 긍정적 평균을 시각화하려고 합니다. 시각적으로, 우리는 모든 장르에서 베이더 긍정적이 베이더 부정적보다 높다는 것을 즉시 알 수 있습니다. 이는 장르가 매우 부정적이지만 노래에 긍정적인 요소, 긍정적인 가사도 있다는 것을 의미합니다. 펑크와 랩은 부정적 요소가 가장 높은 반면, 아동 음악이나 성인 표준 음악은 부정적인 음악이 가장 적다는 것을 즉시 알 수 있습니다. 이는 펑크와 랩이 더... 분노, 반항, 투쟁과 관련된 가사가 많기 때문에 아동 음악에 비해 본질적으로 더 부정적이며, 아동 음악은 긍정적이기보다는 적습니다. 이것은 연도와 장르에 따라 음악 트렌드가 어떻게 변화했는지 알아보기 위해 만든 모든 피처의 평균을 보여주는 요약 표일 뿐입니다.
이를 통해 히트맵을 만들었는데, 크기는 곡 수에 따라 결정됩니다. 빌보드 탑 100 차트에 오른 곡 수가 많기 때문에 팝 장르가 상당히 지배적인 장르임을 바로 알 수 있습니다. 전반적으로 긍정적인 흐름을 보이고 있다고 생각합니다. 모든 연도에 걸쳐 높은 베이더 복합 지수를 보이며, 이는 빌보드 핫 100 차트에 오르는 도달률(TTR)도 더 높을 것으로 예상됩니다. 랩은 약간의 변동이 있음을 알 수 있습니다. 2020년 말에는 부정적인 성향이 더 강해졌고, 힙합이나 컨트리 음악 역시 꾸준히 긍정적인 흐름을 보이고 있습니다. 이러한 정보를 통해 얻을 수 있는 몇 가지 통찰력을 제시합니다. 이는 장르와 연도별 TTR을 확인하는 또 다른 히트맵입니다. 이 TTR을 보면 팝, 랩, RNB, 힙합, 컨트리 음악 모두 TTR이 상당히 높고 2000년부터 2022년까지 꾸준히 유지되고 있습니다. 워십, 성인용 스탠다드, 아동용 음악은 기본적으로 TTR이 가장 낮고 변동도 없습니다. 이는 가사의 복잡성이 매우 낮거나 가사가 매우 단순하다는 것을 보여주는데, 이는 깊은 감정을 표현하려는 의도가 없기 때문입니다. 이는 이러한 맥락에서 얻을 수 있는 통찰력입니다.
우리가 답하려는 또 다른 질문은 2010년 이후와 그 이전에 문화적 변화를 바탕으로 음악에도 상당한 변화가 있었는가 하는 것입니다.2010년 이전과 이후.이를 위해 2010년 이전과 이후의 모든 연도와 노래를 그룹화하는 별도의 열을 만들었고, 이를 ANOVA 분석에 사용하고 있습니다.이 단방향 분석에서 2010년 이전과 이후의 어휘 밀도와 비교하여 어휘 밀도에 큰 변화나 변화가 있는지 확인했습니다.이를 위해 유의미성 값이 0.001 미만인 것을 볼 수 있는데, 이는 상당한 변화가 있었고 초기 시각화에서 보았던 어휘 밀도가 2020년 말까지 확실히 증가했음을 의미합니다.이러한 변화는 본질적으로 중요했으며 가사의 어휘 밀도는 2010년 이전에는 이후에 비해 더 단순했습니다. 우리는 2010년 전후에 전반적인 감정에 큰 변화가 있었는지 확인하기 위해 Vader 화합물로 동일한 분석을 시도했습니다. P 값은 0.09였습니다. 이는 변동이 있었음에도 불구하고 전반적인 감정에 큰 변화가 없었음을 의미하므로 전후와 비교했을 때 큰 변화가 없다는 것을 의미합니다.
동일한 분석을 TTR로 수행하여 p-값이 0.033인 주요 변화가 있는지 확인했습니다. 다시 한번 말씀드리지만, TTR도 2010년 이전과 이후의 TTR 사이에 큰 차이가 없다고 말하고 싶습니다. 그러나 세 가지 특징이 함께 유의미한 변화를 보였는지도 확인했습니다. 이를 위해 MANOVA 분석을 사용했습니다. 여기서 Vader 복합어는 2010년 이후 실제로 감소했으며, 이는 전반적인 정서가 감소하고 어휘 밀도가 증가한 반면 TTR은 거의 동일하게 유지되었음을 알 수 있습니다. 변화가 있었다는 것을 시각적으로 볼 수 있지만, 결합된 정의된 세트로 함께 확인해야 한다면 유의미한 변화가 있었을까요? 이를 위해 테스트했을 때 사전 및 사후에서 F-검정이 0.001 미만인 것을 확인했습니다. 즉, 이 세 가지가 함께 2010년 이전과 이후에 변화했다는 것을 의미합니다. 이것으로 첫 번째 단계인 가사 분석이 마무리됩니다. 전반적인 결과는 장르와 전반적인 감정이 함께 작용하고, 전반적인 감정은 장르에 따라 증가하거나 감소한다는 것입니다. 또한, 2020년 말에는 가사의 복잡성이 증가한 것을 관찰했습니다.
이제 프로젝트의 나머지 절반을 모델 구축을 담당할 딜라니에게 넘겨드리겠습니다.
Srichandrika, 가사 분석 데모에 감사드립니다. 이제 예측 모델에서 텍스트 분석을 어떻게 활용할 수 있는지 살펴보겠습니다. 이 특정 분석에는 복잡한 데이터를 처리할 수 있는 부트스트랩 포레스트 모델을 사용했습니다. 감정, 가사의 복잡성, 장르, 연도와 같은 음악적 특징은 선형 회귀와 같은 간단한 모델로는 포착할 수 없는 비선형적인 방식으로 상호 작용할 수 있습니다. JMP는 변수 중요도 순위를 생성하여 인기에 영향을 미치거나 수명을 재조정하는 데 가장 큰 영향을 미치는 요소를 파악하는 데 도움을 줍니다. 또한 부트스트랩 포레스트 모델은 여러 트리의 결과를 결합하여 과적합을 방지합니다. 바로 본론으로 들어가서 라이브 데모를 시작하겠습니다.
주간 빌보드 데이터와 음악 오디오 기능 외에도 텍스트 감성과 Lyric 데이터 분석을 나타내는 변수들이 있습니다. 제가 작업 중인 이 데이터 세트에는 주간 빌보드 차트 데이터가 포함되어 있습니다. 레코드 수는 꽤 많은데, 약 13만 개가 넘습니다.
먼저, 데이터 내의 추세와 패턴을 살펴보기 위해 탐색적 데이터 분석을 시작하겠습니다. 먼저 변수들의 분포를 확인하여 데이터가 어디에 있는지 살펴보겠습니다. "분석"을 클릭하고 "분포"를 선택하면 됩니다. 모든 변수가 이미 여기에 있지만, "확인"을 클릭하고 훨씬 보기 쉬운 스택 형식을 확인하세요. 그러면 변수들의 분포를 볼 수 있습니다. 보시다시피, 여기 장르가 있습니다. 약 25개의 장르가 있고, 개수순으로 정렬할 수도 있습니다. 팝은 컨트리와 랩을 선호하는 다른 장르들 중에서 단연 가장 인기가 많습니다. 다음으로, 그래프 빌더를 사용하여 시계열 시각화를 만들어 보겠습니다. 시간에 따른 장르 개수의 변화를 살펴보겠습니다. 그래프 빌더에서 만들 수도 있지만, 저는 이미 모든 항목을 그래프 빌더에 입력했습니다. X축에 week_ID를 입력하고, 장르별로 색상을 지정한 다음, "장르"와 "오버레이"를 입력하여 모든 항목을 동시에 볼 수 있도록 하겠습니다. 그럼 확인을 눌러볼까요. 여러 장르가 있지만, 이건 지난 몇 년간의 기록입니다. 이건 팝이고, 이건 랩입니다. 2015년 이후로 팝과 랩이 차트에서 가장 인기 있는 자리를 두고 경쟁하는 걸 볼 수 있죠.
EDA에서 저는 모든 수치 변수에 대한 상관관계 행렬을 작성하여 서로 높은 상관관계를 가질 수 있는 예측 변수가 있는지 확인하는 것을 좋아합니다. 다변량 도구와 다변량 방법을 사용하여 이 행렬을 만들 수 있습니다. 분석을 다시 실행하고 모든 수치 변수를 입력한 후 "실행" 버튼을 클릭합니다. 이 행렬은 높은 상관관계를 강조합니다. 여기서 에너지와 소리 크기 사이에 높은 상관관계가 있음을 알 수 있습니다. 다중공선성을 줄이기 위해 모델에 이 중 하나만 포함해야 합니다. 여러 변수 간의 관계를 확인하기 위해 제가 자주 사용하는 통계적 검정은 일원 분산 분석(one-way ANOVA) 검정입니다.
앞서 데이터 세트에 약 25개의 주요 장르가 있다는 것을 확인했습니다. 각 장르의 평균 간에 유의미한 차이가 있는지 확인하고 싶습니다. 먼저 장르 간 수명이나 차트에 표시된 총 주 수가 어떻게 다른지 확인하는 것부터 시작했습니다. Y x X 적합선을 열고, 장르를 X에 입력한 다음 차트에 표시된 총 주 수를 계산하면 됩니다. 하지만 이건 아닙니다. 차트에 표시된 총 주 수를 입력하고 확인을 클릭한 다음, 평균 분산 분석을 수행하고, 평균을 비교한 다음 각 쌍을 계산합니다. 여기 아래에서 P 값이 유의미함을 보여줍니다.
영어: Connecting Letters 보고서로 돌아가면, 이는 서로 다른 그룹이나 장르가 어떻게 서로 다른지 보여줍니다. 여기서 우리는 가장 높은 차트 장수 평균을 가지고 있고 통계적으로 다른 모든 장르와 다르다는 것을 알 수 있습니다. 인디 팝, 팝, 포스트 그런지와 같은 장르에도 마찬가지입니다. 이들은 다른 어떤 장르와도 문자를 공유하지 않으므로 통계적으로 더 큽니다. 장르별 피크 위치를 보는 것과 같은 프로세스를 완료할 수 있지만, Y에 대한 피크 위치 변수를 사용하는 것을 제외하고는 같은 방식으로 구축할 수 있습니다. 연결 문자로 내려가면, 우리는 볼 수 있거나 더 작은 평균을 찾을 것입니다. 이는 해당 장르가 차트에서 더 높은 피크를 나타낸다는 것을 보여줍니다. 흥미롭게도, K-pop은 평균이 가장 작고 차트에서 더 높은 순위를 차지할 가능성이 더 높다는 것을 보여줍니다. 또한 장수 ANOVA 테스트를 보면 K-pop이 목록에서 그다지 높지 않다는 점도 흥미롭습니다. 이는 K팝이 초기에는 바이러스성을 띠고 정점에 도달할 수 있는 강력한 능력을 가지고 있지만, 지속력이 그다지 강하지 않아 차트 순위가 빠르게 떨어진다는 것을 의미합니다.
영어: 또한 Srichandrika가 텍스트 및 감정 변수로 한 것처럼 ANOVA 테스트를 완료하여 장르와 다른 그룹 간의 차이점을 확인할 수 있습니다. EDA가 완료되면 예측 모델링으로 넘어갈 준비가 되었습니다. 하지만 먼저 각 응답 변수에 대한 검증 열을 만들어야 합니다. JMP Pro를 사용하면 쉽게 할 수 있습니다. 예측 모델링으로 이동한 다음 검증 열로 내려갈 수 있습니다. 각각에 대해 하나씩 만들 것입니다. 수명에 대한 모델과 노래가 상위 10위에 들 수 있는지 여부를 예측하는 분류 모델, 두 가지 모델을 구축할 것입니다. 응답 중 하나인 차트의 총 주를 기준으로 계층화할 것입니다. 60, 20, 20 분할을 수행합니다. 여러 열을 만들기 때문에 이름을 지정하여 어떤 열이 무엇인지 알 수 있도록 합니다. 1, 2, 3, 4, 5의 난수 시드를 사용하면 됩니다. 그러면 생성됩니다.
상위 10개에 대한 검증 열은 이미 만들었으므로 다시 살펴보지 않겠습니다. 이제 검증 열이 있으므로 예측 모델을 구축할 수 있습니다. JMP에는 쉽게 사용할 수 있는 부트스트랩 포레스트 옵션이 있습니다. 분석을 다시 시작하겠습니다. Y에 응답 변수를 넣은 다음 모든 예측 변수를 넣고 만든 검증 열에 입력했는지 확인합니다. 프로그램의 실행 시간을 줄이기 위해 여러 그룹이 있는 일부 범주형 변수를 모델에서 제외하기로 했습니다. 예를 들어, 특정 연주자가 차트 수명에 어떤 영향을 미치는지 보고 싶지만 효율적인 모델을 만들기에는 데이터 세트에 너무 많은 변수가 있습니다. 변수를 입력으로 포함할 때 다중공선성으로 인해 포함하지 않아야 하는 변수도 염두에 두고 있습니다. 여기서는 이를 방지하기 위해 소리 대신 에너지를 포함했습니다. 검증이 완료되었는지 확인하세요. 확인을 클릭합니다.
Bootstrap forest 사양 상자가 팝업되어 모델에 있는 트리의 수와 각 분할에서 무작위로 고려되는 예측 변수의 수를 묻습니다.트리의 수, 트리의 깊이, 각 트리가 보는 데이터 양, 분할의 무작위성을 지정할 수 있습니다.이러한 설정을 조정하면 정확도, 실행 시간, 과적합 간의 균형에 영향을 줄 수 있습니다.하지만 시작하기 위해 각 설정에 대해 제안된 값을 사용하고 확인을 눌러 결과를 확인하겠습니다.확인을 눌렀고 JMP가 백그라운드에서 여러 개의 결정 트리를 구축하기 때문에 이 단계는 일반적으로 몇 초가 걸립니다.약간만 주겠습니다.이것은 또한 꽤 큰 데이터 세트이므로 실행 시간에도 영향을 미칩니다.자, 시작해 보겠습니다.여기서 r²은 0.89로 이미 꽤 좋습니다.결과를 개선할 수 있다고 생각되면 다른 사양으로 모델을 다시 실행하여 어디에 있는지 확인할 수 있습니다. 하지만 여기서는 빨간색 삼각형을 클릭하고 열 기여도를 입력하면 변수들이 차트 지속 시간에 어떤 영향을 미치는지 확인할 수 있습니다. 여기서는 최고 순위가 가장 큰 영향을 미치는 변수인데, 일반적으로 최고 순위에 오른 곡일수록 차트에서 더 오래 지속되는 경향이 있기 때문에 이는 당연한 결과입니다.
이제 두 번째 모델에 대해서도 같은 작업을 해 보겠습니다. 어디에 있을까요? Y 변수로 이진 변수를 사용하고, 해당 응답 변수에 대한 검증을 수행해야 합니다. 여기서도 피크 위치는 제외했습니다. 해당 변수를 사용하여 상위 10개 변수를 만들었기 때문입니다. 다시 한번 말씀드리지만, 이 부분은 그대로 두고 결과를 살펴보겠습니다. 분류 모델 출력은 다양한 검증 날짜 또는 열에 대한 상관관계 행렬을 제공합니다. 또한 여기에서 이 모델의 ROC와 리프트 곡선을 확인하고, 모델 성능과 클래스 간 구분 정도를 평가할 수 있습니다. 0.98은 이러한 측면에서 매우 좋은 결과입니다. 이제 프로젝트에서 사용한 JMP 워크플로우에 대한 설명을 마칩니다. 실제로 이 모델링은 아티스트, 프로듀서 또는 음반사가 노래의 어떤 특징이 성공에 가장 큰 영향을 미치는지 이해하고 업계 동향을 예측하는 데 도움이 될 수 있습니다. 이 프로젝트는 예측 모델링 및 크리에이티브 분야에서 JMP를 텍스트 및 감정 데이터에 어떻게 적용할 수 있는지 보여주는 한 가지 예일 뿐입니다.
밴드 프로그램 내내 멘토링과 지도를 아끼지 않으신 차크라보티 박사님과 맥고 박사님께 특별히 감사드립니다. 두 분의 격려와 통찰력은 저희의 경험을 형성하고 기술적으로나 전문적으로 성장하는 데 큰 도움이 되었습니다. 두 분이 주신 시간과 지원에 감사드리며, 두 분의 지도 아래 배울 수 있는 기회를 주셔서 진심으로 감사드립니다. 들어주신 모든 분들께 감사드립니다. 이것으로 발표를 마칩니다.