会員登録すると
このコラムを保存して、いつでも見返せます
機械学習に注目が集まるのに伴い、参加者が増え続けるデータ分析コンペティション(コンペ)プラットフォーム「Kaggle(カグル)」。その特性から、「データサイエンティストにとって“筋トレ”みたいなもの」と評す声もある。Kaggleで最上級者「Grandmaster」の一角をなす阪田隆司さんは、それに同意する一人だ。世界中のデータサイエンティストら15万人以上がコンペで競い、交流する中、実務でも生きる本質的な力が鍛えられるのだという。
今回はそのKaggleについて、ユーザー名「Jack」が国内外で有名な阪田さんに、最近のコンペの傾向や基本的な流れを聞いた。また、彼が好成績を収めたコンペとしてIndoor Location & NavigationとInstant Gratificationを取り上げ、一流プレイヤーならではのアプローチも紹介する。【藤崎竜介、田名網勇希】
参考記事→同じKaggle Grandmaster、小野寺和樹さんへのインタビュー
1. 複雑化するKaggleのコンペ。単にデータをモデルに組み込むだけでは、「勝てない」
2. 成功のカギは、コンペ序盤に仮説検証を繰り返してアプローチを練ること
3. 自分がニューラルネットだったとすると……。独自手法でチームでの準優勝に貢献
4. “曲者”コンペに61行のシンプルなコードで4位入賞。Kaggleでの“筋トレ”は、実務でも生きる
複雑化するKaggleのコンペ。単にデータをモデルに組み込むだけでは、「勝てない」
――本題に入る前に、阪田さんがKaggleに参加し始めた経緯を聞かせてください。
阪田:初めて参加したのは、パナソニック入社3年目の2014年ですね。当時、配属された新部署がデータサイエンスに本腰を入れようとしていて、未経験だった私はキャッチアップのため手探りで情報収集していました。そんな中、同部署の後輩に教えてもらったのがKaggleです。単純に面白そうだと思ってユーザー登録しました。
――データサイエンスは未経験だったのですか。
阪田:そうですね。統計的なデータ分析は既に仕事でやっていて、またプログラミングについては学生時代から親しんでいましたが、機械学習に正面から取り組む感じではありませんでした。
――プログラミングは学生時代からやっていたのですね。
阪田:大学院で航空宇宙分野の信頼性工学を専門にしていて、CやC++といった言語を使いつつ確率などの研究をしていました。この時プログラミングの力に衝撃を受けたことは、今の仕事につながっていると思います。「コードを書いた通りに動くなんてすごい!」みたいな感じでしたね。
――なるほど。では初めて参加したKaggleのコンペは覚えていますか。
阪田:ある人がどの保険商品を選ぶかを予測する、Allstate Purchase Prediction Challengeでした。データサイエンスの知識は不十分でしたが、知らないなりにいろいろ工夫して全1566チーム中、単独参加で28位に入れたんです。今よりKaggleユーザーが少なく競争率が高くはなかったのですが、初めてにしては「いい線」にいったのではないかと思います。
――それを契機に、のめり込んだわけですね。
阪田:ええ。「自分に向いているかもしれない」と思いましたね。正直、次に出たコンペではそれほど良い成績は出なかったのですが……。
――厳しさを思い知らされたわけですか。それはそれでモチベーションになったのかもしれないですね。性格は負けず嫌いな方ですか。
阪田:そうかもしれません。Kaggleは「知能バトル」というか、他のユーザーと競って勝ち負けがはっきり出るところも、私にとって魅力です。
◆インタビューはオンラインで実施
――では主題の一つ、「Kaggleの今」を聞いていきたいと思います。常にさまざまなコンペがKaggle上で開かれていますが、最近はどんな内容のものが多いと感じますか。
阪田:私が始めたころに多かった、整ったデータセットを与えられて、それに対応する予測モデルの精度をシンプルに競うコンペは減っている印象です。そういう単純なコンペは、もうやり尽くされたのかもしれませんね。
少し前から、より複雑なデータセットを扱うコンペが増えています。与えられるデータを素直にモデルに組み込むだけでは、勝てないんです。
――どういうことでしょうか。
阪田:例えば、私が直近で参加したIndoor Location & Navigation(2021年5月18日終了)では、主催者が提供するデータを、自分で考えて戦略的に加工する必要がありました。つまり、「整っていないデータ」を扱うコンペが増えているわけです。
――別のデータサイエンティストから、データサイエンスの活用範囲が広がり、実務で「整っていないデータ」を扱うことが増えていると聞いたことがあります。そうした現状がKaggleにも反映されているのでしょうかね。
阪田:そうかもしれません。必然的に、モデルをどうするかなどより前の段階で、そもそもどうやって問題を解くかを根本から考え、仮説検証を繰り返す必要性が増しているのだと思います。
――そのほか、最近Kaggleで目立つ傾向はありますか。
阪田:数値、画像、文章など異なる様式のデータを並行して扱うコンペも目につきますね。総じて難度は高まっています。他方で、アイディアを盛り込める余地が広がっているので、私はやりがいを感じています。
成功のカギは、コンペ序盤に仮説検証を繰り返してアプローチを練ること
――コンペの流れについても聞かせてください。大まかに……(以下の図に続く)
といったイメージだと思うのですが。
阪田:一般的にはそんな感じでしょうね。補足するなら、タスクやデータへの理解を深めたら一旦ベースラインモデル(*1)で予測して、どれくらい精度が出るかを確かめてから前処理や特徴量など、自分なりの工夫を入れ込んでいくのが王道です。その過程で、ユーザー同士が情報交換するDiscussion機能でアイディアが共有されたりするので、参考にすることもできます。
*1 データを極力加工しない状態で作る、モデルの素案
――一連の流れで、阪田さんなりに重視していることはありますか。
阪田:私はタスクやデータを把握したら、まずベストなアプローチが何かをしっかり考えます。ここにかなり多くの時間を割きますね。
――ベースラインモデルで精度を確かめる前に、ですか。
阪田:はい。自分なりに仮説を立て、いろいろなアプローチを机上で検討します。
――手を動かす前に、問題解決のグランドデザインを描く感じでしょうかね。
阪田:そうですね。もちろん特徴量やモデルの作成といった部分も大切でいろいろなテクニックを駆使したりするのですが、私自身はそれらより前の段階で、まず俯瞰(ふかん)的に考えることを大事にしています。先ほど述べたようにタスクが複雑化しているので、こうしたプロセスは以前より重要かもしれません。
自分がニューラルネットだったとすると……。独自手法でチームでの準優勝に貢献
――そのような取り組み方をした実例として紹介できる話はありますか。もう一つの主題である上級者ならではの“戦い方”を、読者と共有できればと思います。
阪田:既に触れたIndoor Location & Navigationでも、まずアプローチを考えるのに時間をかけました。
――ある商業施設の中でスマートフォンを持った特定の来店客がどう動いたかを、推定するコンペでしたね。
阪田:時系列に沿って並ぶWi-Fi信号の強度のデータから、対象者の位置をどう割り出すかが焦点の一つでした。この場合、利用するモデルに時系列データに適したRNN(再帰型ニューラルネットワーク *2)を選び、xとyの座標を特定しにいくのが正攻法だと思います。
一方、私は施設の各フロアを細かいエリアに区切った上で、再帰型ではないNN(ニューラルネットワーク *2)を採用し、多クラス分類(*3)でどのエリアに入っているかを推定するアプローチを採りました。コンペ序盤に仮説検証を繰り返した上で選んだ道です。時系列性については、後処理で補完できると考えました。
*2 NNは脳の神経回路網に類似した数理モデルの一種。RNNはNNを拡張して時系列データを扱えるようにしたもの
*3 データを複数のクラス(グループ)に分類する分析手法
◆上記画像はイメージ
個人的には、このやり方が結構「はまった」のだと思います。チームとして予測精度を高めるのに貢献できましたし、ユニークな解き方を示せたのではないかと。
とはいえ、よりシンプルかつ高精度なやり方を示した方もいるので、それには正直ちょっと「負けた感」があるんですけどね……。
――高レベルな戦いだったことがうかがえます。そもそも、どのように多クラス分類で解くアプローチが出てきたのでしょうか。
阪田:Kaggleユーザーと議論したりする中で、よく「モデルの気持ちになって考える」みたいなことをいったりするんですけど、今回はまさしくNNになったつもりで考えました。
このコンペでは施設内の各アクセスポイントから発せられるWi-Fi信号の強度が入力情報のベースになっていましたが、自分がNNだとすると、この種の情報を受け取ってxとyという2つの実数値を出力するのはどうもしっくりこない感じがしたんです。
xの値が合っていてもyが大きく外れていると、位置は正解とは全く違うものになってしまいますし……。
一方、多クラス分類だと「このアクセスポイントの信号が強いから、この辺りだ」みたいにシンプルに位置を指し示せるので、学習の効率が良くなると考えました。一見突飛なアイディアかもしれませんが、NNの目線だと割と素直なやり方だと思います。
◆Kaggle上の阪田さんの個人ページ
――そのほか、このコンペで印象的だったことはありますか。
阪田:モデルに予測させた後の処理の重要度が、かなり高いコンペでした。これはチームを組んでから気づいたことです。後処理にはそこまで力を注いでいなかったので、発見であり、ある意味で反省点ですね。
チームメンバーの後処理のアイディアがかなり強力で、だから良い結果になった面は大いにあると思います。
――チームといえば、今回、公式コンペでは初めて他のユーザーと組んだと聞いています。Kaggleでは今回の阪田さんのようにコンペの途中でチーム結成して上位を狙いにいくことが多いようですが、どんな経緯で“共闘”が実現したのでしょうか。
阪田:コンペ終了の1カ月くらい前、4月後半だったと思いますが、中心人物の方から声をかけてもらいました。Kaggleを始めて以来単独での出場にこだわっていたのですが、少し前からいつかチームで参加したいと思うようになっていたため、誘いに乗ることにしました。
――なぜチーム参加に興味を持ち始めたのですか。
阪田:学びを得るためですね。データサイエンティストとして次のステップに進むために、新しい挑戦が必要だと感じ始めていました。
実際、既に述べた後処理についてはすごく勉強になりましたし、他にも多くの発見がありました。準優勝という結果も単独では得られなかったと思いますし、私を除くと4人いたチームメンバーには、すごく感謝しています。
“曲者”コンペに61行のシンプルなコードで4位入賞。Kaggleでの“筋トレ”は、実務でも生きる
――別の事例についても聞かせてください。2019年開催のInstant Gratificationでは4位に入賞し、コードを公開しています。Kaggleの運営元が主催する、ちょっと変わったコンペだったようですね。
阪田:人工的に生成されたデータを扱う内容で、データがどういうふうに作られたかを理解してうまくモデルに落とし込むことが求められました。
実際は6種の正規分布で生成されたデータセットが集まったようなものだったので、それらのデータを6個のクラスタに分類することがポイントになりました。
――どんなアプローチを採ったのでしょうか。
阪田:全ては説明しきれないのですが、一番の特徴は、クラスタに分ける上で説明変数(X)だけではなく目的変数(y)も取り入れたことですね。その際、学習用とテスト用の両方のデータを用いました。テストデータはyの値が分からないので、このタスクは0と1の二値分類であることを踏まえ、中間の0.5をそのyに“仮置き”して対応しています(下記コード全文の25行目)。
加えて細かい工夫では、クラスタの初期値に乱数を追加して、5個の乱数の中から最も精度が高いものが採用されるようにしました(同33〜43行目)。
この時もデータの性質を把握した上で、コンペ序盤で最適なアプローチを考え抜きました。結果4位になったのは運の要素もあり、正直このコンペはタスクの特性上30位くらいより上は首位と同等だと思うのですが、61行という比較的シンプルなコードで高精度を出せたことには手ごたえを感じています。
◇Kaggle上での阪田さんによるこちらの投稿でも、コードを確認できる ――こうしたKaggleでのチャレンジを通じて、データサイエンティストとして成長できている実感はありますか。 阪田:あります。特に、私がコンペで重視していると述べた自分の頭で仮説検証を繰り返すことについては、Kaggleでかなり鍛えられていると思います。 「Kaggleはデータサイエンティストにとって筋トレ」みたいなことがいわれたりもするんですが、その通りでしょうね。何度も参戦する中で、思考のための“筋力”が高まる感じです。 実務では社内のさまざまな部門からデータ活用に関する相談を受けてお手伝いするのですが、たいていモデルの検討などに入る前に、大枠のアプローチをどうするかを考え抜かないといけないんです。そんな時は、結果的に機械学習モデルが必要にならなかったとしても、Kaggleでの経験が生きていると思います。 それに多くのコンペを経験する中で、「この内容でこのアプローチを採れば、だいたいこのくらいの精度が出る」といったことを感覚的に察知する“目利き”みたいな力も養われている気がします。 ――実務だと業務効率や開発のスピード感が求められるので、その目利き力は大事そうですね。 阪田:そうですね。結果的に案件開始から良いアプローチを見出すまでの時間を、短くできていると思います。
会員登録すると
このコラムを保存して
いつでも見返せます
マッキンゼー ゴールドマン 三菱商事
P&G アクセンチュア
内定攻略 会員限定公開
トップ企業内定者が利用する外資就活ドットコム
この記事を友達に教える