본문 바로가기
Project/Machine Learning Project

01. 유튜브 쇼츠 조회수 예측 - '뷰티 광고 콘텐츠' 중심으로

by 망고 ෆ 2024. 9. 22.

 

0. 주제 선정 배경

유튜브 쇼츠 중 뷰티 광고 영상에 대해 조회수를 예측해보는 프로젝트를 진행하였다. 

 

뷰티 영상일까? 특히 광고를 타겟으로 한 이유는?

이 프로젝트는 나의 관심사와 호기심에서 시작되었다.

평소 뷰티 제품을 구매하기 전 실제 후기를 알기 위해 관련 유튜브 영상을 모두 찾아보는 습관이 있었는데, 그 중 광고가 붙은 영상은 사실 솔직하지 못한 후기일 것이라고 판단하여 제외하고 보는 경향이 있었다.

나와 같은 시청자가 많을 것 같다는 생각이 들어, 유튜버의 입장이나 뷰티 광고를 제안하는 기업의 입장에서는 어떤 방식으로 영상을 제작해야 시청자를 끌어모을 수 있을지 문득 궁금하였고, 그래서 이 프로젝트를 진행하게 되었다.

 

쇼츠만?

1분 내외의 시간을 통해 짧고 강렬하게 다양한 주제를 접할 수 있는 숏폼 영상들이 많아짐에 따라 처음엔 젊은 세대들을 중심으로 유행하던 숏폼 영상이 이젠 세대를 불문하고 많은 사람들이 시청하고 있다.

유튜브 시청자의 70% 이상이 숏츠를 본다는 설문 (출처 : 콜랩아시아)을 통해서도 확인할 수 있지만, 지하철만 타도 출퇴근길에 많은 사람들이 숏폼 영상을 시청한다는 점에서 숏폼의 유행을 몸소 체감할 수 있다.

뷰티 산업에서 숏폼 마케팅은 소비자의 구매 의도를 개선하는데 기여한다는 연구와 다양한 숏폼 플랫폼 중 유튜브 쇼츠가 74.8%로 1위를 기록했다는 점에서 유튜브 쇼츠로 선정하게 되었다. (출처 :  opensurvey) 

 

조회수 예측으로 했을까?

광고의 성공 여부를 판단할 수 있는 지표는 정말 다양하다.

   1) 조회수

   2) 반응률 : (좋아요 수 + 댓글 수) / 총조회수

   3) 구매 전환율 : 클릭 후 실제 구매로 이어진 비율

   4) 시청 완료율 : 광고 영상을 끝까지 시청한 비율

   5) CTR : 고객에서 노출된 광고 횟수 대비 클릭한 횟수의 비율 (광고 클릭 횟수 / 총 노출 횟수)

   6) ROI : 광고 투자 비용 대비 얻은 수익

등등 이와 같이 평가할 수 있는 지표는 정말 다양하다. 

사실 광고주의 입장에서 가장 중요한 것은 이 영상을 통해 실제 구매가 얼마나 이루어졌는지, 혹은 적어도 브랜드 인지도 및 인식이 얼마나 개선되었는지 일 것이라고 생각한다.

하지만 이와 같은 지표는 내가 직접 확인할 수 없기에, 유튜브 영상 성공 여부를 판단하는 가장 직관적인 지표인 조회수를 종속변수로 선정하였다.

 

 


 

 

1. 데이터 수집

데이터 수집 파트에서 내가 맡은 부분은 "시각 - 텍스트 관련 데이터" 이므로 [2] 시각 데이터 부분을 좀 더 자세히 작성하도록 하겠다.

 

[1] 쇼츠 영상 및 메타 데이터 수집

업로드 한 쇼츠 영상의 80% 이상이 뷰티 제품에 관한 리뷰, 메이크업 튜토리얼 설명 등 '전문성을 가진 뷰티 유튜버' 라고 판단 된 국내 뷰티 유튜버 192명을 선정하고 고유 채널 아이디를 수집하였다.

 

 

굳이 뷰티 유튜버를 직접 선정한 이유는?

초기에는 "국내", "뷰티", "광고", "쇼츠" 라는 4가지 조건을 모두 만족시키기 위해 YouTube Data API를 통해 다음과 같이 설정하였다.

1) "국내" 임을 한정한 방법

   시도 1) regionCode = 'KR' 로 설정

               이 경우, 한국 지역에서 업로드 한 모든 영상이 포함된다.

   시도 2) 한국의 정중앙의 위경도를 중심으로 반경 166km로 설정하여, 국내만 포함되도록 하였다.

 

2) "뷰티" 임을 한정한 방법

   YouTube Data API에서 topic을 "beauty"로 설정하여 유튜버가 영상 업로드 시 설정한 토픽이 "beauty"인 영상만으로 한정되도록 하였다. 

 

