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
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
4
260
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
3
470
php-conference-japan-2024
tasuku43
0
270
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
talk-with-local-llm-with-web-streams-api
kbaba1001
0
180
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
290
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
ドメインイベント増えすぎ問題
h0r15h0
2
300
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
Refactor your code - refactor yourself
xosofox
1
260
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
45
7k
Agile that works and the tools we love
rasmusluckow
328
21k
Become a Pro
speakerdeck
PRO
26
5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
How to Ace a Technical Interview
jacobian
276
23k
Git: the NoSQL Database
bkeepers
PRO
427
64k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
A designer walks into a library…
pauljervisheath
204
24k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
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