Kaggle Master になりました。

概要

kaggleを始めて1年と少しが経ち、IEEEコンペで金メダルをとり目標としていたKaggle Masterとなりました。その期間の振り返りを記録しておきます。ぽえむです。

 

Kaggleを始めたきっかけ

SIerに入社し2年くらいExcelかいたりコードかいたりして飽きてきて、学生時代にやっていた機械学習にもう一度挑戦してみたいと思ったのがきっかけでした。某D社のKaggle社内ランク制度を見てKaggleの存在を知り、その日にHomeCreditを始めました。当時はExpertってめっちゃ強いんだろうなって想像していました。(虐げられていることを知らずに)

 

HomeCredit ( 2018年5~8月 )

・できるようになったこと

 1.Kernelを読む。使う

 2.特徴量生成→モデル作成→サブミット

初コンペでした。Kernelを読んだり、日本語のKaggle記事を読んだりしながら特徴量の作り方やモデルの作り方などを学びました。EDAとかは全くできていなくてデータの特徴みたいなのは何も理解できていなかったように思います。。

Kernelの特徴量組み合わせたりしてPublicは銀圏なるも大きくShakeDownして初の銅メダルに終わりました。

HomeCreditからKaggle始めた人を自分の中でKaggle同期と勝手に呼んでます。

 

塩・船コンペ ( 2018年~11月 )

https://highgradetoppo.hatenablog.com/entry/2018/11/18/110726

https://highgradetoppo.hatenablog.com/entry/2018/11/18/132254

・できるようになったこと

 1.Keras,Pytorchをコピペして動かせるようになる

 2.Discussionを読む。

 3.チーム名を変えてリーダーボードの表示を変える。

 4.GPUを使って部屋を暖める。

ディープラーニングしてみたいという思いもあり画像コンペに挑戦していました。ゲーミングPC兼機械学習用のローカルマシンで部屋を暖めていました。塩コンペ終わった後、Kaggle同期のくるぴーさんが主催するもくもく会に参加して関西Kagglerの方々と知り合いました。船コンペでなんとか銅メダルを取得するもまだまだわからないことだらけなのでまた画像挑戦してみたい。

 

Malware・Santander ( 2018年12月~2019年4月 )

・できるようになったこと

 1.データを見て効きそうな特徴量の仮説をたてる。

 2.問題に対して適切なバリデーションを考える。

 3.過去コンペを参考に特徴量を生成

当時の記録が全然なくてうろ覚えです。Malwareは運がよかったこともありShakeに振り回されずに銀メダル、Santanderはコンペ終了間近でMagic Featureを発見できて銀メダルを獲得できました。

この辺からテーブルコンペをどう進めればいいのか理解できてきたように思います。

 

土地コンペ ( 2019年6~8月 )

https://highgradetoppo.hatenablog.com/entry/2019/08/21/220333

SIGNATEの土地コンペに出て2位で初めての賞金を手に入れました。

atmaCupに出たのもこの時期。次回atmaCupは2019/11/23

https://atma.connpass.com/event/150223/

 

IEEE ( 2019年8~10月 )

・できるようになったこと

 1.チームでの進め方を学ぶ。

 2.ボーダーコリーより賢くなる。

くるぴーさん視点:http://kurupical.hatenablog.com/entry/2019/10/05/172615

Solution:https://www.kaggle.com/c/ieee-fraud-detection/discussion/111489

atmaCup懇親会でチームマージしました。関西Expert以下で頑張る会。

チームメイトが個人特定のIDに気づき、序盤から金圏へ。そのままなんとかリードを保ったまま19位でフィニッシュ。初の金メダルを手に入れKaggle Masterになりました。

個人では、序盤全然成果がだせず最終的に自分のモデル単体ではPrivate:40位相当くらいの結果でした。各メンバーもシングルモデルでは金圏に届いていなかったように思うのでチームの多様性の強さを感じました。

一方で、1位の解法を見ていると全然気づけていなかったことや試してすらいない手法があり、自分自身の力不足を体感しました。

自分のチームへの貢献で一番大きかったことは、結果がでたあとにチーム名を変更したことでした。「クソザコやねん」→「クソザコちゃうねん」

 

