データサイエンスの先進技術

Owen Zhang氏:今日の話でありますけれども、データサイエンスの先進の技術ということです。ランチの直後ですので、あまりテクニカルにならずに、少しエンターテインメントというような価値を提供したいと思っております。

今日のアジェンダです。イントロがありまして、私の観点から見たデータサイエンスとは何か。また、データサイエンスとプロジェクトとは何かという話。そして、我々はデータロボットで何をやってるか。

それから、データサイエンスのコンペがどのようなことをやっているのか。そしてそのあと、私の秘訣なんかも、いくつかみなさんと共有したいと思います。ただ、そこまで秘密の秘訣ではないので、期待値は下げておいてください。

そして実例の話をして、データサイエンスのコンペの制約・限界というお話をしたいと思います。いわゆる実世界のアプリケーションにどのようなチャレンジがあるかということで、最後まとめていきます。

これは私がもっと若かったときの写真です。そのほうがいいかなと思って、残しております。そして、Kaggle(カグル)のプロフィールであります。できるだけ透明にしております。

ここはちょっと泣いております。もう私は、一番のKagglerではないんです。ブラジルの、すごく優秀な人に、昨年の10月に負けてしまいました。でも、なかなかいい実績かなと。2年ぐらいは頑張ってやりました。

一番下のところでありますけれども、8回のコンペがうまくいきました。ここの(右下の)ところを見ていただきますと42。ここもよかったんですけれども。次のデータサイエンスプラットフォームに参画する前に、AIGという保険会社に勤めておりました。みなさんもご存知かと思います。東京にもオフィスがあります。

データサイエンスとは何か? 定義と改善プロセス

データサイエンスのテクニックについてお話しますけれども、データサイエンスとは何か。非常に大きな用語ですよね。数字にかかわっている限りは、データサイエンティストと自称できると思います。

でも、私の定義はもう少し狭いです。データサイエンスというのは何かというと、これはいわゆるプロジェクトで、いろいろな情報を活用して、成果をきちんと出すものであると考えています。

プロセスは、データサイエンティストが、ビジネスパートナーと共に、いろいろな機会を特定して何かを改善するということ。だいたいトップラインかボトムラインの改善だと思います。

あるいは病院であれば、その患者さんの来院数を上げるとか、それをデータ分析としてやると。この問題が特定できた時点で、どんなデータが必要なのかというのはわかりますので、必要なデータを集めるということになります。

そしてデータサイエンティストは、データをとにかくまとめる。そして、そこから有用な特徴を抽出することにかなり時間をかけます。そして次に、モデルを作って評価します。

そしてさらに、本番稼働に入れていって、将来のデータに活用していくということですけれども。その本番で稼働したら、モニタリングをしてどうであるか。モデルをしっかりと再評価していくということになります。

そしてまたさらに、オポチュニティを見つけていくということで、またサイクルを回すということになります。すごくラフに書いてありますけども、上のほうはドメインナレッジですね。いわゆるビジネスナレッジに駆動しています。そして下のほうはどちらかというとテクニカルな知識によって駆動されているという領域になります。

コンペティションの限界

この大きな図の中で、データサイエンスのコンペティションは何をやっているのかということですけれども、いわゆるコンペは、ほとんどここのテクニカルな部分しかカバーしていないわけです。

モデル推定や評価やデータの組み立て、特徴の抽出など、そういったところだけです。ご存知の方もいると思いますが、Kaggleにいきますと、問題はすでに定義されているわけです。

このような問題があるということで掲示されているわけです。ですから、実際のところはまったくやる必要がないわけですね。その予測のところで終わるということになります。

データロボットにおきましては、私たちの仕事はKaggleやそのコミュニティからインスピレーションを受けて始まったわけですけれども、実装が非常に必須の部分なんですね。やはりデータサイエンスを実稼働させていくことが大事なわけです。

ですから私たちの今の仕事では、モデルの推定と評価、実装の部分をやっています。そしてさらに、このデータの組み立てや特徴の抽出もやっているということです。

私たちは若い会社・若い製品ですので、このようにカバレッジを広げていきたいと考えています。データの組み立て、フューチャーエンジニアリングも加えていきたいし、さらに包括的なモニタリング、そして解釈をやっていきたいと考えています。

コンペティションの3つのデータセット

