atma-inc__blog

atma株式会社の公式ブログです。

atmaCup#2 インターン生参加記録 #atmaCup

はじめに

はじめまして、atmaでインターンをしている植田 (@tellmoogry)と申します
今回のatmaCup#2では一般参加者として参加させていただきました
本記事は1参加者目線からみたコンペの参加記事となります

コンペ概要

今回のタスクは"睡眠データをもとにその人の睡眠の質を予測する"というものでした。
データはユーザーごとにtrain, testで連続した時系列データが与えられました。
目的変数はユーザーが入力した[1,2,3]の3段階で与えられ、値が小さいほどその人の睡眠の質が低いことを表します。
評価指標はRMSEでした。*1

public, private*2の中身については事前に以下のような説明がありました。

private/public は時系列によって分割されています。具体的には特定のユーザーに対してもっとも新しいデータを private / 次に新しいデータを public としています。 private / public の割合は 1:1 です。

要するに特定のユーザーaについてtrainには10/1~10/15のデータ、testには10/16~10/19までのデータがあったときに
10/16, 10/17がpublic、10/18, 10/19がprivateといった感じです。

f:id:atma_inc:20191125130730p:plain

その他に与えられたカラムとしては
・ユーザー情報:性別や年齢、会社など、睡眠に関するアンケート内容
・睡眠情報:いつ寝ていつ起きたか、アプリの中で計算された睡眠の質など
また上記のアンケート結果はユーザーに紐づけられた別テーブルの欠損が多いデータでした。

タスクが睡眠という全員に馴染みのあるものなので、自分が普段寝るときのお気持ちを上手く特徴量に表すことや、与えられた特徴量がアプリの内部で算出された独特なものも多かったので、アプリに対する理解(=カラムへの理解)を深めるということが求められました
10:30~18:00までの7時間という短い時間の中でデータへの理解を深めるか、特徴量を沢山作るかの時間配分もひとつ勝負のポイントだったのではないかと思います。

コンペ中に取り組んだこと

特徴量
・睡眠の質に関わる特徴量(睡眠時間など)について前日との差分
・アンケート結果のうち数値系の特徴追加
・カテゴリや、連続データをカテゴリ化したものに対してgroupbyして統計量
・月日をsin, cosに変換
・金土日祝日フラグ
・count encoding
・データのクリーニング
・userごとのtarget encoding
・理想睡眠時間と実際との差分

バリデーション
user_idでstratified

モデル
・メインのLGBM
・stacking用の random forest

結果

昼の15時ごろの時点で2~3位あたりをうろちょろしていて、当時順位の近かった@e-toppoさんとマージをして2人のモデルを混ぜたら1位に浮上しました。(当時2人のモデルの相関が0.8程度だったらしく、goodマージでした)
そこから主にe-toppoさんの力でコンペ終盤までスコアを伸ばしながら1~2位を維持することができ、終了時は1位で終えることができました。

が、結果は最後shakedownしてPublic 1st / Private 4thでした。
賞金でポケモン買いたかったです...

f:id:atma_inc:20191126125948p:plainf:id:atma_inc:20191126130019p:plain

結果を聞くと上位の方が作成していた、ユーザーのtarget平均からの差分を予測する問題に変えることが重要だったみたいです
(結局targetはユーザーが入力した値であってある意味当てにならない。ユーザーの中で相対的な睡眠の良し悪しを予測する方が良い。という理解をしています。)
アプリを使う人の気持ちからの仮説検証面で取り組みが弱かったのが最後の敗因に感じました。

参加して良かった点

・強者と直接話せる
今回も前回に引き続き、GrandMasterの方々をはじめとしたkaggleで結果を残している本当に強い人たちが数多く参加していました。
そういった人たちとオフラインで机を並べて戦える上に、終了後はどの特徴が効いたか効かなかったか、その特徴量を作るに至った理由のような、solutionには書かれないような試行錯誤の過程をコンペが終わったその場で議論できて1日とは思えないほど濃い時間を過ごせて学びが多かったです。

やさしい解説
これまでのatmaCup同様今回も毎回初学者に向けて@nyker_gotoによる特徴量作成からLGBMの学習まで一連の流れについて、ハンズオン形式での解説がありました。Kaggle Masterにある程度気軽に質問できる場があるのは初学者のスタートダッシュにとても良いと思います!僕はインターン生になる前からこれまでのatmaCupに全て参加していて、最初は初学者として参加していましたが参加するたびに成長を感じるので、ぜひ初学者の人にもおすすめしたいと思います!

他にもatmaCupで知り合った人と一緒にkaggleに参加したり、勉強会に参加したりと色んなキッカケになる場かなと思いますので次回以降もぜひ皆さんに参加していただきたいと思います! それでは次回atmaCup#3でお会いしましょう!! f:id:atma_inc:20191126175115j:plain

