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
660
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.6k
N=1 の推薦系コンペの戦い方
unonao
3
1.9k
Kaggle 過去コンペまとめ Image Matching Challenge 2023
unonao
0
780
RecSys23参加報告:推薦システムに関する最新研究
unonao
1
730
#15 atmaCup 振り返り& 1st place solution
unonao
1
1.1k
Other Decks in Programming
See All in Programming
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
1.9k
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
110
イベント駆動で成長して委員会
happymana
1
320
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
1
290
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
Content Security Policy入門 セキュリティ設定と 違反レポートのはじめ方 / Introduction to Content Security Policy Getting Started with Security Configuration and Violation Reporting
uskey512
1
530
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
110
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
Tauriでネイティブアプリを作りたい
tsucchinoko
0
370
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
230
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
470
CSC509 Lecture 11
javiergs
PRO
0
180
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
327
21k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Embracing the Ebb and Flow
colly
84
4.5k
Unsuck your backbone
ammeep
668
57k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Facilitating Awesome Meetings
lara
50
6.1k
Being A Developer After 40
akosma
86
590k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
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