2016.09.05

課題を正しく設定し、チームで協調することが重要 ~リクルートテクノロジーズ アドバンスドテクノロジーラボ 小嵜耕平氏インタビュー~

国際的なデータ分析コンペティションであるKaggleで活躍されている小嵜耕平氏に、どのように現在のスキルを身に着けるに至ったか、また、データ分析の技術やプラットフォームやそれらの今後について、お話を伺いました。

ビールを飲んでいる写真

Kaggle コンテスト Cervical Cancer Screening Contestの受賞イベント会場にて、受賞イベントの時間まで入賞者とビールを飲んでいる写真。左から5番目が小嵜氏。

小嵜耕平氏(略歴)

2011年奈良先端科学技術大学院大学情報科学研究科博士前期課程修了(工学)。2014年、同博士後期課程単位取得退学。2015年、データ分析コンテストKDD Cup 2015優勝。同年11月より株式会社リクルートテクノロジーズ アドバンスドテクノロジーラボ シニアソフトウェアエンジニアとして、データ分析および機械学習に関する技術開発に従事。

— これまでの経歴や現在の業務についてお聞かせください。

システム運用、研究開発、広告配信最適化、保険金不正請求の分析、ツール開発や技術検証など、幅広い分野で仕事をしてきました。いずれもソフトウェアエンジニアリングとデータの活用という言葉でまとめることができると思います。大学では自然言語処理の研究をしていましたが、研究の応用分野に興味を持ち、社会人として研究開発やデータ分析分野でのキャリアをスタートしました。

現在はリクルートテクノロジーズのアドバンスドテクノロジーラボで、データ分析のプロセスの効率化に取り組んでいます。例えば、過去の分析レポートや前任者の分析レポートに出てくる数値や結果が再現できないものだと困りますよね。業務引き継ぎの観点でも、チームで分業する上でも、再現性の確保はとても重要なことだと思います。そういった場面で役に立つツールを開発したりしています。その他、コンピュータビジョンやディープラーニングの研究成果がどういった場面で活用できるのか、どこまで有用であるのかを実装からはじめて評価検証をしています。

— 扱ってきたデータ分析や技術も様々なようです。新しいことに取り組む時に、これまでの経験が生きないかもしれない、といった不安はありませんでしたか?

保険業のような、いままでに関わりのなかった業界で仕事をすると決めたときは、うまくやっていけるのか不安でドキドキしました。ただ、どういった役割が必要とされており、その役割をこなすことができそうだと自信を持つことができたので決断できました。

自信を持つことができたのは、Kaggle での経験のおかげだと思います。Kaggle では、様々な業界のデータセットに触れることができます。データは様々でも、タスクを設計して、データの傾向を見てパターンを探し、そのデータやタスクに適したモデルを作る。そういったプロセスはどの業界でも同じであると感じました。Kaggle ではタスクを設計するというレベルでの経験や予測モデルを運用するといった経験を積むことはできませんが、Kaggle で蓄積した知識を活かすことはできます。

 

— データサイエンティスト協会では、データサイエンティストには、データサイエンス力、データエンジニアリング力、ビジネス力の3種のスキルが必要であると定義しています。それぞれどうやって身に着けてきたかお聞かせください。

定義をよく理解していないので、適切な解答になっているかはわかりませんが、ビジネス力は業務経験によって身に着けることだと思います。業務をした年月の長さ、そのときどの程度コミットしてきたのか。業務を経て身に着けることだと思います。

データサイエンス力、データエンジニアリング力というスキルに分けて言及するのは悩ましいですね。分けて考えないほうが良いのではないでしょうか。双方は知識を得て、コーディングやエンジニアリングを繰り返して身につけていくことだと思います。「テキストや論文の内容を理解すること」と「それを使える形にすること」の2者にはかなり大きな乖離があります。後者の「使える形にする」ためには、データサイエンス力、データエンジニアリング力というスキルの双方が必要だと思います。

— Kaggleでご活躍されていますが、参加のきっかけはなんだったのでしょうか?