*1:予測値と真値の二乗誤差を平均してから平方根を取ったもの

*2:コンペ期間中に分かる仮スコアと、コンペが終了してから初めて分かる順位計算に用いられるスコア

AutoML Tablesを使ってKagglerを倒せなかった話 #atmaCup

はじめに

弊社が主催するデータコンペのatmaCupに、
普段はサーバーサイドエンジニアで機械学習ほぼ未経験の私が、
AutoML Tablesを使って参加し、
数多のKaggler犇めく中で31チーム中8位になりました。
f:id:atma_inc:20190816192927j:plain 本記事はAutoML Tablesを実際のデータコンペに投入してみた結果と感想です。

結論

  • AutoML Tablesはかなりの運ゲー
  • 1時間程でそれなりの結果が出るAutoML Tablesはすごい
  • AutoML TablesよりKagglerはすごい

概要

対象者

本記事の対象者は、機械学習初心者の方や、AutoML Tablesって聞いたことあるけど実際どうなの?という方向けです。

自己紹介

atma株式会社でサーバーサイド及びフロントエンドエンジニアをしている田中です。
機械学習はほぼ未経験です。
最近はFirebase+Vue.jsを使用したアプリケーションをよく作っています。

atmaCupとは?

atmaCupとは、データ解析・アルゴリズムソリューション・システム開発を行うベンチャー企業atma株式会社が主催するオンサイトデータコンペティションです。
実際に参加者が会場に集まりチームでデータ解析を実施し、得た学びを共有します。 f:id:atma_inc:20190819175539p:plain 今回は、2回目(https://atma.connpass.com/event/138332/)の開催で、
Kaggle MasterやGrandMasterも参戦し、関西では過去最大のオンサイトコンペとなりました。 コンペの内容については細かくは言えないのですが、時系列データの予測を行いました。

AutoML Tablesとは?

AutoML Tablesとは、Google社が提供している教師付きの学習サービスです。
構造化データを使用して、機械学習モデルが新しいデータについて予測を行うようトレーニングします。
2019年8月現時点ではベータ版です。

もっと詳しく知りたい方は初心者ガイド(https://cloud.google.com/automl-tables/docs/beginners-guide?hl=ja)がわかりやすいと思います。

本題

AutoML Tablesはかなりの運ゲー

今回のデータコンペでは計5回、AutoML Tablesでトレーニングしました。
結果として毎回かなりCV値がブレていました。

実際に結果を見ていただくのがわかりやすいかと思います。
f:id:atma_inc:20190816195515p:plain 本コンペの評価指標は「MSLE」で、AutoML Tablesは「MSLE」が選べないので「RMSLE」を評価指標としています。 *1

この結果より、かなりブレていることがわかります。

さらに、AutoML Tables上のCVとコンペサイト上のLBの値が乖離していました。
f:id:atma_inc:20190816200741p:plain LBは「MSLE」なのでRoot取らないと行けないのでちょっと分かりづらいですが、
明らかに数値が異なります、CV上の値がそのまま出れば余裕で1位でした。(笑)
過学習が発生していると考えられます。

なお、かかった金額は、
レーニングデータの行数が1万件だったので、トレーニング時間は最小の1ノード時間で終わり、1回約2,000円でした。
(大体10万行までは1~3ノード時間で終わります。)
5回実行したので約1万円です。
裏で動いているマシン数などから考えると安いのですが、かなり結果にブレがあると結構ショックを受けます。
ソシャゲの10連ガチャを回してる気分になります。(笑)

1時間程でそれなりの結果が出るAutoML Tablesはすごい

ただ、運ゲーといえども、やっぱり92台のマシンが並列で処理するのは強いです。(いわゆる札束で殴るスタイル)
さすがにKagglerでも1時間では敵わないので、超短期決戦では勝てると思います。

また、解析の目安、リークのチェックに向いてるのではないかと思います。

AutoML TablesよりKagglerはすごい

AutoMLはチューニングのし所がほぼ無く、これ以上のスコアを出すにはガチャを回すかのようにトレーニングを回すしかありません。
今回の結果を見るに、1日あればKagglerに追い抜かれてしまい、その後どんどんKagglerはスコアを上げて行けます。

つまり、やっぱりKagglerはすごい。

まとめ

AutoML Tablesは現状ではKagglerを倒すことは難しかったです。
ただし、現状はまだベータ版で今後も性能が向上していくことが予想されます。
継続的にAutoML Tablesを試していき、その成長を見守っていきます。

また、次回のオンサイトデータコンペの開催も予定されており、私もAutoML Tablesで参加する予定です。

以下、connpassの「メンバーになる」をクリックすることでイベント開催時にメールが届きます。
https://atma.connpass.com/

AutoML Tablesを倒してみたい!というKagglerの皆様の参加をお待ちしています!!

*1:「RMSLE」は「MSLE」にRootついてるだけなので評価は同じになります。