Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

Kaggleで世界トップレベルになるための思考法。Grandmaster小野寺和樹の頭の中

Kaggleとは、世界最大級の機械学習およびデータ分析のコンペティションです。コンペの主催企業や研究機関などがデータや分析のテーマを提供。その内容に基づいて世界中の参加者たちが機械学習モデルの精度を競います。

Kaggleにおけるランクの最高峰がGrandmasterであり、ゴールドメダル5枚とソロゴールドメダル(個人参加でのゴールドメダル)1枚がランク取得の条件となります。日本人でGrandmasterの称号を得ている数少ない方の一人が、NVIDIAの小野寺和樹(@0verfit)さんです。小野寺さんは「Kaggleに参加すること」を同社での仕事にしています。

どうすれば、スキルを向上させKaggleの上位ランクに入賞できるのでしょうか。今回は小野寺さんに、Kaggleに取り組むうえでどのような思考や行動をしているのかについてインタビューしました。

*…インタビューはオンラインで実施しました。

「思いついた」と「思いついて行動した」には天と地ほどの差がある

――小野寺さんのKaggleに取り組む姿やSNSなどでの投稿を見ていると、他の方々が言っていることを良い意味で疑ってかかる力、自分自身が納得するまで徹底的に分析をする力が高い方のように感じます。

確かに、私は特定のコンペで他の参加者たちが取り組んでいる内容や議論などを目にしても、基本的には信用しないですね。学生時代から、この考え方をしていたように思います。私はもともとゲームが好きなんですが、中学から大学までは、ひたすらゲームセンターに入り浸っていました。

他の人と同じことをやっていても、ゲームには勝てません。対戦ゲームならば他の人がやっていない攻略法を見つけて、その方法を徹底的に練習して、ようやく上位ランクに入賞できるようになります。その習慣がKaggleでも続いているんだと思います。

どうせゲームに取り組むなら、一番良い成績を出せたほうが楽しいですよね。工夫して1点でもポイントを増やせたほうが良いし、タイムアタックならば0.1秒でも縮められたほうが良い。Kaggleで上位を目指しているのも、同じような理由だと思います。

――そのスタンスでKaggleに取り組んでいると、ストイックに自分のことを追い込む場面がたくさん出てくると思います。モチベーションを維持することは大変ではありませんか?

大変といえば大変ですよ。たとえば、特定のコンペに長時間向き合っていると、最初のうちはモデルを少し修正するだけで精度が上がるけれど、コンペの後半になってくると100回試行錯誤してようやく何か1つが当たる感じになるので、心が折れるんです。「いい加減疲れたから、寝たいな」みたいな(笑)。

でもその場面で諦めてしまわず、絶対に自分のやっていることは無駄にならないと徹底的に自分自身を洗脳できるかどうかが、結果を左右するんじゃないですかね。

世の中には「○○の手法を思いついたけれど、やらなかった」と言う人がたくさんいます。でも、「思いついた」と「思いついて行動した」にはかなりの差があって、その大変さに向き合える人がコンペで上位に入っている気がしますね。

――先ほど「良い意味で疑ってかかる」という話をしましたが、小野寺さんのなかで「この人の発信する情報は信じている」というものはありますか?

過去に良い論文を書いてきた人や、Kaggleで一般的に使われる手法を作った人などには注目しますよね。もちろん、それが本当に正しいか、効果があるかは学習・実験しなければならないですが、少なくとも取り組んでみる候補には入ります。

――各種の手法やライブラリなどを学習・実験する際には何をしますか?

その手法に関連する論文は必ず読んで、ソースコードがあるならばその中身まで読みます。だいぶ時間はかかりますが、自分が納得するまでは調べ尽くします。コードを読まなければわからないことがたくさんあるからです。

たとえば、ニューラルネットワークのモデルであるResNetには数多くのバージョンがあります。「このモデルにはボトルネックレイヤーがここにあって、こちらのモデルにはない」といった違いは、コードをきちんと読まなければわかりません。

――人によっては、実装されたコードまで読み込まず「ある程度使えるから、それで充分」と学習を止めてしまうケースもあります。小野寺さんはそうではないと。

急がば回れだと思うんですよね。そのライブラリの内部的な実装までわかっていると、無駄な実験をする回数も減らせるんですよ。「このモデルは○○のモデルとボトルネックレイヤーがほぼ一緒だから、試さなくていい」と判断できます。

――各種の手法やライブラリは日々新しい情報が登場します。そのなかから、どのように取捨選択して情報を取り入れていますか?