昔に遡って経緯をお話します。大学に入学してプログラミング言語を習得していく中で、言語仕様に興味を持っていた時期がありました。ちょうどその頃「コードゴルフ」と呼ばれるコンテストが一部で盛り上がっていまして、本も出版されました。コードゴルフはなるべく短いコードで要件を満たすコードを書き、コードの短さを競い合うというものです。言語仕様を学びながら、最短のコードを、パズルを解くように探していました。このコードゴルフに参加している人たちの多くが、アルゴリズムによって問題を解くプログラミングコンテストにも参加していたため、私も同じようにプログラミングコンテストに参加するようになりました。コンテストで競い合うことが好きになったのは、これらのコンテストのおかげであると思います。また、これらのコンテストを通じてアルゴリズムやコンピューターサイエンスの考え方がかなり身についたと思います。

大学在学中はプログラミング系のコンテストに熱中していましたが、大学院では機械学習や自然言語処理の研究を行っていたこともあり、この分野での有名なコンテストである KDD Cup や Kaggle に自然と参加するようになりました。

受賞発表

KDD Cup 2015の受賞発表時に、co-chair の Ron Bekkerman氏が小嵜氏を含む優勝チームのメンバーが世界中にいることを説明。

— Kaggleのユーザランキングで上位(2016/8/16現在4位)ですが、コツはあるのでしょうか?

初めはあまり結果が出なかったのですが、コンテスト入賞者がどういった手法で問題を解いたのかを毎回勉強しました。コンテスト入賞者の中には自分たちの手法を公開してくれる人がいます。どうしたらその人の得たアイディアに行き着くのか、といったことをよく考えていました。コンテスト入賞者がどのような特徴量を使っていたのか、という結果を眺めるだけではなく、「なぜそこに注目したのか」「なぜそれを選択したのか」という過程を考えることが大切だと思います。また経験の積み重ねも重要です。例えば「時系列のデータが与えられた場合には、まず季節性の有無を判断しよう」といったレシピの積み重ねです。これらのレシピをタスクやデータの特性にあわせて使い分けます。これは自分でいろいろと試して検証していく過程で身につくことだと思います。

Kaggle のコンテストのコツという意味でよく誤解されるものに「アンサンブル」があります。アンサンブルなしでコンテストに入賞することは至難の業ですが、アンサンブルはみんなが当然のように試すので、それだけでは勝てません。アンサンブルは当たり前に試した上で、他の人が発見できない有効なパターンを発見したり、上手にモデルを作った人が入賞しています。そしてこれができる人は、タスクにもよりますが、アンサンブルなしでも上位を獲得します。

— Kaggleへの参加を通して、スキル以外に得られたものはありますか?

一つはデータ分析にどのようなビジネスの可能性があるのかを知る、良い機会となったことです。これまでにデータとしての価値が高いと思ったのは、不動産情報や医療診断、投薬履歴などです。こういったデータに触れ、試行錯誤できる機会というのは非常に得難いものだと思います。びっくりしたのは衛星航空写真ですね。航空写真を扱うベンチャー企業も存在して、これがビジネスに繋がるのかというのは衝撃的で興奮しました。まだ半信半疑ですけれども(笑)

もう一つは仲間ができることです。Kaggle の参加者は気軽にチームを組むことが多いです。Kaggle は、ポイントによって最終的な総合ランキングの順位付けをします。チームを組んで良い成績を取る方が単独よりも高いポイントを獲得しやすいシステム(注:ポイントの計算式の分母にチームのメンバー数の二乗根があるため、メンバー数に反比例にならない)になっているのも要因だと思います。一度、ロシア、アメリカ、日本でチームを組んだときは、ほとんど時間が合いませんでした。ただ、そういった時でも、Skype やメールで取りあえずメッセージを発信しておいて、返事はいつでもいいよというスタイルが定着するとなんとかなります。

KDD Cup 2015 で優勝した際は、Kaggle をやっている人たちがランキングの上位に密集していて、彼らとチームを組んだら面白いのではないか、という話になり、どんどん他のチームとマージしてチームを作っていきました。他にも Kaggle での活動を通じて注目していただいたおかげで、いろんな会社のかたと接点もできました。単純にリクルーティング目的でのコンタクトではなく、情報交換をするという機会もたくさん得ることができたので、Kaggle に参加して得をしたなと感じています。

