Slide 1

Slide 1 text

© DeNA Co., Ltd. 1 「atmaCup #16 in collaboration with RECRUIT」  1st place solution + 取り組み方 株式会社ディー・エヌ・エー 村上直輝 / kami

Slide 2

Slide 2 text

© DeNA Co., Ltd. 2 村上 直輝 / kami #Kaggle #atmaCup #(元)よわよわ競プロer #23新卒 趣味など  予定のない休日はゲームとかやっていました  最近はコンペに私生活を破壊されかけています @634kami © DeNA Co., Ltd. 自己紹介

Slide 3

Slide 3 text

© DeNA Co., Ltd. 3 コンペ概要 1st place solution 概要 どのように取り組んだかとスコアの推移 3 2 1 目次

Slide 4

Slide 4 text

© DeNA Co., Ltd. 4 4 01 コンペ概要

Slide 5

Slide 5 text

© DeNA Co., Ltd. 5 コンペのお題 引用:https://www.guruguru.science/competitions/22/

Slide 6

Slide 6 text

© 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%) 時間

Slide 7

Slide 7 text

© DeNA Co., Ltd. 7 7 02 1st place solution 概要 ● ディスカッション ● コード

Slide 8

Slide 8 text

© DeNA Co., Ltd. 8 概要 ● ベースアイデア:session の長さに応じて学習や予測の方法を変える ● Solution 概要 ○ ケース1:session の長さが 1 ■ ルール(log データの遷移確率ベース)での予測 ● train と test のドメインシフトを考慮して test の重みを 14 倍に ■ 残りをLightGBMで予測 ○ ケース2:session の長さが2以上 → LightGBM・CatBoost で予測 1 セッションの長さに着目したデータ基礎集計 より 全く同じ入力でラベルの違う データが複数存在する

Slide 9

Slide 9 text

© DeNA Co., Ltd. 9 ルールでの予測 1. log の情報から遷移を表す確率行列を作成(提出時はテストの重みを14倍) ○ あとで2乗するので始点の周辺を重視するために自身に 0.4 の確率で戻るように 1. 遷移行列を2乗して2hop離れた候補まで含めるように 2. sessionの宿から出現する確率の高い宿を順番に予測結果とする 2 session内での 遷移情報

Slide 10

Slide 10 text

© DeNA Co., Ltd. 10 LightGBM での予測 ● 候補生成 ○ 遷移確率・共起表現ベースで次に出現する可能性の高い宿 ○ 最終閲覧と同じ地域での出現回数ランキング上位 ● 特徴(最終的に100〜200程度) ○ sessionの特徴量:出現したyadの特徴量をsessionごとに集約 ○ 候補の特徴量:yad.csvの情報、地域ごとの出現回数ランキング情報 ○ session-候補間の特徴量:遷移確率・共起表現ベースの特徴量 ● 学習方法 ○ lambdarank ○ 候補のネガティブダウンサンプリング無しで、メモリ196GBのマシンで学習 3

Slide 11

Slide 11 text

© DeNA Co., Ltd. 11 11 10日間の取り組み 03 どのように取り組んだか

Slide 12

Slide 12 text

© DeNA Co., Ltd. 12 スコア遷移の概要 終了2分前に ギリギリ超えた 4日目で初提出 思ったよりスコア出ない

Slide 13

Slide 13 text

© DeNA Co., Ltd. 13 初日:問題に目を通す&環境構築 ● 2023/12/08 18:00〜:レコメンドタスクで社内slack(というか自分)がザワつく ● 〜2023/12/08 23:06:環境構築&実験管理の整理 https://twitter.com/634kami/status/1733126025939468332

Slide 14

Slide 14 text

© DeNA Co., Ltd. 14 (脱線) 自分用にコンペ用の実験テンプレート作ってます ● 特徴 ○ Docker によるポータブルなKaggleと同一の環境 ○ Hydra による実験管理 (実際は wandb と組み合わせて利用) ■ 実験用スクリプトファイルを major バージョン ■ パラメータ等のconfigファイルををminorバージョン ■ 実験用スクリプトと設定を同一フォルダで局所的に管理して把握しやすくする 詳しくはこちら:https://github.com/unonao/kaggle-template Docker環境 実験の実行例

Slide 15

Slide 15 text

© DeNA Co., Ltd. 15 4日目:First Submit 思ったよりスコアが出ない ● 〜2023/12/11(月) 6:15:実装完了&ようやく最初の提出(レコメンドの実装重い...) ○ 候補生成・特徴量:簡単な遷移確率、locationごとの宿のランキング

