■イベント :Sansan x atmaCup #12 振り返り会 https://atma.connpass.com/event/229180/
■登壇概要 タイトル:学生部門1位 (6th Place Solution) 発表者: @colum2131 さん
▼Sansan R&D Twitter https://twitter.com/SansanRandD
学生部門 1位(6th Place Solution)atmaCup#12 振り返り会1
View Slide
自己紹介@colum2131九州⼤学理学部⽣物学科 学部4年 数理⽣物学研究室プログラミング歴(≒コンペ歴) 2年u Kaggle Competition Expert (銀以上1枚でMaster)u AtCoder ⽔⾊ (Rating: 1305 Highest Rating: 1490)u atmaCup#10でチームで総合4位(敢闘賞3位)獲得自己紹介2
自己紹介発表内容u短期間(atmaCup)でのコンペの進め⽅u評価指標を理解するuコンペ期間でできることを考えるu解法とそれに⾄った経緯uどのモデルを使うか?u他の矩形情報を使った学習をするには?uclass_id 9へのアプローチコンペの方向性・解法3
自己紹介10クラスの多クラス分類(評価指標はMacro F1 Score)評価指標Macro F1-Scoreってどんな指標?→ 各クラスごとにF1 Scoreを計算してその平均を取ったもの→ 多数のクラスより少数のクラスをしっかり当てた⽅がなんだかよさそう?trainデータのclass_idを⾒るとclass_id 9のデータが⼊っていない→ testデータのみにしか存在しない(publicでの割合は2-3%と他のクラスより少なさそう)→ Macro F1 Scoreなのでclass_id 9を当てなければスコアの最⾼値は0.9→ 逆に半分程度class_id 9を当てればスコアは0.05向上するclass_id 9を当てる処理の優先度はかなり高そう4
自己紹介与えられたデータは矩形の端点座標と名刺全体の縦と横の⻑さ→ ここからだと矩形の縦と横の⻑さや⾯積,アスペクト⽐ぐらいしか抽出できなさそう…→ プロットしてみると他の矩形との関係性が強そうな気がしてきた→ 他の矩形情報も使ったほうがよさそう!他の矩形を捉えるにはどうすればいいのだろう• GNNやtransformerなどで他の矩形情報が学習に使えるようにする• 矩形の特徴量作成はあまり⾏わなくてよさそう?• それよりモデルのアーキテクチャをいろいろ実験するのがよさそうNNベースなら• 特徴量作成で他の矩形情報が必要• NNが学習するであろう局所的な矩形と⼤局的な矩形の情報が必要そう• モデル⾃体は⼯夫する必要がなさそう• oputunaでハイパラチューニングすればあとは問題なさそうGDBTベースなら5• 特徴量作成で他の矩形情報が必要• NNが学習するであろう局所的な近傍の矩形と⼤局的な矩形の情報が必要そう• モデル⾃体は⼯夫する必要がなさそう• oputunaでハイパラチューニングすればあとは問題なさそうGBDTベースなら矩形データ
自己紹介与えられたデータは矩形の端点座標と名刺全体の縦と横の⻑さ→ ここからだと矩形の縦と横の⻑さや⾯積,アスペクト⽐ぐらいしか抽出できなさそう…→ プロットしてみると他の矩形との関係性が強そうな気がしてきた→ 他の矩形情報も使ったほうがよさそう!他の矩形を捉えるにはどうすればいいのだろう• GNNやtransformerなどで他の矩形情報が学習に使えるようにする• 矩形の特徴量作成はあまり⾏わなくてよさそう?• それよりモデルのアーキテクチャをいろいろ実験するのがよさそうNNベースなら• 特徴量作成で他の矩形情報が必要• NNが学習するであろう局所的な矩形と⼤局的な矩形の情報が必要そう• モデル⾃体は⼯夫する必要がなさそう• oputunaでハイパラチューニングすればあとは問題なさそうGDBTベースなら6• 特徴量作成で他の矩形情報が必要• NNが学習するであろう局所的な近傍の矩形と⼤局的な矩形の情報が必要そう• モデル⾃体は⼯夫する必要がなさそう• oputunaでハイパラチューニングすればあとは問題なさそうGBDTベースなら矩形データ
自己紹介コンペの進め方7lightGBMでclass_id 9以外を予測class_id 9を予測ensembleで精度向上NNでclass_id 9以外を予測コンペ期間にできそうなラインGBDTがうまくいかなかったら⽬安LB: 0.79-0.80⽬安LB: 0.88-0.89
自己紹介特徴量作成 + 学習8基本的な特徴量と集約特徴量だけだとあまり精度が伸びない...(CV: 0.7817 LB: 0.6884)→ 近傍の矩形情報を⼊れる必要がありそう→ データをみると名刺ごとに矩形が左座標でソートされていた→ そのままラグ特徴量(shiftとdiff)を使えば精度あがりそう?→ かなり向上した(CV: 0.8385)!この⽅向性がよさそう!基本的な特徴量・矩形の端点座標と名刺の横幅,縦幅・矩形の横幅,縦幅,⾯積,アスペクト⽐・名刺の⾯積,アスペクト⽐・矩形と名刺の差分(⾯積,アスペクト⽐)集約特徴量とその差分・基本的な特徴量を名刺単位で集約(min, max, mean, stdの4つの統計量)・min, max, meanはもとの特徴量と差分名刺id left top right bottomhoge 30 80 870 200hoge 40 40 640 180hoge 55 1200 125 1300
自己紹介特徴量作成 + 学習9lightGBMで学習してCV: 0.8707 LB: 0.7701を達成!左座標と上座標それぞれでソートしてラグ特徴量を作成ラグ特徴量(左座標ソートと上座標ソートでそれぞれ求める)・基本的な特徴量のshiftとdiff・shiftしたときの矩形それぞれの重なり部分の⾯積,IoU・マンハッタン距離基本的な特徴量+ 集約特徴量+ ラグ特徴量1st Stage
自己紹介予測値を用いた学習10他の矩形の予測値を新しく特徴量として学習に⽤いたい予測値特徴量・⾃⾝の矩形の予測値の除いた名刺単位の集約(mean)・予測値のラグ特徴量(shiftのみ, 左座標ソートと上座標ソートそれぞれ)基本的な特徴量+ 集約特徴量+ ラグ特徴量1st Stage基本的な特徴量+ 集約特徴量+ ラグ特徴量+ 予測値特徴量2nd Stage2stage学習でCV :0.8823 LB: 0.7909を達成!!
自己紹介class_id 9処理class_id 9はtestにしか存在しない→ とりあえず予測値の最⼤値が低い順から順に1300個をclass_id 9とする(LB: → )→ class_id 9以外だとそこそこ⾼精度で当てることができるからclass id 9も同程度に当てられそうそもそもtrainとtestでclass_id 9の違いで分布が変わっていそう→ 矩形の散布図を⾒てもあまり違いがわからない😢→ 2-3%(約1300個)しか存在しないから⽬で⾒つけるのも⼤変そう→ そもそもtrainらしさ,testらしさがわかればいいなぁ…Adversarial Validation使えるかも!11testらしさ…?
自己紹介Adversarial Validation12Adversarial Validationとは?• trainとtestの分布が違うときにtestに似たtrainのvalidationデータを作成する⽅法• trainとtestで特徴量がリークしていないか特徴量選択としても応⽤することができるまた「Kaggleで勝つデータ分析の技術」(技術評論社)のp.295には,コンペ序盤のEDAで違いが発⾒できなくてもadversarial validationで判別に効いている特徴量を確認し、その特徴量を中⼼にさまざまな仮説を⽴てて再度EDAを⾏ってみるといいでしょう.と書かれており,class id 9の分類に効くであろう特徴量を調べることができるかも
自己紹介Adversarial Validation13基本的な特徴量とラグ特徴量を⽤いて⽬的変数をtrainを0,testを1として学習(AUC:0.579)各矩形のtrain/testらしさの予測値のヒストグラムtestらしいtrainらしいfeature importanceの上位10個testらしい矩形があって,topに依存していそう?
自己紹介Adversarial Validation14testらしい/らしくないtopの分布testらしい/らしくないleftの分布やっぱりtopに偏りがある→ 0付近にtestらしい矩形が集中しているかも?testのtop0から20に集中している矩形がある!→ trainには少ないことからこれがclass id 9っぽい!→ topの28未満の矩形はtrain 79個, test 677個→ 割合的に550個程度はclass id 9が⼊っている(はず)top30以下の分布(⻘:train 橙:test)top28未満をclass id 9とすれば0.055以上は向上?LB: 0.7907 → 0.8550!!!
自己紹介最終的なモデル151st StagePrivate LB:0.7996基本的な特徴量+ 集約特徴量+ ラグ特徴量+ 予測値特徴量2nd Stage 3rd Stage(testデータに対して)class_id=9の矩形がありそうな名刺の矩形全てにpseudolabelingPrivate LB:0.8681tuboさんPost ProcessingPrivate LB:0.7798基本的な特徴量+ 集約特徴量+ ラグ特徴量Private LB:0.8670基本的な特徴量+ 集約特徴量+ ラグ特徴量+ 予測値特徴量Private LB: 0.8681総合6位(学生1位)
自己紹介反省点短期間コンペでの⽅向性の⽴て⽅はかなり良かった→ ⼀⽅でGNNなどを⼀切触らなかったため僅差の勝負で負けてしまう原因にData Augmentationを試したが処理が⽢く精度が出せなかった→ ⾃分ならどこに書くか矩形のお気持ちをもっと理解すればよかった次は総合⼀位を⽬指したい!!🔥🔥🔥16