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 수집 방법
실제 쇼츠 영상 속 유튜버의 모습을 캡쳐하여 영상에서 보이는 유튜버의 외모 점수를 평가하였다.
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로 선정하였다.
댓글