0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2026年5月31日の学習記録_データ分析・試行錯誤の工程について

0
Posted at

 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分析
 ・条件別精度分析
 ・予測確率分布分析
 ・アンサンブル差分分析

 など切り口を変え、考えを書き出し、そこから何かしらの仮説を建て、その仮説
を支えうるデータを探す検証をすること。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?