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 3rd place solution
Search
chimuichimu
January 19, 2024
Technology
580
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
atmaCup#16 3rd place solution
chimuichimu
January 19, 2024
More Decks by chimuichimu
See All by chimuichimu
書籍紹介:アジャイルなチームをつくる ふりかえりガイドブック
chimuichimu
0
130
朝 Kaggle のすすめ
chimuichimu
3
700
atmaCup#19 2nd Place Solution
chimuichimu
2
480
Wantedly Visit における相互推薦システムの活用事例
chimuichimu
1
380
データ駆動で実現する、人と企業のマッチング
chimuichimu
0
170
PydanticAI × Logfire ではじめる LLM エージェントのモニタリング
chimuichimu
3
1.5k
ウォンテッドリーの推薦システム開発を支える評価とデプロイの仕組み
chimuichimu
1
1.8k
進化計算ライブラリ DEAP の紹介
chimuichimu
2
350
Spotify Web API を使った分析で新しいお気に入りアーティストを発見する
chimuichimu
3
350
Other Decks in Technology
See All in Technology
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
10
2.5k
フルAIで個人開発して学んだあれこれ / yuruai vol.1
isaoshimizu
0
110
現場のトークンマネジメント
dak2
1
190
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
770
AIが自律的に回る開発ループを設計してチーム開発に組み込む
nekorush14
0
130
Lightning近況報告
kozy4324
0
220
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
200
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
130
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
120
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
120
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
330
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
The browser strikes back
jonoalderson
0
1.3k
Design in an AI World
tapps
1
250
Building an army of robots
kneath
306
46k
Evolving SEO for Evolving Search Engines
ryanjones
0
220
What's in a price? How to price your products and services
michaelherold
247
13k
Context Engineering - Making Every Token Count
addyosmani
9
980
Music & Morning Musume
bryan
47
7.2k
Transcript
atmaCup#16 3rd place solution Jan. 20 2024 #16 atmaCup 表彰式&振り返り会
Chiaki Ichimura
自己紹介 • 市村 千晃(@chimuichimu1) • 仕事 ◦ データ分析R&D@SIer ← 金融系SE@SIer
• 好きなもの ◦ 犬 ◦ サウナ ◦ ゲーム ◦ データ分析コンペ 2
解法サマリ • 候補生成→機械学習によるリランキングの2段階推薦 • 特にトレンドを考慮した候補や特徴量の作り込みが重要だった 候補生成 リランキング ~ 10K ~
40 10 yado.csv 3
候補生成ロジック • 色々試したが、シンプルなロジッ ク(セッションに出現した宿、人 気宿、アソシエーションルール) が強かった ロジック 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
トレンドを考慮した候補生成 • 全期間で計算した候補だけでなく、各期間のみで計算した候補(+特徴量) を加えることで精度が改善 • 例:人気宿 ◦ 「全期間での人気宿」と「各期間(train or test)のログのみの人気宿」を候補に
◦ 「全期間での人気ランク」と「各期間(train or test)のみでの人気ランク」を特徴量に 候補生成 リランキング yado.csv 5
リランキング • LightGBM Rankerでモデリング • そのままだと負例が多いので、負例をダウンサンプリング ◦ 正例:負例 = 1:50 → 正例:負例
= 1:2 • 合計100程度の特徴量を作成 ◦ アイテム単位(基本属性、全期間に対する各期間の閲覧数割合、など) ◦ セッション単位(セッションの長さ、閲覧した宿の部屋数の統計、など) ◦ アイテム*セッション単位(セッション内で何回出現したか、何番目に出たか、など) ◦ 類似度特徴量(宿の属性、行列分解の埋め込みベクトルの距離、など) 候補生成 リランキング yado.csv 6
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
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
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
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
*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
ablation study まとめ • アンサンブルによる寄与はあまりなかった • トレンドを考慮した候補と特徴量が重要だった • シンプルな候補生成ロジックだけでも、10位以内に入る精度が出せた •
機械学習モデルのリランキングによりスコアが向上 12
反省点 • データの特性上、単純に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
実験管理 • 実験ログはNotionで管理 • 再現のしやすさのため、1実験ごと に1フォルダ作ってコードもデータ も全部そこに入れる Notionの実験ログのイメージ 14
まとめ • 解法 ◦ 候補生成→機械学習によるリランキングの2段階推薦 ◦ 特にトレンドを考慮した候補や特徴量の作り込みが重要だった • 全体を通じて ◦
シンプルな課題設定だが奥が深く、様々な工夫が活きる楽しいコンペだった ◦ 問題設定やデータの特性に対して対応する力が足りないことを自覚でき、参加してよかった 15