Slide 1

Slide 1 text

PLAsTiCC Astronomical Classification 3rd Place Solution 2019/7/13 Kaggle Tokyo Meetup #6 Nomi (nyanp) Team: Major Tom

Slide 2

Slide 2 text

自己紹介 ⦁ Nomi ( : nyanp) ⦁ Software Engineer @ 大阪 ⦁ Kaggle : 2018/3~ ⦁ 深層学習FrameworkのAuthor (tiny-dnn, 2012~) ⦁ 特徴量エンジニアリングが好き

Slide 3

Slide 3 text

コンペの背景と概要

Slide 4

Slide 4 text

LSST ⦁ 2020年~運用開始の大型望遠鏡 ⦁ 従来を遥かに超える規模の全天観測 ○ 3200メガピクセルの撮像素子 ○ 10年で60PBのデータ収集 ○ 370億個の天体を観測 https://www.lsst.org/about

Slide 5

Slide 5 text

LSSTミッションの狙い ⦁ ダークマター、ダークエネルギーの解明 ⦁ 地球に衝突する危険がある小惑星の発見 ⦁ 銀河系の構造の理解 ⦁ 超新星などの突発天体・変動天体の観測 ○ 明るさが変動する星や銀河などの天体のこと ○ 今回のPLAsTiCCが対象とする天体

Slide 6

Slide 6 text

Astronomical Classification ⦁ これまで人類が発見した超新星:約1万 ⦁ LSSTが10年間に観測する超新星: 約1000万 ○ 人類が今まで見つけてきた超新星の総数を3日で超える ○ 機械学習による自動検出・分類はほぼ必須!

Slide 7

Slide 7 text

2 Data Processing Challenges in LSST ⦁ 突発天体の早期検出 ○ イベントが終わる前に検出し、後続の観測機器で詳細にスペクトルな どを観測したい ⦁ 突発天体・変動天体の自動分類 ○ どの観測機器のキャパシティよりも速いペースで天体を検出し続ける ので、LSST自身でも天体の分類を行う必要がある ○ PLAsTiCCはこちらのタスク

Slide 8

Slide 8 text

コンペ概要 ⦁ 観測データ(Light Curve)から天体を特定する多クラス分類 ○ 全14種のクラス+Test Dataにのみ存在するClass 99 ○ シミュレーションデータ クラス分布は偏りが大きめ。一番少な いクラスでは30個しかラベル付き データがない

Slide 9

Slide 9 text

評価指標: Weighted Multi-Class Log Loss        w: class iの重み (1 or 2)        N: class iのデータ数 ⦁ Minority Classほど1データの重みが大きい ○ GBDTの学習時にはsample_weight等の調整が必要

Slide 10

Slide 10 text

データセット概要 (1/2) ⦁ meta data: 天体ごとに1行 緯度経度 観測モード (0/1) 距離(赤方偏移)とその誤差 ※speczはTestではほとんどが欠損 光の吸収効果

Slide 11

Slide 11 text

データセット概要 (2/2) ⦁ Light Curve: 6つの波長域での時系列観測データ ○ 約3年間のWindowのどこかで天体が検出されている 時刻 波長域(1~6) 見かけの明るさとその誤差 (定常状態からの差分) S/N比が一定以上か

Slide 12

Slide 12 text

Light Curve ⦁ 天体が太陽側に隠れる時期は欠測する ⦁ 遠方の観測データほどfluxが小さく、ノイズも多い(右) https://www.kaggle.com/mithrillion/all-classes-light-curve-characteristics-updated

Slide 13

Slide 13 text

データセットの特徴 ⦁ Training 8,000件 vs Test 3,500,000件 ⦁ Test Dataは遠方の観測データ多め ⦁ Test Dataにしか無い未知天体“Class 99” ○ 実際は特定の天体ではなく、いくつかの天体のミックス Training = 既存観測データ、Test = LSST、という問題設定

Slide 14

Slide 14 text

上位入賞への鍵 ⦁ 超新星以外は比較的容易に区別できた。時系列データから、どんな特徴 量/モデルで超新星のパターンを見分けるかがポイントだった。 ○ 上位陣のアプローチは大きく3つ ■ Gaussian Process ■ NN (LSTM / RNN / 1D-CNN) ■ Template Fit ⦁ Class 99をどう扱うのかもスコアを大きく左右した。 ○ ただしPublic Kernel相当の手法でも金メダルまでは行けた

