機械学習系コンペの意義

参加者にとっての意義

  • 機械学習スキルアップ
    特徴量作成、モデリング、可視化など
  • エンジニアリング技術のスキルアップ
    コードの構造化、awsの利用など
  • スキルの客観的評価
  • 賞金
    モチベーションや質を担保する要因の一つだが、賞金自体は割に合わないでしょう
  • 楽しさ
    価値があるから楽しい、楽しいから高いレベルの人が集まって価値がある、の循環

参加者のつらみ

  • かなりの体力と精神力を費やすことになる(週8時間で良い順位をとるのは厳しい)
  • 精度が出ない、順位が上がらない
  • 頑張ってもkaggle master連合軍や500 model stackingに負けるとつらい
  • leakなど、あまり意味のないソリューションを頑張んなきゃいけないことがある

スポンサーにとっての意義

  • リクルーティング
  • 宣伝効果
  • 良い知見やソリューションの獲得
    • モデリング
    • データに関する知見、良い特徴量
    • 可視化手法

良い知見やソリューションを獲得できるかは分の良くない賭けである気がする(後述)

そのほかの意義

  • 効果的でわかりやすいツールや手法を広める役割
    xgboost, stacking, keras, t-sne など

データセットとソリューション

  • 機械学習系コンペは問題設定が難しいように思う
  • 理想は実務に役立つ、知られざる知見を得ることだが、そんなものが都合よくあるとは限らない
  • 印象に残っているソリューションはTaxi Trajectory PredictionNOAA Right Whale Recognition。これらは実際に役に立ちそう。
  • 一方で入賞者のソリューションが何の役にも立たなそうなコンペもある
  • 純粋に技術を競うのなら、人工的なデータセットを作ってそれの”謎を解く"方がよいのかもしれない。ただ、それでは機械学習の実世界との関わり感が失われてしまう

train/test split、データ量

  • trainとtestが均一なsplitでデータ量が十分にある場合、評価指標にもよるが、多数のモデルによるstacking競争になる可能性がある。ただ、ひたすらcross validation scoreを高めることに注力できるので、スキルアップには良い。
  • trainとtestが均一でない場合(時系列データやtrain/test splitが何らかのグループで分かれている場合)は、stacking競争になりにくいが、train/testの違いを考察したり、LBに投げてみて良いスコアを探すなどが必要なケースがある。下手すると運ゲーになることもある。

どんなコンペがやりたいか?

個人的に一番楽しそうなのは強化学習を用いたAIの対戦ゲーム。
codingameはローカルで流せないようなのと、UIがちょっと見た目重視過ぎる気がするのがいまいち。 code vsが求められている?