Upgrade to Pro — share decks privately, control downloads, hide ads and more …

atmaCup#19 1st Place Solution

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for Tatsuya Ishii Tatsuya Ishii
April 11, 2025
110

atmaCup#19 1st Place Solution

Avatar for Tatsuya Ishii

Tatsuya Ishii

April 11, 2025

Transcript

  1. 自己紹介 だれ? w tishii24 で‚ w AtCoder Heuristic Contest によく出ていま‚

    w KaggleはNoviceで‚ w 機械学習(推薦システム)の研究は大学院でやっ ていたので、全くの素人ではないです w 機械学習系のコンペにちゃんと出るのは初め‚ w 4月から新卒(都内のITメガベンチャー)です、会社 名は一応伏せておきま‚ w X(Twitter):@tishii247 w 鍵をかけていますが、基本通すのでお気軽にフォ ロリク飛ばしてください! 1/21
  2. 解法:特徴量作成 たくさん作りました 全部で3,000個くらい、コード行数は600行くらい “ 基礎特徴™ “ 週、曜日、時刻、店舗名、性別、年代、祝日かどうか、セッション数、最初のセッションかどうr “ (曜日、時刻(6時間区切り)、店舗) x

    (セッション数、セッション割合• “ 最終購買日からの日数(Recency)、購買頻度(Frequency• “ 部門、カテゴリ、小カテゴリ(後述)、予測対象カテゴリx(曜日、時刻(6時間区切り)、店舗)、特定アイテ “ 購買金額(Monetary• “ 予測対象カテゴリの平均購買金U “ 直近の購買量(Recent Quantity)、直近の購買頻度(Recent Frequency• “ 予測対象カテゴリ、小カテゴリ(後述• “ 特定アイテムの購買有G “ 全体で購買回数が多いアイテムを代表的なアイテムとして選択 詳細は https://www.guruguru.science/competitions/26/discussions/1c7c8986-7356-45c1-8480-aaae4d930073/ を参照 4/21
  3. 解法:特徴量作成 1 目的変数の挙動にはどのようなパターンがあるか?を考える 重要な仮説:目的変数(カテゴリの購買有無)は周期的である(※) 10/1 10/8 10/15 1 0 0

    1 0 0 ? 0 or 1 ? あるユーザのあるカテゴリに対する購買有無の系列 仮に、完全に周期的だとすると、何が情報として必要か? ※ 他のカテゴリ(衣服、家電など)であれば性質が異なるかもだが、食品や日用品は結構周期的っぽい(経験的に) 6/21
  4. 解法:特徴量作成 (7 そのパターンを説明するためには何が情報として必要か?を考える 購買頻度(Frequency)と最終購買日からの日数(Recency)があれば次の購買日を予測できる 10/1 10/8 10/15 1 0 0

    1 0 0 1 周期 = 1 / 頻度 最終購買日から日数 例えば:購買頻度が10日に1回、最終購買日からの日数が7日なら、3日後くらいに購買する確率が高い 7/21
  5. 解法:特徴量作成 (7 そのパターンを説明するためには何が情報として必要か?を考える 仮説:同じカテゴリ内で、購買周期の異なるアイテム群がある 10/1 10/8 10/15 A B 0

    0 B A 0 B AB 0 0 購買頻度が10日に1回のアイテムA、購買頻度が7日に1回のアイテムBの例 購買周期の異なるアイテム群ごとにFrequency、Recencyを管理すれば良い → より細分化した小カテゴリを作成し、Frequency、Recencyを集計する → 特定アイテムのFrequency、Recencyを集計する 9/21
  6. 解法:特徴量作成 小カテゴリをどう作るか 10/1 10/8 10/15 A B 0 0 B

    A 0 B AB 0 0 購買周期(頻度)ごとにグループ分けしたい! 購買頻度と相関がありそうな、以下を小カテゴリを作る際の基準に使用しy v アイテムの金† v アイテムを購買したユーザの、対象カテゴリの購買頻度の平均} v 例:アイテムAを購買したユーザが3人いて、対象カテゴリの購買頻度が0.2、0.3、0.4なら、0.3をアイテムAの評価値とする [上位10%、上位30%、下位10%、下位30%、その他] の5つの小カテゴリを作成した 10/21
  7. 解法:特徴量作成 他に周期からズレる要因には何があるか? 10/1 10/8 10/15 1 0 0 0 1

    0 0 0 0 0 1 ズレ 仮説:曜日や時間、特定の店舗でしか買わないのかも? → 曜日や時間・店舗ごとの購買頻度を追加 仮説:最近対象カテゴリのアイテムをたくさん買ったなら、次の購買は遅れるかも? → 直近の購買量、購買頻度を追加 仮説:他の部門・カテゴリのアイテムと購買タイミングが揃いがちなのでは? (例:シャンプーはボディーソープ、チョコは他のお菓子と一緒に購買する、など) → 他の部門・カテゴリのアイテムの購買頻度・最終購買日からの日数を追加 11/21
  8. 解法:アンサンブル 以下の全ての組合せのLightGBMを学習して、カテゴリご とにアンサンブル num_features(特徴量の数 ˜ i [50, 100, 200, 300,

    400, 500, 600, 700, 800Y num_leaves(LGBMの葉の最大数˜ i [15, 31, 63Y min_data_in_leaf(LGBMの葉に入るデータの最小数 ˜ i [20, 300] 余談: min_data_in_leaf=300がかなり効いた(LBで+0.0008くらい?) ノイズになりやすい特徴量が多いので、強めの正則化が有効だった? カテゴリごとのアンサンブル重み 15/21
  9. 結果 モデル 手元 LB チョコ ビール ヘアケア 酒 特徴量選択前 0.7892

    0.7836 0.7534 0.8741 0.7517 0.7775 特徴量選択後 num_features = 300 0.7894 0.7833 0.7538 0.8747 0.7515 0.7780 アンサンブル 0.7908 0.7843 0.7547 0.8751 0.7537 0.7796 Œ アンサンブルはまあまあ効いてい Œ 手元の結果ほどは向上しなかった(学習が不安定だった?k Œ 特徴量選択前(単一のモデル)で0.7836(本番2位相当)が出ているので、特徴量作成の部分 で優位に立っているっぽい 16/21
  10. 振り返り 特徴量作成で意識したこと 予測モデルに十分な特徴量が与えられているかを考えV G 曜日や時間ごとの購買頻度に合わせて、曜日や時間ごとのセッション数を加える、なU G 曜日や時間ごとのセッション数は「購買頻度の値がどの程度信頼できるか」を表す 丁寧に設計する・楽な実装に逃げなp G 直近k回のセッションを集約するのと、直近k日のセッションを集約するのはどっちが良いか?

    競争優位になる要素を考えV G 最上位は主要な特徴量はもれなく全て実装してくるは¤ G それら主要な特徴量を全てもれなく実装した上で、何かしら特別なことができるとよ“ G 自身が持つ専門的な知識を活かす、面倒な実装が必要な要素を加える、なU G 今回の場合:凝った小カテゴリ(面倒な実装が必要) 余談:Kaggleで勝つデータ分析の技術 を片手に仮説を立てていました! 20/21
  11. 振り返り 何をやらなかったか EDA・ミクロな視点での分g G ディスカッション(※)を眺めたくらい、とても助かりました、' G 身近で想像しやすい(仮説が立てやすい)テーマだったから助かった NNや他のGBDTモデルとのアンサンブル、k-fold(交差検証f G 実験時間を短縮することで、特徴量をたくさん作る方が有利と判断しk

    G LightGBMで表現力の高い・低いモデルを作ればアンサンブルには十分そうと判断した Embedding(NMFやSVDなどf G アイテムのレコメンドなどのタスクでは、よりユーザやアイテムの豊かな表現が必要そうだ が、今回はFrequency、Recencyで十分に目的変数を説明できそう、と判断しk G (ただの思想)決定木の特徴量にembeddingを(直接)使うのがあまり好きじゃない、、 ※ https://www.guruguru.science/competitions/26/discussions/b5950b70-4016-438e-b2ce-453001f90fac/ 21/21