Slide 16

Slide 16 text

© DeNA Co., Ltd. 16 4日目:まともなスコアを出す 当時21位 ● 〜2023/12/11(月) 9:18:色々と変更を加えて実験を回してみる ○ 候補宿のカテゴリ変数を抜いてみたら良くなった&特徴量を追加&候補生成を微修正

Slide 17

Slide 17 text

© DeNA Co., Ltd. 17 4日目:まともなスコアを出す ● 2023/12/11(月) 9:20 https://twitter.com/634kami/status/1734005155618791915

Slide 18

Slide 18 text

© DeNA Co., Ltd. 18 6日目:sessionの長さ1のデータを分ける 当時13位 ● 〜2023/12/13(水) 9:43:sessionの長さ1のデータを分けて学習&推論 ● 〜2023/12/13(水) 23:59:遷移確率以外に共起特徴なども追加 分けてみた

Slide 19

Slide 19 text

© DeNA Co., Ltd. 19 6日目:sessionの長さ1のデータを分ける ● 2023/12/13(水) 24:01 https://twitter.com/634kami/status/1734951561720459451

Slide 20

Slide 20 text

© DeNA Co., Ltd. 20 8日目:改善して落ちた順位を戻す 当時13位 ● 〜2023/12/15(金) 22:47 ○ 遷移確率とか共起の特徴量が効いてそう→遷移行列の2乗で候補生成&特徴量追加

Slide 21

Slide 21 text

© DeNA Co., Ltd. 21 8日目:改善して落ちた順位を戻す ● 2023/12/15(金) 22:49:ちょっとは賞金貰えそうくらいの順位で少し期待する https://twitter.com/634kami/status/1735658387365577070

Slide 22

Slide 22 text

© DeNA Co., Ltd. 22 9日目~最終日午前:諦めモード 当時11位 ● 〜2023/12/16(土) 13:40:トップ層とのスコア差が大きすぎて何もわからない状態 ○ sessionの長さ1 のときは同じ入力で違う答えのデータが含まれている →ルールベースで処理を行うようにして多少改善

Slide 23

Slide 23 text

© DeNA Co., Ltd. 23 9日目~最終日午前:諦めモード ● 2023/12/16(土) 13:41 https://twitter.com/634kami/status/1735882791374684399

Slide 24

Slide 24 text

© DeNA Co., Ltd. 24 最終日午後:“完全に理解した” 当時4位 ● 〜2023/12/17(日) 12:11:スマホでディスカッションを眺めていたらひらめく ○ Train, Test でしか出現しない宿があるよなぁ→ドメインシフト対策してなかった! ○ テストの重みを数倍に増やしたら一気にスコア改善 終了2分前に Private 1 位相 当を提出

Slide 25

Slide 25 text

© DeNA Co., Ltd. 25 最終日午後:“完全に理解した” ● 2023/12/17(日) 12:12 https://twitter.com/634kami/status/1736222811788898599

Slide 26

Slide 26 text

© DeNA Co., Ltd. 26 Submission Summary https://www.guruguru.science/competitions/22/summary サブ選択によっては誰が勝っ てもおかしくない状況 相関はしているがPublic 最大 が Private 最大ではない 最終submit選択 LB/ローカルで一番良かった遷 移行列のパラメータを選択 遷移行列での map@k などを ローカルでもチェックしてい たのが結果的に良かった模様

Slide 27

Slide 27 text

© DeNA Co., Ltd. 27 その他 ● 取り組んだ時間:おそらく40時間ちょっと(土日4日間 x 5時間 + 平日5日間 x 4時間) ○ 基本は業務開始前と 業務後〜24時くらいまでやっていました ■ 木曜と最終日前日の夜だけ諦めてゲームしてましたがそれ以外は基本コンペに時間割いてたと思います ○ 普段は社内制度で業務時間中にコンペに出ていますが今回はほぼやりませんでした ■ atmaCup直前にKaggleやりすぎたので自粛してました ■ 業務時間中に順位抜くの禁止です! ● なぜログの共起や遷移の特徴が効いたのか? ○ 「すでにあるレコメンドが予約に大きく影響している」という話も聞いてなるほどと思いました ○ 特定地域の中で探して宿を決めがちというドメイン特有の性質もあったかもしれません ● 画像データはうまく使えませんでした ○ うまくいった方は教えてください

Slide 28

Slide 28 text

© DeNA Co., Ltd. 28 楽しいコンペをありがとうございました! 次回開催も期待してます!!!

Slide 29

Slide 29 text

© DeNA Co., Ltd. 29