テクノロジー

2020.08.04

データサイエンスエンジニア3人での開発の進め方〜社内ハッカソンでダブル受賞しました

先日アスクル/一休/PayPay/ヤフー/ZOZOテクノロジーズで共同開催した、企業内ハッカソンイベント「Internal Hack Day」参加者からの寄稿記事を紹介します。
イベントについてはこちらをご覧ください。

こんにちは。ヤフー株式会社の小倉です。
先日、Internal Hack Dayという社内ハッカソンイベントに参加し、私たちのチームはありがたいことにヤフー賞と一休賞の2つの賞をいただくことができました。

今回の作品は今後の特許などの可能性から、作ったものの仕組みはあまり詳細には書くことはできないのですが、初めてハッカソンに参加した感想や、リモートワークならではの開発の進め方などを重点的にまとめました。

今回作った作品

MaskAlertの外観

「MaskAlert: 外出時のマスク着用検知AI」です。

AIによって、これから外出しようとする際にマスクを着用していないとお知らせしてくれるシステムです。
ついつい忘れがちなマスクですが、通り過ぎるだけで着け忘れをチェックしてくれます。ニューノーマル時代の変化をポジティブに捉えた「こういうアイデアがあったか!」と驚くような作品、サービス提案に送られる一休賞、新しい生活様式に対応した、広く社会課題を解決する作品に送られるヤフー賞、の2つに選んでいただきました。

後述しますが、私たちはデータサイエンスをバックグラウンドに持つ新卒3名からなるチームで今回のハッカソンに参加したこともあり、それぞれの専門性を生かすことができる機械学習を用いたプロダクトを制作したという経緯です。

チームはどのように組まれたか

今回、私たちのチームはエンジニア3人(岡田、小倉、佐藤)でハッカソンに参加しました。
3人全員がヤフーの新卒エンジニアであり、かつサイエンスの配属です。3人全員がハッカソン前から面識があったわけではなく、佐藤が研修で知り合った岡田を誘い、岡田が私を誘ったという流れです。そのため私と佐藤は初対面でしたので、ハッカソン前にZoom上で顔合わせをしました。
3人ともハッカソンは初めてなので、勝手がわからず不安もありましたが、「やるからには勝ちたいよね」と話していたのを覚えています。このような経緯で、偶然データサイエンスをバックグラウンドに持つ3人が集まってチームを組むことになりました。

データサイエンスってなんだ? と思われる方も中にはいらっしゃるかもしれません。ざっくりいうと世の中にありふれているデータを用いて知見を得ることです。今回の場合のようにAIを構築することも含まれます。
今回のInternal Hack DayはヤフーだけでなくZホールディングス横断での開催ということで、混成チームを組めるということもあり、さまざまなスキルセットを持ったメンバーで構成されたチームも多かったのではないかと思います。次にハッカソンに参加する際には、多様なスキルセットを持つメンバーで構成されたチームでの開発も体験してみたいです。

アイデアの選びかた

このような経緯で、図らずも3人全員がサイエンスのバックグラウンドを持つメンバーが集まってしまい、スキルセットに偏りがあるため、作ることができるものにも制限が強くなってしまうかと初めは心配ではありました。
しかし、考え方を変えて、3人の強みであるデータサイエンスを前面に出した作品を作るというのを意識して議論を重ねました。新卒のみからなるチームは他にもいくつかありましたが、バックグラウンドまで近いメンバーが集まっているのは珍しいと思ったので、なるべくその特徴を生かし、データサイエンスが肝になるような作品で勝負しようと考えました。
ただ、ハッカソンでよくある、使いたい技術ベースで作品を決めることはせず、あくまで今回のハッカソンで提示されているテーマに沿った課題ドリブンで作品を決めよう、という意識は3人で共有していました。というのも、ハッカソンではおそらくWebアプリやスマホアプリなどの高い技術を持ったエンジニアが競争相手となるので、自分たちにない技術スタックを持った方々と私たち3人が競る際には、

  • テーマにあった課題を出すこと
  • その課題を正しく解決すること
の2つが必要だと考えたからです。

アイデアの決め方ですが、まず初めに各メンバーがそれぞれにいくつかアイデアを考えてきて、Zoom上で3人でそれらのアイデアを共有しました。この時点では単なる思いつきレベルのアイデアもとりあえず持ち寄りました。常日頃、不満に思っている課題、それを解決する作品もセットで提案できれば良いですが、解決策が見えていないアイデアもこの時点では気にせずに共有します。
その後、他のメンバーが持ってきたアイデアに「こうするともっと良い作品になるかもしれない」「その課題にはこういう解決策が考えられる」といったフィードバックを行いました。一人で考えられる範囲は限られているので、ある程度考えた後は他者の考えを聞く機会は必要だと感じました。
その後、もらったフィードバックをもとに各人がまた個人で考えて、1度目に共有したアイデアより洗練させたアイデアを1人当たり2,3個に絞って共有しました。この時点でかなり絞られてくるので、各アイデアの詳細を説明し直して共通認識を整えてから本番で制作する作品を決めました。
最終的に作品を決める際には、以下の3つを満たしたアイデアにしました。

  • 課題感を共有できる
  • 自分たちの得意な機械学習を用いて解決できそう
  • 2日間で完成できる
