Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
atmaCup #16: 1st place solution + 取り組み方振り返り
Search
kami
January 19, 2024
Programming
1
1k
atmaCup #16: 1st place solution + 取り組み方振り返り
「#16 atmaCup 表彰式&振り返り会」で利用した解法プレゼンの資料です
https://atma.connpass.com/event/305563/
kami
January 19, 2024
Tweet
Share
More Decks by kami
See All by kami
JSAI2025 RecSysChallenge2024 優勝報告
unonao
2
730
MLコンペ実験テンプレートを作ろう!
unonao
4
2k
RecSys2024 参加報告
unonao
1
390
睡眠コンペ 1st place solution
unonao
3
3.1k
N=1 の推薦系コンペの戦い方
unonao
5
2.5k
Kaggle 過去コンペまとめ Image Matching Challenge 2023
unonao
0
1.4k
RecSys23参加報告:推薦システムに関する最新研究
unonao
1
1k
#15 atmaCup 振り返り& 1st place solution
unonao
1
1.5k
Other Decks in Programming
See All in Programming
Architectural Extensions
denyspoltorak
0
260
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
570
gunshi
kazupon
1
150
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
360
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
170
組織で育むオブザーバビリティ
ryota_hnk
0
160
コマンドとリード間の連携に対する脅威分析フレームワーク
pandayumi
1
440
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
160
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.4k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Rails Girls Zürich Keynote
gr2m
96
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
100
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
270
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
280
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
Transcript
© DeNA Co., Ltd. 1 「atmaCup #16 in collaboration with
RECRUIT」 1st place solution + 取り組み方 株式会社ディー・エヌ・エー 村上直輝 / kami
© DeNA Co., Ltd. 2 村上 直輝 / kami #Kaggle
#atmaCup #(元)よわよわ競プロer #23新卒 趣味など 予定のない休日はゲームとかやっていました 最近はコンペに私生活を破壊されかけています @634kami © DeNA Co., Ltd. 自己紹介
© DeNA Co., Ltd. 3 コンペ概要 1st place solution 概要
どのように取り組んだかとスコアの推移 3 2 1 目次
© DeNA Co., Ltd. 4 4 01 コンペ概要
© DeNA Co., Ltd. 5 コンペのお題 引用:https://www.guruguru.science/competitions/22/
© DeNA Co., Ltd. 6 • 分割方法 ◦ Train/Test :
時系列で分割 ◦ Public/Private: Test をランダム分割 • データ ◦ train / test_log.csv ▪ セッションごとに出現した宿を記録したログデータ ▪ 正確な時間情報は無いが、セッション内での順番は分かる ▪ 最後に出現した宿は答えにならない ◦ train_label.csv:最終的にどの宿を予約したかのデータ ◦ yado.csv:宿の属性情報が記録されたデータ ◦ その他(image_embeddings.parquet, sample_submission.csv) データについて Train Public (25%) Private (75%) 時間
© DeNA Co., Ltd. 7 7 02 1st place solution
概要 • ディスカッション • コード
© DeNA Co., Ltd. 8 概要 • ベースアイデア:session の長さに応じて学習や予測の方法を変える •
Solution 概要 ◦ ケース1:session の長さが 1 ▪ ルール(log データの遷移確率ベース)での予測 • train と test のドメインシフトを考慮して test の重みを 14 倍に ▪ 残りをLightGBMで予測 ◦ ケース2:session の長さが2以上 → LightGBM・CatBoost で予測 1 セッションの長さに着目したデータ基礎集計 より 全く同じ入力でラベルの違う データが複数存在する
© DeNA Co., Ltd. 9 ルールでの予測 1. log の情報から遷移を表す確率行列を作成(提出時はテストの重みを14倍) ◦
あとで2乗するので始点の周辺を重視するために自身に 0.4 の確率で戻るように 1. 遷移行列を2乗して2hop離れた候補まで含めるように 2. sessionの宿から出現する確率の高い宿を順番に予測結果とする 2 session内での 遷移情報
© DeNA Co., Ltd. 10 LightGBM での予測 • 候補生成 ◦
遷移確率・共起表現ベースで次に出現する可能性の高い宿 ◦ 最終閲覧と同じ地域での出現回数ランキング上位 • 特徴(最終的に100〜200程度) ◦ sessionの特徴量:出現したyadの特徴量をsessionごとに集約 ◦ 候補の特徴量:yad.csvの情報、地域ごとの出現回数ランキング情報 ◦ session-候補間の特徴量:遷移確率・共起表現ベースの特徴量 • 学習方法 ◦ lambdarank ◦ 候補のネガティブダウンサンプリング無しで、メモリ196GBのマシンで学習 3
© DeNA Co., Ltd. 11 11 10日間の取り組み 03 どのように取り組んだか
© DeNA Co., Ltd. 12 スコア遷移の概要 終了2分前に ギリギリ超えた 4日目で初提出 思ったよりスコア出ない
© DeNA Co., Ltd. 13 初日:問題に目を通す&環境構築 • 2023/12/08 18:00〜:レコメンドタスクで社内slack(というか自分)がザワつく •
〜2023/12/08 23:06:環境構築&実験管理の整理 https://twitter.com/634kami/status/1733126025939468332
© DeNA Co., Ltd. 14 (脱線) 自分用にコンペ用の実験テンプレート作ってます • 特徴 ◦
Docker によるポータブルなKaggleと同一の環境 ◦ Hydra による実験管理 (実際は wandb と組み合わせて利用) ▪ 実験用スクリプトファイルを major バージョン ▪ パラメータ等のconfigファイルををminorバージョン ▪ 実験用スクリプトと設定を同一フォルダで局所的に管理して把握しやすくする 詳しくはこちら:https://github.com/unonao/kaggle-template Docker環境 実験の実行例
© DeNA Co., Ltd. 15 4日目:First Submit 思ったよりスコアが出ない • 〜2023/12/11(月)
6:15:実装完了&ようやく最初の提出(レコメンドの実装重い...) ◦ 候補生成・特徴量:簡単な遷移確率、locationごとの宿のランキング
© DeNA Co., Ltd. 16 4日目:まともなスコアを出す 当時21位 • 〜2023/12/11(月) 9:18:色々と変更を加えて実験を回してみる
◦ 候補宿のカテゴリ変数を抜いてみたら良くなった&特徴量を追加&候補生成を微修正
© DeNA Co., Ltd. 17 4日目:まともなスコアを出す • 2023/12/11(月) 9:20 https://twitter.com/634kami/status/1734005155618791915
© DeNA Co., Ltd. 18 6日目:sessionの長さ1のデータを分ける 当時13位 • 〜2023/12/13(水) 9:43:sessionの長さ1のデータを分けて学習&推論
• 〜2023/12/13(水) 23:59:遷移確率以外に共起特徴なども追加 分けてみた
© DeNA Co., Ltd. 19 6日目:sessionの長さ1のデータを分ける • 2023/12/13(水) 24:01 https://twitter.com/634kami/status/1734951561720459451
© DeNA Co., Ltd. 20 8日目:改善して落ちた順位を戻す 当時13位 • 〜2023/12/15(金) 22:47
◦ 遷移確率とか共起の特徴量が効いてそう→遷移行列の2乗で候補生成&特徴量追加
© DeNA Co., Ltd. 21 8日目:改善して落ちた順位を戻す • 2023/12/15(金) 22:49:ちょっとは賞金貰えそうくらいの順位で少し期待する https://twitter.com/634kami/status/1735658387365577070
© DeNA Co., Ltd. 22 9日目~最終日午前:諦めモード 当時11位 • 〜2023/12/16(土) 13:40:トップ層とのスコア差が大きすぎて何もわからない状態
◦ sessionの長さ1 のときは同じ入力で違う答えのデータが含まれている →ルールベースで処理を行うようにして多少改善
© DeNA Co., Ltd. 23 9日目~最終日午前:諦めモード • 2023/12/16(土) 13:41 https://twitter.com/634kami/status/1735882791374684399
© DeNA Co., Ltd. 24 最終日午後:“完全に理解した” 当時4位 • 〜2023/12/17(日) 12:11:スマホでディスカッションを眺めていたらひらめく
◦ Train, Test でしか出現しない宿があるよなぁ→ドメインシフト対策してなかった! ◦ テストの重みを数倍に増やしたら一気にスコア改善 終了2分前に Private 1 位相 当を提出
© DeNA Co., Ltd. 25 最終日午後:“完全に理解した” • 2023/12/17(日) 12:12 https://twitter.com/634kami/status/1736222811788898599
© DeNA Co., Ltd. 26 Submission Summary https://www.guruguru.science/competitions/22/summary サブ選択によっては誰が勝っ てもおかしくない状況
相関はしているがPublic 最大 が Private 最大ではない 最終submit選択 LB/ローカルで一番良かった遷 移行列のパラメータを選択 遷移行列での map@k などを ローカルでもチェックしてい たのが結果的に良かった模様
© DeNA Co., Ltd. 27 その他 • 取り組んだ時間:おそらく40時間ちょっと(土日4日間 x 5時間
+ 平日5日間 x 4時間) ◦ 基本は業務開始前と 業務後〜24時くらいまでやっていました ▪ 木曜と最終日前日の夜だけ諦めてゲームしてましたがそれ以外は基本コンペに時間割いてたと思います ◦ 普段は社内制度で業務時間中にコンペに出ていますが今回はほぼやりませんでした ▪ atmaCup直前にKaggleやりすぎたので自粛してました ▪ 業務時間中に順位抜くの禁止です! • なぜログの共起や遷移の特徴が効いたのか? ◦ 「すでにあるレコメンドが予約に大きく影響している」という話も聞いてなるほどと思いました ◦ 特定地域の中で探して宿を決めがちというドメイン特有の性質もあったかもしれません • 画像データはうまく使えませんでした ◦ うまくいった方は教えてください
© DeNA Co., Ltd. 28 楽しいコンペをありがとうございました! 次回開催も期待してます!!!
© DeNA Co., Ltd. 29