Claudeで不確かさバジェット表を組む — GUMの合成と拡張を検算
測定の不確かさ(GUM)の成分表を、Claudeのコード実行で合成標準不確かさ・有効自由度・拡張不確かさまで検算する手順。入力の整理から報告の書き方まで。
不確かさバジェット表の計算は、成分が5つ前後でも電卓では間違えやすい作業です。Claudeにコード実行を使わせ、成分の洗い出しは人が決め、足し合わせと検算は実行結果で確かめる分担にすると、数字の根拠を後から追えます。この記事では、GUM(計測における不確かさの表現のガイド、JCGM 100:2008)の手順に沿って、入力の整理から拡張不確かさの報告までを組み立てます。
不確かさバジェット表は何を並べる表か
バジェット表は、測定結果にばらつきを与える成分を1行ずつ並べ、標準不確かさ・感度係数・寄与を揃えた表です。GUMの式(10)が土台になります。
各入力量の標準不確かさu(xi)に、測定モデルfの偏微分(感度係数)を掛けて二乗和をとり、平方根を取ったものが合成標準不確かさuc(y)です。この式は、fを一次のテイラー展開で近似した不確かさの伝播則にあたります。入力どうしが相関するときは別の式(式13)になります。
拡張不確かさはU = k × uc(y)です(式18)。kは包含係数で、通常は2〜3の範囲から選びます。k = 2で約95%、k = 3で約99%の包含確率とみなせるのは、分布がほぼ正規で有効自由度が十分大きいときです。
つまり表に並べる列は次の5つで足ります。
| 列 | 中身 |
|---|---|
| 入力量 | 中身測定モデルに現れる量(読み値・補正・環境条件など) |
| 評価の型 | 中身A(繰り返し測定の統計)かB(証明書・仕様・上下限) |
| 標準不確かさu(xi) | 中身元の情報を標準偏差の大きさに揃えた値 |
| 感度係数ci | 中身∂f/∂xi |
| 寄与ui(y) | 中身|ci| × u(xi) |
Claudeに任せる範囲と、人が決める範囲
成分の洗い出しと、各成分にどの分布を当てるかは、測定の現場を知っている人の判断です。Claudeに任せるのは、その判断を入れたあとの計算です。
コード実行ツールの説明では、桁の多い計算・多段の計算・精度が問われる計算でClaudeがコードを走らせるとされています。単純な四則演算や換算は、コードを使わず直接答える場合もあります。迷う依頼では「コードを実行して検算して」と明示します。
claude.aiでは、コード実行とファイル作成の設定をオンにして使います。Free・Pro・Maxはデフォルトで有効で、TeamとEnterpriseは組織の管理者が切り替えます。Free・Pro・Maxはネットワークアクセスが有効です。Enterpriseは既定でオフで、Teamはヘルプ記事の中でも既定値の書き方が分かれているため、組織設定の「Capabilities」で現在の値を確かめます。ネットワークがオフの環境では、コンテナにあらかじめ入っているライブラリだけで計算します。pandas・numpy・scipy・sympyなどが入っているため、不確かさの合成とt分布の分位点にはそれで足ります。
例題 — 100 mmゲージの長さを20 ℃に補正する
例として、鋼製ゲージの長さを室温で読み、20 ℃の値に直す測定を考えます。測定モデルは一次近似で次のとおりです。
L20 = Lm × (1 − α × (t − 20))
Lmは読み値、α は線膨張係数、tはゲージの温度です。入力は次の5成分とします(数値は説明用の仮定値です)。
| 入力量 | 情報源 | 評価 | 標準不確かさ |
|---|---|---|---|
| Lmの繰り返し(n = 5) | 情報源読み値5回の標準偏差sのs/√n | 評価A | 標準不確かさ0.0000707 mm |
| 測長器の校正 | 情報源証明書「U = 0.0004 mm(k = 2)」 | 評価B | 標準不確かさ0.0002 mm |
| 測長器の分解能 | 情報源最小表示0.0001 mm、半幅a = 0.00005 mm | 評価B(矩形) | 標準不確かさ0.0000289 mm |
| 温度計t | 情報源仕様「±0.5 K」 | 評価B(矩形) | 標準不確かさ0.289 K |
| 線膨張係数 α | 情報源仕様「11.5×10⁻⁶ /K ± 1×10⁻⁶」 | 評価B(矩形) | 標準不確かさ0.577×10⁻⁶ /K |
各行の標準不確かさの出し方は、GUMの該当箇所に対応します。
- 繰り返し測定: 平均の実験分散はs²(q)/n(式5)
- 校正証明書: 標準偏差の何倍かが書かれていれば、その値を倍数で割る(4.3.3)
- 上下限しか分からない量: 矩形分布を仮定し、半幅aに対して分散はa²/3(式7)
Claudeに渡す依頼文
入力表を貼り、計算の流れを指定します。「計算してください」だけで終えず、中間値の出力まで求めると検算になります。
次の測定モデルで不確かさバジェット表を作ってください。
モデル: L20 = Lm * (1 - alpha * (t - 20))
入力は添付の表のとおりです(Lm の読み値5個、校正U、分解能、
温度計の許容差、alphaの許容差)。
コード実行ツールで、次の順に計算してください。
1. 各入力の標準不確かさ(Type Aは s/√n、矩形は a/√3、
証明書のUはk=2で割る)
2. 感度係数 ci = ∂f/∂xi(sympyで偏微分し、数値代入)
3. 寄与 |ci|*u(xi)、合成標準不確かさ uc、各成分の寄与率(%)
4. 有効自由度(Welch-Satterthwaite)と、その自由度での
t分布の包含係数k(包含確率95%)
5. 拡張不確かさ U=k*uc と、報告用の一文
計算に使ったスクリプトも提示してください。スクリプトを出させるのが肝心です。数字だけ返ってきた場合は、同じ入力でこちらの手元でも再計算できません。
検算用スクリプトと実行結果
Claudeが出したスクリプトを読むときの基準として、手元で同じ入力を計算した例を示します。Pythonとscipyがあれば、次のスクリプトで再現できます。
import math, statistics as st
from scipy import stats
reads = [100.0012, 100.0015, 100.0011, 100.0014, 100.0013] # mm
Lm, s, n = st.mean(reads), st.stdev(reads), len(reads)
alpha, t = 11.5e-6, 21.3
c_L = 1 - alpha * (t - 20) # dL20/dLm
c_t = -Lm * alpha # dL20/dt
c_a = -Lm * (t - 20) # dL20/dalpha
# (名前, 感度係数, 標準不確かさ, 自由度)
items = [
("Lm 繰り返し", c_L, s / math.sqrt(n), n - 1),
("Lm 校正", c_L, 0.0004 / 2, math.inf),
("Lm 分解能", c_L, 0.00005 / math.sqrt(3), math.inf),
("温度計", c_t, 0.5 / math.sqrt(3), math.inf),
("alpha", c_a, 1e-6 / math.sqrt(3), math.inf),
]
ui = [abs(c) * u for _, c, u, _ in items]
uc = math.sqrt(sum(x * x for x in ui))
veff = uc**4 / sum(x**4 / v for x, (_, _, _, v) in zip(ui, items))
k = stats.t.ppf(0.975, math.floor(veff))
print(f"L20={Lm*c_L:.5f} mm uc={uc:.6f} veff={veff:.0f} k={k:.2f} U={k*uc:.6f}")
for (name, *_), x in zip(items, ui):
print(f"{name}: ui={x:.6f} mm 寄与率={100*x*x/uc**2:.1f}%")python3 uncertainty_budget.pyこの入力で手元の計算を走らせた結果は、次のとおりです。
| 成分 | 感度係数 | 寄与ui(y) | 寄与率 |
|---|---|---|---|
| 温度計 | 感度係数−0.00115 | 寄与ui(y)0.000332 mm | 寄与率約68% |
| 測長器の校正 | 感度係数0.99999 | 寄与ui(y)0.000200 mm | 寄与率約25% |
| 線膨張係数 α | 感度係数−130 mm・K | 寄与ui(y)0.0000751 mm | 寄与率約3.5% |
| Lmの繰り返し | 感度係数0.99999 | 寄与ui(y)0.0000707 mm | 寄与率約3.1% |
| 測長器の分解能 | 感度係数0.99999 | 寄与ui(y)0.0000289 mm | 寄与率約0.5% |
合成標準不確かさはuc ≈ 0.000402 mm、補正後の値はL20 ≈ 99.99980 mmです。有効自由度は約4,180と大きくなるため、95%の包含係数はk ≈ 1.96で、拡張不確かさはU ≈ 0.00079 mmになります。k = 2を採ればU ≈ 0.00080 mmです。
この結果から読めるのは、繰り返し回数を増やしても効かないということです。支配的な成分は温度計の許容差と校正の不確かさで、改善するなら温度計の置き換えか温度の補正が先になります。Claudeの出力でも、まず寄与率の列を見て、効いている行から疑います。
Claudeの出力を受け取るときの確認点
実行結果が出たら、次の順で突き合わせます。
- 感度係数の単位: ciの単位が「出力の単位 ÷ 入力の単位」になっているか。α の感度係数が大きく見えるのは、α が10⁻⁶ のオーダーだからです
- 分母の√3と√12の取り違え: 全幅を2aとしたとき分散はa²/3。全幅bをそのままaに入れていないか(式6と式7)
- 証明書のk: 「U = ○○(k = 2)」を2で割っているか。標準偏差の何倍かが明記されていない証明書の値は、倍数が分かるまで割れません
- 補正と不確かさの混同: 既知の系統効果は結果に補正として適用します。補正せずに不確かさを広げて吸収するのは避けるよう、GUMの6.3.1の注記が述べています
- 有効自由度の入れ方: Type Bの自由度を∞とするのは、情報が十分に確かだと見なす場合の置き方です。Type Aが少数の繰り返しで支配的なら、有効自由度は小さくなり、k = 2では足りなくなります
最後の点は、GUM 7.2.4の報告例にも出てきます。ν = 9のt分布でk = 2.26を使い、約95%の包含確率と明記した形です。
落とし穴
成分を「寄与率の大きい順」に並べず、全部を同じ重みで検討する
バジェット表は成分を増やすほど網羅的に見えますが、二乗和で効くのは上位の数行です。Claudeに洗い出しを頼むと、挙がる成分が10個を超えることもあります。まず寄与率で並べ替え、1%未満の行は統合するか、省略した旨を表に残します。
報告の書き方まで頼む
拡張不確かさを報告するときは、U・uc・k・包含確率を併記します。GUM 7.2.4は、数値の後ろに「±の後の数値は拡張不確かさU = k ucの値で、uc = ○○、k = ○○(t分布・自由度 ν = ○)に基づき、約95%の包含確率の区間を定める」という趣旨の文を付ける形を勧めています。Claudeには、この型に自分の結果を当てはめた一文を作らせます。
上の結果を、U・uc・k・自由度・包含確率を明記した
報告文にしてください。数値は実行結果のものだけを使い、
丸めは U の有効数字2桁に合わせ、測定値も同じ桁に揃えてください。APIで同じ計算を組み込むとき
自社の検査システムから呼ぶ場合は、Messages APIにコード実行ツールを付けます。公式のクイックスタートと同じ型で、ツールの種類を指定するだけです。
{
"model": "claude-opus-5-5",
"max_tokens": 4096,
"messages": [
{"role": "user", "content": "添付の入力表から不確かさバジェットを計算し、スクリプトも提示して"}
],
"tools": [
{"type": "code_execution_20250825", "name": "code_execution"}
]
}運用で押さえる制約は次のとおりです。
- コンテナにインターネット接続はなく、使えるのはプリインストールのライブラリのみ
- Pythonは3.11、メモリ5 GiB、CPU 1つ。1回のツール呼び出しが実行時間の上限を超えると
execution_time_exceededが返る - ウェブ検索・Web Fetchと併用しない場合、コード実行は実行時間で課金される。組織あたり月1,550時間までは無料
エラーコードの一覧と対処はコード実行ツールのエラーコード解説に、課金の条件は無料になる条件の記事にまとめています。生成ファイルが見つからないときは出力ディレクトリの罠を見てください。
k = 2で済む場合と済まない場合
k = 2を機械的に当てられるかは、合成した分布が正規分布に近いかで決まります。GUMの附属書Gは、中心極限定理により、成分の数が増え寄与の大きさが揃っているほど合成分布は正規に近づくと説明しています。矩形分布でも、同じ幅のものが3つ畳み込まれれば、おおむね正規分布に近い形になります。
近似が崩れるのは、合成標準不確かさが次のどちらかに支配されているときです。
- 少数回の繰り返しから得たType Aの成分
- 矩形分布と仮定したType Bの成分
この2つが支配的なら、正規分布のkをそのまま使うのは粗い近似です。自由度の問題と分布形の問題は別で、見るところも違います。
- 自由度: Type Aが少数回だと有効自由度が小さくなり、t分布のkが2より大きくなります
- 分布形: 矩形分布の成分が支配的だと、合成分布は正規分布より裾が短くなります
上の例題は、Type Bの自由度を∞と置いたため有効自由度こそ大きくなりました。ただ、寄与の約68%を矩形分布の温度計が占めています。この表ではk = 2が包含確率をやや多めに見積もる側に振れる点に注意が要ります。成分が1つ飛び抜けた表では、Claudeに有効自由度とt分布のkを計算させるだけでなく、支配成分の分布形も確かめます。
また、式(10)は入力量が互いに独立なときの式です。同じ標準器で複数の入力を校正している場合などは相関が生じるため、共分散の項を足す式が必要になります。依頼文に「入力どうしの相関の有無」を書き添えておくと、Claudeの前提確認が早くなります。
校正証明書の不確かさを入力にする
測長器や温度計の校正証明書は、バジェット表の「Type B」行の主な情報源です。JCSSは計量法トレーサビリティ制度の略称で、NITEのIAJapanが、校正を行う事業者の登録制度を運営しています。登録事業者が発行する証明書には、値とその不確かさが書かれます。
Claudeに証明書のPDFを渡す場合も、読み取った数値をそのまま計算に流さず、kの記載位置と単位を自分の目で確かめてから表に入れます。表そのものをExcelで整えたいときは、Claude for Excelでの設備投資の試算が、数式を残しながら計算を進める進め方の参考になります。
誰の検算にもなる表にするには
Claudeの強みは計算の速さより、「入力の表 → 式 → スクリプト → 結果」を1本のやり取りに残せることです。その場で出てきた数字だけを信じるのではなく、スクリプトを自分の環境で動かし、桁が合うことを確かめてから報告に使います。測定モデルに非線形性が強く出る場合は、一次近似の式(10)では足りず、GUMも高次項を加えることを述べています。そうした測定は、不確かさの専門家のレビューを前提に、Claudeは下書きと検算の補助として使うのが無理のない使い方です。