解説
AIの数値はどこまで一致させる?絶対誤差・相対誤差と許容範囲を先に決めよう
AIが0.30000000000000004と返し、手元の答えは0.3だった。一方、請求額の1円の違いは見逃せない。数字が近いかを、いつも同じ基準で判断してよいわけではないよ。

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だから支払い額も正しい、とは判断しない。
入力の単位違い、桁の読み違い、行の取り違えも、誤差判定の前に確認する。数値が近くても、対象が別なら正しい照合にならないよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。