Recruit Data Blog

  • はてなブックマーク

目次

はじめに

データエンジニアの三田です。 この記事は社内で実施したMLコンテストにおける、スコアの提出とその採点に関わる仕組みについて説明します。

MLコンテストの概要や取り組んだタスク、使用したデータセットなどについては以前の記事を参照してください。

本記事では提出と採点の仕組みの概要とその方針を採用するに至った背景について説明します。

目次

提出・採点方式の概要

本コンテストでは図1のような仕組みを採用しました。 推論結果の提出にGoogle BigQuery、採点にPythonスクリプト、採点結果の可視化にはデータポータルを利用しました。

提出・採点の概要

参加者が推論結果を提出してから採点されるまでの流れは以下のようになります。

  1. 参加者が推論結果をBigQuery上にテーブルとしてアップロードする
  2. 参加者が運営に推論結果を提出したことをslackで連絡する
  3. 運営がPythonスクリプトを実行して提出を採点し、BigQuery上に書き込む
  4. 採点結果がデータポータルに反映される。

提出、採点、採点結果の可視化のそれぞれの構成について説明します。

提出

このコンテストでは学習・テスト用のデータセットをBigQuery上に配置して参加者に参照してもらう形をとっており、提出についても同様にBigQueryを利用するようにしました。

具体的には、参加チーム毎に提出用のデータセットを作成してもらい、そこに推論結果をテーブルとしてアップロードしてもらう形としました。

少し不親切すぎるかなとも思っていましたが、社内でも業務でよく使われているツールであり、サンプルのJupyter Notebookにも提出用のコードを記載していたおかげか、特に目立ったトラブルはありませんでした。

採点

採点用にはPythonでCLIツールを作成しました。入力としてテーブル名を与えると、推論結果について列数に不足はないかなど体裁についてアサートを行い、問題なければ評価指標を計算して、BigQuery上のスコア用のテーブルに採点結果を出力するような簡単なものです。

今回はコンテスト当日は運営4人で手分けをして各々でこのツールを実行して採点を行いました。

自分の採点の実装ミスでコンテストが失敗に終わってしまうのが何よりも恐ろしかったので、開発時にはきちんとテストデータを用意して再現可能なテストを実施し、その証跡も残していました。具体的には、テスト用のデータセットに数パターンのダミーの提出とその採点結果を残しておくようにしておきました。

実はコンテスト当日に採点にまつわる問い合わせが発生し、テスト後から本番までに採点ツールに変なバグを埋め込んでしまったかと思う場面がありました。ですが、上述のケースを再実行して一致することが確認できたため採点ツールについては問題ないことを確認することができました。

おかげでこのブログを書くことができているので本当によかったです。

採点結果の可視化

参加チームが各々の採点結果を確認できるように、図のようなレポートをデータポータルで作成しました。データポータルはBigQueryに格納しているデータを簡単にインポートすることができ、表やグラフもGUIで簡単に作成できるのでとても便利でした。

チーム個別のレポート画面
全体用のレポート画面

このようにマネージドサービスと人手での運用を活用することで、極力作り物を無くしつつ提出・採点の仕組みを実現しました。

このような方式に至った経緯

事前の準備は採点用のCLI開発くらいでかなり省エネな方式としたのですが、その背景として今回のイベントの以下のような特性を考慮しました。

  • 社内向けの横のつながりを広げることを主目的としたイベントであり、競技における公平性がシビアに求められない
  • 初めての試みのため今後も継続して同じような形式で実施されるかわからない
  • 参加チーム数が20程度である
  • データに関わる組織のサイエンティストやエンジニアが主な参加者であるため、ある程度ツールについてのリテラシーが期待できる

イベントの目的と規模を考えると、ある程度人手が介在するような運用でも問題なさそうだと考えて、必要最小限の開発ですむ今回の方式に決定しました。

当日の運用の様子

slack上に提出連絡スレッドを用意して、人力評価システムとして採点の実行と完了連絡を行っていました。
裏側で動いているのが人間である都合上、採点完了までのレイテンシーは1分~10分程度とある程度のばらつきは発生してしまいました。

しかしながら他の運営の方の協力と参加者の皆様のご理解もあり、期間中に提出、採点ができなくなるなどの致命的なトラブルは発生せず、コンテストを無事に終了することができました。

提出連絡用スレッドでのやり取り

当日の雰囲気が伝わるようにパブリックスコアボードでのデッドヒートの様子を載せておきます。(途中でサンプルノートブックに修正が入ったため、各チームのスコアが2回横並びになっています。)

こちらは bar_chart_race を使って作成させて頂きました。

パブリックスコア上位10チームの変遷

終わりに

本記事では社内で実施したMLコンテストの提出・採点の仕組みの概要と採用するに至った経緯について説明しました。

社内のデータに関わる職種の方々のネットワーキングを主目的とした小規模のイベントであることを踏まえ、マネージドサービスと人力での運用を組み合わせた提出と採点の仕組みを構築しました。

MLコンテスト自体は同じような形式で継続開催されることが決まり、参加者へのアンケートの結果、やはり「提出が自動でないのが不便だった」などの意見が見られたため、次回開催時には今回人力で回していた部分をシステム化することで、参加者がよりコンテストに集中できる環境を整えたいと思っています。

三田 涼介

住まい領域のエンジニア

三田 涼介

ビールとちいかわが好きです。