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
690
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
睡眠コンペ 1st place solution
unonao
3
1.7k
N=1 の推薦系コンペの戦い方
unonao
3
1.9k
Kaggle 過去コンペまとめ Image Matching Challenge 2023
unonao
0
830
RecSys23参加報告:推薦システムに関する最新研究
unonao
1
760
#15 atmaCup 振り返り& 1st place solution
unonao
1
1.2k
Other Decks in Programming
See All in Programming
fs2-io を試してたらバグを見つけて直した話
chencmd
0
230
Effective Signals in Angular 19+: Rules and Helpers
manfredsteyer
PRO
0
100
useSyncExternalStoreを使いまくる
ssssota
6
1k
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
Keeping it Ruby: Why Your Product Needs a Ruby SDK - RubyWorld 2024
envek
0
190
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
Symfony Mapper Component
soyuka
2
730
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
130
Haze - Real time background blurring
chrisbanes
1
510
SymfonyCon Vienna 2025: Twig, still relevant in 2025?
fabpot
3
1.2k
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Designing for humans not robots
tammielis
250
25k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Fireside Chat
paigeccino
34
3.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Building Applications with DynamoDB
mza
91
6.1k
Navigating Team Friction
lara
183
15k
Why Our Code Smells
bkeepers
PRO
335
57k
Making Projects Easy
brettharned
116
5.9k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
4 Signs Your Business is Dying
shpigford
181
21k
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