基本的にコンペ主導ですね。だから逆に言えば、コンペがなければあまり勉強しません。Kaggleで面白そうなコンペに参加して、必要になった知識をその都度集中して学習していくスタンスです。

普段の生活でも、頭の片隅で常にコンペのことを考える

――では、決して「1秒たりとも無駄にせず、どんなときも勉強をしている」というスタンスではないと。

遊ぶときはわりと遊んでいますからね。たとえば、コンピュータービジョン系のコンペだと学習を回すのに時間がかかるので、試したい実験をシェルスクリプトに書いておいて、その間にゲームで遊んでいたりとか。本当に努力家の人は学習を回している時間も何か勉強をしているんでしょうけれど、私はそこまでじゃないので。

――ちなみに、ゲームをしている最中や家事をしているときなどに、無意識的にコンペのことを考えていることはありますか?

ああ、それはあるかもしれません。本気で興味のあるコンペや面白いコンペであれば、頭のどこかでいつも考えている気がします。

――普段の生活とKaggleとの境界線が、良い意味で曖昧。考える習慣が日常レベルで染み付いているということですね。切り口を変えて、他の質問をさせてください。実験に使えるコンピューターの計算リソースが限られていた昔と、それがすごく潤沢にある今とで、Kaggleとの向き合い方に変化はありますか?

制限されていた頃って思い浮かばないですね。基本的にずっと十分な計算リソースはあった気がします。

――世の中に用いられている手法は、昔と比べると計算リソースの量が必要になってきています。けれど、それに付随して小野寺さんが使える計算リソースも徐々に増えていったから、不足を感じなかったということですかね。

たぶんそうだと思います。金融コンサルティング企業にいた時代は親会社の計算リソースを使えましたし、ヤフーに転職すると使えるリソースが増えました。DeNAももちろんそうだし、今のNVIDIAもそうです。基本的に、転職に伴って使えるリソースは増えています。

――もし限られた計算リソースしか使えなくなったら、Kaggleにおける小野寺さんの成績は下がると思いますか?なぜこの質問をするかというと、読者のなかには「潤沢な計算リソースがなければKaggleで上位ランクには勝てない」と考える人もいるのかなと思いまして。

実験する回数は減るかもしれないですが、ある程度計算リソースがあれば成績に大きな影響はないと思います。なぜかというと、すべてのサンプルデータを使わなければならないような実験はそんなにないからです。ある程度、傾向が見えるくらいの量のデータを使って実験すれば、それで良いと思います。

もちろん今の職場ではクラウドリソースがたくさん使えるんですが、毎時間フルで使っているかと言えば全くそんなことはないですから。コンペ終了数日前くらいの、本当に追い込みが必要なときなどは使うケースもありますが。

――この質問に関連して、昔と比較した場合の技術的な変化についても触れたいです。かつて、Kaggleで用いられる機械学習およびデータ分析のツールはVowpal Wabbit、XGBoost、Kerasなど比較的限られていたように思います。ですが、最近は事前学習済みのニューラルネットワークもたくさんありますし、OSSも山ほどあります。どのような考え方で、ツールや手法を取捨選択していますか?

過去に開催されたコンペで似たようなものがあれば、まずはその解法を参考にします。似たようなコンペがない場合は、関連分野の論文を徹底的に読んで、そこで解説されている手法を試します。あとは、大変だとしても自分で考えるしかないですね。

参考にできる情報はなるべく参考にしますが、必ずいつかは自分でアイデアを出して試さなければ先に進めない場面があるので。そういうタイミングで、今回のインタビューで述べたような考え方が必要になりそうな気はしています。

データを見て仮説を立てて、検証する。そのくり返し

――Kaggleにおいてデータを確認するうえで気をつけていることはありますか?

コンペの精度に関わるような点は気をつけて見ています。過去のコンペの例を挙げると、「H&M Personalized Fashion Recommendations」などがわかりやすいと思います。このコンペで、私たちのチームは金メダルを獲得しました。ファッションブランドH&Mのオンラインストアで過去に服を買った人たちが、次に何の商品を買うのかを1ユーザーにつき最大で12種類予測するというコンペです。

このコンペではデータのCSVファイルだけではなく商品の画像も提供されているので、ユーザーがどのような商品を購入したのかを実際に確認できるんですよね。あるカスタマーIDの人の購入履歴を確認してみると、黒のパンツを購入した人が翌日にまた同じものを買っていました。