これから何するの

今年はソロで銀2枚、チームで金1枚、SIGNATEでは2位という結果を出せました。少なくともテーブルコンペにおいてはそれなりの結果が出せることは示せたと思います。

しかし、実力不足を感じる部分もまだまだあり、継続してコンペへの参加や学習を続けていきたいとは思っています。今後は以下のことに取り組んでいければと思っています。

・テーブルコンペ以外でソロ銀orチーム金を取得

・ソロ金を取得

・コードの整理、コミュニティへの貢献

 

キャリア的なお話

話が変わりますが、JTC Kagglerの方々が結果を出して転職したりしているのを見て、今後のキャリアも少しずつ考え始めています。新卒でSIerに入って4年近くだらだら働いていますが、最近はレガシーなシステムの保守ばかりで学ぶことがなくなってきたという現状があります。また、業務時間外の独学だけでは他のKagglerやデータサイエンティストと呼ばれる方々の学習量についていくのもなかなか厳しいなと感じ始めています。ただ、業務としてデータを扱うことがほぼ未経験な自分が業務で何ができるのか何がしたいのかまだ整理しきれていない部分もあるので、まずはKaggleで学んだことを活かして何か作りたいなとぼんやり考えています。

 

以上です。コミュニティに貢献してきたKagglerの方々にはほんとうに感謝しかないです。次回のKaggle Meetupの参加権を得た?ので楽しみにしています。ありがとうございました。

 

 

 

土地コンペの振り返りメモ(解法以外)

SIGNATEの飯田産業 土地の販売価格の推定(通称:土地コンペ)での取り組みについて、規約に反しない程度で忘れないようにメモしておきます。

 

結果

f:id:HighGradeToppo:20190827201433p:plain

 

方針

ソロ参加限定でフォーラムもないので、

良いスコアを出すためのショートカットが難しい。

→長期間こつこつやる。データについて考える時間を増やす。

→当たり前のことをきちんとやる。

→過去のコンペから学ぶ。

 

当初のがばがばスケジュールは下記の通り

序盤:特徴量を増やす。ドメイン知識を身に着ける。

中盤:いろいろ試す。

終盤:混ぜて無理矢理スコアを伸ばす。

 

プロジェクト管理

NomiさんのHomeCreditコンペの取り組み方を参考にしています。

docs.google.com

 

イデアGitHub Project

 思い付きや参考URLなどを書いておいて、やることに詰まる度に見直していました。

実行結果の管理:Excel

 会社や家でいろんな場所にメモが散乱してしまったので、次はSpreadSheetでやってみます。

 

スコア推移

公開しても問題なさそうなら追記します。

 

atma杯

8/3に【大阪開催】atma杯 オンサイトデータコンペ #1 - connpassに参加しました。

最終的には12位/33人?といまいちな結果でしたが、色々な人と交流できてモチベが向上しました。

また、8/9に振り返りのイベントがあり1位(takuokoさん),2位(hakubishinさん)の公開されていたコードや問題設定について、話すことができたので自分の中になかった発想などを取り入れることができました。次回もあるらしいので楽しみにしています。関西在住はアド

正直参加していなかったら10位にもなれなかったと思ってます。

atma杯運営やコードを公開してくださった方々に感謝してます。

 

その他の取り組み

ケイデンス・オブ・ハイラル ★★★

・Hotline Miami ★★★

・Hotline Miami2 ★★

STEINS;GATE ★★★★★

コンペ最終盤の8/10-13はRTA in Japan Online 2019を見ながら作業していました。

 

コンペ中の主な参考URL

過去のSIGNATEコンペでの取り組みや綴りミスのお話(u++さん)

https://upura.hatenablog.com/archive

直近のKaggleでの回帰コンペ(Elo)の解法まとめ(えじさん)

https://amalog.hateblo.jp/entry/elo-merchant-category-recommendation

テーブルデータのTipsまとめ(ML_bearさん)

https://naotaka1128.hatenadiary.jp/entry/kaggle-compe-tips

序盤ずっと暫定1位だった人のブログ(copypasteさん)

https://copypaste-ds.hatenablog.com/

