2026年3月から、KagglePlaygroundのコンペに参加していましたが、上位35%で伸び悩んでいます。
データをなんとなく見ては、何か気が付けることを探して、それを試してみては有効な一手にならず、時間ばかりが過ぎてしまう、ということを繰り返してしまったためです。
そこで、一度Taitanicに立ち返り、分析の切り口や特徴量の表現の仕方を改めて学び、自分なりに分析や試行錯誤の工程をおさらいしたので、ここにそのまとめを残します。
あくまでも現時点でできたことをまとめているため、不備はそれなりにあるだろうが、これからブラッシュアップしていければと思います。
また、今回はコーディングについてはあまり触れず、分析と試行錯誤についてを重点的にまとめています。
――――――――――――――――――――――――――――――――――――――――
【目次】
【1】.データの確認
(1).データの状態の確認
【2】.初期特徴量選定とベースラインの作成
(1).目的変数と強く関係していそうな特徴量を探す。
(2).バリデーション設計をする。
(3).使うアルゴリズムを決める。
(4).学習結果を表示させる。
【3】.スコア改善のための試行錯誤をする。
(0).試行錯誤の基本的な流れ
(1).現在の特徴量から簡単に新たな特徴量を作れないか検討する。
(2).目的変数のカテゴリ間の違いを探す。
(3).FP/FN分析
(4).条件別精度分析
(5).予測確率分布分析
【4】.モデルチューニング
【5】.モデルアンサンブル
(1).Seedアンサンブル
(2).モデルアンサンブル
【6】.特徴量の表現方法についてのまとめ
(1).四則演算で表現
(2).条件スイッチ化
【7】.分析のコツ
――――――――――――――――――――――――――――――――――――――――
【1】.データの確認
(1).データの状態の確認
①.データの数(行数、列数、列の種類など)の確認
・データの行数、列数を確認し、データの規模を確認する。
②.データの欠損や、処理の傾向の確認
・欠損しているデータはないか確認する。
・極端な値で、欠損を表現したデータはないか確認する。
③.データの内容の確認
・各列のデータ型を確認する。
・各列が何を表しているかを確認する(単語検索、データの傾向など)。
まずは.head()を使ってデータを見てみる。
単語検索、describeの結果などからざっくりでいいので各列について仮説
を建てるとその後の分析がスムーズになる。
・目的変数(予想の対象)が何かを確認する。
④.データの構造の確認
・大まかなデータの分布を見る。
数値列はヒストグラム、カテゴリ列は棒グラフなどにし、データの分布を
大まかに把握する。
【2】.初期特徴量選定とベースラインの作成
(1).目的変数と強く関係していそうな特徴量を探す。
①.各列と目的変数に何らかの関係がないかを調べる。
基本的には.groupbyを使って、目的変数の特徴と何かしらの連動をしていそう
な列がないかを探す。(比例関係、線形関係など)
(2).バリデーション設計をする。
偏った予測になってしまうことを防ぐため、5分割(Fold)の交差検証法を使う。
(3).使うアルゴリズムを決める。
とりあえずはLightGBMが優秀なのでそれを使う。
(4).学習結果を表示させる。
CVスコア、Fold間の平均スコア、Fold間の標準偏差を表示させる。
これをしておくと、後工程のスコア改善の試行錯誤の際に、その試行を採用する
かどうかの判断材料の一つになる。
【3】.スコア改善のための試行錯誤をする。
※試行錯誤とスコアの変化をまとめる表を別途作り、そこに記録しながらやると
良い。
(0).試行錯誤の基本的な流れ
①.ある視点からデータを見る。(EDAやErrorAnalysis)
②.気が付いたことを書きだす。
③.書き出したことから、「何故そうなっているか」の仮説を建てる。
④.「仮説がもしそうなってるなら、こうなってるはず」という予想をたて、該当
するデータを見てみる。
特徴量化も試してみる。
⑤.結果を確認し、採用不採用を決め、①へ戻る。
※データを見るときの視点は工程として後述する。
(1).現在の特徴量から簡単に新たな特徴量を作れないか検討する。
細かい分析を行う前に、簡単に作れる特徴量がないかを検討してみる。
ぱっと思いつくもの2~3程度で良い。
①.まだ採用してない列を特徴量として追加してみる。
強い関係があるか微妙なものも一旦特徴量として追加してみる。
ただし、全部やろうとすると時間がかかりすぎるため、2~3試す程度で良い。
(時間が潤沢にあるなら全て試しても良いが)
②.log化してみる。
例えば、分布を見た時に、片側に裾が長い特徴量はlog化するとスコアが改善
することがある。
③.+、-、×、÷などの式により、新たな情報を持った特徴量を作れないか検討
する。
例えば、Taitanicというコンペでは、SibSP(兄弟姉妹・配偶者の数)とParch(
親or子の数)を組み合わせて
「SibSP(兄弟姉妹・配偶者の数) + Parch(親or子の数) + 1(自分)」
で、「家族の数」という新たな情報を持ったデータを作ることができる。
四則演算それぞれの表現できるものなどは後述。
④.頻度(frequency)を探す。
そのデータの値の頻度そのものが、予測するための情報になることがある。
(例:Taitanicにおける、家族の人数4人は、全データにおいてどれくらい
希少なのか、等)
「カテゴリに属すこと自体の意味」が弱い時、「所属数そのものに意味が
ありそうな時」などは、精度向上につながる場合がある。
(2).目的変数のカテゴリ間の違いを探す。
①.各列で、カテゴリ間の違いを探す。
例えば、Taitanicにおける女性だけで見た時に、生存者と死亡者のデータ
の差異を見る、といった具合に。
②.違いから気が付いたことをまとめ、仮説を建てる。
③.(必要ならば)さらに、細かいカテゴリ毎の違いを見ていく。
(3).FP/FN分析
①.用語の整理
・FP(False Positive)
良い側(1)の予測をして、外した予測。
・FN(False Negative)
悪い側(0)の予測をして、外した予測。
・TP(True Positive)
良い側(1)の予測をして、合っていた予測。
・TN(True Negative)
悪い側(0)の予測をして、合っていた予測。
※Positiveは1に置いている物。
Negativeは0に置いている物。
②.FPとTP、FNとTNの各列を見比べて違いを見つける。
FPに該当するデータとTPに該当するデータをそれぞれグループ化し、この2
つのグループ間の違いを見つける。
そこに、アルゴリズムが拾えてない「予測を分ける要素」がある。
その違いから仮説を建て、特徴量として表現する。
③.FPやFNの中で、高確度(0.8以上や0.2以下)の予測に着目して違いを探す。
(高確信ミス分析)
目的変数の予測が0.8以上や0.2以下になっているデータはその時点での特徴量
では自信をもって予測したのに外している部分である。
すなわち、その部分のTP/TNとの違いは、予測に大きく寄与するのに、アルゴ
リズムが拾えていない要素が含まれている可能性がある。
(4).条件別精度分析
①.各グループのAccuracyを見る。
例えば、性別の男だけで見ると、予測確率が低いなら、そこにうまく拾えて
いない要素があるかもしれない。
要するに、より小さいグループに切り分け、そこでの予測確率を見ることで
まだ拾えてない要素を分析するための切り口を探す。
②.予測が著しく低い領域を深堀する。
(5).予測確率分布分析
①.予測確率を分布化する。
そのモデルは確信を持ってる予測が多いのか。
あるいは、微妙な予測が多いのか、など、予測の分布を見ることで何かヒント
が何かを探す。
②.分布の形状を見て、極端な部分を探す。
例えば、50%付近が妙に多いならば、そこには「あと一押しで正解になる人」
が多く、その一押しが何なのかを探す切り口になる。
逆に確信の持ってる予測が多いならば、どちらかというとアンサンブルが
聞きやすい場面であったりする。
このように、分析の状態を見ることで、新たな洞察の切り口を得る。
【4】.モデルチューニング
テキストなどにやり方が書いてあるため割愛
【5】.モデルアンサンブル
(1).Seedアンサンブル
Seed値を3~5個に増やして、予測を行い、その平均を取ることで予測の偏りを
減らす。
計算時間が増大するものの、精度の微妙な改善に繋がることが多い。
(2).モデルアンサンブル
別のモデルの予測と結果を平均する。
ただモデルを増やせばいいわけではなく、同程度の精度を持った「別の考え方」
の予測を集めることで、各モデルの予測の「弱み」を補完しあい、精度の向上を
図ることができる。
①.モデル毎に結果を保存する。
oof_predなどに予測結果を入れているが、アンサンブルしようと次のアルゴ
リズムを走らせると、上書きされてしまう。
なので、学習した次のセルで、保存するコードを書く必要がある。
②.アンサンブルを行う。
やること自体は、各モデルの予測確率を足し合わせ、平均化。
③.結果と、モデルの違いを分析する
モデル同士の予測の違いを確認し、その違いから別の分析のヒントを見出す。
【6】.特徴量の表現方法についてのまとめ
(1).四則演算で表現
①.+(足し算)
・合計量
・複数要素の累積
「これは同じ種類の量じゃないか?」を考える。
②.-(引き算)
・差
・基準に対するズレ
「差が意味を持つか?」を考える。
③.×(掛け算)
・相互作用(強調)
「AとBが揃うと意味を持つ」を表現する。
④.÷(割り算)
・比率
・効率
・密度
「単位当たり」にならないかを考える。
(2).条件スイッチ化
例えば、ブール値などで「〇〇かつ××」という条件を設定し、それを満たす
かどうか、という特徴量を作る。
【7】.分析のコツ
分析の秘訣は「行き詰ったら次の切り口に移る」こと。
行き詰ったら
・EDA
・特徴量探索
・FP/FN分析
・条件別精度分析
・予測確率分布分析
・アンサンブル差分分析
など切り口を変え、考えを書き出し、そこから何かしらの仮説を建て、その仮説
を支えうるデータを探す検証をすること。