みなさんは、データロボットの話だけを聞きに来ていらっしゃるわけではないと思います。ですので、ここからは「データサイエンスのコンペティションで何が起きるか」ということを話したいと思います。Kaggleをご存知の方はどのぐらいいらっしゃいますか?

(会場挙手)

ありがとうございます。データサイエンスのコンペなんですけれども、例えばデータの問題を企業から出すと、データサイエンティストが世界中からモデルを作って、そのコンペに参加するわけです。

もちろんそこで表彰を受けたり、お金を受けたりするんですけれども、リクルートはこのコンペをスポンサードしてくれた会社です。

例えば彼らはデータセットを持っていて、データセットというのは3つに分かれています。トレーニングデータと呼ばれるものはそのデータをコンペティターに渡してその上にモデルを作ります。

Public LBおよびPrivate LBがあります。

予測を作ったらプロジェクションの予測を提出します。モデルを出すわけではありません。予測だけを出します。そしてコンペのオーガナイザーが予測を比較して、誰が一番いいパフォーマンスなのかということを決めます。

そのコンペで、PRタイムのフィードバックを出してくれます。プロジェクションがどうだったのかというのを、パブリックリーダーボードに載せます。みなさんがコンペに参加すると、このリーダーボードで自分のモデルの成績を見るという、楽しいものになっています。

そのコンペの終わりに、実際のモデルのランキングが、このプライベートリーダーボードに出てきます。パブリックというのは非常にエキサイティングですね。2ヶ月ぐらいにおいて、それもリアルではないということになると、プライベートのリーダーボードに行って、見るわけであります。

このデータサイエンスのコンペのストラクチャーは非常に重要なことを思い出させてくれます。この予測というのは、答えがまだわからないわけです。もちろん、その答えがわかっているのであれば、予測しても意味がないわけで、答えがわからないものに予測すると。

我々のこの成功の秘訣ですけれども、スライドに関しては写メ撮っていただいてもけっこうですけれども、残念ながらこれらはまだ秘訣と言えるほどではないと思います。

コンペで成功をつかむ7つの要素

成功するかどうかに関しては、運も大事だと思います。確かに10〜20のコンペに出ますけれども、その1つずつを見ると、やはり運が非常に重要な要素だと思います。

我々はノイズのデータセットとか、ノイズの結果に直面するわけですけれども、時間もないですし、幸運にも第三者の目から見て、たまたま新しい方向に向かっていたということもあると思います。

2つ目は、鍛錬と規律です。やっぱりモデルを厳しく評価しなくてはなりません。リアルなものでありますけれども、精神的にも規律というものが非常に大事になってくると思います。

3つ目は、やはり努力ですね。努力が大事です。私が最初にコンペに参加したのは4年前です。Kaggleは11年ぐらい前に始まったのでしょうか。

その直後に私は始めたわけでありますけれども、優秀なデータサイエンティストは問題を10問ぐらい見れば、「たぶんこれでわかるんじゃないか」と答えが出るんです。

そういった頭のいい人もいますけれども、私はそうではありません。なので、私はコンペにおいても、私の何百時間という時間をそれにかけるわけであります。時間をかければ、努力をすればアイデアも浮かんでくるということです。

Kaggleは趣味としてはいいんですけれども、キャリアとしてはあまりよくないです。本当にお金や報酬を求めるのであれば、それほどいいものじゃないと思います。

もう1つテクニカルなものがありますけれども、フィーチャーエンジニアリングというのは、非常に重要なデータサイエンスの一部でありますけれども、これまでのところ画期的なアプローチというのはありません。

これはドメインのナレッジドリブンのものが多いんですけれども、ドメインの知識、そして経験が重要であります。もちろん、モデルストラクチャーというのも、非常に大事になります。

最後の2つは、非常に効率性に関わるものであります。やっぱりいいアイデアを持つ、アイデアが浮かぶというのは大事なんですけれども、アイデアが浮かんだとしても、それはまだスタートでしかないわけです。

まずアイデアを持ちます。そしてそのいいアイデアを、正しくコード化しなくてはいけません。私の場合は、「非常にいいな」と、アイデアが浮かんでコーディングをするとうまくいかないとか。でも、非常にいいアイデアがたくさんあったとしたら、時間をかけてトライしなくてはいけません。

データは非常にたくさんのものがあるわけですから、それをトライしてみるということも、非常に大事だと思います。

ランダムなシミュレーションは非生産的