3) "광고" 임을 한정한 방법

    방법 1) YouTube Data API 파라미터 중 videoPaidProductPlacement를 true로 설정하여 유료 광고 영상만 추출하였다.

    방법 2) 영상의 제목, 설명, 태그에 유료 광고임을 명시한 경우도 유료 광고라고 판단하여 수집하였다.

    이 두 가지 방법을 통해 얻은 데이터에 대해 중복값을 제거하여 완성하였다.

 

4) "쇼츠" 임을 한정한 방법

  위의 방법을 통해 모든 영상을 수집한 후 영상의 길이가 60초 이내인 것만 추출하였다.
  추후, 직접 확인하여 60초 이내이지만 롱폼 형태인 영상은 제거하였다.

 

 

1, 2, 3, 4번의 필터를 모두 적용하여 실행한 결과 다음과 같은 "문제점"이 있었다.

 

문제 1) 한국에서 게시했지만 외국을 타겟으로 한 영상들이 존재하였으며, 이는 조회수가 매우 높고, 뷰티 제품을 광고로 하지 않는 경우가 많아 학습 목적에 적합하지 않았다.

문제 2) topic을 "beauty"로 설정하였지만, 이는 유튜버가 업로드 당시 유튜버 본인이 설정한 것으로, 영상들을 직접 확인해 본 결과 실제로는 beauty와 관련되지 않은 영상도 다수 존재하였다.

문제 3) YouTube Data API를 통해 한 번에 가져올 수 있는 영상은 50개로 제한되었고, 이는 nextPageToken을 이용하여 페이지네이션이 구현되어 있었다. 하지만, 실제론 한 페이지에서 50개도 가져오지 못한 경우도 많았으며, 추출된 데이터를 토대로 확인해 본 결과 nextPageToken 문제로 인해 누락된 영상들이 매우 많았다.
추가 문제) YouTube Data API를 이용하지 않고 Selenium을 통해 '유료 광고 포함' 배너가 포함된 영상들을 추출하려 하였지만 '유료 광고 포함' 배너가 떴다가 사라지면서 잘 인식되지 않는 문제가 발생하였다.

 

따라서, 이와 같은 문제들을 해결하기 위해 국내 뷰티 유튜버 192명을 직접 선정하게 되었고, 고유 채널 아이디를 통해 YouTube Data API를 이용하여 관련 뷰티 영상들을 수집하였다.

 

 

채널 아이디를 통한 메타데이터 수집 방법

수집한 채널 아이디를 토대로 YouTube Data API의 search, videos 메서드를 이용하여 선정한 유튜버의 60초 이하 영상 및 메타데이터를 수집하였다. 수집한 메타데이터는 다음과 같다.

영상 제목, 영상의 길이, 영상 게시일, 구독자 수, 조회수, 태그 개수, 유료 광고 포함 옵션 선택 유무, 채널 생성일

컬럼명 설명 데이터 타입 결측치 참고
subs 구독자 수 Int   데이터의 심한 좌편향 → 로그변환
bday 채널 생성일 DateTime   수집 시점까지 날짜 계산,
일단위 정수로 변경
publishedAt 영상 게시 이후 DateTime  
duration 영상의 길이 ISO8601   초단위로 변경
tag 태그 개수 Int O 결측치 0으로 변경
videoTitle 영상 제목 String O 길이로 변경, 결측치 0으로 변경
paidBadge 광고 표기 방식 String   공식표기(유료광고 포함 배너) : 1
간접표기 : 0
viewCount 영상 조회수 Int   데이터의 심한 좌편향 → 로그변환
gender 성별 Int   여성 : 1 남성 : 0

YouTube Data API에서 shorts 영상만 판별할 수 있는 메소드는 없었으므로 60초 이하 영상들로 수집하였다.

따라서, 60초 이하 영상이지만 롱폼 형태로 제작된 영상 11개는 직접 확인하여 제거하였다.

이후, 최종적으로 모든 영상을 직접 검토하여 학습 목적에 적합하지 않은 영상 180개를 추가 제거하여 최종적으로 2,186개의 뷰티 광고 쇼츠 영상 dataset을 구축하였다.

 

 

[2] 시각 데이터

영상 데이터이므로 시각 데이터로 활용할 수 있는 것은 다양하지만 이번 프로젝트에서는 썸네일로 선정하였다.

영상을 프레임 단위로 나눠 모든 이미지를 다 확인할 수도 있고, 조회수가 카운트되는 시점 (official한 시간은 공지되어 있지 않지만 대략 3~10초 내외) 까지의 이미지들을 이용할 수도 있으며 썸네일을 활용할 수도 있다.

하지만, 이 중에서 시각 데이터 자료로 썸네일을 선정하였던 이유는 다음과 같다.

 

