kaggle日記

kaggle参加記録

Kaggle Grandmasterになったので今までを振り返る


kaggleを始めてから3年半、ようやく1つの目標であったGMになることが出来ました。
前回の記事で最初の金メダルを取るところまでは書いたので、その続きとして金メダルを取ったコンペを中心に機械学習人生を振り返っていきたいと思います。

転職:2020年8月

kaggleで2位を取ったこともあり、転職活動はかなり順調に進みました。
Twitterで転職します宣言をしてからかなりたくさん声をかけていただいたんですが、結局自分からCTOにDMを送ったアイリスに入社することに。画像の経験無かったんですが、医療画像エンジニアとして取っていただき感謝です。ここから画像で戦えるようになるべく奮闘する日々が始まりました...

RSNA STR Pulmonary Embolism Detection:2020年10月

RSNA STR Pulmonary Embolism Detection | Kaggle

入社して2ヶ月がたち少し画像に慣れてきたので、初めて画像コンペにがっつり参加することに。肺のCT画像の分類という医療画像ど真ん中のデータなこともあり、仕事中に堂々と参加させてもらいました。医療関係ないデータでも仕事中にやっていいんだけど...とにかく感謝...
dicomのreadに時間がかかるのに加えそもそも全体的にデータが大きく、testもpublic70GB/private230GBと時間内に推論するだけで一苦労なコンペでした。dicomの扱いに困惑しつつも、パフォーマンスチューニングのエンジニアリングが必要なこともあり比較的有利に進められました。

期間が1.5ヶ月と短めだったのも良かった。経験が足りない分を、スタートダッシュを切ることで補うことが出来ました。コンペ始まって2週間たったらもう残り1ヶ月なので、始めからハードワークするインセンティブが普通の3ヶ月コンペより大きかった。そういう意味では初級者の人は短めのコンペのほうが相対的に有利と言うことは出来ると思います。
ということで序盤に金圏にいたところ声をかけてもらいチームマージ。なんやかんやあり、画像コンペで初の金メダルを獲得。kaggle masterに!
(コンペ最終盤に妻の親戚の集まりでホテルに泊まらせてもらったんですが、僕は攻めたsubが時間内に通らずに部屋に引きこもっておりました。あの時の焦り、今でも鮮明に思い出せる...いい思い出であります)

SIIM FISABIO RSNA COVID-19 Detection:2021年5月

SIIM-FISABIO-RSNA COVID-19 Detection | Kaggle

X線画像からcovid-19の分類をするタスク。こちらも始まってすぐ参加しました。画像にもだいぶ慣れていたこともあり、最初からずっと金圏に居続けることが出来ました。

そんな感じで頑張っていると、RSNAコンペ最強マンのIanPanからチームマージのお誘いメールが来ました。前回もそうでしたが、最初からちゃんと参加して中盤くらいまで頑張って上位を維持すると強い人とチーム組みやすいですね。この時は同コンペで金メダルのnoteを公開していたので、それも信頼を勝ち取るのに効果があったのかもしれません。
このままソロ金を目指すか迷いましたが、学びが大きそうなのでチームマージをして金メダルではなくtop3以内を目指すことに。

アンサンブルの効果高めようぜということでお互いのパイプラインで各々開発を続けました。なんやかんやあり、最終的に全く違う手法かつお互いソロ金を取れるくらいのモデルを作ることに成功、シンプルに混ぜたら3位に!別パイプライン&別手法でのアンサンブルはシンプルだけどほぼ必ず効く必殺技の1つですね。ということで3つ目の金メダルを獲得。

この時のチームマージの体験が良すぎたので、みなさんにも本当におすすめしたいです。ハードルは高いですがどうにか強い人と組んで、たくさんのことを学びましょう🔥 (ちょうどオリンピックのタイミングで、「今アメリカ代表のバスケの試合見てるからあとでOOF送るよ」「あ、俺も今見てる!」などとカップルのようなやり取りをしたのが懐かしい...今回GMになったタイミングでもメールをくれて、 GMおめでとう またチーム組もうね とのお言葉をいただきました。いい奴すぎる...こちらこそまたお願いします)

Happywhale - Whale and Dolphin Identification:2022年2月

Happywhale - Whale and Dolphin Identification | Kaggle