これらに加えて、選んだアイデアは「作るの楽しそう!」という観点も満たしていたので満場一致で決まりました。

あまり機械学習の経験がない方が機械学習を用いたプロダクトを作る際に、一番のハードルとなるのが実現したいタスクがどれくらい難しいかを見積もる部分だと思うのですが、2日間で完成できるという見積ができたのは、機械学習などのデータサイエンスをバックグラウンドに持つ3人で構成されたチームだからこそだと思います。
最終的に決めた「マスク検知AI」のアイデアは早い段階で佐藤が持ってきており、彼曰くかなり入れ込んでいるアイデアということでしたが、3人で持ち寄った他のアイデアもしっかり考え尽くしてから納得して決めることができたので、最終的に決めた段階では提案された時より良いアイデアにブラッシュアップされていたのではないかと思います。
個人的にはアイデア出しは苦手なのですが、上記のアイデア決めのフローを行い、

  • とにかく最初は量を出すこと
  • 絞っていく際に用いる基準は確実に共有すること
  • 個人で考える時間と共有する時間の両方をある程度とること
ということが、いいアイデア出しにつながるのではないかと感じました。メンバーの佐藤が上手にアイデアを決めていくフローを進めてくれたので、とてもやりやすかったです。勉強になりました。

リモートの開発で工夫したところ

メンバー3人とも初めてのハッカソンというのに加え、今回はリモートでの開催だったので開発がより難しく感じました。
そこでSlackとZoomを使ってうまく連絡を取りつつ、2,3時間に1度進捗共有を行うといったスタイルで開発を進めました。実際に開発を始めてみると、リモート特有の開発の難しさはありましたが、今年の新卒はオンラインでの研修を数カ月行ってきたこともあり、個人的にはそこまで苦労しませんでした。タスクのない手持ち無沙汰なメンバーが出ることもなく、大きなコミュニケーション上のすれ違い等もなく開発を進められたのは、オンラインでの研修での経験が大きいと感じました。
全体での発表用の資料は担当の佐藤が、オンライン展覧会の資料は私と岡田が担当しましたが、発表スライドの作成などは工夫する余裕がありませんでした。複数人で同じスライドを作成するのは、同時編集が行えるツールを使えばいいと思うのですが、パッと実現できず結局片方が枠組みを作ってからもう片方に投げる、といったシーケンシャルな方法で作成してしまいました。ここは反省です。

技術実装内容については詳細をお伝えできないのですが、サイエンス畑の3人での作品ということで機械学習を用いたシステムの開発を行ったため、システムの構築側とモデリング側に分かれて開発を進めました。
システム構築は佐藤が担当し、モデリングは私と岡田が担当しました。マスク検知のAIの部分のアルゴリズムを考え、実装する部分がモデリングの担当領域で、システム構築では作成したモデルをデプロイする部分を担当していました。ベースラインのモデル作成とデプロイを早い段階で佐藤が作ってくれていたので、私と岡田は開発1日目の比較的早い段階でモデリングに集中できる状態に入れたのが良かったです。
おかげで2日目はベースラインのモデルからの改善を目標にワークしていたため、ほとんどKaggleのようなことをしており、思い描いていたハッカソンと少し違いましたが、とても楽しかったです。

次の画像は、モデリングの実験結果をSlackで共有して議論している場面です。普段であれば開発の様子などを撮影しておくと思うのですが、今回はリモートでの開催ということでSlack上の会話から楽しい開発の様子を感じ取っていただけたらと思います。

Slack上で会話している画面

モデリングに関しては、私と岡田で2つの異なるアプローチを並行して試し、性能が向上したアイデアがあれば共有し、構造的に独立であればそのアイデアをマージするといった方法で進めました。
サイエンス3人での参加で良かった点として、モデリングの実験結果を共有した際に考察するレベルが上がることや、ある種チーム内でモデルの性能向上の部分で競争することで、最終的なアウトプットの質が向上することが挙げられます。モデリング担当が一人であった場合には、試すことのできる手法の幅も小さくなりますし、結果を考察も難しくなります。

実験結果はSlackの実験結果チャンネルに【実験1】のようにナンバリングして、本文にはモデルの構造、パラメータ、データセットの種類などといった実験を行った際の設定、及び実験結果を投げて、その投稿にスレッドとして実験結果に対する考察、次に何を試すかなどの議論を加えていく方針にしました。
実験を大量に行うような場面ではこの方法は適さないと思いますが、今回の開発期間は2日間だったのでこれで十分でした。全部で10個ほどの実験を行いましたが、実験結果の管理においては混乱することもなく、最後に発表資料をまとめる際にも必要十分なデータが残っている状態にすることができました。期間に合わせて適切な管理方法は異なると思いますが、似たような環境でモデリングをされる方にはおすすめです。

