u++の備忘録

Basketball Behavior Challenge 1st Place Solution

本記事について

  • 「スポーツアナリティクス Advent Calendar 2020」*1の1日目の記事です。
  • 12月13日開催の「Sports Analyst Meetup #9」*2で発表予定の内容をまとめました。

概要

  • 2019年12月〜2020年9月に開催されていた「Basketball Behavior Challenge: BBC2020」*3の1位解法の紹介
  • 時系列の座標データから「スクリーンプレイ」があったか否かを判定するコンペ

f:id:upura:20201107103948p:plain

自己紹介

  • 「Sports Analyst Meetup (spoana)」の運営メンバー
  • 本業はメディア企業のデータサイエンティスト
  • 本コンペは、spoana #7のLT発表で知った(アーカイブ*4
  • 共著に『PythonではじめるKaggleスタートブック』(講談社*5

データの概要

バスケットボールの1プレイずつ切り取った座標データが提供されました。各プレイでは、同じチームの2プレイヤー scrusr と相手チームのプレイヤー uDF、およびボール bal のx軸とy軸の値がフレーム単位で与えられています。

frame scr_x scr_y usr_x usr_y uDF_x uDF_y bal_x bal_y
0 2.89 4.74 5.49 1.5 2.78 5.22 6.98 12.7
1 2.88 4.7 5.52 1.51 2.8 5.2 7.08 12.52
2 2.87 4.67 5.54 1.53 2.82 5.19 7.13 12.35
3 2.86 4.65 5.56 1.54 2.84 5.17 7.08 12.37
...
  • 学習用データセット(正例400、負例1128)
  • テスト用データセット382
  • フレーム数は一定ではない
  • 予測は0か1なので、予測値の閾値決定が必要

正例のデータはスクリーンプレイを含み、負例のデータは含みません。具体的にどのようなデータなのかは、コンペページの可視化が分かりやすいです。

スコアの推移

次図は、私のスコアの推移です。最終的には、約0.87の正答率で未知のデータの結果を当てることができました。

f:id:upura:20201107104517p:plain

機械学習教師あり学習

予測モデルの作成には、機械学習教師あり学習と呼ばれる技術を利用しました。次図に示す通り、答えが分かっているデータから「特徴量」 X_train と正解 y_train のペアを作成し、未知のデータ X_test に対する予測を導く考え方です。

f:id:upura:20201107104544p:plain

石原ら, 『PythonではじめるKaggleスタートブック』, 講談社

最初のアプローチ

知識に基づき、予測に効きそうな7つの特徴量を抽出しました。スクリーンプレイ中は、敵対するチームのプレーヤー間の距離が近づくことなどが推察されるためです。

  1. プレイヤー3人とボールの距離の最小値6通り
  2. フレーム数

機械学習アルゴリズムには、過去の実績から期待値が大きい「LightGBM」を利用しました。

性能の向上のために

その後、性能の向上のために数多くの手法を試し、結果的に優勝することができました。ここでは1位*6と2位*7の解法を比較し、特徴的だった点を列挙します。

  1. 「tsfresh」による特徴抽出
  2. ニューラルネットワークの利用
  3. アンサンブル(複数の予測値の混ぜ合わせ)

「tsfresh」による特徴抽出

  • 時系列のデータセットから、最大値・最小値などの特徴を大量に抽出
  • 特徴量の数: 11340 (4 agents * 2 dimensions + 6 distances between agents ) * 810
  • 重要視された特徴量

f:id:upura:20201107104933p:plain

ニューラルネットワーク

アンサンブル

複数の予測値の混ぜ合わせることで、性能の向上が確認されました。

f:id:upura:20201107105102p:plain

まとめ

  • スポーツを題材にしたコンペは楽しい
  • 知識を活かしてスコアが伸びていく
  • 今はKaggleで「NFL 1st and Future - Impact Detection」*8が開催中

M-1グランプリ2020の2回戦動画を観た

M-1グランプリ2020の2回戦動画がGyaoYouTubeで全公開されていたので、合格者を中心にザッと目を通しました。

gyao.yahoo.co.jp

昨年の準決勝を観に行くくらいには以前からお笑い好きでしたが、今年は在宅の時間が増えたことも相まって、その傾向が加速しました。

せっかくなので、気になったコンビを列挙してみました。末尾に★を付けているのが、現時点での決勝予想9組です。予選は動画配信されることもあり、ニューヨークやラランドなど一押しのネタを温存していると思われる組もあり、あくまで現時点での所感です。挙げているコンビで例年の準決勝進出数の25+1を超えているので、なかなか悩ましいなと感じました。

過去の決勝経験者の中では、今年の歌ネタ王決定戦を制したさや香が仕上がっている印象です。昨年の決勝進出組も軒並み安定感があり、3組程度は2年連続の出場になる予感がします。その他、今年はマヂカルラブリーにも期待しています。

M-1では昨年、敗者復活を除く9組中7組が初めての決勝となり、知名度に依存しない若返りが図られている雰囲気を感じます。今年の初進出候補としては、くらげ・赤もみじ・もも・ロングコートダディが個人的な推しです。

良い意味で期待を裏切られたコンビがデニスです。少し昨年王者・ミルクボーイの雰囲気を感じるネタで評価が分かれる部分はありそうですが、とても面白い漫才でした。結成15年目ラストイヤーのコンビも当然注目です。今年は有名どころだと、藤崎マーケット三四郎スリムクラブあたりが該当します。2回戦動画からも、芸歴15年以上のベテランが本意気で取り組んでいる様子が伺えました。藤崎マーケットは緊張からか噛む機会が多く、三四郎の小宮がかなりの熱力を見せていました。

徒然なるままに趣味の感想を垂れ流してしまいましたが、この情勢の中で今年もM-1が開催されていることに感謝しつつ、今後の準々決勝以降も大いに楽しみにしています。

データサイエンティスト協会シンポジウムのKaggleセッションに登壇(11月10日)

11月10日にデータサイエンティスト協会シンポジウムで、毎年恒例のKaggleセッションを実施します。

今年のテーマは「Kaggler枠」で、企業によるKaggler支援を掘り下げていきます。私は司会を務めます。オンライン開催で、学生は無料です。今回、ありがたいことに企画のアイディア出しにも携わらせていただきました。かなり豪華なメンバーにご登壇いただけることになり、嬉しい限りです。

Kaggleセッション以外にも、因果探索・競馬AIなど、興味深い講演が盛りだくさんです。ご興味ある方は、ぜひご覧ください。

www.datascientist.or.jp

日本語BERTを用いた会社名の埋め込み

以前に参加したNishika「財務・非財務情報を活用した株主価値予測」コンペ*1で検討していたタイトルの技術について、別コンペで使う可能性があったので改めてコードを整理していました。結局使わなかったですが、せっかくまとめたのでブログ記事として供養しておきます。

www.kaggle.com

手法

会社名などラベル名に意味がある場合、何らかの形でそのラベル名のベクトル表現を獲得し特徴量として追加することは性能向上に繋がる可能性があります。今回はラベル名が日本語の会社名なので、日本語で事前学習されたBERTを用いて埋め込み表現を獲得しました。

結果

処理の詳細はソースコードをご確認ください。結果として、例えば「三井住友建設株式会社」のベクトル表現に類似している企業名として「住友不動産株式会社」「住友商事株式会社」「第一建設工業株式会社」などの文字列が似ているラベル名が挙がっています。なお実験のためのデータセットとしては、冒頭述べたコンペでも使われた「CoARiJ: Corpus of Annual Reports in Japan」*2を採用しています。

f:id:upura:20201101060241p:plain

「SciPy Japan 2020」で Kaggle チュートリアルを担当(10月30日)

10月30日からオンライン開催される「SciPy Japan 2020」にて、初日朝9:00〜12:30のチュートリアル講座を担当します。本記事では「SciPy Japan」の紹介と、参加される方向けのご案内を掲載します。

Tutorial: Python機械学習コンペティション「Kaggle」をはじめよう (Let's start a machine learning competition called Kaggle, with Python) - Shotaro Ishihara (Beginner) (JP)

f:id:upura:20201025122531p:plain

Conference Schedule | SciPy Japan

「SciPy Japan」とは?

SciPy Japanは、Python数値計算系ライブラリ「SciPy」の名を冠した、科学技術分野の幅広い話題を扱っている技術イベントです。本家「SciPy Conference」は2008年以降にアメリカとヨーロッパで開かれており、日本版は今年が2度目の開催です。概要は、下記の資料が分かりやすいと思います。

今年はオンライン開催で、参加費*1は5000円(学生2500円)とのことです。

昨年の日本版初開催*2や、2020年の本家*3など、過去動画もほとんど全て公開されています。

Python機械学習コンペティション「Kaggle」をはじめよう

公募されていたチュートリアルに申し込み、私のKaggleに関する内容が採択されました。

SciPy Japanは、日本を中心に科学技術分野に興味の持つPythonユーザが集まる場です。Kaggleは機械学習など高度な数値計算を扱うため、ライブラリが充実しているPythonとの相性が良いと考えています。ぜひ一人でも多くの方に、Kaggleの魅力に触れていただきたいと考えています。

チュートリアルでは、Notebook形式のソースコードを実行しながら、機械学習やKaggleの基礎を学びます。入門書『PythonではじめるKaggleスタートブック』*4の執筆や、コンペティションの優勝・開催の経験も踏まえ、さまざまな観点からKaggleの魅力をお伝えします。参加者が「Pythonを用いたKaggleの戦い方や学び方」を身につけられるような内容を目指しています。

資料・リンクなど

チュートリアルで利用する資料・リンクなどは、下記にまとめています。発表資料も含めて一般公開したので、参加できない方でもご参照いただけます。発表言語は日本語ですが、資料などは英語で作成しています。

github.com

参加される方へ

チュートリアルに参加される方は、下記の事前準備をお願いします。何らかのブラウザをインストールしたパソコンが必要です。事前にKaggleアカウントの作成をお願いします。Kaggleのウェブサイト上の実行環境を利用するため、パソコンにPythonの実行環境を整える必要はありません。

www.scipyjapan.scipy.org

おわりに

持ち時間の3時間30分のオンライン発表というのは未曾有の体験ですが、多くの方にKaggleの魅力をお伝えし、少しでも裾野を広げられればと考えています。参加される方は、よろしくお願いします。

「AWS DEV DAY ONLINE JAPAN」のKaggleセッションに登壇(10月21日)

AWS DEV DAY ONLINE JAPAN」のKaggleセッションに登壇します。10月21日15:50〜16:20のブレイクアウトセッションです。

E-9 : kagglerが語る「コンペとキャリアとビジネスと私」

aws.amazon.com

f:id:upura:20201015062634p:plain

元「専業Kaggler」の currypurinさん と、AWSatfujitaさん の四方山話を、ガンガン掘り下げていきたいと思います。特別ゲストとして、Kaggleの4カテゴリでGrandmasterの称号を持つAbhishek Thakurさんのお話もお楽しみいただけます。サイトにて無料登録することで閲覧できるので、ご興味ある方はぜひご覧ください。

Podcast「白金鉱業FM」に出演しました #白金鉱業fm

BrainPad社のデータサイエンティスト有志によるPodcast「白金鉱業FM」に出演しました。先日公開された「keep-alive.fm」*1と合わせて、お楽しみください。

shirokane-kougyou.fm

話題

以下が今回のお品書きです。興味のある部分だけでも、ぜひ聴いてみてください。感想は #白金鉱業fm でよろしくお願いします。

  • 00:00:00: 自己紹介・INMAの受賞
  • 00:08:00: なんでデータサイエンティストやってるの?
  • 00:13:00: デジタル社会のニュースメディアへの在り方
  • 00:31:00: 推薦のセレンディピティ
  • 00:39:50: サブスクリプションモデル
  • 00:49:20: ニュースメディアの事業領域の拡大
  • 01:00:30: Weekly Kaggle News
  • 01:14:30: Podcastの台頭
  • 01:29:00: 今後やりたいこと
  • 01:42:00: おすすめ書籍

質問対応

こちらの関係で、1件回答しそびれた質問がありました。

u++さんへ質問です。好きなディープラーニングモデルと好きな食べ物を教えてください。 私は、EfficientNetとからあげです。

何となく質問者が分かる気もするんですが(笑)、こちら回答します。

前者はResNet18ですかね。(古いと思われる方もいるかもしれませんが)画像案件の最初の検証では使っています。後者は寿司と焼き肉です。

f:id:upura:20201019082222p:plain