別の人の購入履歴も見てみると、似たようなシャツをたくさん買った4日後、そのなかの1種類でまた同じものを買っています。たぶん、このシャツを気に入ったんでしょうね。こういった感じに、ユーザーは似たような商品をリピートして購入する傾向があることは、データを一つひとつ見ていくうちに気づきます。

この傾向ってかなり納得感があるじゃないですか。実際、人間って似たような服をよく買いますよね。これをもとにして「何かの服を買ったユーザーは、それと色味や素材が似た服をリピートする傾向にある」という仮説を立てて、新しい特徴やモデルを作って実験をしていきます。それと同じように「では、リピートされない服にはどのような特徴があるのか」も、データを見つつ仮説を立てていく必要があります。

これはわかりやすい例ですが、こういった感じにデータを見ながら傾向を把握して仮説を立てて、という作業のくり返しです。服の場合は自分にとって身近なものだから肌感覚としてわかりますが、自分がそれほど詳しくない業界をテーマにしたコンペの場合は、Webの記事や本などを読んで業界知識を学んでいます。

――データを見ながら、同じ部分を注視して分析することはありますか?

データとしては同じものを見ていても、観点は必ず変えて見ていますね。先ほどの例であれば、「たくさんシャツを買ったうち特定の商品だけリピートしていたけれど、実は別の日に別の商品もリピートしている可能性はないのか?」とか。そうやって自分なりに疑問を持ってデータを見続けて、とにかく「こういう可能性はないんだっけ?」と仮説を立て続けていく。そして、それを検証できる方法をなるべく効率良く、片っ端から試していきます。

「みんなもKaggleをやろう」と言うつもりはない。自分の好きなことをやればいい

――小野寺さんはlate submit*でひたすら振り返りをしている印象があります。振り返りはスキルを向上させるうえで有効な手段でしょうか?

*…コンペ終了後でも、自分の作成したモデルをsubmitできる仕組み。late submitを行うことにより、「もしも該当のモデルをコンペ期間中にsubmitしていたら、何位に入賞できたか」を知ることができる。

もちろんです。むしろ、何かを学ぶという意味ではコンペ中よりもlate submitのほうが得られるものは大きいんじゃないですかね。上位入賞できなかったコンペのほうが学ぶことはたくさんあるので、絶対にlate submitはしたほうがいいです。

――記事の読者のなかには「Kaggleで上位に入りたい」と考える人もいると思います。効率的にスキルを向上させるには、参加したコンペのうちlate submitに時間をかけるものとそうでないものを取捨選択することも重要です。どのような特徴を持つコンペの場合、入念にlate submitすることをおすすめしますか?

個人的には、Public LeaderboardとPrivate Leaderboardの評価が安定的に連動しているコンペかどうかが大事な観点だと思っています。そうじゃないと、運ゲーみたいなコンペになってしまうので、学べる要素が薄いんですよ。手元の検証作業で発見した気づきが、きちんとテストにも表れるようなコンペを選んで勉強したほうがいいです。

――上位入賞者の実施した手法のうちすべてを試すと時間が足りなくなります。どのような要素を取捨選択して試していますか?

そのコンペの肝になっていた要素のうち、自分が見落としていたところは絶対に試します。もし仮にその要素を取り入れてlate submitした結果、ランキング上位になったらめちゃくちゃ悔しいじゃないですか。「やっておけば良かったな」という。そういう作業をくり返して、スキルを磨いていく感じです。

――最後に、Kaggleを通じてのデータサイエンティストとしての成長という観点で、読者の方々にメッセージをお願いします。

Kaggleは良くも悪くもモデルの精度しか評価されない場所です。データサイエンティストとして飯を食っていくには、それ以外にも大事な要素がたくさんあるので、当然ながらKaggleですべてを学べるわけではありません。でも、最新の手法を学びたい人には良い場所だと思います。

――読者の方々に、Kaggleに特化してキャリアを歩むことをおすすめしますか?

私は後悔していないですね。もしやっていなかったら、たぶんNVIDIAには入れなかっただろうし、今みたいな人生を歩むこともできなかったと思います。ただ、それを他の人にもすすめるかというと、そんなことはありません。

私も、もともとKaggleで食っていこうなんて思っていなかったですから。今も面白いからやっているだけ。だから、Kaggleに取り組んでキャリアを良くしようと考えると、つらいんじゃないかな。それよりは、自分が好きなことを一生懸命やったほうがいい。そうすれば結果的には、キャリアが良い方向に進むんじゃないですかね。

企画協力・取材協力:田中一樹
取材・執筆:中薗昴