ハッカソン2日目の終盤に行った実験で、ようやく目標としていた性能を達成した時はテンションが上がりました。そこから急ぎで結果をまとめることになりましたが、上記の通りSlackで実験結果を管理していたおかげでスムーズに資料作成に取り掛かることができました。

作品のプレゼンや展示も、オンラインで

開発だけでなく、発表会やその後の展覧会ももちろんオンライン上での開催でした。発表はZoom上で行われ、画面上でデモ動画を流すスタイルでの実施となりました。Zoom背景として自分たちの作った作品のロゴをしているチームが多数いて、Zoomを用いた発表ならではの上手なアピール方法だと思いました。
残念なことに僕たちのチームはデザインに明るい方がおらず、そういったアピールはできませんでした。次に参加する時は、デザイナー職の方とも一緒に開発を行ってみたいです。

私が学生の頃に観覧客として観に行っていたYahoo! JAPAN Hack Dayでは電子工作などで製作したものも多かった印象がありましたが、今回はオンラインということで、比較的発表しやすいWebアプリやスマホアプリの発表を行ったチームが多い印象でした。現在のコロナ禍での課題解決というテーマの影響もあり、画面上で完結する作品が中心となっていました。
ハッカソンでの発表はデモが想定通り動かないチームがたまにいるイメージがあり、かつオンライン特有のミスがあるのではというプレッシャーも大きい中での発表でしたが、どのチームも問題なく発表していて自分の知っているハッカソンと違いました。

90秒の全体での発表会のあと、70分間のオンライン展覧会がありました。私は発表会の方では発表しておらず、その後のオンライン展覧会で主に使用した技術の説明を行う部分を担当しました。他のチームの展覧会も観に行きたかったですが、余裕がなく行けなかったのが残念です。
通常の展覧会では、作成した作品を実際に触っていただくことができますが、私たちが作った作品はオンライン上では実際に体験してもらうことが難しい作品であったため、必然的に使用した技術の説明が中心です。
私たちのチームでは、技術の説明の大部分がモデリングとなるので、体験してもらえない分しっかりと説明しようと思い、問題の定式化、提案手法、実験結果、考察など、ハッカソンというよりは研究発表のような資料を用意してオンライン展覧会に臨みました。リモートで雰囲気が伝わりづらいのもあり、審査員の方に説明するのは緊張しましたが、自分たちが工夫して作ったモデルや実験結果を深く聞いてくださり、とても楽しかったです。
実際に使ってもらうことができない分、技術の説明に聞き応えや満足感が必要だと思ったので(資料作りが楽しかったのもありますが)、提案手法の良さが伝わるようにストーリー立てて資料を作りました。
個人的に実験結果の管理は開発中も気をつけて行っていたので、内側が技術的にもしっかりしていることを説明できる状態にできていたのは評価につながったかと思っています。「報告しやすい実験管理」は今後の業務にも生かしていきたいです。

振り返りや感想など

  • 岡田:あまり、ハッカソン向きではないスキルを持った3人でチームを組んだわけですが、ちゃんと評価されるものを作ることができたのは良かったかなと感じてます。賞1つは欲しいと思ってましたが、2つもらえるとは思いませんでした。こういうことがあるとまた次回も参加したいと思いますね。

  • 小倉:学部生の頃に観覧していていつか出てみたいと思っていたHack Dayの社内版に参加でき、そしてありがたいことに2つの賞をいただけてとても嬉しかったです。こういうイベントを楽しむためにも、日々勉強して研鑽を積んでいきたいなと感じました。

  • 佐藤:自分にとって初めてのハッカソンへの参加ですが、楽しみながら新しい技術やアイデアにチャレンジすることができました。もうすぐ研修が終わり実際の業務が始まります。今回のハッカソンのように積極的に新しい技術やアイデアにチャレンジし、業務でもあらたな価値を提供できたらと思います!

おわりに

本稿では、社内のハッカソンイベント「Internal Hack Day」に参加した新卒エンジニア3人による、ハッカソン参加から開発、発表までの振り返りを行いました。諸事情により作品の技術詳細はお伝えできないのが残念ですが、リモートでのハッカソン参加の雰囲気を感じていただけたら幸いです。
ご一読ありがとうございました。


小倉 輝
エンジニア
サイエンス領域の新卒エンジニアです。
岡田 凱
エンジニア
エンジニアリングも頑張ります。
佐藤 晃矢
エンジニア
サイエンスの力で世の中をもっと便利にしていきたいと思います。
Yahoo! JAPAN アドベントカレンダー2020

Qiita(外部サイト)の「購読する」ボタンを押しておくと更新通知を受け取れます

Yahoo! JAPANでは情報技術を駆使して人々や社会の課題を一緒に解決していける方を募集しています。詳しくは採用情報をご覧ください。

関連記事

このページの先頭へ