2026年6月に開催されていたKaggleplaygroundコンペ『PredictingStellarClass』に参加した。
結果は残念ながらあまり芳しくなかったものの、初めての3値以上の分類、CalancedAccracyの問題をやれたことで、今後の分析に対する考え方を得られたので、やれたことや学んだことを記録しておく。
今回はまず、自分のやったことをある程度まとめ、そのうえで上位者のノートを解読、
自分のやったこととの差異を見つけ、次に生かす点として取り込む、という手法を取る
こととした。
今回の記事では、自分のやったことのまとめ、やってる中での学びについて記述する。
【1】.やったこと
(1).データの把握と整理
まずはデータ自体についてを調べることにした。
データについての情報を掴み、データの目的変数をよく分けているデータが何か
ないか見つけることを目指した。
①.データの形状の確認
(a).データファイルの確認
・train
学習用のデータセット
・test
予測用のデータセット
・sample_submission
提出用のデータセット
②.データの形状の確認
・train
577347行、12列
・test
247435行。11列
③.欠損値
・train
欠損値なし。
念のため各列の値を見たところ、異常値で埋めている様子もなし。
・test
同上
④.各列についての概要の整理
・id
各行の識別番号
・alpha
赤経角
位置情報の縦軸
・delta
赤緯角
位置情報の横軸
・u
光度計における紫外線フィルター。
・g
光度計におけるグリーンフィルター。
・r
光度系における赤色フィルター。
・i
光度系における近赤外線フィルター。
・z
光度系における赤外線フィルター。
・redshift
赤方偏移
本来の色よりも赤い方へズレる現象のこと
遠いほど起きやすい?
・spectral_type
スペクトル型
M
A/F
G/K
Q/B
星の表面温度。4値
・galaxy_population
銀河の分類グループ
Red_Sequence
Blue_cloud
の2値
・class
GALAXY:銀河
QSO:準恒星状電波源
STAR:恒星
の3値
今回の目的変数である。
かなり専門的な知識のいる領域のように感じる。
各データの値が何を意味しているか、半分くらいはわからない。
(2).ベースラインの作成
①.目的変数との関係が強い特徴量の選定
・spectral_typeとgalaxy_population、redshiftは特徴量としては強そう。
割合ベースのヒストグラムで見ていった時、カテゴリ間での値の違いが比較
的出ている。
これらをベースにしていくのが良いと考えられる。
②.バリデーション設計
今回もまずは5Foldで行う。(時間の検討が付かないので)
時間が許せば後に10Foldまで増やしてより安定させるが、そこは終わりが見え
てからの話になると思われる。
③.使用するアルゴリズムの選定
LightBGMを使用。
効率重視の選択。
④.学習結果の表示等
BalancedAccuracyとFoldStdを表示させ、それとLBスコアで試行管理をする。
また、各カテゴリのRecallも表示させ、試行毎にどのカテゴリが改善したか
をチェックしていく。
(3).特徴量エンジニアリング
①.全列の特徴量化による精度の推移の確認
id以外のすべての列が、追加するたびに精度の改善につながった。
データの平均や傾向を見るに、あまりクラス間の差はないように思えたが、
人間の目にはぱっと見わからない閾値があって、予想のために役に立っていると
いうことであるのだと思う。
この時点での精度
BAC :0.95202
FoldStd :0.00139
LBスコア :0.95194
②.redshiftのlog化
redshiftは裾が右にかなり長いので、log化することで情報をより単純にできる
のではないかと思い試行。
しかし、情報量としての変化が赤ったのか、精度に変化なし。
③.列同士の積による値の強調(相互作用の強調)
軽い思い付きをまずは試していく。
(a).alpha × delta
緯度×経度で、位置関係の強調になるのではないかと考えた。
しかし、精度は低下。
緯度10×経度20も、緯度20も経度10も同じ数値になるので、むしろ情報として
欠落しかねないから、この結果になったのかもしれない。
(b).u~zの光学フィルター同士の相互作用の協調
光学フィルターの値をすべて掛け合せれば、光の総量のような情報になるので
はないかと考え、試行してみたところ、精度が落ちた。
(c).光学フィルターについての情報整理
先入観による発送の萎縮を警戒してドメイン知識なしでまず試行してみたが、
これ以上はあてずっぽうになるので、ドメイン知識をこのタイミングで調べる
こととした。
調べたところ、光の色の比率がclassの種類を決める際に重要な要素とのこと。
※また、実は色の値は「等級」に過ぎず、絶対値的なものではないものであっ
たが、それがわかったのはコンペが終わった後だった。
ドメイン知識の収集の差異、値の意味も調べるべきことが今回わかった。
④.目的変数のカテゴリ間の違いについてのEDA
ここから、データを細かく見て違いを探すことを考え始めた。
カテゴリ間のデータの細かい違いを探し、判別に役立つ特徴量のアイデアを
求めた。
(a).各カテゴリ毎で各列のデータを並べたヒストグラムの確認。
・redshift0付近のGALAXY、QSOの判別に苦労している。
redshiftは各カテゴリの特徴を表してることが多いが、それ故に、STARの
redshiftの特徴である0付近のデータで、GALAXYとQSOであるデータがSTARに
誤判別されてしまっている。
逆もしかり。
・見つけるべきは、redshiftでは判別できない部分での、違い。
具体的には
redshift0付近におけるQSOやGALAXYの特徴。
redshift大きいところのSTAの特徴。
これらをまず見つける必要がある。
(b).Recallの確認と気づきの書き出し
・STARの予測精度改善が最もBAC向上に寄与しそう。
GALAXY、QSOのRecallがそれぞれ0.97付近に対し、STARのRecallは0.91
STARの数自体は全体の割程度
このことから、STARの精度改善の件数1つあたりの改善量が、最も精度
を上げるうえで効率的だとわかる。
なので、まずはそこに注力する。
⑤.誤判別データと正判別データの比較
(a).QSOの誤判別データとQSOの正判別データの比較
STARを注視する前にいったんQSOの誤判別データも確認しておいた。
gが18以下のデータはSTARにしか存在しない。
ただ、STAR→GALAXYの方が誤判別のデータが多い(STAR→QSOの約15倍)
なので、後回しでいいことが確認できた。
(b).GALAXYの誤判別データとGALAXYの正判別データの比較
こちらもSTARを注視する前に確認。
・uは全体的にSTAEの方が低め
値21より下はSTARが割合としては多い。
・u以外も、割合としてはSTARは低い。
・件数としてみると、全ての値は飲み込まれている。
ただ、ここからアイデアは特に得られなかった。
いったん後回し。
※これを書いている今気が付いていることだが、飲み込まれているからこそ
判別できてないわけで、この飲み込まれている中にこそ違いが潜んでいる
かもしれない。
つまり、注視するべき対象のアイデアをまさに見いだせたのがここだった。
(c).STARの誤判別データとSTARの正判別データの比較
割合として見たら差異があるものの、量としてみるとSTARの正データと混ざ
っていて、違いを見出すのが難しい。
※これを書いてる時に気が付いたが、だからこそもっと細かい条件を指定し
てみていくべきだった。
直前にやってたTaitanicコンペでは、この時点で結構差異がでていたから
こちらもここで見つかると思いこんでいたので、この発想が出なかった。
⑥.散布図によるデータの観察(ratio特徴量の探索)
GALAXYとして予想されてしまったSTARと、本当のGALAXYの違いを観察しよう
としたが、どうしても違いが見つけられなかったので、見方を変える。
ざっくりネットで天体観測について調べた時に、「色の比率で観測先が何か
判断する」という情報を見たので、色の比率、つまりratioを見つけることがで
きれば、特徴量の改善になるのではないかと思った。
なので、全10種の組み合わせの散布図を確認した。
(a).u vs g
・微妙に傾きは3種別々な気はする。
・x22移行、y21移行あたりから、GALAXYとSTARとQSOはかなり重なってる。
(そもそもASOは数が少なめではあるが)
(b).u vs r
・x22までは傾きに違いがあるように見える。
一応試行してみるも精度改善ならず。
・x22移行は3種かなり重なってしまっている。
(c).u vs z
・STARとQSOはかなりかぶってる。
・かぶってないところに関しては、傾きがちゃんと違うように思える。
・u_z_ratioとして特徴量追加して試行してみたところ、精度改善が見られた。
0.04%程度だが、一応向上はした。
(d).u vs i
・x21くらいまでは傾きに違いあり
・x20移行、y22一行はQSOとSTARがかなり重なってる。
・STARとGALAXYはほとんど重なってない。
ということは、GALAXYとの取り違えは減るのではないか?
u_i_ratioとして特徴量追加して試行して見たところ、精度改善
(0.02%ほど)。
(e).g vs r
・GALAXYとQSOはあまり被ってないから、そこの差異に関しては意味があるか
もしれない。
QSOがGALAXYとして計上されてるものが多いなら、採用する価値がある?
・STARは両方にだいぶ被っているので、そこの部分に関してはあんまり役に
立たない可能性がある。
いったん保留とした。
(e)g vs i
・STARとQSOはかなり被ってる。
・STARとGALAXYは差がはっきりしてるものが多い。
試行してみるが、精度改善ならず。
他はあまり特徴がみられなかったため割愛。
現時点のスコア
BAC :0.95263
FoldStd :0.00234
LBスコア :0.95313
Recal(STAR) :0.91894
Recal(QSO) :0.96252
Recal(GALAXY) :0.97658
※この時点ではできなかったが、本当は前回から各Recallがどう変化したかも
確認し、効いた時に何が判別できたのか、どの境界線に効いたのかを確認
するべきだった。(その方が効率的に可能性を掘れる)
⑥.FP/FN分析
(a).予想したデータを9つに分けて抽出
・GALAXYと予測したが、実際はQSO(pred GALAXY / true QSO
・GALAXYと予測したが、実際はSTAR(pred GALAXY / true STAR
・QSOと予測したが、実際はGALAXY(pred QSO / true GALAXY
・QSOと予測したが、実際はSTAR(pred QSO / true STAR
・STARと予測したが、実際はGALAXY(pred STAR / true GALAXY
・STARと予測したが、実際はQSO(pred STAR / true QSO
・正しくGALAXYと予測(correct GALAXY
・正しくQSOと予測(correct QSO
・正しくSTARと予測(correct STAR
(b).GALAXYと予測したが、実際はSTARのデータへの着目。
上記と、GALAXY、STARの正判別データを比較することで、何か違いが見つか
るのではないかと考えた。気が付いたことは下記の通り。
・alpha、deltaに関しては、誤分類はGALAXYと似た分布をしている。
・光に関しては、似てはいるものの傾向はちゃんと違う。
・redshiftも明らかに違う。
取りうる値ではあるんだろうけど、傾向が違う。
redshiftと各光の関係の傾向を見たら、結構変わるのでは?
・Spectral_typeがMになると、3つのグラフがかなり似ている。
ただ、光に関しては、GALAXYだけ22に寄っているという微妙な違いがある。
(c).(b)によって得られた仮説
・Spectral_typeと、galaxy_populationでほとんど分類が決まっている。
MとRedだとそれだけでほとんどGALAXYに分類されてしまっている?
(もちろん、そうでないのもあるから、完全にそうではないんだとは思う)
ということは、それ以上に強烈に異なる特徴量を作らないと厳しい?
あるいは、redshiftも強い特徴量だから、それを際立たせる?
実際問題、redshiftに関しては、GALAXYと異なる傾向は持っているから
それが突破口になりうる可能性あり。
(d).redshiftと各光度フィルターの関係の散布図を確認し、傾向を見る。
見る限りは、傾きに違いがあるように見える。
そのため、redshiftと各光度フィルターのratioを特徴量として追加した
試行をしてみた。
しかし、残念ながらすべて精度が落ちた。
redshift_r_ratioだけ、0.007%精度が落ちたものの、FoldStdがかなり改善
しているので、一応LBスコアを出してみたところ、ほんの少しの上昇が見られ
た。
(e).QSOと予測したが、実際はSTARのデータへの着目
件数を見てみると、pred GALAXY / true QSOの件数がpred STAR / true QSO
の3倍はあるため、こちらを優先して掘ってみる。
・correct QSO、pred GALAXY / true QSO、correct GALAXYでデータを比較して
気が付いたこと
redshift以外はcorrect QSOとpred GALAXY / true QSOの傾向は似ている。
もちろん、correct GALAXYでも取りうるデータではあるが、割合で見た時
の傾向は、pred GALAXY / true QSOはどっちかっていうと、correct QSOに
似ている。
一応、alphaとdeltaも形はcorrect GALAXY寄り。
(f).仮説「delta、alpha、redshiftでほぼほぼ大部分の予測が決まっている?」
光の情報がQSOをある程度示していても、それが位置情報とredshiftでほぼ
GALAXYだと決められてしまっているとする。
つまり、光だけでそれ以上に何か違いを見出せる情報が必要?
例えば、色味の違いをもっと強調できれば違いが見いだせるかもしれないと
考え、5色の関係性についての特徴量を追加してみることを考えた。
各色が、5色の光の総数に対してどの程度かを表すratioで、色の立ち位置を
表現し、それによって協調できないかと思い、下記5種の特徴量を同時に入れ
て試行してみた。
"u_share",
"g_share",
"r_share",
"i_share",
"z_share"
※u_share = u/u+g+r+i+z みたいな形。
結果、精度向上
どうやら、光の関係の情報を圧縮することに成功したようだ。
現時点のスコア
BAC :0.95308
FoldStd :0.001
LBスコア :0.95342
Recal(STAR) :0.91942
Recal(QSO) :0.96328
Recal(GALAXY) :0.97655
(g).改善後のFP/FN分析
改善した推移をまとめると
① pred GALAXY / true QSO : 21
② pred GALAXY / true STAR :-90
③ pred QSO / true GALAXY: 44
④ pred QSO / true STAR : 50
⑤ pred STAR / true GALAXY:-32
⑥ pred STAR / true QSO :-110
⑦ correct GALAXY :-12
⑧ correct QSO : 89
⑨ correct STAR : 40
ここからわかることは
・correct QSOとcorrect STARの精度が向上
・pred GALAXY / true STAR、pred STAR / true QSOのミスが大きく減る
・pred STAR / true GALAXYのミスがちょっと減る。
・pred QSOのミスはむしろ増えてる。
つまり、QSOの境界線を広げる方向に作用したようだ。
(全体で見ると予測は向上しているが、行き過ぎな部分がまだ見られる)
⑦.条件別精度分析(高精度部分)
FP/FN分析だけだと限界を感じたので、もっと細かい部分に着目していくことに
した。
(a).pred GALAXY / true STARとpred STAR / true GALAXYの中で、80%以上のデ
ータを抽出。
確信をもって答えたのに間違えたということは、そこに決定的な間違える
要素があるのではないか。
と思ったが、あまり違いが見いだせず。
(b).correct STAR、pred_galaxy_true_star_80、correct GALAXYを比較
あまり違いは見いだせず。
⑧.ドメイン情報の再確認
・redshiftは基準の125%を0.25などと表現しているという点に着目。
つまり、赤方偏移+1で光を割れば、元の光(のような)情報になるのではないか
と思って、redshift+1という特徴量を追加してみたが、残念ながらダメだった。
このあたりで締め切りが迫ってきたので、チューニングに進む。
(4).モデルチューニング
今回はChatGPTに任せてしまったので、割愛。
次回以降の課題とする。
(5).モデルアンサンブル
一応、CatBoostとLGBMでアンサンブルを行ってみたものの、精度改善ならず。
もっと違う観点を持ったアルゴリズムとのアンサンブルが望ましそうだが、時
間切れのため断念
(6).結果
Privateスコア 0.95742
1751/2817 位(62%地点)
【2】.学んだこと・気づいたこと
・ratioは要するに「傾き」
単なる割り算と思ってたが、要するに2変数の関係がratioだ。
そして、それは散布図にするとよくわかるが、「傾き」に近い。
・2変数の関係を見るなら、散布図が便利
傾きの違いや、データの分布など、ヒストグラムとはまた別で「関係」をクローズ
アップしてみることができる。
・データの確認の時点で、データの傾向はもう少しメモに書き込んでおいた方が良か
った。
結果を出すのにばかり意識がいってしまい、今回は途中の思考メモがかなり欠落
した。
しかし、発想のヒントや、のちの学習のことを考えると、試行が多少減ってもも
っとメモを残す必要がある。
・Kaggleは分析手法だけでなく、特徴量エンジニアリングも体得する場
今回のshare((3)⑥(f))のように、私の想像もつかない、数式での意味の表現方法は
まだまだたくさんあることを実感した
そして、それは、実戦でそれが必要になる場面に直面して始めて体得できるものと
いうことがわかった。
(これまでは、事前に特徴量の表現方法のパターンをもっと詰め込んでいけばできる
と思っていた)
・特徴に差がある=分類できる、というわけではない。
あるデータがその領域を好む傾向があっても、別の大きなスケールの別傾向データ
の少数派が同じような領域を好んでいる、ということもありうる。
結果として、その領域に同程度あるいはスケール的に塗りつぶすように存在し、違
いがわからなくなることはある。
だから、別の特徴も見ていく必要がある。
・分類についての知見
特徴に、共通しているところと,違いがあるところを見つける
↓
その違いで分類できるか試す
↓
分類できなかった場合、共通しているもののなかからさらに違いがないかを探す
↓
その違いで分類できるかを試す
要するに、「違いを見つけ、その違いが本当に結果を左右するか検証すること」
これが今のところ、分類するという行為として言語化したので、今後意識してやってみ
る。
(これまでは言語化することなくぼんやりとふるい分けていた)