クジラ/イルカの個体識別コンペ。そろそろソロ金が欲しいなと思いつつの参加。リソースの問題でkeras&TPUに入門することになりました。距離学習も初めてだったので色々と学びながらの参加でしたが、いつもどおり神notebookと神discussionがたくさんあり、あまり問題なく進められました。ありがとうkaggle。
始めた当初は、色々と初めて触る技術をキャッチアップしながら強豪相手にソロで金メダルを取るイメージがあまり沸かなかったので、色々なコンペをつまみ食いしてインプットの時期にしようか結構迷っていました。

しかしコンペを進めていく中で意外とスコアが出たこともあり、徐々に色気が出てきます...
とはいえ参加者のレベルが高くタスクも色々難しめ、走り切るには非常にしんどいコンペでした。
しんどいながらもやっていくうちに色々な閃きがあり、なんやかんやでソロ金を獲得!このコンペでソロ金を取れたことは、現時点での僕の機械学習人生のハイライトの1つと言っていいでしょう!金メダルが確定した時は本当に嬉しかったのを覚えています。 日本人参加者が多かったこともあり、終盤のTLもかなり賑わっていましたね。やっぱり日本人多い方が燃えるので、それもありがたかったです。 たくさんの人に褒めてもらい承認欲求が満たされました。当時のkaggleCTOや、会社にも祝福してもらう。 (終わった後はみんなで集まってコンペに関してうだうだ言わせていただきました。kaggleを通して国内外にたくさんの友人が出来て本当に嬉しい。趣味が同じなので自然と話が盛り上がります)

(番外編) Kaggle Days World Championship:2022年10月

Kaggle初の試みとして、約1年に渡って予選を行い勝ち抜いた人のみバルセロナに招待、オフラインで1dayコンペを戦うというお祭りが開催されました。僕も頼れるチームメイトと予選を勝ち抜き、なんとかバルセロナへのチケットを獲得。参加者全員分の飛行機代とホテル代を全額出してくれる、なかなかの大盤振る舞いでしたね。(またやらんかな...)
バルセロナでは初対面だけどお互いに知ってる人がたくさんいて、「おいおいお前こんな顔だったんか」をたくさんやりました。携帯でkaggleのアカウントを見せ合う瞬間大体めちゃめちゃ盛り上がるのが面白かった。

1日目はミートアップのイベントって感じで色んなMLに関する発表を聞いてわいわいやりつつ、最後に2日目に行われるコンペのお題が発表されました。tabular&NLP、しかも2コンペ同時開催で総合ポイントを争そうという衝撃の発表でしたね。総合ポイントで3位以内に入るとA6000が貰えるという発表もめちゃめちゃ盛り上がってました。

ホテルに帰ってからチームメイトのpaoさんと急いでNLPの素振りをはじめたんですが、このあたりもわちゃわちゃして楽しかった。

2日目は丸1日コンペでした。2コンペ同時開催でしたが、ポイントの配分の関係でどちらかに注力するチームが多い中、僕らのチームはどちらも頑張り、なんやかんやあってなんとどちらも優勝!総合ポイントでもぶっちぎりの優勝をすることが出来ました!完全にチームメイトのおかげです、ありがとうございました...!

(賞品でA6000と、A5000搭載のノートパソコンを戴きました)

(リリースも出してもらいました)

RSNA Screening Mammography Breast Cancer Detection:2022年11月

RSNA Screening Mammography Breast Cancer Detection | Kaggle

マンモグラフィー画像からの乳がん識別コンペ。序盤から結構強い人が参加している珍しいコンペでした。初めは画像の読み込みだけで6時間かかる厳しいコンペでしたが、序盤から参加したおかげで後述のアンサンブルのアイデアも降ってきたのでラッキーでした。コンペが進むにつれて徐々にスピードアップのための知見が共有されましたが、今後dicomをコンペで扱う際には必須のテクニックなので目を通しておくのをおすすめします。

序盤で猫とチームアップ... 中盤で人間とチームアップ...
既にGMのcharmくんに加え、GMリーチ者を3人集めて、みんなでGMになることを目標に据えました。 みんなどんどんCV/LBの最高記録を更新、ここでも必殺各々開発して最後に混ぜるやつをやったので、安心感がすごかったです。

