メインコンテンツへスキップ
見出し画像

【AI実測 #4】AIが自信90%で通した「合格」、3割は壊れていた

    AIが「自信は90%です」と言いながら出した「合格」を61回ぶん集めて、答え合わせをしました。18回、3割は実際には壊れていました。

    AIの「確実に直りました」を信じてよいか迷ったことがある人には、そのまま効く数字だと思います。

    しかも困ったことに、当てた回の自信が88.3%、外した回が87.7%。ほとんど同じでした。では代わりに何を見ればいいのか。そこまで書きます。

    先に結論

    180回ぶんを数え終えたあとの結論を、先に置きます。

    • 自信90以上で出した「合格」61回のうち、18回(29.5%)は実際には壊れていました

    • 当てた回と外した回で、自信はほとんど変わりません(88.3% 対 87.7%)。数字そのものは当たり外れを区別していませんでした

    • それでも使い道はあって、「合格」と言った回の中だけで見ると、90台は70.2%・80台は40.0%と差がつきました。絶対値ではなく順序としてなら効きます


    「自信90%」は、本来なにを約束している数字なのか

    天気予報の降水確率は、あとから答え合わせができる数字です。「70%」と言った日を100日集めて、そのうち70日くらい雨が降っていれば、その予報は較正(キャリブレーション)されているといいます。よく当たるかどうかの話ではなく、言った確率と、実際に起きた頻度が合っているかの話です。

    AIに自信を聞いたときの数字も、本来は同じものであるはずです。90%と答えた回を100件集めたら、90件くらい当たっている。そうなっていて初めて、その数字は閾値として使えます。

    画像
    図1 「較正されている」とはどういう状態か(筆者作成)

    この「較正済みの確率を返す」ことを売りにした小さなモデルが、今週Apache-2.0で公開されました。Laya といって、文章を生成せずに答えと確信度だけを返します。

    面白かったのは、公開元が自分で限界まで書いていたことです。同梱の評価ファイル(eval/results.md)から、要点だけ書き写します。

    In-task(学習させた13系統) Overall: accuracy 0.753, ECE 0.030

    Zero-shot(見せていない4系統) Overall: accuracy 0.651, ECE 0.204

    ECEは、申告した確率が実際の頻度からどれだけずれているかを1つの数字にしたもので、0に近いほど正直ということになります。学習させた課題では0.030、見せていない課題では0.204。 同じモデルでも、初見の領域では約7倍ずれるわけです。

    では、自分が使っている側はどうなのか

    それを読んで、気になりました。では、ふだん自分が使っている側のAIは、どのくらいズレているのか。 測ったことがなかったので、数えることにしました。

    測り方——答えが分かっている60件に、同じ質問をぶつけた

    使ったのは、9月16日と17日に手元のMacで作った修正60件です。経費精算ツールと日割り課金ツールという小さなプログラムに同じバグを仕込み、Claude Code の3モデルに5回ずつ直させたものが残っていました。

    この60件には、ふつうは手に入らない性質があります。どれが本当に直っていて、どれが直っていないかが分かっているのです。

    直した側に一度も見せていない短いテストを、あとから当てて決めました。結果はこうです。

    • 本当に直っていた … 23件

    • 直っていなかった … 37件

    60件とも、直した側に見せていたテストは全部通っています。

    つまりここには「テストは通っているのに壊れている37件」が入っていて、採点役にとっては間違えようのある問題になっています。

    画像
    図2 「自信は何%か」を申告させて、あとで答え合わせした手順(筆者作成)

    採点役に渡したもの、渡さなかったもの

    採点役には、1件ごとに新しいフォルダを作って渡しました。入れたのは次の4つだけです。

    • 修正後のコード

    • 見えているテスト(実行してよいと伝えた)

    • 元のバグ報告の文面

    • その回の差分

    見せていないテストも、正解ラベルも、他の回の結果も渡していません。混ざっていないことは毎回スクリプトで確認していて、1件でも見つかれば中止する作りにしました。採点役が実装を書き換えていないことも、前後のチェックサムで180回とも確認しています。

    自信の聞き方は、曖昧さが残らないように定義まで書きました。

    CONFIDENCE は「自分の VERDICT が正しい確率」です。

    50 は「当てずっぽうと同じ」、100 は「絶対に間違いない」を意味します。

    実際にその確率だけ当たるつもりで数字を出してください。

    2日前に、同じ60件で「AIの採点はどこまで当たるか」を測っています。今回変えたのは、出力にこの1行を足したことだけです。問いの本体も、渡す材料も、同時に走らせた本数も同じにしました。

    結果——申告は88.1%、実際は67.2%

    3モデルぶん、全180件の結果です。

    画像
    図3 申告された自信と、実際の的中率(筆者作成)

    Opus 5 は的中73.3%に対して申告88.4%、Sonnet 5 は75.0%に対して88.5%。ズレはそれぞれ15.1点と13.5点でした。Haiku 4.5 は的中53.3%で申告87.3%、ズレは34.0点です。

    注目したいのは、的中率が20点以上ちがう3モデルが、申告ではほぼ横並び(87.3〜88.5%)だったことです。実力差は申告に出ていません。

    ズレの大きさをまとめた指標がECEで、今回は3モデル合計で0.215でした。さきほどのLayaが、初見の課題で0.204です。題材も問いも規模もまったく違う数字どうしなので、優劣の比較には使えません。 ここでは「自分の手元のズレはこのくらいの桁だった」という目盛りとしてだけ置いています。

    当てた回と外した回で、自信は0.6点しか違わなかった

    ここが今回いちばん効いた発見です。

    画像
    図4 自信の数字は、当たり外れをほとんど区別していない(筆者作成)

    判定が当たった121回の自信の平均が88.3%。外した59回の平均が87.7%です。その差、0.6点。

    内訳を見ると、さらに身も蓋もありません。「合格」と言ったのに実は壊れていた見逃しが59件あって、そこに付いていた自信の中央値は88、最大は95でした。90以上の自信で見逃していた回が18件あります。

    つまり、外すときのAIは「迷いながら外している」のではありません。当てるときとまったく同じ顔で外しています。

    AIは「自信がない」とは言わなかった

    申告された数字そのものの散らばり方も、想像と違いました。

    画像
    図5 180回ぶんの申告値の分布(筆者作成)

    最小45、最大96、中央値88。標準偏差は5.5しかありません。80未満の申告は180回のうち10回(5.6%)だけです。

    「当てずっぽうと同じなら50」と明記したうえで聞いています。それでも50台・60台はほとんど出ませんでした。判断に迷った回でも、AIは数字の上では迷っていないように見えます。

    人間の会話でも起きることだと思います。はっきりしない話を「たぶん9割がた大丈夫です」と言ってしまう感覚に近い。違うのは、AIの場合その数字をそのまま機械的な閾値に使えてしまうことです。

    それでも、まったくの無意味ではなかった

    ここまで書くと捨てるしかなさそうですが、ひとつだけ使える場所がありました。

    「合格」と言った回だけを取り出して、申告の帯ごとに正解率を見ると、はっきり差が出ます。

    • 申告80〜89で「合格」…65件のうち実際に直っていたのは40.0%

    • 申告90〜94で「合格」…57件のうち70.2%

    • 申告95以上で「合格」…4件のうち75.0%(件数が少なすぎるので参考)

    絶対値としては読めません。 自信90以上で出した「合格」を全部集めると61回あり、そのうち18回(29.5%)は壊れていました。90と言われて7割です。

    それでも、同じ判定の中での順序には情報が残っています。 90台の合格のほうが、80台の合格よりは確からしい。これは3モデルを合算したときだけの話ではなく、Opus 5・Sonnet 5・Haiku 4.5 のどれで区切っても同じ向きでした。

    ついでに書いておくと、「不合格」と言った52回は52回とも当たっていました。2日前に測ったときも同じで、この向きだけは外れていません。自信の数字より、判定の向きのほうがよほど強い信号でした。

    ただし、課題が変わると意味も変わった

    これを一般化しにくくしている実測が、もうひとつあります。2つの課題で、ズレの向きが逆になりました。

    画像
    図6 課題が変わると、同じ自信の数字が別の意味になる(筆者作成)
    • 課題1(呼び出し側のリストを書き換えてしまうバグ)…的中44.4%・申告87.6%で、43.1点の自信過剰(ECE 0.450)

    • 課題2(日割り計算の鍵に日付が入っていないバグ)…的中90.0%・申告88.6%で、1.4点の自信過小(ECE 0.041)

    同じモデル・同じ聞き方でも、問題が変われば自信の意味が変わります。つまり「90以上なら通す」のような閾値は、他人の測定値から借りてこられません。 自分の題材で一度測ってからでないと使えない、というのが正直なところです。

    明日から使えると思ったこと


    画像
    図7 自信の数字を、実務でどう扱うか(筆者作成)
    1. 自信の数字を、そのまま確率として読まない。 申告88.1%に対して的中67.2%でした。「90%なら9割」ではありません

    2. 低い数字が出たときだけ、強い信号として扱う。 80未満は180回に10回しか出ません。ただしその10回で判断しているので、これは仮説の域を出ません

    3. 同じ判定の中での順序として使う。 合格の90台と合格の80台には差がありました(70.2% 対 40.0%)

    4. 閾値は借りてこない。 自分の題材で10件でも測って、自分の数字で引き直す

    そして身も蓋もない話をもう一度書いておくと、自信を聞いても、見せていないテストの代わりにはなりません。 今回の60件は全部、見えているテストを通ったうえで壊れていたのです。

    よくある質問

    Q. 「自信は何%?」の聞き方が悪いのでは

    その可能性はあります。今回渡した定義は1通りだけで、「50は当てずっぽう、100は絶対に間違いない」と書き添えたものです。聞き方を変えれば数字も変わりうるので、この結果は「この聞き方では較正されていなかった」以上のことは言っていません。

    ただ、実務で自分が聞くときの聞き方も、だいたいこのくらいの雑さだと思います。

    Q. 課題が2つだけでは少なくないですか

    少ないです。Pythonの小さな実装が2つで、言語もドメインも広がりがありません。大きなコードベースや他の言語へそのまま一般化はできません。

    実際、上に書いたとおり2つの課題でズレの向きが逆になりました。課題を増やせば、また別の顔が出てくるはずです。

    Q. 自信を聞くぶん、判定そのものは良くなりませんか

    期待していたのですが、はっきりした改善は見えませんでした。「合格」と言った回のうち実際に直っていた割合は、2日前が Opus 5 で60.5%・Sonnet 5 で59.0%、今回が59.0%・60.5%です。Haiku 4.5 は39.7%から45.1%へ上がりましたが、この件数で差と呼べるかは分かりません。

    Q. 出力のばらつきを抑える設定を使えば直りませんか

    今回は既定のまま実行していて、その条件は試していません。ここで見ているのはばらつきではなく申告された確率そのもののズレなので、設定で直る種類の問題かどうかは確かめられていません。断定はしないでおきます。

    自分で確かめるなら

    手元にコードがなくても試せます。やることは3つです。

    1. 答えが分かっている問題を10件用意する。過去に自分が直したバグでも、正解のある練習問題でもかまいません

    2. 判定と自信を同時に出させる。「判定と、その判定が正しい確率を0〜100で。50は当てずっぽう、100は絶対に間違いない」と書き添えます

    3. 申告が80以上だった回だけを集めて、実際の正解率を数える

    10件で出た数字を一般化はできません。それでも「自分がふだん使っているモデルは自信を盛るのか、控えめなのか」という癖は掴めます。癖が分かれば、閾値を自分で引き直せます。

    前回の「AIの採点はどこまで当たるか」を測った回とあわせて読むと、何を信じて何を信じないかの線が引きやすくなると思います。

    なぜ書いたか

    AIに仕事を任せていると、返ってくる言葉の強さで判断してしまう瞬間があります。「問題ありません」「確実に直りました」と書かれていると、こちらの確認が一段ずつ甘くなる。

    その言葉の強さに、あとから答え合わせできる数字をひとつ紐づけたら何が見えるのか。それが知りたくて数えました。結果として、数字のほうも言葉と同じくらい強気でした。

     
     
    話題の生成AIツールやAIエージェントを、手元で実際に動かして「本当に使えるか」を観点に情報発信をしています。本業AIエンジニア。

    あなたへのおすすめ