その他ドメイン知識系のWebページ漁っていました。

 

感想

KaggleだとKernelやDiscuttionベースに進めてしまっていたので、自分で1からデータを見て仮設をたてて特徴量作って試行錯誤してという流れを改めて経験できたのは非常によかったです。コンスタントに結果を出せるように学び続けようというモチベーションにもなりました。

 

 

 

Tellus Satellite Boot Campに参加しました。

今までの記事のタイトル全部参加しました。で終わってるけど、また参加してきたのでメモ代わりに

www.sakura.ad.jp

イベントの概要

オープンな衛星データプラットフォーム「Tellus(テルース)」の利用者となる人材の創出を目的としたセミナー。

衛星データとデータサイエンスの概要。衛星データを機械学習に使うためのデータ準備と簡単な画像処理、CNNのモデル作成の演習といった内容でした。

 

衛星データについて

衛星って聞いてもひまわりくらいしかわからなかったのですが、光学衛星とSAR衛星の違い、レーダーセンサの仕組みなど衛星データがどのように取得されているのかどういった種類のデータがあるのかをざっくり理解することができました。

また、GIS(地理情報システム)ツールを使った衛星データのアノテーション方法の説明もありました。

前回記事の船コンペなど衛星データを使ったコンペなどは今後もありそうなので、多少はドメイン知識として役立ってくれればいいなと思います。

 

機械学習の演習

SIGNATEの方よりkerasでの簡単なCNNの実装の説明があり、その後SIGNATEの限定公開?コンペ形式で実習を行いました。タスクは去年SIGNATEで開かれていたTellusコンペの一部データを使った2クラス分類でした。

signate.jp

CNNの気持ちが全然わからなかったので、数回サブミットして心折れました。

とはいえ、短時間で参加できる機械学習コンペは気軽で楽しいのでもっと増えて欲しいなと思ってます。

終了後、上記コンペの上位解法のちょっとした説明があり、得した気分でした。

 

感想

衛星データの種類やアノテーションの手法、手軽なコンペ、SIGNATEコンペの上位解法など期待していた以上の内容でした。最近冬の寒さのせいにして、コンペあんまり参加してなかったのですが少し熱が戻った気がします。

 

おまけ

講師をしていただいたSIGNATEの方とお話する時間があり、SIGNATEにおける解法の公開やDiscussionのあり方などについて聞かせてもらえて楽しかったです。

Tellus含め衛星データ解析などについて下記Twitterアカウントで発信しているそうです。

twitter.com

また、SIGNATEで第2回の衛星データコンペ(船の検出)がはじまってます。

signate.jp

SNSに書いていいか聞いたら宣伝してくれって言われました。

船コンペに参加しました。

Kaggleのお話。船コンペ(Airbus Ship Detection Challenge)に参加しました。

Airbus Ship Detection Challenge | Kaggle

 

経緯

前回の塩コンペでimage segmentationの基本的な部分は少しわかったので、復習もかねて参加することにしました。

塩終わった時点で残り20日ちょっとで、一番いいスコアのkernelがシルバー圏内だったのでメダル取れそうだなーって思ったのも理由の1つです。

 

やったこと

あまり日もなかったので、前述のkernel(Unet34 submission TTA (0.699 new public LB) | Kaggle)をベースに進めました。

基本的な流れは船のあるなしの2クラス分類→Unetを用いたsegmentation

 

まずはsegmentationの部分から進めました。

validation setを考えて、localとLBが両方よくなっていったのでそれで固定。

その後、塩の上位解法からscSEモジュールなど部分的にもってきて、試していき一番よさそうなもので学習させていきました。

その結果、残り5日程度で20位前後までLBがのびました。

 

PublicLBがtestの12%しかなく、船がある画像が多いと気づいていたので最後5日くらいは2クラス分類に注力していました。

船なし画像の割合は(PublicLB:52%、PrivateLBが76%)

 

結果

大幅にshakedownして56位という結果となりました。

40位程度のsubmitもあったのでfinal submitの選び方を間違えたかなと思います。

f:id:HighGradeToppo:20181118131706p:plain

 

おわりに

簡単ではありますが、備忘録もかねて残しておきます。

