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

【atmaCup#20】振り返り会LT資料

Avatar for takaito takaito
August 31, 2025
180

 【atmaCup#20】振り返り会LT資料

atmaCup#20の振り返り会のLT資料を公開用に編集したものです.
参加にはNDAを結ぶ必要があり,具体的なデータに関しては言及しないように心がけて資料を作成しているため,少し抽象的な内容が多くて恐縮ですが,何かの参考になれば幸いです!

Avatar for takaito

takaito

August 31, 2025
Tweet

Transcript

  1. 1 自己紹介 名前: 高野 海斗(たかいと) 略歴: 2021年3月: 博士後期課程 修了 (理工学博士)

    2021年4月: 資産運用会社 入社 (クオンツ) 専門分野: 自然言語処理(NLP) × 金融(Finance) データ分析コンペを始めたきっかけがatmaCup! 直近のatmaCupの成績 #17 4th (Solo) & nyk510賞 #18 5th (Team suk1yak1さん) #19 2nd (Team chimuichimuさん) & nyk510賞 #20 3rd (Solo) & Discussion賞
  2. 2 Today's Lightning Talk Kaggle をはじめとしたデータ分析コンペで用いられている Validation Score について紹介 ①

    基礎編 ・ Validationとは ② 応用編 ・ Validation Score の使い方 ③ atmaCup#20での実例紹介 ・ 応用編を今回のコンペのデータで確認 ※ NLP の話はすでにディスカッションでコンペ開催期間中にほとんど公開しているので,そちらを参考にしてください ・ テーブルデータをテキスト情報に変換して日本語ModernBERTを学習・推論 ・ テーブルデータをテキスト情報に変換するメリットと注意点
  3. 4 Validationとは ✔ 実務やデータ分析コンペでは,現時点で使用可能な正解ラベルが付与されたデータ (train.csv) が存在し, 最終的に未知のデータ (test.csv) に対して有効なモデルを開発する必要がある ✔

    モデル選択,ハイパーパラメータの選択,モデルの過学習を抑制するなどの目的を達成するために,使用可 能なデータを訓練用データ (Training Data) と検証用データ (Validation Data) に分割して検証を行う Train Data Test Data Training Data Test Data Validation Data
  4. 7 Hold-out Validation と K-fold Cross-Validation ✔ Hold-out Validation ✔

    K-fold Cross-Validation (K分割交差検証) 偶然の影響を軽減することや効率的にデータを活用するために,データをK分割して,K回検証を行う Training Data Test Data Validation Data Test Data Data4 Data3 Data2 Data1 Test Data Validation Data Training Data Training Data Training Data Test Data Training Data Validation Data Training Data Training Data ・ ・
  5. 9 Q: どちらのモデルを採用しますか? ✔ データ分割の方法や特徴量の極端なleakは起こっていないという前提でどちらのモデルを採用しますか? (評価指標は,分類タスクで使用されることの多い,1.0に近づくほど良い指標である AUC や F1と仮定) モデルA:

    5-fold Cross-Validation によるモデル学習の結果,CV Score 0.700 のモデル モデルB: 5-fold Cross-Validation によるモデル学習の結果,CV Score 0.690 のモデル A. これだけの情報では判断できない!
  6. 10 ケース1: 学習曲線に注目 ✔ モデル A の方が Validation Score の最大値は大きいが,各epochでのスコアが安定していない

    ✔ モデル B は Validation Score が安定している ✔ 仮に適切なデータ分割ができているのであれば, モデルBの方がLBのスコアが安定し,期待値も高い ✔ F1スコアなどの閾値でラベルを割り当てて計算する 評価指標などは,不安定な傾向にある このあたりの区間で スコアが安定している
  7. 11 ケース2: モデルごとの検証の頻度の差に注目 ✔ モデル A は小さなモデルでバッチサイズを大きくすることができるため,1 epoch が 5

    step で終わる ✔ モデル B は大きいモデルでバッチサイズを大きくすることができず, 1 epoch に 40 step の学習が行われる ✔ 左図は x 軸が step 数で,モデル B が 1 回の検証をする間にモデル A は 8 回検証の機会がある ✔ 右図は仮に各 step でモデルを検証した場合を示しており,モデル B は 1 epoch ですでに過学習している
  8. 12 ケース3: CV Score の計算方法に注意 ✔ 状況に応じて CV Score の計算方法は使い分ける必要がある

    ✔ 大きく 2 通りの方法がある ① 各 fold の Validation Score を計算し,平均 (データ件数が不均衡な場合は加重平均) を取る方法 ② 各 fold の結果を連結し全データでまとめて Validation Score を計算する方法 ✔ ① でミスリーディングをすることは少ないが,② は評価指標やデータの性質次第でミスリーディングが起こる ✔ 評価指標が AUC の場合に起こりうる 2 つの例をとりあげる
  9. 13 例1: 各 fold の正解ラベルの分布が大きく異なる ✔ fold1 では偶然正例が多く,fold2 では偶然負例が多い場合を考える ✔

    ロス関数の最適化によって,最終的な予測値の分布に歪みが生じる可能性がある (学習データの正例が多い場合,モデルは迷ったらとりあえず正例側を示すようになる) ✔ 右の図はとても極端な例を示している ✔ このとき,各 fold の出力を連結して AUC を計算すると,各 fold のAUC よりも大きく悪化してしまう...
  10. 14 例2: 過学習や学習の早期停止によってばらつきが異なる ✔ fold1 では学習が早期に停止され,fold2 では十分に学習が行われた場合を考える ✔ 学習の停止タイミングによってモデルの出力のばらつきが変化することもある ✔

    右の図はとても極端な例を示している ✔ このとき,各 fold の出力を連結して AUC を計算すると,各 fold のAUC よりも大きく悪化してしまう... (青色の fold の予測が重視される)
  11. 15 例1と例2の対応策 ✔ 対応策は以下の 2 通り 対応策1: ① の各 fold

    の Validation Score を計算し,平均を取ることで対応が可能 対応策2: 各 fold の結果を連結する前に,各 fold で Rank 処理を適用することで,予測の分布を揃える ✔ 例1と例2はかなり極端な例を示したが,紹介したような現象が軽度に起こっているコンペは意外にも多い
  12. 18 ① 学習曲線に注目 ✔ 各 fold で水準は異なるものの,各 fold での 評価値のとりうる値の範囲は

    0.05 程度 ✔ 各 fold の学習曲線に規則性が見えず,ベストな停止基準の決め打ちは難しい ✔ アンサンブルに Best Epoch や 4, 6, 7, 8 epoch を使用することで,ものすごく悪い結果を引くことを避ける
  13. 19 ② 出力の分布に注目 (1/4) ✔ 各 fold の各 epoch のモデルの出力を可視化

    (validation) ✔ 各 fold の各 epoch で分布の平均や分散が大きく異なっている
  14. 20 ② 出力の分布に注目 (2/4) ✔ 各 fold の各 epoch のモデルの出力を可視化

    (test) ✔ 各 fold の各 epoch で分布の平均や分散が大きく異なっている
  15. 22 ② 出力の分布に注目 (4/4) ✔ 各 fold の Best epoch

    に注目 ✔ 応用編であげた例①と例②の両方に当てはまる状態...(分布が異なる)
  16. 23 Best epoch で AUC を計算 ① 各 fold ごとに計算した

    AUC の平均を計算: 0.680 ② 出力の分布を揃えずに,各 fold の結果を連結して AUC を計算: 0.592 ⇐ これでは選ぶことができない ③ 出力の分布をランク処理して揃えた後に,各 fold の結果を連結して AUC を計算: 0.675 ⇒ データによっては 0.15 くらいスコアがブレるので, public はコンペ終盤時の 50 位とかのスコアが 出ているモデルで OK の精神で,CV の安定性 を重視して選択することに決定
  17. 24 Today's Lightning Talk Summary ✔ Kaggle をはじめとしたデータ分析コンペで用いられている Validation Score

    について紹介 ✔ 基礎編の検証データの分割方法までは,いろいろな書籍やブログで取り扱われている ✔ 応用編では Validation Score 正しく使うために必要な視点を具体例をあげながら紹介 ✔ atmaCup#20のデータで応用編で紹介したことを実際に当てはめて確認する例も紹介 ✔ 結論としては,学習過程のスコアの推移や各モデルの出力分布をしっかり確認することが重要!! また,評価指標に合わせて適切なデータの前処理や計算を行う必要があることを確認 ✔ 実務やコンペでは,特徴量の追加によって leak をはじめとした様々なことが起こりうるので意外と大変 ✔ 以下の資料を合わせて読むことをおすすめします!(詳細に扱えていない部分を相互補完できるはず...) shake-upを科学する by Jack さん
  18. 25 atmaCup#20の振り返り (時系列) ✔ 17時からスタバで Tutorial Notebook を作成 ⇒ 日本語が含まれていることによるエラーに気づけず,18

    時から日本酒飲み放題のお店でバグ修正 ✔ 特徴量作成する時間が取れないことに気づき,NLP モデルに丸投げすることを決意 ✔ CV も LB もそこそこのスコアだったので,参考になればと思いディスカッションに投稿 ✔ 上位常連の強い人のサブ状況を見ると意外とこまめに提出しているが,LB の上位になかなか上がらない ⇒ ドメインに基づくような特徴量作りなどが刺さっていない可能性が浮上 ✔ LB 上がらなくても可能性があることを確信し,入力しなくても精度が大きく落ちない特徴量を減らしたり,ロス関数 の工夫なども行って多数のモデルを学習し,可視化をしながら最終サブに使用するモデルを決定 ✔ Public と性質がほとんど一致するようなデータ群が Private の場合は勝ち筋がどちみち 0 だったので,多少異なる 前提で CV の安定感などを見ながらサブを決めたが,かなり運の要素が強かった(勝つ確率は高められていたはず)