Slide 15

Slide 15 text

上位入賞への鍵 ホストがDiscussionに投稿した情報も有用だった。特にLSST Science Bookに は本コンペを戦う上での知見が詰まっていた。 https://www.lsst.org/scientists/scibook 突発天体の分類は光度と減衰時間が重要 (8-6) SALT-2 TemplateでSNIaとそれ以外の超新星を区別できる (Fig11.5) クラスごとの距離分布 (Fig 11.7), 予想観測数 (Table 8.2)で、どのクラスが何か大体わかる

Slide 16

Slide 16 text

3rd Place Solution

Slide 17

Slide 17 text

The Team “Major Tom” yuval NN担当 TrackML 7th / Jigsaw(‘19) 暫定9th つよい。 mamas nyanp リーダー&Catboost担当 TalkingData 5th / Santander(‘19) 9th つよい。 LGBM&ドメイン知識担当 ニャンピョウ みんなKaggle歴は浅め (当時Expert x1, Contributor x2)

Slide 18

Slide 18 text

Solution Pipeline Yuval Features x 4 Nyanp Features x 581 Mamas Features x 2K 1DCNN (4 Fold) LB: 0.86854 1DCNN (4 Fold) LB: 0.85209 1DCNN (4 Fold) LB: 0.86854 LightGBM (Gal + Ex-Gal) x4 LB: 0.86542 (20th place) CatBoost (Gal + Ex-Gal1 + Ex-Gal2) x7 LB 0.82955 (13th place) Per-Class Ensemble LB: 0.75876 (5th place) Final Sub LB:0.70016 (3rd place) Class99 Postproc Avg. CNN LB: 0.81019 (8th place) Top 16 Top 16 ※LB and rank is based on private dataset

Slide 19

Slide 19 text

Key points ⦁ 1D CNN ⦁ Template Fit & ドメイン知識由来の特徴量 ⦁ 2種類のPseudo-Labeling ⦁ LB ProbingによるClass 99推定

Slide 20

Slide 20 text

Key points ⦁ 1D CNN ⦁ Template Fit & ドメイン知識由来の特徴量 ⦁ 2種類のPseudo-Labeling ⦁ LB ProbingによるClass 99推定

Slide 21

Slide 21 text

1D CNN (yuval) ⦁ 3種類の前処理を行い、128固定長 x18chに加工→1DCNNに入力 元の信号を線形補間 detected=1の系列のみ 残してから線形補間 最近傍の有効データ との時間差 元データ 6ch

Slide 22

Slide 22 text

Architecture Input 1D Conv (k=8) +BN, LeakyReLu, Dropout 128 128 18 256 256 1D Conv (k=5) +BN, LeakyReLu, Dropout 128 256 1D Conv (k=3) +BN, LeakyReLu 128 256 Global- Max Pooling 256 14 Dense Dense Dense Dense 32 16 Input (Meta) 6 Galactic- Switch Input (hostgal_photoz) 14 1 photoz>0かどうかで 無関係なクラス側の 出力をマスク 時系列データを 長さ128 x 18chに加工 メタデータ側の特徴量 Light curveは 時間方向のシフトに対して invariant

Slide 23

Slide 23 text

CNN学習 ⦁ 学習時に以下のAugmentation ○ ランダムに線形補間前の元データを削除 ○ flux_errに基づいたランダムノイズ ○ Cyclic Shift ○ Skew : 各chをランダムに1+Δ倍 ⦁ Feature Engineering無しのSingle ModelでPrivate 22位 ○ 仮にclass99 probeと合わせれば、特徴量無しでも金メダル相当

Slide 24

Slide 24 text

Key points ⦁ 1D CNN ⦁ Template Fit & ドメイン知識由来の特徴量 ⦁ 2種類のPseudo-Labeling ⦁ LB ProbingによるClass 99推定

Slide 25

Slide 25 text

Template Fitting ⦁ 超新星の光量変化をモデル化した Templateが色々ある ○ 例: SALT-2 ⦁ 観測データに当てはめた時のパラ メータを特徴量に使う ○ sncosmo等のパッケージが使える

Slide 26

Slide 26 text

Template Fitting is Slow... ⦁ 大体手元で1データ0.8秒くらい ○ テストデータは3.5M rows -> 30日くらいかかる ○ コア数を増やしてもスケールしない