僕はmodel開発に加えアンサンブルの方法を提案しました。

結構反応が良かったので、吉原くんが追加で考え出してくれた手法も置いておきます。予測値そのものではなく、予測値の分散を見て次のmodelに渡すかどうかを判断する方法です。具体例を出すと、model3種類で予測した段階で3つの予測値の分散が閾値より低ければ、4つ目以降のmodelを使用しても予測値のupdateは限定的(=最終的な0/1は変わらない)と考えて4つ目以降のmodelを使用しない、みたいなやり方です(と書いていて思ったんですが、予測値と分散どちらも見る方法がより良さそう)。
みんなこういうアイデアが無限に出てくる強者だったので、非常にエキサイティングで楽しいチームアップでした。今後のコンペで汎用的に使える技もいくつか教えてもらいました。またこのメンバーで組んで優勝を目指したいです🔥
(LB1位でコンペ終えられたの初めてだったのでとても嬉しかった)

ということで5つ目の金メダルを獲得!

LBを気にせず完全にtrust CVだけしていればprivateも2位だったので少し悔しいですが、CVと比べてLBがpublic test sizeのbootstrappingをしてもなかなか出ないレベルで高かったので、(train/testでシフトがあるとして)ある程度のtrust LBも妥当な判断だったと思っています。

ちなみに僕のつよつよmodelを入れるとCVが0.58(!)に到達するんですが、入れなくても0.56までは出ておりこれは他のチームと比べても相当に高い精度だったと思われます(コンペ出ていた人には伝わるはず...)。みんなのモデルを混ぜるとCVが跳ね上がったので、やはりEnsemble Is All You Needであります。まあモデル1つずつがそもそも強かったけど...
コンペ終了後は恒例の打ち上げをしました。賞金で焼き肉🍖

(当初の目標の金メダルに加え賞金も取れたし、何よりみんなでわいわいアイデアを出し合うのがとても楽しかったので大満足のコンペでした。いつかまた一緒に戦いましょう!)

なぜ金メダルが取れたか

- 序盤からの参加が良かった
振り返ってみると、最初からソロでしっかり参加するスタイルがかなり良かったように見えます。情報ないので自分で考える癖がつくし、序盤頑張って中盤くらいまでLB上位を保てば強い人と組みやすい。序盤なら1位を取るのも比較的簡単だし、1位取るとやっぱりやる気でますよね。そこも大きかったように思っています。僕は画像で4枚の金メダルを取りましたが、1, 2枚目は完全にこれでした。そして強い人と組んで力が付いたところで3枚目で気合いを入れてソロ金、4枚目は過去の強い対戦相手とチームを組んで余裕を持って獲得という理想的な流れだったと思います。1サンプルのお話なのでovefitしないように注意が必要と思いつつ、なんとなく再現性ありそうな気もします。このあたりのお話、もっと詳しい話を聞きたい方は遠慮なく話しかけてください。

- 会社の支援
アイリスには、クラウド代の全額補助だけでなく業務時間内のkaggle参加も応援していただいております。当然他のプレイヤーと比べてかなり有利だったと思っています。いつもありがとうございます!
今のところkaggleで得た知見での社内の課題解決が非常に上手くいっていることもあり、非エンジニアの方々も含め、社内全体でkaggle参加を応援してくれています。「AIチーム内で業務時間のkaggleが許可されている」と「社内全体でkaggle応援してくれている」だと、社内での暮らしやすさにも結構差があるのかなと。この辺りの kaggle参加すると会社全体に良いことあるんだよアピール をCTOのあつしさんがかなり頑張ってくれています。胸を張ってkaggleに参加出来る今の環境には感謝感謝です!

- 妻の支援
いつもいつも支えていただいております。特に色々と忙しくなるコンペ終盤では家事多めにやってくれたり夜食を作ってくれたり、クジラコンペをソロで乗り切れたのは間違いなく妻のおかげなので、2人で取ったGMと言っていいでしょう。いつもありがとう!

これから

あまり変わらないかなと思っています。kaggleまだまだ楽しいし、幅も深さも足りないので引き続き参加していくつもりです。皆様今後とも対戦よろしくお願いします🔥🔥🔥