PyDataではこれまで機械学習や深層学習などデータ分析関連技術をテーマ別に扱ってきましたが、今回のテーマは、技術というよりはその技術をいかに応用するかが問われるデータ解析コンペの現場から、世界最高レベルのエクスパートをお招きしました。分析コンペとして歴史も長く、世界でもっとも権威のある大会の一つであるKDDカップで2015年の優勝チームの一人だった@smlyこと小嵜耕平さん。世界中の企業がデータを公開しコンペを開催し、30万人を超えるデータサイエンティストが登録するKaggleにおいて、2年近く1位の座につき、データロボット社のプロダクト責任者でもあるOwen Zhangさん。データロボット社のチームは自社製品を使って前述のKDDカップにも参加し、3位に入賞しています。また勉強会には同じくKDDカップで2位に輝いたFEG社のデータサイエンティストの方もご参加され、文字通り世界トップデータサイエンティストの集まるメッカとなりました。
日本人トップKagglerに必勝技を聞く
データ分析コンペでは、精度の高いアルゴリズムはもちろんのこと、それらをどのよう応用して現実の問題を解決するのかが問われます。理論的な後ろ盾よりも高い予測精度が優先され、またコンペによってはその場で複数の選手が手を組んでチームを作るなどのダイナミックなコミュニケーションも重要です。
この分野で最近特に耳にするのがKaggleです。企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合うことを可能にしたプラットフォームで、億を超える高い賞金がかかったコンペや、上位の参加者に仕事がオファーされるコンペなどもあります。2010年に設立され現在登録者数は30万人以上。学会、企業、フリーランスなどさまざまな経歴のデータサイエンティストがしのぎを削っており、数値計算から画像認識まで、さまざまなコンペが開催されています。今回はそんなKagglerの中でも、日本人としてはトップの世界五位にランクインしている@smly(スマイリー)さんにお話いただきました。
今回は、ACMという国際学会が1995年から開催しているKDDカップで今年smlyさんを含むチームがどうやって優勝したか、その裏話。KDDカップはKaggleと同じく、この手のコンペの中でも世界で最も広く知られているものの一つです。今年のデータは、中国のMOOC(Massive Open Online Courses:大規模オンライン学習サービス)において、コースから脱落してしまう生徒を予測するという課題。それぞれの生徒が今までにどのコースに参加し、アクセスしたのかが元データとなりました。データを提供した中国最大級のMOOCであるXuetangXとしては、このモデルを利用し、脱落する可能性の高いユーザーを事前に予測したいという目的があったと考えられます。抽出したユーザーに対し、エンゲージメント向上の施策をうつなどして脱落を防止する狙いです。
smlyさんが強調していたのは予測モデルの精度は個別の高精度のモデルを作ることも重要だが、複数のモデルを組み合わせる(アンサンブルと呼ばれる)ことが同じく重要だということ。コンペの最終局面では、それまで個人として参加していたユーザーが呼びかけあってチームを形成することがよくあります。これは高精度だが質の違う予測モデルを組み合わせてアンサンブルモデルを作ることで、お互いの強みを活かしたさらに精度の高い予測モデルを作るためだということです。個々のモデルには多様なアルゴリズムが使われ、今回のコンペでは次のような数多くの手法が使われました。
- 決定木型のモデルを応用し、特に最近精度が高くて多用される勾配ブースティング
- 深層学習にも応用されているニューラルネットワーク
- 回帰分析手法に基づくロジスティックリグレッション
これらの個別モデルからアンサンブルを作るためには、いくつかの方法がありますが、smlyさんが今回お話してくれたのは、その中でも一番一般的なスタッキングという手法。
学習用のデータを5つに分割し、5分の4でそれぞれの個別モデルを使って学習し、残りのデータに対して出力変数を計算するという操作を5回繰り返すことで、全行に対して新しい特徴量(メタフィーチャーと呼ばれる)を追加していく。これをすべてのアルゴリズムで行い、もとの入力データに新たに特徴量を追加したデータをさらに別のアルゴリズムへの入力とし、そこから出力変数を再度計算するという手法です。このようにデータを分割することで、出力変数が学習データに依存してしまう過学習の問題を回避することができますが、全体の計算リソースが非常に多くなる上、最終的なモデルは複雑性を増してしまうという問題も抱えています。
今回のコンペでは上図のように、最終的にこの手法を3つのステージに分けて応用し、64の個別モデルを組み合わせたそうです。
アルゴリズムの質に加え、入力特徴量への理解もデータサイエンティストが行える重要なインプットです。コンペでは、チームによってさまざまなアプローチが試されますが、smlyさんのチームで計算したのは、例えば、
- 対象となる生徒が他のコースでドロップアウトしているか
- 累積での参加授業数
- 今までに何回テストを受験しているか
- 一番最近いつアクセスしたのか
などの特徴量を、生データであるアクセスログや、登録学生情報のDBなどを組み合わせて計算しました。特徴量が追加されるごとにモデルの精度がどんどん上がっていく様子を分かりやすく説明していただきました。
今回のKDDカップでは、多くのチームが非常に高い(AUC0.9以上、完璧なモデルはAUC1)予測精度のモデルを作り、激しい接戦が繰り広げられました。最終的にはsmlyさんたちのチームが終了のわずか四時間前に行った「強引な」特徴量生成が功を奏し、順位が入れ替わったそうです。
このように、コンペの勝利は最終的に粘り強さが功を奏すことも多いようです。理論的には、なぜうまく行くのか証明できないとしても、試してみて結果が良ければ軍配は上がります。ただし、最終的に勝つモデルは非常に複雑な前処理と特徴量生成、そして多種のアルゴリズムの組み合わせになる傾向にあり、そのような複雑性の高い分析は実際のサービスには使われない場合がほとんどです。計算量が多くなるだけでなく、仮に何かがおかしくなったとしても、デバッグが不可能なシステムを使うことにはリスクが伴います。技術や手法の進歩の一方で、再現性や実用性などにおいて、今後機械学習分野にどのような進展が見られるのかが期待されます。