Slide 27

Slide 27 text

Template Fitting is Slow... ⦁ 大体手元で1データ0.8秒くらい ○ テストデータは3.5M rows -> 30日くらいかかる ○ コア数を増やしてもスケールしない ⦁ 解法:インスタンスを30個立てて30倍速

Slide 28

Slide 28 text

さまざまなTemplate ⦁ 超新星のテンプレートにも色々ある ○ 超新星の種類毎に異なるテンプレート ○ 一部の参加者が使っていたSALT-2はClass90 (SNIa)向け ○ sncosmoで試せるものだけで数十個 https://sncosmo.readthedocs.io/en/v1.5.x/source-list.html

Slide 29

Slide 29 text

さまざまなTemplate ⦁ 解法:全部試す ○ CVでスコア上昇したものだけTest Dataを作ったので、実質は30インス タンス×15周ほど ■ Final Modelには7種分のテンプレートを採用 ■ LGBMで~0.06の改善 (Golden feature of our solution)

Slide 30

Slide 30 text

Preemptible Instance牧場の一日 Terminated Terminated

Slide 31

Slide 31 text

結局60頭まで増えた $ $

Slide 32

Slide 32 text

その他の特徴量(1) - 光度(luminosity) ⦁ LSSTが観測する見かけの明るさ(flux):遠方ほど暗い ⦁ 天体そのものの光度は重要な特徴量 ○ 距離とfluxから光度に変換するのが有効 luminosity ~ (max(flux) - min(flux)) * luminosity_distance ** 2

Slide 33

Slide 33 text

その他の特徴量(2) - TimeScale ⦁ 超新星は種類によって減光の時間スケールが違うので、それを 捕まえたい ○ detected = 1の持続時間 ○ max(flux) - N% fluxの減衰時間/立ち上がり時間 ○ fluxと時間の差をとり、arctanで角度に変換→集約 mjd 0 2 3 5 flux 10 15 23 32 mjd_diff 2 1 2 flux_diff 5 8 9

Slide 34

Slide 34 text

その他の特徴量(3) - Gaussian Process ⦁ Gaussian Processでフィッティングし、長さ100x6chの予測値 をそのまま特徴量に使う ○ ライブラリはGPyを使用 ○ こちらもやっぱり~30日かかる ■ mamasさんが30インスタンス使ってがんばっていた ⦁ 既にTemplate, CNNが出来た後だったのでLBの増分は少な かったが、diversityには効いた?

Slide 35

Slide 35 text

その他の特徴量(4) - tsfresh, feets ⦁ 時系列データの特徴抽出を専門にしたライブラリがあるので、 それらも活用 ○ https://github.com/blue-yonder/tsfresh ○ https://github.com/carpyncho/feets ⦁ 劇的に効いたものはないが、baselineとしては有用だった ○ fft-coefficient, auto-correlation, skew, slope…

Slide 36

Slide 36 text

Key points ⦁ 1D CNN ⦁ Template Fit & ドメイン知識由来の特徴量 ⦁ 2種類のPseudo-Labeling ⦁ LB ProbingによるClass 99推定

Slide 37

Slide 37 text

Class 90/42 Pseudo-Labeling (LGBM) ⦁ Class 90, 42 (SNla, SNll)に絞って実施 ○ Class 99に似たクラスでPLをやるとスコアを落とすので注意 ○ LightGBMで~0.03くらい効いた 元データの1~10倍くら いの量のPseudo Label を加えるのがベストだっ た 左はx軸をPLの閾値、右はpseudo/real labelの比率で同じデータをプロット

Slide 38

Slide 38 text

Adversarial Pseudo Labeling (Cat / NN) ⦁ CatBoostで予測値が高く、かつTraining Dataに似ているサン プルを使ってTraining ⦁ 特にNNモデルでスコア向上 (~0.01)

Slide 39

Slide 39 text

Per-Class Weighting Ensemble クラス毎に異なる重みでアンサンブル。重みはoof predictionの 精度で決めた。スコアを~0.006ほど改善。

Slide 40

Slide 40 text

Key points ⦁ 1D CNN ⦁ Template Fit & ドメイン知識由来の特徴量 ⦁ 2種類のPseudo-Labeling ⦁ LB ProbingによるClass 99推定

