본문 바로가기

문돌이 존버/코딩연습

AI가 예측하는 미스트롯2 진선미는 누구?

반응형

이번에 소요 팀원들과 간단하게 재밌는 프로젝트를 진행 중인데요. 바로 트로트 경연 프로그램에 참여한 가수들의 "진선미"를 예측하는 것입니다. 요즘 트로트 열풍이 불고 남녀노소 누구나 즐기는 프로그램에서 AI가 진선미를 예측해보면 좀 더 흥미를 주지 않을까 생각했습니다. 

<출처: 한국경제>

지금까지 트로트 경연 프로그램은 약 8개가 있는 것으로 알고 있으며, 목록은 아래와 같습니다. 

프로그램명 방송사
미스터트롯 TV조선
미스트롯1 TV조선
미스트롯2 TV조선
보이스트롯 MBN
트롯신이 떳다 SBS
트로트의 민족 MBC
트롯 전국체전 KBS
트롯파이터 MBN

이 중 미스트롯2트롯파이터를 제외한 나머지 프로그램은 이미 종료되었습니다. 그리고 미스트롯2는 바로 내일을 마지막으로 진선미가 발표된답니다. 사실 저희의 프로젝트는 아직 갈 길이 먼데, 미스트롯2가 내일 끝나기 때문에 아쉬운대로 현재 데이터만으로 예측을 해봤습니다. AI가 예측한 진선미가 누군지 빨리 알고 싶어하시는 분들을 위해 바로 공개하자면...!

 

"홍지윤 / 김태연 / 김다현"

입니다. 누가 진이고, 선이고, 미인지까지 예측을 할 수 있었다면 좋았을텐데, 다중 분류를 하기에는 데이터가 한없이 모잘랐습니다. 대신 미스트롯2에서 부른 경연곡을 기준으로 봤을 때, 김태연 -> 홍지윤 -> 김다연 순으로 진선미 후보를 강력하게 예측했기 때문에 굳이 정한다면 

"진: 김태연 / 선: 홍지윤 / 미: 김다현"

이 되겠습니다. 

데이터는 각 경연 프로그램의 탑 8의 경연곡만을 수집했고, 진선미를 1로, 나머지 참가자들을 0으로 하는 이중분류 모델을 구축했습니다. 분류모델은 pycaret이란 AutoML 라이브러리를 통해 최적의 모델을 선택했는데, 바로 GBC(gradient boosting classifier)입니다.

이후 Gridsearch를 통해 최적의 파라미터를 찾았고, 아래처럼 최종적으로 데이터를 학습시켰습니다. 

from sklearn.ensemble import GradientBoostingClassifier
gbc_clf = GradientBoostingClassifier(n_estimators=50, learning_rate=0.01, max_features='log2',
      criterion='mae', max_depth=6, subsample=0.7, random_state=0)
gbc_clf.fit(X_train, train_target)

그리고는 미스트롯2 데이터를 입력하고 1이 될(진선미) 확률을 비교했고, 가장 높은 확률의 3명을 뽑았습니다.

pre_prob = gbc_clf.predict_proba(X_test)[:, 1]

솔직하게 말씀드리면 validation 정확도가 66~70% 정도밖에 되지 않기 때문에 정확도 측면에서만 본다면 잘 만들어지지 않은 모델이라 할 수 있겠습니다. 경연 프로그램에서 순위를 예측하는 것이 상상 이상으로 다양한 변수가 고려되어야 하고, 주관적인 판단도 많이 들어가야 하더라구요. 

하지만 서두에서 말씀드렸듯이, 단지 재미를 위한 프로젝트이며 앞으로 데이터를 계속 수집하고 변수를 잘 고려한다면 정확도가 향상될 것이라 믿습니다. 아쉽게도 미스트롯2는 내일 종영되지만, 아직 트롯파이터가 남아있고, 앞으로 트로트 경연 프로그램은 계속 생길 것이라 생각되기 때문에 해당 프로젝트를 이어가려고 합니다. 

<출처: iMBC 연예>

그리고 빠른 시일 내에 트로트 관련 웹사이트도 배포하려고 합니다. 배포되면 추가로 사이트 url을 남기도록 하겠습니다^^

728x90
반응형