Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
atmaCup #16: 1st place solution + 取り組み方振り返り
Search
kami
January 19, 2024
Programming
1.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
atmaCup #16: 1st place solution + 取り組み方振り返り
「#16 atmaCup 表彰式&振り返り会」で利用した解法プレゼンの資料です
https://atma.connpass.com/event/305563/
kami
January 19, 2024
More Decks by kami
See All by kami
JSAI2025 RecSysChallenge2024 優勝報告
unonao
2
840
MLコンペ実験テンプレートを作ろう!
unonao
4
2.4k
RecSys2024 参加報告
unonao
1
510
睡眠コンペ 1st place solution
unonao
3
4k
N=1 の推薦系コンペの戦い方
unonao
5
2.7k
Kaggle 過去コンペまとめ Image Matching Challenge 2023
unonao
0
1.5k
RecSys23参加報告:推薦システムに関する最新研究
unonao
1
1.1k
#15 atmaCup 振り返り& 1st place solution
unonao
1
1.7k
Other Decks in Programming
See All in Programming
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
190
What We Talk About When We Talk About XP
m_seki
2
670
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
260
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
290
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
830
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
850
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
330
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.8k
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
260
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.9k
SREの越境 / SRE Collaboration
y0hgi
2
260
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
3.2k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
570
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Everyday Curiosity
cassininazir
0
320
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Thoughts on Productivity
jonyablonski
76
5.4k
What's in a price? How to price your products and services
michaelherold
247
13k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
KATA
mclloyd
PRO
35
15k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
880
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