KDD Cup 2015の受賞時の写真。

KDD Cup 2015の受賞時の写真。

— Kaggleへのチームでの参加は、どういう分担をしているのですか?

細かく分担を区切らないようにしています。みんながゼロからそこそこ良いモデルを作って、サブミットできるというレベルを前提としているので、他人がボトルネックになることはありません。あえて分けるならば、モデリングと特徴量作成は分担できる領域かなと思います。

チームを作るときは「俺はこの期間、特徴量に専念するよ」とか「アンサンブルのモデルをどう作った」とか「こういった試行錯誤をして、こういったパターンを見つけた」といった声の掛け合いのようなコミュニケーションをよくやります。既にある程度の完成品があるという前提で、その改善をみんなで情報共有しながらがんばる、という感じです。

— Kaggleに興味を持った人に対し、業務とKaggle参加の両立のような観点で、アドバイスはありますか?

Kaggle に取り組む目的意識によってできるアドバイスは変わるかなと思います。学びたいという目的であれば、コンテストにこだわらず、Forum や Kaggle Kernel(注:コンテストのデータを使った可視化スクリプトや予測モデルのコードなどを共有できるスペース)を見るだけでも良い勉強になります。

勝ちたいという目的であれば、たくさんの時間と情熱を注ぐ必要があるかと思います。勝つためには相当の時間と労力が必要です。幸いなことに、コンピュータリソースに関してはクラウドサービスを使えばお手軽に調達できます。私もクラウドサービスを多用しています。100 GB を超える RAM を積んだマシンを月に 1000 時間ほど使うこともありました。その時は何とか賞金を得ることができたのでペイしましたが(笑)

— 最近注目している技術についてお聞かせください。

業務や Kaggle とは関係なく、趣味に近い話ではありますが、色々なパズルやゲームを機械的に解く、という技術にとても興味があります。人間よりも強いものを作って、その後は他のどのプログラムより強いものを作りたい。その流れで Deep Reinforcement Learning に注目しています。また、技術自体の話ではなく、技術の応用先の話になるのですが、金融分野への応用が気になっています。株価の評価モデルをクラウドソーシングで作ってもらうヘッジファンドの話が最近話題になりました。新鮮で夢のある話だなと思い、注目しています。

— 業務とコンテストのデータ分析は違いますか?

もちろん違う部分もあります。業務において「どういった根拠に基づいてモデルがスコアリングしているのか」を要求されることがあります。これは現場での判断を完全に自動化してはいけない場面などで起こります。モデルはあくまでも現場で働く人間の判断基準を増やす道具であるからです。コンテストではモデルがどこまでも複雑になります。

他にも、業務では「モデルの有用性」が応用に耐えうるという判断ができる段階でプロダクトを作成します。モデルの複雑さのトレードオフも考えなくてはいけません。一方でコンテストではどこまでも与えられたデータに対しての最適化を続けます。良いスコアが出るならば、際限なく複雑になります。

— 最近注目しているデータ分析のプラットフォームについてお聞かせください。

特定のサービスにロックされてしまうようなプラットフォームは避けたいと思っています。個人的にオープンソースが好きということもあるのですが、Jupyter Notebook と PySpark の組み合わせは、クラウド環境で簡単に試すことができ、有望であると思います。私見ですが、大規模なチームを作り、データ分析によって売上に貢献するといった機会はかなりのレアケースだと思っています。単独であったり数人の小規模チームで分析をするならば、ノートブックだけで十分で、むしろ柔軟に対応できる利点があると思います。

— 今後、データ分析の技術やスキルで、何が重要になってくると思いますか?

今も今後も重要なのは課題を正しく設定すること、それができる前提で「分析する人」「データを整備する人」「プロダクトを運用している人」が共に協調してチームとして動くことが重要だと想います。

チームワークでは、分析や実験の再現性と効率的に情報を共有する仕組みが重要だと考えています。プログラムコードが誰の環境でも同様に動くという状態を作るために、最近は Docker を使って分析の再現性を担保するなど試行錯誤を重ねています。

カテゴリ
アーカイブ
記事アクセスランキング
タグ