1) 특정 유튜버의 채널에 직접 들어가 'Shorts' 카테고리에서 영상을 선택할 경우 썸네일을 통해 재생할 영상을 선정한다.

 

2) 숏츠 영상은 앞부분이 중요하다고 판단하였으므로, 영상을 프레임 단위로 분할한 후 앞부분에서 시청자의 매력을 끌만한 이미지를 선정하는 방식도 있었지만 앞부분 영상은 썸네일과 유사한 경우도 많았다.

3) 썸네일을 직접 확인해 본 결과, 썸네일이 영상의 전반적인 내용을 담고 있는 경우가 많았다.

 

4) 썸네일이 조회수에 영향을 미친다는 선행 연구를 토대로 시각 데이터 자료로 썸네일을 선정하였다.

 

뷰티 유튜버의 경우, 다른 카테고리에 비해 유튜버의 외모도 중요한 변수라고 판단하였으며 썸네일의 시각적 요소 중 색상, 텍스트 포함 여부, 얼굴 이미지 포함 여부가 조회수에 영향을 미친다는 선행연구를 토대로 다음과 같은 feature를 선정하였다.

유튜버의 외모 점수, 색상, 채도, 명도, 썸네일 내 텍스트 비율, 썸네일 내 텍스트 유무, 썸네일 내 텍스트의 길이, 썸네일 내 얼굴의 비율, 썸네일 내 얼굴의 수, 미소 여부

컬럼명 설명 데이터 타입 결측치 참고
prettyScale 유튜버의 외모 점수 Float   MinMaxScaler 정규화
Mean_H 색상 Float   CV2.cvtorColor를 통해 HSV 값으로 변환 후 MinMaxScaler 정규화
Mean_S 채도 Float  
Mean_V 명도 Float  
text_rate1 썸네일 내 텍스트 비율 Float O 결측치 0으로 변경 후
MinMaxScaler 정규화
text_present 썸네일 내 텍스트 유무 Float O 결측치 0으로 변경
minmax_text_length 썸네일 내 텍스트의 길이 Float O 결측치 0으로 변경 후
MinMaxScaler 정규화
face_area_ratio 썸네일 내 얼굴의 비율 Float O 얼굴의 일부만 나와 얼굴의 비율이 
1 초과한 경우, 모두 1로 수정
face_detect 썸네일 내 얼굴의 수 Int O 탐지된 얼굴의 수로 인코딩
smile_value 미소 여부 Int   미소 : 1 아닌 경우 : 0

 

prettyScale 수집 방법

https://www.prettyscale.com/

실제 쇼츠 영상 속 유튜버의 모습을 캡쳐하여 영상에서 보이는 유튜버의 외모 점수를 평가하였다.

 

HSV 수집 방법

 

텍스트 포함 여부 수집 방법 

이 부분이 내가 맡아서 수집한 파트이다.

Google Cloud Vision API를 사용하여 이미지 속 텍스트를 추출하여 썸네일 내 텍스트의 유무, 텍스트의 길이, 텍스트의 비율을 추출하였다.

썸네일 내 텍스트의 비율을 산출하기 위해서는 좌표를 사용하여 외곽선을 구하고, 외적을 통해 넓이를 계산하였다.

글씨가 없는 썸네일의 경우 텍스트가 null로 들어왔으며, 따라서 결측치는 모두 0으로 변경하였다.

 

얼굴 이미지 포함 여부 수집 방법

 

 

[3] 청각 데이터

쇼츠 영상의 경우, 청각 데이터는 크게 유튜버의 목소리와 노래로 나뉘어진다.

이 중, 시청자의 관심을 끄는데 더 큰 영향을 미치는 것은 목소리라고 판단하였고, 목소리에서 매력도를 추출할 수 있을만한 feature를 다음과 같이 선정하였다.

음성의 발화 속도 평균값, 음성 높낮이 평균값, 음성 높낮이 편차 평균값

컬럼명 설명 데이터 타입 결측치 참고
tempo 음성의 발화 속도
평균값
Float X MinMaxScaler 정규화
f0_mean 음성 높낮이 평균값 Float O 결측치 0으로 변경 후
MinMaxScaler 정규화
f0_var 음성 높낮이 편차 평균값 Float O 결측치 0으로 변경 후
MinMaxScaler 정규화

 

청각 데이터 수집 방법

YoutubeDL 패키지를 통해 wav형식의 데이터를 수집한 후, 목소리 데이터만 이용하기 위해 Python의 Spleeter를 사용하여 목소리와 노래를 분리하였다.

목소리 특징을 분석 후 목소리의 매력도라 할 수 있는 음성의 발화 속도 및 음성 높낮이를 최종 feature로 선정하였다.

 

 

 

 

댓글