機械学習の基礎のきそ

前のページで動かしたコードが「何をしていたのか」を、日本語の言葉で固めます。数式は出しません。言葉の意味をつかむことが目的です。


1. 機械学習とは何か

機械学習= 大量のデータから「規則性」をコンピュータに見つけさせ、未知のデータに対して答えを出させる技術。

人間が「女性なら生存とする」とルールを書くのが従来のプログラム。データを見せるだけで、その手のルールを自動で大量に作るのが機械学習です。

タイタニックの例で言えば、

「Sexがfemaleで、Pclassが1か2なら、生存の確率が非常に高い」
「Sexがmaleで、Ageが16以上で、Fareが低いなら、死亡の確率が高い」
      :
    (こういうルールを数百〜数千個、自動生成する)

という作業をしています。

2. 3つの大分類

種類日本語中身Kaggleでの比率
Supervised Learning教師あり学習正解つきデータから学ぶ9割以上
Unsupervised Learning教師なし学習正解なし。似たもの同士をまとめる等補助的に使う
Reinforcement Learning強化学習試行錯誤して報酬を最大化一部のコンペのみ

Kaggleのほとんどのコンペは 教師あり学習 です。train.csv に正解(Survived)が付いているのが「教師あり」の意味です。

3. 教師あり学習の2タイプ

タイプ日本語当てるもの例
Classification分類カテゴリ(どれか)生存/死亡、犬/猫、不正/正常
Regression回帰数値住宅価格、来月の売上、気温
  • Titanic → 分類(2値分類:答えが2種類)
  • House Prices → 回帰

分類はさらに、2値分類(binary) と 多クラス分類(multi-class) に分かれます。

4. 絶対に覚える4つの言葉

① 特徴量(Feature/説明変数)

予測の材料になる列のこと。Titanicなら Pclass, Sex, Age, Fare...。コードでは慣習的に X と書きます。

② 目的変数(Target/正解ラベル)

当てたい列のこと。Titanicなら Survived。コードでは慣習的に y と書きます。

③ 学習(fit/train)

特徴量Xと目的変数yのセットを見せて、XからYを当てる法則をモデルに覚えさせること。

model.fit(X, y)

④ 推論・予測(predict)

覚えた法則を使って、答えを知らないデータに答えを出させること。

pred = model.predict(X_test)

この4つは、どのコンペでも、どのモデルでも共通です。

5. データの3分割

Kaggleで混乱しやすい最重要ポイントです。

┌─────────────── 主催者が配るデータ ───────────────┐
│                                                  │
│  train.csv (正解あり)        test.csv(正解なし)│
│       │                             │            │
│       │  自分でさらに分割           └─→ 提出用に予測する
│       ↓                                          │
│  ┌──────────┬──────────┐                        │
│  │ 学習用    │ 検証用    │                        │
│  │ (train)  │ (valid)  │                        │
│  └──────────┴──────────┘                        │
│   法則を学ぶ  手元で採点する                      │
└──────────────────────────────────────────────────┘
名前日本語役割
train学習データモデルに法則を覚えさせる
validation (valid)検証データ自分で精度を測るために取っておく
testテストデータ提出用。正解は主催者しか知らない

なぜ検証データが必要か?学習に使ったデータで採点すると、丸暗記しているだけでも満点になってしまうからです。学校の試験で、答えを見ながら解くようなものです。

6. 過学習(Overfitting)── 最重要の敵

過学習= 学習データを「丸暗記」しすぎて、未知のデータに弱くなった状態。

たとえ話

過去問だけを丸暗記した受験生は、過去問では満点ですが、本番で少し出題が変わると解けません。これが過学習です。

症状

学習データのスコア検証データのスコア判定
0.990.72過学習(差が大きすぎる)
0.650.64未学習(そもそも学べていない)
0.840.81良好

対策

  • 使う特徴量を減らす/増やしすぎない
  • モデルを単純にする(決定木の深さ max_depth を浅くする等)
  • データを増やす
  • 正則化(regularization) というブレーキをかける
  • 交差検証で常に監視する

対義語は 未学習(Underfitting):モデルが単純すぎて規則性を捉えきれていない状態です。

汎化性能(Generalization)

未知のデータに対しても通用する力のこと。Kaggleで求められているのは、学習データでの点数ではなく 汎化性能 です。Private LBはそれを測るための仕組みです。

7. 交差検証(Cross Validation/CV)

検証データの取り方を工夫した、Kaggleの標準手法です。

ホールドアウト法(単純な分け方)

データの80%で学習、20%で検証。簡単だが、たまたま分け方が良かった/悪かったの影響を受けます。

k分割交差検証(k-Fold Cross Validation)

データを k個(通常5個) に分け、検証役を順番に交代させて k回測り、平均を取ります。

Fold1: [検証][学習][学習][学習][学習]  → 0.81
Fold2: [学習][検証][学習][学習][学習]  → 0.79
Fold3: [学習][学習][検証][学習][学習]  → 0.83
Fold4: [学習][学習][学習][検証][学習]  → 0.80
Fold5: [学習][学習][学習][学習][検証]  → 0.82
                              平均 → 0.81  ← これが「CVスコア」

この平均値を CVスコア と呼びます。Kagglerが毎日口にする数字です。

代表的なCVの種類

名前使う場面
KFold基本形
StratifiedKFold分類で、各Foldの正解の比率を揃えたいとき(ほぼ常用)
GroupKFold同一人物・同一店舗が学習と検証に分かれないようにしたいとき
TimeSeriesSplit時系列データ(未来のデータで学習して過去を予測しない)

8. 評価指標(Metric)をもう一段くわしく