哲学理論の話になりますけれども、我々データサイエンティストはモデルを作ります。そこで最大の障害になるのはオーバーフィットです。重要なこととして、オーバーフィットするためには、たくさんのやり方があります。

典型的な例としては、たくさんのバラメーターをモデルに入れてしまうこと。でも、このオーバーフィットの1つの方法としては、いろんなモデルをトライすること。例えば、いろんな50のモデルをやってみる。そうすると51番目が非常にうまくいったとしても、それは偶然そうなったということになりますね。

実験やランダムのシミュレーションは大事なんですけれども、例えばランダムに1,000ぐらいの数字を入れて、非常にいい予測結果が出たとしても、何の意味もありません。ただそうなったという偶然の結果であります。

毎回私はデータセットを持って、それを見てモデルを作ろうとします。そしてテストをする。「これはうまくいく、これは上手くいかない」とやったときに、統計的に言ってもそこで失うものも出てくるんです。なので、いろんなデータポイントがあって、それで終わりだとすると、データは非常に非生産的になります。

哲学として私が守っていきたいのは、もっと考えるだけ考えて、トライするのは少なくしようと。問題は深く考えて、そしてプロセスも考えていくと。そこでデータフィーチャーを作っていく。

そのプロセスを再現するようなプロセスを作って、考えていくと、ランダムにいろんなものをトライするよりも、まず先に十分に考えてやるほうが、効率がいいと思います。

コンペに参加する前に知っておくべきこと

事例に入る前に、いくつかの基本的な要素があります。 重要なこととして、データのコンペをするときには、やっぱり楽しまなければいけませんけれども、問題として、数学的な比較ができなくてはいけません。我々は勝者を決めなくてはいけないのです。トップモデルのパフォーマーが0.0001パーセントだとしても、その2番目とはそんなに差がないわけです。ということは、我々のモデルはどう評価するのか。

要はその答えを除かないで、どうやったらそれがわかるだろうかということになります。例えばデータを分けることができないのであれば、スタートしてはなりません。そうでないと、そのアプローチがうまくいくかどうかわからないからです。

2つ目といたしましては、ユーザーフォーラムがあって、今のコンペティターも前のコンペティターもアイデアをシェアする人がいますけれども。

でもフォーラムに入って、みなさんがすでにトライされているアイデアは、検証していただきたいと思います。そのうまくいかなかったアイデアというのは、事前に知っておく必要があると思います。

最後ちょっと飛ばしますけれども、これはそれほど安価なもの、携帯で簡単にできるわけではありません。ということで、メモリー上にデータを入れるだけでもそれなりの時間がかかるわけであります。しかし、十分投資に値するものであると考えております。ですからぜひ試してみてください。

ということでパブリックおよびプライベートのリーダーボードがあるということです。ということで、パフォーマンスのマトリックスのフィードバックはパブリックのリーダーボードだけでは出ません。

ロジスティックな問題を解いているときに、パブリックのリーダーボードは、実際にその分類の実際の合計が出るわけで、積み上げができるわけでありますけれども、モデルを作るために、初めてそれを提出するときにうまくいかないと、「これはコーディングの間違いかな?」というかたちで確認をします。ということで、Public LBは一種のチェッキング機能であるということになります。

それからもう1つは、自分のトレーディングデータと、それからパブリックのスコアが同じようなかたちで、並列して動くかどうかということになります。それが動くのであれば、それが理想であります。

これちょっとパブリックリーダーボードで映るということになりますけれども、アクセスに関しては、すべて同じアクセス権があるわけでありますけれども、時間、グループによって分けたときに、パブリックデータボードというものに作られます。

私としては、できればまったく新しいアルゴリズムを発明したい。それをコンペにかける、それで儲けるということになりますけれども、やはりなかなかそのようなまったく新しいものはないということで、使われたアルゴリズム、公開されたアルゴリズムを使うことがあります。ということで、そのようなアルゴリズムを熟知することは重要であります。

それらをいかに効率よく使うか。モデリングの予測でありますけれども、ここに書かれたものが不可欠であると思います。Gradient Boosting Machine、Neural Networks、それからRegulariized regression/SGD、そしてFactorization machine、SVM。

このアルゴリズムを作るということではなく、そのアルゴリズムをどうやって使うかということを理解する必要があると思います。

アンサンブルあるいはスタッキングをどうやってやるか。複数のモデルの予測とそれをいかにまとめることができるかどうかということであります。