Slide 1

Slide 1 text

atmaCup#16 3rd place solution Jan. 20 2024 #16 atmaCup 表彰式&振り返り会 Chiaki Ichimura

Slide 2

Slide 2 text

自己紹介 ● 市村 千晃(@chimuichimu1) ● 仕事 ○ データ分析R&D@SIer ← 金融系SE@SIer ● 好きなもの ○ 犬 ○ サウナ ○ ゲーム ○ データ分析コンペ 2

Slide 3

Slide 3 text

解法サマリ ● 候補生成→機械学習によるリランキングの2段階推薦 ● 特にトレンドを考慮した候補や特徴量の作り込みが重要だった 候補生成 リランキング ~ 10K ~ 40 10 yado.csv 3

Slide 4

Slide 4 text

候補生成ロジック ● 色々試したが、シンプルなロジッ ク(セッションに出現した宿、人 気宿、アソシエーションルール) が強かった ロジック TOP_K MAP@10 セッションに出現した宿 all 0.295 人気宿(同じ sml_cd 内) 10 0.150 人気宿(同じ lrd_cd 内) 10 0.127 類似宿(sml_cdと宿の属性が一致) 100 0.064 アソシエーションルール(1-hop) all 0.219 アソシエーションルール(2-hop) 100 0.160 Implicit Matrix Factorization (IMF) 10 0.115 Bayesian Personalized Ranking (BPR) 10 0.104 Item2Vec(I2V) 5 0.142 候補生成 リランキング yado.csv 4

Slide 5

Slide 5 text

トレンドを考慮した候補生成 ● 全期間で計算した候補だけでなく、各期間のみで計算した候補(+特徴量) を加えることで精度が改善 ● 例:人気宿 ○ 「全期間での人気宿」と「各期間(train or test)のログのみの人気宿」を候補に ○ 「全期間での人気ランク」と「各期間(train or test)のみでの人気ランク」を特徴量に 候補生成 リランキング yado.csv 5

Slide 6

Slide 6 text

リランキング ● LightGBM Rankerでモデリング ● そのままだと負例が多いので、負例をダウンサンプリング ○ 正例:負例 = 1:50 → 正例:負例 = 1:2 ● 合計100程度の特徴量を作成 ○ アイテム単位(基本属性、全期間に対する各期間の閲覧数割合、など) ○ セッション単位(セッションの長さ、閲覧した宿の部屋数の統計、など) ○ アイテム*セッション単位(セッション内で何回出現したか、何番目に出たか、など) ○ 類似度特徴量(宿の属性、行列分解の埋め込みベクトルの距離、など) 候補生成 リランキング yado.csv 6

Slide 7

Slide 7 text

ablation study 条件 LB (MAP@10) LB (Rank) 最終sub 0.4458 3 without アンサンブル 0.4453 3 without アンサンブル、トレンドを考慮した候補と特徴量 0.4386 28 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量 0.4436 9 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量、機 械学習によるリランキング(*1) 0.4361 38 *1 : セッションに出現→アソシエーションルール→人気宿の順で候補を埋める単純なルールベース (工夫の余地はまだ全然ある) 7

Slide 8

Slide 8 text

ablation study 条件 LB (MAP@10) LB (Rank) 最終sub 0.4458 3 without アンサンブル 0.4453 3 without アンサンブル、トレンドを考慮した候補と特徴量 0.4386 28 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量 0.4436 9 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量、機 械学習によるリランキング(*1) 0.4361 38 アンサンブルの寄与はそこまで大きくない シングルモデルでも同等の順位のスコアが出せた *1 : セッションに出現→アソシエーションルール→人気宿の順で候補を埋める単純なルールベース (工夫の余地はまだ全然ある) 8

Slide 9

Slide 9 text

ablation study 条件 LB (MAP@10) LB (Rank) 最終sub 0.4458 3 without アンサンブル 0.4453 3 without アンサンブル、トレンドを考慮した候補と特徴量 0.4386 28 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量 0.4436 9 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量、機 械学習によるリランキング(*1) 0.4361 38 トレンドを考慮した候補と特徴量が 入賞圏にいくためには重要だった *1 : セッションに出現→アソシエーションルール→人気宿の順で候補を埋める単純なルールベース (工夫の余地はまだ全然ある) 9

Slide 10

Slide 10 text

ablation study 条件 LB (MAP@10) LB (Rank) 最終sub 0.4458 3 without アンサンブル 0.4453 3 without アンサンブル、トレンドを考慮した候補と特徴量 0.4386 28 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量 0.4436 9 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量、機 械学習によるリランキング(*1) 0.4361 38 セッション出現宿、人気宿、アソシエーションルールだけでも 10位以内に入れるスコアを出すことができた *1 : セッションに出現→アソシエーションルール→人気宿の順で候補を埋める単純なルールベース (工夫の余地はまだ全然ある) 10

Slide 11

Slide 11 text

*1 : セッションに出現→アソシエーションルール→人気宿の順で候補を埋める単純なルールベース (工夫の余地はまだ全然ある) ablation study 条件 LB (MAP@10) LB (Rank) 最終sub 0.4458 3 without アンサンブル 0.4453 3 without アンサンブル、トレンドを考慮した候補と特徴量 0.4386 28 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量 0.4436 9 without アンサンブル、類似宿・IMF・BPR・I2Vの候補と特徴量、機 械学習によるリランキング(*1) 0.4361 38 機械学習によるリランキングによりスコアが大きく伸びた 11

Slide 12

Slide 12 text

ablation study まとめ ● アンサンブルによる寄与はあまりなかった ● トレンドを考慮した候補と特徴量が重要だった ● シンプルな候補生成ロジックだけでも、10位以内に入る精度が出せた ● 機械学習モデルのリランキングによりスコアが向上 12

Slide 13

Slide 13 text

反省点 ● データの特性上、単純にRankerを作ると 「入力が同じだがラベルが違う」学習 データができてしまいがち ● このラベルのノイズに対応できると優勝 スコアだった。コンペのユニークな点に 対応するスキルが足りなかった ● 詳細は以下ディスカッション参照 ○ https://www.guruguru.science/competitions/22/discussions/97f57d26-5c69- 4fcf-9cad-9240075f11a1/ ○ https://www.guruguru.science/competitions/22/discussions/f1c6b804-6c60- 4987-8a6a-572052dc20a5/ 実力不足を痛感する筆者のツイート 13

Slide 14

Slide 14 text

実験管理 ● 実験ログはNotionで管理 ● 再現のしやすさのため、1実験ごと に1フォルダ作ってコードもデータ も全部そこに入れる Notionの実験ログのイメージ 14

Slide 15

Slide 15 text

まとめ ● 解法 ○ 候補生成→機械学習によるリランキングの2段階推薦 ○ 特にトレンドを考慮した候補や特徴量の作り込みが重要だった ● 全体を通じて ○ シンプルな課題設定だが奥が深く、様々な工夫が活きる楽しいコンペだった ○ 問題設定やデータの特性に対して対応する力が足りないことを自覚でき、参加してよかった 15