Slide 41

Slide 41 text

Class 99 ⦁ OCSVMのような通常の異常検知は上手く行かない ⦁ Public Kernelでのアプローチ preds_99 = np.ones(preds_.shape[0]) for i in range(preds_.shape[1]): preds_99 *= (1 - preds_[:, i]) →他のどのクラスとも似ていないときにスコアが上がる

Slide 42

Slide 42 text

Class 99 ⦁ 疑問:Class 99はどんな天体なのか? ○ 候補1:あまり見つかっていないタイプの超新星 ○ 候補2:AGNやマイクロレンズなど、それ以外の天体 ⦁ Class 99が何であるにせよ、どのクラスからも均等に遠い、と いうことはないはず

Slide 43

Slide 43 text

Class 99 ⦁ 疑問:Class 99はどんな天体なのか? ○ 候補1:あまり見つかっていないタイプの超新星 ○ 候補2:AGNやマイクロレンズなど、それ以外の天体 ⦁ Class 99が何であるにせよ、どのクラスからも均等に遠い、と いうことはないはず ⦁ じゃあクラスごとに異なる重みを付けてみたら? Kiを下げる =P(ci)が高いときのペナルティを弱める =Class99とciが似ていると扱う

Slide 44

Slide 44 text

LB Probing on Class 99 weighting ⦁ まずはClass 90の係数を2乗に → スコア改善 ○ 少なくともClass 90(SNIa)とは似ていなさそう ○ 手ごたえを得たので、これ以降LB Probingに専念 元々SNIaは他と区別がつ きやすい超新星のため、ド メイン知識から考えても妥 当な結果。 当時の気持ち

Slide 45

Slide 45 text

LB Probing on Class 99 weighting ⦁ 超新星を中心に係数を調整し、以下の解に到達 ○ Class 42や52, 62 (いずれも超新星)と良く似ている ○ これだとPrivate 4th相当

Slide 46

Slide 46 text

最終形態 P(c99) *= (1-P(ci))**niの形を少し単純化し、コンペ最終日に以下 の式に到達 Probingによる利得は~0.06程度だった (Private 5th → 3rd)

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

振り返り ⦁ 3人の役割分担がうまく機能した。モデルの方向性が3者3様 で、アンサンブルの利得が大きかった ○ yuval: 特徴量を作らずにCNNを作り込む ○ mamas: 大量のhand-crafted特徴+CatBoost ○ nyanp: template量産、ドメイン知識側で攻める ⦁ 最終1wをProbingに専念する判断が結果的に良かった

Slide 49

Slide 49 text

おわり / Any Questions? 本日のハイライト: Appendix(質問あれば): 他の上位解法 / GBDTモデリング / CatBoostがなぜ強かった? / Feature Importance / Class99 の正体

Slide 50

Slide 50 text

以下補足

Slide 51

Slide 51 text

上位陣の解法 - 1st Place (Kyle) ⦁ Train Dataを遠方にシフトさせるAugmentation ○ 発想は自然だが実際やるには要ドメイン知識 ⦁ Gaussian Processでデータを補間し、その波形の上で 集約やTimeScaleなどの特徴量を作る Code: https://github.com/kboone/avocado/blob/master/avocado/plasticc.py Discussion: https://www.kaggle.com/c/PLAsTiCC-2018/discussion/75033#latest-457546

Slide 52

Slide 52 text

上位陣の解法 - 2nd Place (Silogram & Mike) ⦁ Class99を抜くと1位 ⦁ NNがとても強かった ○ シンプルなBidirectional GRU ○ 距離で割って波形を平準化 ○ コードが綺麗なので読もう Code: https://www.kaggle.com/zerrxy/plasticc-rnn Discussion: https://www.kaggle.com/c/PLAsTiCC-2018/discussion/75059#latest-462457

Slide 53

Slide 53 text

モデリングの基礎部分 (GBDT Part) ⦁ 銀河系内モデルと銀河系外モデルに分割 ○ 特定の列の値が0かどうかで完全に識別可能なため ○ CatBoostでは、銀河系外モデルを2種類作っていた ■ hostgal_speczを特徴量に含めたモデルとそうでないモデル ⦁ ValidationはN-Fold Stratified CV ○ CVで効いた特徴量だけTest Dataの分を作り、時間短縮 ⦁ Metricに合わせてsample_weightを重み付け ⦁ CatBoostではアンサンブル時に異なる特徴量のサブセットで モデルを学習