分類でよく使うもの

Accuracy(正解率)全体のうち何%当たったか。直感的だが、不均衡データに弱い。(例:不正利用が0.1%しかないデータでは、全部「正常」と答えるだけで99.9%になってしまう)

混同行列(Confusion Matrix)予測と正解の組み合わせを表にしたもの。

予測:陽性予測:陰性
実際:陽性TP(真陽性)FN(偽陰性・見逃し)
実際:陰性FP(偽陽性・誤検知)TN(真陰性)
  • Precision(適合率)= 陽性と予測したうち本当に陽性だった割合(誤検知の少なさ)
  • Recall(再現率)= 本当の陽性のうち見つけられた割合(見逃しの少なさ)
  • F1スコア= PrecisionとRecallのバランスを取った指標

AUC(ROC-AUC)「陽性のものに高いスコアを付けられているか」の順位的な指標。0.5=当てずっぽう、1.0=完璧。2値分類のコンペで最も多く使われます。

LogLoss(交差エントロピー)確率の確からしさを測る。自信満々に外すと大きく減点される。低いほど良い。

回帰でよく使うもの

指標特徴
MAE誤差の絶対値の平均。外れ値に強い
RMSE二乗してから平均→ルート。大きな外れを強く罰する
RMSLE対数を取ってからRMSE。価格・売上など桁が大きく動くデータ向け
R²(決定係数)1に近いほど良い

9. モデルの種類(どれを使えばいいか)

モデル日本語特徴入門での位置づけ
線形回帰 / ロジスティック回帰—単純・速い・説明しやすい最初のベースライン
決定木(Decision Tree)決定木if文の木。人間が読める考え方の基礎
ランダムフォレスト—決定木を数百本作って多数決入門の定番
GBDT(LightGBM / XGBoost / CatBoost)勾配ブースティング決定木表形式データの最強クラスここが本命
ニューラルネット / ディープラーニング—画像・音声・自然言語で圧倒的画像系コンペ向け

覚えておくべき経験則

CSVのような表形式(テーブル)データなら、まず LightGBM。 画像・音声・テキストなら、ディープラーニング。

これはKaggle界の常識です。表データでディープラーニングを頑張っても、たいていLightGBMに勝てません。

決定木 → ランダムフォレスト → GBDT の関係

  1. 決定木:「Sexはfemale? → はい → Pclassは3未満? → はい → 生存」のような分岐の木を1本作る。単体では精度が低く、過学習しやすい。
  2. ランダムフォレスト:木を数百本、データや特徴量をランダムに変えて作り、多数決を取る。ばらつきが減って安定する(バギング)。
  3. GBDT:木を1本作る → 外した部分(誤差)を重点的に 次の木で修正する → これを数百回繰り返す(ブースティング)。精度が非常に高い。

10. 特徴量エンジニアリング(Feature Engineering)

既存の列を加工・組み合わせて、予測に効く新しい列を作ること。

Kaggleで 最も差が付く作業 です。モデル選びよりも効きます。

手法例
四則演算で合成FamilySize = SibSp + Parch + 1
文字列から抽出名前から敬称(Mr / Mrs / Master)を取り出す
日付の分解日時 → 年・月・曜日・時間帯・祝日か
集約(グループ統計)「その人が属するグループの平均購入額」など
ビニング(離散化)年齢 → 子ども/成人/高齢の3区分に分ける
対数変換価格や金額の歪みをならす

カテゴリ変数の扱い(文字列の列)

手法内容注意
Label Encoding各カテゴリに0,1,2…と番号を振る決定木系ならこれでOK
One-Hot Encodingカテゴリごとに0/1の列を作る種類が多いと列が爆発する
Target Encodingカテゴリごとの目的変数の平均値に置き換える強力だが リークしやすいので要注意

欠損値の扱い

  • 中央値・平均値で埋める(数値)
  • 最頻値や「欠損」という新カテゴリで埋める(カテゴリ)
  • 「欠損だったかどうか」自体を新しい列にする(欠損に意味があることが多い)
  • LightGBMは欠損値のまま扱えるので、埋めない選択肢もある

11. リーク(Leakage)── やってはいけない事故

リーク= 本来知り得ないはずの情報が、学習に紛れ込むこと。

典型例:

  • 検証データの情報を使って前処理をしてしまう(全データの平均で欠損を埋める等)
  • 「予測時点では確定していない未来の情報」を特徴量に入れる
  • IDや並び順に正解が紛れている(データ側の不備。これはコンペの醍醐味にもなる)

リークがあると CVスコアは異常に良いのに、LBスコアが悪い という現象が起きます。

12. アンサンブル(Ensemble)

複数のモデルの予測を組み合わせて精度を上げる手法。上位陣は必ずやります。

手法内容
平均(Averaging)複数モデルの予測値を単純平均する。簡単で効果大
加重平均精度の良いモデルに重みを多く与える
多数決(Voting)分類で多数決を取る
スタッキング(Stacking)モデルの予測値を特徴量にして、さらに別モデルで学習する

異なる種類のモデル(LightGBM と ニューラルネット など)を混ぜるほど効果が高いのが経験則です。


まとめ:このページで覚えた言葉

特徴量 / 目的変数 / 学習 / 推論 / 学習データ / 検証データ / テストデータ /過学習 / 未学習 / 汎化性能 / 交差検証 / CVスコア / 評価指標 / AUC / RMSE /決定木 / ランダムフォレスト / GBDT / 特徴量エンジニアリング / エンコーディング /欠損値 / リーク / アンサンブル

全部わからなくて大丈夫です。用語集にも載せてあるので、出てくるたびに戻ってください。