ProbSpace「YouTube動画視聴回数予測」コンペ参加録
ProbSpaceで開催されていた「YouTube動画視聴回数予測」コンペに参加しました。Lain.さんとチームを組み、public 4位・private 6位でした。
コンペ概要
YouTube APIで取得できるメタデータを入力として、動画の視聴回数を予測するタスクでした。具体的には、下記のデータが利用できました。
項目名 | 説明 |
---|---|
video_id | 動画ごとに割り振られる一意なid |
title | 動画のタイトル |
publishedAt | 動画の投稿時間 |
channelId | 動画を投稿したチャンネルのid |
channelTitle | チャンネルのタイトル |
categoryId | 動画カテゴリのid |
collection_date | データレコードの収集日 |
tags | 動画に割り当てられたタグ` |
likes | 高評価の数 |
dislikes | 低評価の数 |
comment_count | コメント数 |
thumbnail_link | 動画のサムネへのリンク |
comments_disabled | コメントが許可されない動画であるか? Trueの場合にはcomment_countは0となる |
ratings_disabled | 高評価と低評価が許可されない動画であるか? Trueの場合にはlikesとdislikesは0となる |
description | 動画の説明文 |
video_id
, thumbnail_link
からはそれぞれ動画・サムネイル画像が取得でき、title
, description
はテキストです。いわゆるマルチモーダルなデータが利用できるコンペでした。
取り組み
YouTubeという題材の身近さとマルチモーダルの技術的な面白さに興味をそそられ、終了10日前とギリギリでしたが参加を決めました。
チャンネル登録よろしくお願いしますhttps://t.co/IXKuLZ0tpM pic.twitter.com/7SCC6v4a9T
— u++ (@upura0) June 19, 2020
その後にLain.さんとチームマージし、最終的にpublic 4位・private 6位となりました。ベストモデルは、私1モデルとLain.さん3モデルの合計4モデルの平均でした。
私の担当部分のソースコード一式はGitHubで公開しました。以下、概要を述べます。
特徴量
テーブル + テキストのtfidf*1&count*2 で特徴量を作りました。
テキストからはBERT*3、画像からはEfficientNet*4で特徴抽出しましたが、性能に寄与しませんでした。
モデル
画像を用いたEfficientNetのfine tuningも試しましたがCVが悪かったので、ニューラルネットワークは諦め勾配ブースティング系のモデル(LightGBM*5, CatBoost*6)を使いました。Pseudo Labeling でCV & public lbスコアが伸びました。
CV戦略
生の特徴量のみを用いたLightGBMモデルのfeature importanceで上位に来ていたratings_disabled
を対象にしたStratifiedKFold(n_splits=5, shuffle=True, random_state=7)
に変更して、CV & public lbスコアが伸びました。
おわりに
まずはチームを組んでくださったLain.さんにお礼申し上げます。
個人的な反省点は、マルチモーダルを扱うニューラルネットワークで全然lossが落ちなかったことです。結局は特徴抽出してLightGBMに突っ込む定番の解法になってしまいました。とはいえEfficientNetなどを実践で試せた経験を生かして、次回以降のコンペの糧としていきます。