Agent Grow Tech Notes
📑

【機械学習初心者向け③】モデルがうまく動かないときの原因と直し方

に公開

はじめに

機械学習ブログの第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のサービスでどう使うか——「自分でゼロから作らなくていい」場面を中心に解説します。


Agent Grow Tech Notes
Agent Grow Tech Notes

Discussion