途中からの参戦でしたが、塩の経験を少しは活かすことができたと思います。

ちなみにブロンズメダルもらえてKaggle Expertになりました。今年の目標だったので、達成できてうれしいです。

 

次回への課題

時間があればkernel頼りを脱却する。

Githubに公開できるようなコードをかく…

コンペ中にメモを残しながら、最後に整理するだけでブログ記事にできるようにする。

 

塩コンペに参加しました。

Kaggleのお話。塩コンペ(TGS Salt Identification Challenge)に参加しました。

TGS Salt Identification Challenge | Kaggle

 

経緯

Chainerのセミナーを受けたことがあるくらいでNNでモデルを組んだことないので、画像系で学んでみたいと思ってslackでおすすめを聞いたところ、塩コンペをおすすめされたので参加。

もともとの知識量は画像はCNNってのがいいってくらい。。。

resnet?unet?segmentation?

 

やったこと

DiscussionでResnet34-Unetがいいという話が多かったので、KernelをもとにKerasでモデル作成を行っていました。しかし、Lovasz lossで全然lossが落ちずにdecoderとか色々試しているうちに時間がなくなってしまいました...

最終的にKernelのモデルを改造してSnapshot ensemblingでスコアをあげておわりました。

 

結果

残念なことにメダルまであと一歩で終わってしまいました。

ただし、今までやったことがなかった画像コンペはいい経験になったと思うので、次回も挑戦していきたいです。

f:id:HighGradeToppo:20181028140134p:plain

 

反省

Discussionででてるスコアを再現できずに、hypercolumnなど試せずに終わってしまったこと。augmentation、modelの生成などどっちつかずになってしまったこと。

 

追記

大阪で行われたkaggleもくもく会いってきました。

connpass.com

 

そこで、 塩コンペ1位の@phalanx27019356さんのお話を聞いてきました。

コンペの進め方などをお聞きできて非常に参考になりました。

kaggleは1日2時間くらい

論文100本読んで100個モデルつくってためした等々

 

論文読みます…

 

ベースボールデータハッカソンに参加しました

何番煎じかわかりませんが、「パ・リーグ×パーソル ベースボールデータハッカソン」というイベントに関西から参加してきたので、そのメモ

techplay.jp

イベントの概要

パ・リーグが提供するプロ野球のデータを分析するハッカソン

期間は2日間。1日目の11時~19時、2日目の10時~14時半。

2部門に分かれており、参加者は1日目の最後に参加する部門を選択。

・エンジニアリング部門:データの予測精度を競う

コンサルティング部門:データから新しい発見を導き出しプレゼンする

実際はエンジニアリング部門に参加者が偏っていました。

以降は私が参加したエンジニアリング部門について記載します。

 

エンジニアリング部門の課題

ある球団のファンクラブ会員が特定の試合を観戦するか予測するといった内容でした。

f:id:HighGradeToppo:20181008214308p:plain

f:id:HighGradeToppo:20181008214324p:plain

 

上図以外に与えられたデータとして以下のようなものがありました。

・各打者の試合ごとの成績

・各投手の試合ごとの成績

・試合展開

 

取り組み

特徴量の生成は、直感的に試合前からわかる情報を中心に考えました。

予告先発

・相手チーム

etc…

人気選手の選手登録・抹消や達成間近な記録なども影響あるかと思いましたが、外部データの使用は禁止されてたので見送りました。

あまりオリジナリティのある特徴量を作れませんでしたが、入賞者の発表を聞く限りはは方向性としてあってた気がします。

モデルとしてはいろいろ試す時間がなかったのでランダムフォレストにぶちこんで結果をだしました。

game44とgame45はそもそも観戦者が少なそうだったのですべて0としました。

 

感想

結果としては入賞できずに残念でしたが、普段は周りにデータを扱う人がいないので色々な人と話せて臆せずに参加してよかったです。kaggleも最近はじめたばかりでデータの前処理に時間がだいぶかかってしまいモデルの選択などいろいろ試す余裕がなかったので、もう少し経験を積まないとというのが素直な感想です。野球やゲームなど興味があることに関するデータを扱うのは楽しかったので、また機会があれば参加したいと考えています。