2026年に開催されたKaggle playgroundコンペ『Predicting Stellar Class』について、大体上位10%地点にいる人の解説ノートを閲覧し、今後生かせそうなところをまとめた。
参考にしたノートは下記URLの通り。
https://www.kaggle.com/code/analyticaobscura/predicting-stellar-class
この著者は、第二段階分類器と呼ばれる、予測データ自体を特徴量にして、予測精度
を改善する手法を使っているが、本記事ではその部分は触れないものとする。
(私の技量がそこに着手できる所まで到達していないため)
そこに至る前の特徴量エンジニアリングに至るまでのEDAに、今後に参考になりそう
な考え方が多かったため、その部分を記述していく。
【1】.ノートでやっていること
①.目的変数の構造を確認し、どこを改善するのが効率がいいかを確認。
今回の評価指標BalancedAccuracy(以下BAC)は、目的変数の各クラス予測の正答率
の平均となる。
そのため、著者はまず3クラスのクラス構造を調べている。
結果は下記
class 件数 割合
GALAXY 377,480 65.4%
QSO 117,143 20.3%
STAR 82,724 14.3%
BACは各クラス平均のため、割合が小さいクラスの予測を改善した時の方が1件あた
りのデータの改善による影響が大きい。
このことから、STARのRecall改善はスコアに与える影響が大きいことがわかる。
ただし、これはあたりを付けているだけで、本当に改善すべきところがどこかは誤
分類経路を見て判断する必要がある。
②.trainとtestのデータの傾向・分布を確認し、考査検証(以下CV)による検証の信用度
を確認。
trainとtestのデータにズレがあると、trainのデータでのCVに信用がおきづらくなる。
(trainに過適合してるだけの可能性が浮上するため)
そうではないかをまず確認しておく。
③.光のバンドを、5つ全部を並べて分布を確認。
今回の特徴量の中に「u」「g」「r」「i」「z」について、目的変数のクラス毎のヒ
ストグラムを確認すると、列ごとにクラスの別れ方が違うと気が付ける。
④.箱ひげ図5つで光のバンド毎の傾向の違いを確認
「u」「g」「r」「i」「z」のクラスの別れ方がどう違うのかをはっきり確認するた
めに、箱ひげ図にしてみる。
列ごとに分布の離れ方、重なり方が違うことがわかる。
例えば、「u」ではGALAXYとSTARが離れているが、「r」ではGALAXYとSTARが重なって
いることが多いことから、どれか一つの列では分けることが難しく、5つ全てを総合的
に見て分類する項目ではないか、という発想が得られる。
また、これにドメイン知識ではあるが、下記3点の情報
・「u」「g」「r」「i」「z」は光を波長毎(色毎)に抽出した時の値。
・「u」「g」「r」「i」「z」はuほど青く、zほど赤いという順序を持つ。
・値の単位は等級で、対数スケール。(ただし低い方が明るい)
・光の色の比率で天体の種類の分類ができる。
と合わせることで、「u」「g」「r」「i」「z」の差(比率)が何か有効な特徴量と
なるのではないかという仮説がでる。
そして、「u」「g」「r」「i」「z」は順序を持つので、隣り合う明るさの差(比率)
が特徴量になるかもしれないという仮説が立つ。
⑤.クラスごとのredshiftの傾向の確認(ヒストグラムと棒グラフでの確認)
ヒストグラムと棒グラフを見るだけで、重なってる部分もありはするものの、かなり
はっきりクラスを分けていることがわかる。
⑥.alpha、deltaの図を確認
alpha と delta の散布図で、空のどの領域に各クラスが分布しているかを確認する。
しかし、この図ではクラスごとの違いはあまりわからない。
⑦.カテゴリ特徴量(spectral_typeとgalaxy_population)がどのクラスにどれくらい偏っ
ているかを棒グラフ(クラス毎に内部で切り分け)で確認
ここから、どのクラスはどのカテゴリであることが多いのかがわかる。
単独で答えを決めるわけではないが、かなり強いヒントをもってそうなことが確認
できる。
⑧.どの測定値がクラス分離に効いてそうかを定量化(eta squared / η²)
これまで出てきた特徴量をeta squared / η²で、クラスによる違いがあるかを定
量化すると
特徴量 η² 読み取り
・redshift 0.584 圧倒的に強い主軸
・g-r 0.504 色指数として非常に強い
・r-i 0.334 色指数として強い
・z 0.310 生の測光値でも強い
・i 0.280 生の測光値として有用
・u-g 0.217 色指数として有用
・r 0.212 中程度
・g 0.197 中程度
・u 0.185 中程度
・i-z 0.116 弱めだが情報あり
・delta 0.018 単独ではかなり弱い
・alpha 0.002 単独ではほぼ分離しない
となり、それぞれの特徴量が効きそうかどうかにあたりが付く。
ただし、あくまでもここで見ているのは単独の特徴量。
しかし、これでどの特徴量が主役・補助なのかがわかり、より細かい分析をしやすく
なる。(影響度による優先順位がつけやすいため)
⑨.以降、第二段階分類器
これ以降は、上記の特徴量を使って学習を行った予測自体を用いる、第二分類器を使
った予測精度の向上を行っている。
ただし、私の技量がまだそこまで達していないので、今回は学習を断念。
【2】.次回以降のコンペで活かしたいこと
・予測する上で、予測の改善が影響が大きい領域がどこなのかを考えること。
ここまでやってきて、10回の試行で1回改善できれば御の字、というのがコンペで
ある。
ここまでは経験を積むためにがむしゃらに怪しいところを探して試行錯誤を繰り
返してきたが、上位を狙うなら、限られている時間でより改善した時にインパクト
がありそうな領域をあらかじめ考えておく必要がある。
例えば、今回のように、件数が少ないが、改善した時の重みが他の件数が多い
クラスと一緒の領域、とか。
・CVの信用度を確認する。
交差検証は過適合を減らすための施策ではあるが、そもそもその元データと予測
先のデータが全然違うなら、信用度はどうしても低くなる。
Kaggleplaygroundでは綺麗なデータが多いが、実務を考えた時は、必ずしもそう
ではないだろうから、今からそのあたりを確認する習慣はつけるべき。
(いずれはデータクレンジングや、trainとtestが違うときの対策も触れねばなら
ない。)
・ドメイン知識を調べるときは、そのデータの数値が何を意味するかまで調べる。
今回、最後の最後まで測光フィルター(u,g,r,i,z)の値が等級であり、対数スケール
であることがわかってなかった。(そもそも対数スケールという言葉自体知らなかった
のだが)
そこが致命傷となった。
列の意味だけでなく、列の数値の意味まできちんと調べること。
また、列同士の間に順序関係などがないかも確認すること。
・どこが、迷いやすい領域なのか(境界があいまいなところなのか)、考えること。
特に分類が難しいのが、割合としては違いがあるのに、データを量として見た時は
重なって見える領域。
違いがないような領域がどこなのかを探すことが、ヒントを探すヒントになる。
・主因と補助要因を分ける。
ただし、主因・補助要因を分けるには、単独の分離力、モデルに追加したときの
CV改善、誤分類経路への影響等を合わせて見る必要がある。
【3】.学んだ知識
・箱ひげ図による比較(復習)
データの傾向同士(中央値、第1四分位数、第3四分位数、四分位範囲、
ひげ、外れ値)の差が わかる。
ここで違うなら分布はさておき傾向としては違うことがぱっとわかる。
(細かい違いは分布を見る必要があるが。山の形状などがわからないため)
・散布図による比較(復習)
傾きの違いやデータ分布など、2変数の「関係」をクローズアップできる。
・件数による比較と割合による比較の違い
件数で見れるのは量や重要度(どこに誤判別が多いのか、とか)
割合で見るときは特徴の違い。
・対数スケール
足し算で、倍率の変化を表すための尺度(⇔線形スケール)
例えば底が10の対数なら
log10(1)=0,log10(10)=1,log10(100)=2,log10(1000)=3
対数が1増える=元の値が10倍になる、ということ。
そして、対数スケールの差は比率になる。
logA−logB=log(A/B)
(要はlog10 100 − log10 10 = 2−1 = 1)
・log化することによる裾の圧縮
裾の長いデータはlog化することで、その裾を圧縮し、特徴の見逃しなどをしづら
くすることができる。(これは統計検定2級でもあったこと)
・eta squared = η²
η² = クラス間のばらつき / 全体のばらつき
分散のうち、要因・グループ差で説明できる割合を表す指標
全体のばらつきの情報に対して、クラス間のばらつきの情報は何割を占めるのか。
(その割合が大きければ大きいほど、そのクラスに所属していることに差の意味が
ある)
(全体のばらつきは グループ間のばらつき+グループ内のばらつき)
・順序を持つ列なら、隣り合う差分だけである程度疑似的に差が出る。
例えば今回のu~zの測光フィルターは
u → g → r → i → z
の順番を持つ。
u - r = (u - g) + (g - r)
u - i = (u - g) + (g - r) + (r - i)
g - z = (g - r) + (r - i) + (i - z)
なので、隣り合う差分が出る。
・符号が逆方向だけな情報は新情報ではない。
逆向き差分は、基準を逆にしただけで同じ情報。
木系モデルでも同等の分岐を作れるので、基本的には片方だけで十分。
Aさんが身長180cm、Bさんが身長170cmだとして、AさんがBさんより10cm高いも、
BさんがAさんより-10cm高いも、意味としては同じ。
意味が同じなら、情報としてもほぼ同じ。
【4】.その他気づいたこと・感じたこと
・Kaggleにおける試行錯誤の工程について
特徴に、共通しているところと,違いがあるところを見つける
↓
その違いで分類できるか試す
↓
分類できなかった場合、共通しているもののなかからさらに違いがないかを探す
↓
その違いで分類できるかを試す
非常に簡略化すると、この繰り返し。
(ただ、見つけ方にいろんな手法はある)
・分析は工程をこなすっていうか、可能性をつぶしていく作業?
分析には正しい工程があって、その工程を順繰りにこなしていく、というイメージ
だったが、実は違って、データや予測の中でどこが割り切れていないかを見定めて、
その中でいろんな仮説を立てて可能性をつぶして、それを総当たりしていく作業な気
がした。