DESIGN / CODE / INFRA / AI

解説

AIの数値はどこまで一致させる?絶対誤差・相対誤差と許容範囲を先に決めよう

AIが0.30000000000000004と返し、手元の答えは0.3だった。一方、請求額の1円の違いは見逃せない。数字が近いかを、いつも同じ基準で判断してよいわけではないよ。

AIの数値はどこまで一致させる?絶対誤差・相対誤差と許容範囲を先に決めよう
保存リストを見る →
この記事の道しるべ 5項目

AIが0.30000000000000004と返し、手元の答えは0.3だった。一方、請求額の1円の違いは見逃せない。数字が近いかを、いつも同じ基準で判断してよいわけではないよ。

この記事では、架空の測定値を使い、差そのものと割合による許容範囲を分ける。Python 3で計算例を試せるけれど、実際の決済や検査の合否条件は変更しない。

絶対誤差と相対誤差

絶対誤差は、比較する二つの値の差の大きさ。100と101なら差は1だよ。相対誤差は、差を何らかの基準値で割って割合として見る考え方。どの値を基準にするかも決める必要がある。

二つの値 絶対の差 最初の値を基準にした割合
100と101 1 1%
100000と100001 1 0.001%
0と0.001 0.001 0で割る割合は定義できない

同じ差1でも、大きさに対する比率は違う。逆に、ゼロ付近では相対の条件だけで考えにくいことがある。単位や用途を抜かして、AIへ「誤差は少しまで」と頼むと曖昧になるね。

Pythonのiscloseは、条件が明示されている

Pythonのmath.iscloseは、絶対・相対の許容値で近さを判定する。公式の式は、差が次の大きいほう以下かを調べるもの。

abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

ここでは大きいほうの絶対値を相対の基準にする。先ほどの表の「最初の値を基準」と完全に同じ定義ではないことにも気を付けよう。

from math import isclose
print(isclose(0.1 + 0.2, 0.3))
print(isclose(0.0, 0.001, rel_tol=0.01, abs_tol=0.0))
print(isclose(0.0, 0.001, rel_tol=0.01, abs_tol=0.002))

結果は順にTrue、False、True。編集部ではこの結果を実行して確認した。0.002という値は練習用で、どの仕事にも適切な基準という意味ではないよ。

AIへ渡す確認ルールの例

「次の値は架空の長さで、単位はmmです。参照値と出力値の差を示してください。合否は差の絶対値が0.2mm以下かで判定し、境界の0.2mmは合格に含めます。値が不足する行は判定しないでください」と具体化できる。

実際には、測定器の精度や業務上の基準を担当者と決める。AIに都合のよい許容値を後付けさせない。結果を見てから範囲を広げると、比較の意味が変わってしまうよ。

小数を丸めれば全部解決する?

小数の丸めと、差を許す判定は別。金額など、十進数の決まった桁で正確に扱う必要があるものは、Decimalや整数単位の設計、業務の端数処理規則を考える。iscloseがTrueだから支払い額も正しい、とは判断しない。

入力の単位違い、桁の読み違い、行の取り違えも、誤差判定の前に確認する。数値が近くても、対象が別なら正しい照合にならないよ。

計算する順番は丸めと合計、確かめる入力は境界ケースの準備へ。

参照した公式資料

確認日:2026年10月25日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。