Slide 54

Slide 54 text

Hyperparameter (CatBoost) { 'Learning_rate':0.1, 'depth': 3, 'loss_function': 'MultiClass', 'colsample_bylevel': 0.7 }

Slide 55

Slide 55 text

Hyperparameter (LightGBM) { 'objective': 'multiclass', 'metric': 'multi_logloss', 'learning_rate': 0.1, 'max_depth': 3, 'subsample': .9, 'colsample_bytree': .9, 'reg_alpha': 0, 'reg_lambda': 3, 'min_split_gain': 0, 'min_child_weight': 10, 'min_data_in_leaf': 1, 'n_estimators': 10000, 'max_bin': 128, 'bagging_fraction': 0.66, }

Slide 56

Slide 56 text

Why CatBoost worked well? CatBoostはカテゴリ変数の扱いが特徴的だが、今回のデータにはそれが生きるよ うな変数は存在しなかった。 仮説: depth=2~3が最適なことから分かるように、今回はGBDTで容易にoverfitするデー タだった。CatBoostの以下の機構がoverfitを抑制したのではないか。 ⦁ Symmetric Tree ⦁ Ordered Boosting

Slide 57

Slide 57 text

Ordered Boosting ⦁ (ざっくり言うと)t番目のデータに対する残差を計算する際に、t-1番目までの データで学習したモデルを使う ○ CatBoostがカテゴリ変数のEncodingでやっていることに似ている ○ サンプルが少ない(~数K)ときに過学習を防ぐ効果が高い https://papers.nips.cc/paper/7898-catboost-unbiased-boosting-with-categorical-features 7に対する残差を、1~6で学習したモデルの予測値 M6(x7)で求める。StackingのときにLeakを防ぐために oofを使うのと似た気持ち? データを間引く(右→左)ほど、Ordered Boostingによる改善幅が大きい

Slide 58

Slide 58 text

簡単な実験 ⦁ CatBoostはOrdered Boostingと、通常のBoostingを選択できる ⦁ 上記2つ+似たハイパラのLGBMで、CVと混合行列を確かめてみる CatBoost { 'learning_rate': 0.1, 'max_depth': 3, 'objective': 'multiclass', 'metric': 'multi_logloss', 'max_bin': 128, 'reg_lambda': 3, 'bagging_fraction': 0.66, 'colsample_bytree': 0.7, 'min_data_in_leaf': 1 } { 'Learning_rate':0.1, 'depth': 3, 'loss_function': 'MultiClass', 'colsample_bylevel': 0.7, #'boosting_type': 'Plain', } LightGBM boosting_typeを指定しない場合はデフォルトで Ordered Boostingが使われる。

Slide 59

Slide 59 text

実験結果 モデル Weighted LogLoss (10 Fold CV) CatBoost + Ordered Boosting 0.6286 CatBoost + Plain Boosting 0.6647 LightGBM 0.6480 ⦁ 確かにOrdered BoostingによってCVが大きく改善 ⦁ この実験設定では、CatBoostがLightGBMよりも良かった ○ 使う特徴量によっては逆になることもあるよう(相性?) LBは計算が間に合いませんでした。ごめんなさい … ※特徴量は200個、Extra-Galactic側の9クラスのみモデリング

Slide 60

Slide 60 text

CatBoost /w Ordered Boosting Confusion Matrix CatBoost /w Plain Boosting 特に難しいClass42/52あたりの精度がOrdered Boostingによって改善している。

Slide 61

Slide 61 text

mamas先生からのコメント

Slide 62

Slide 62 text

Feature Importance (CatBoost / ExtraGalactic)

Slide 63

Slide 63 text

Feature Importance (LightGBM / ExtraGalactic)

Slide 64

Slide 64 text

Class 99の正体 5つの天体のミックス(99%以上はILOTかCaRT) 超新星の一種(想定どおり!) これだけ銀河系内の object (数は非常に少ない) https://arxiv.org/pdf/1903.11756.pdf

Slide 65

Slide 65 text

Our solution code yuval https://www.kaggle.com/yuval6967/3rd-place-cnn mamas https://github.com/takashioya/plasticc nyanp https://github.com/nyanp/kaggle-PLASTiCC