【機械学習初心者向け③】モデルがうまく動かないときの原因と直し方
はじめに
機械学習ブログの第3弾です!
ブログ執筆の背景などは第1弾に記載しているのでここでは割愛して、早速本題に入ります!!!
もしよかったら、前回ブログもご覧いただけますと幸いです。
【機械学習初心者向け①】機械学習ってよく聞くけど、結局何なの?
【機械学習初心者向け②】機械学習、どの「手法」を選べばいいの?目的別アルゴリズム解説
前回の記事では、目的別のアルゴリズムを一通り紹介しました。
今回は「アルゴリズムを選んでモデルを作ったのに、精度が出ない」というときの話です。原因の見つけ方・直し方と、何の指標でモデルを評価すべきかを解説します。
モデルがうまく動かないときの「2大原因」
精度が出ないとき、原因はほぼ以下のどちらかです。まずこれを見極めることが先決です。
原因①:学習不足(高バイアス)
症状: 訓練データでも、テストデータでも、どちらも精度が低い
モデルがシンプルすぎて、データのパターンを捉えられていない状態です。
直し方
- データを増やす
- モデルをもっと複雑にする(層を増やすなど)
- 学習時間を長くする
💡 例え: 10問しか練習しなかった状態で試験に臨む。そもそも練習量が足りていないので、まず問題を解く量を増やす必要があります。
原因②:過学習(高バリアンス)
症状: 訓練データの精度は高いのに、テストデータ(未知のデータ)でガクッと精度が落ちる
モデルが訓練データを「丸暗記」してしまい、少しでも違うデータが来ると対応できない状態です。
直し方
- 正則化を追加する(後述)
- 訓練データを増やす
- モデルをシンプルにする・特徴量を減らす
💡 例え: 過去問を全て丸暗記したが、本番で問い方が少し違ったら全くわからなかった状態です。「理解」ではなく「暗記」になってしまっています。
2つの見分け方まとめ
| 訓練データの精度 | テストデータの精度 | 診断 | |
|---|---|---|---|
| 正常 | 高い | 高い | 問題なし |
| 学習不足 | 低い | 低い | もっと学習させる |
| 過学習 | 高い | 低い | 丸暗記している |
過学習の特効薬:正則化
過学習を防ぐための「ペナルティ制度」です。モデルが特定のデータに過度に依存しようとすると、ペナルティを与えて「もっとバランス良く学べ」と強制します。
L1正則化(Lasso)——断捨離タイプ
重要でない特徴量の重みをゼロにします。つまり、不要な情報を自動で削ぎ落としてくれます。「この100個の変数のうち、本当に重要なものだけ残して」という場面に向いています。
L2正則化(Ridge)——均等に絞るタイプ
全ての重みを全体的に小さくします。特定の変数だけに依存しすぎるのを防いで、バランスの取れたモデルを作ります。
💡 例え: L1は「本当に必要な3着だけ残してあとは捨てる」断捨離、L2は「全部の服を少しずつ薄くして、クローゼットを軽くする」節制です。
学習が安定しないとき → 学習率を見直す
損失(誤差)が上がったり下がったりを繰り返して収束しない場合、学習率(Learning Rate)が大きすぎることが多いです。
学習率は「一度にどれだけ大きく重みを更新するか」の設定です。大きすぎると最適解を飛び越えてしまい、永遠にたどり着けません。
直し方: 学習率を小さくする
💡 例え: 目的地に向かうとき、歩幅が大きすぎて毎回行き過ぎてしまう状態です。小さな一歩で慎重に近づく必要があります。
評価指標:何で「良し悪し」を測るか
モデルを作ったら「どのくらい良いか」を数字で測る必要があります。ここで正解率(Accuracy)だけを見ると危険な場面があります。
なぜ正解率だけでは足りないのか
たとえば不正検知システムを作るとき、「正常な取引が99%・不正が1%」だったとします。ここで「全部正常です」と答え続けるだけのモデルを作ると、なんと正解率99%のゴミモデルができあがります。一件も不正を検知できないのに、数字だけは優秀に見えてしまいます。
代表的な評価指標
| 状況 | 使う指標 | 理由 |
|---|---|---|
| 見逃しが致命的(病気・不正) | 再現率(Recall) | 陽性を全部拾いたい |
| 誤検知が致命的(迷惑メール) | 適合率(Precision) | 誤って正常なものを弾きたくない |
| バランスよく見たい | F1スコア | RecallとPrecisionの調和平均 |
| 不均衡データの総合評価 | AUC-ROC | データの偏りに左右されない |
| 数値予測の誤差を測る | RMSE・MAPE | 予測値と実際の値のズレ |
再現率(Recall)と適合率(Precision)のトレードオフ
この2つは片方を上げると片方が下がるトレードオフの関係にあります。
がん診断を例に考えます。
- 見逃し(偽陰性):がんなのに「異常なし」と判定 → 命に関わる
- 誤検知(偽陽性):正常なのに「がんかも」と判定 → 精密検査で否定できる
この場合は「見逃しゼロ」が最優先なので、再現率を上げる設定にします。その代わり、正常な人も「がんかも」と判定される人が増えますが、精密検査で否定できるので許容できます。
一方、迷惑メールフィルターなら大事なメールを誤って迷惑メールに入れてしまう方が困ります。この場合は適合率を優先します。
💡 ポイント: 「どちらのミスがより困るか」で選ぶ指標が変わります。
F1スコア——バランスを取りたいとき
再現率と適合率の両方を一つの数字で表したものです。どちらか一方が極端に低い場合はF1スコアも低くなるため、バランスを確認するのに便利です。
AUC-ROC——不均衡データの総合評価
「しきい値をどこに設定するか」に関わらず、モデルの「判別力」そのものを測る指標です。不正検知や医療診断のような不均衡なデータに対して、正解率よりもずっと実態を反映した評価ができます。
まとめ
- 精度が低い → 「訓練データも低い」なら学習不足、「テストデータだけ低い」なら過学習
- 過学習の対策 → 正則化(L1・L2)、特徴量を減らす
- 学習が不安定 → 学習率を下げる
- 評価指標は目的によって選ぶ。正解率だけを見ない
- 見逃しが怖い → 再現率、誤検知が怖い → 適合率、両方バランス → F1スコア
次の記事では、ここまで学んだ機械学習の知識を実際にAWSのサービスでどう使うか——「自分でゼロから作らなくていい」場面を中心に解説します。
Discussion