業務用スクリプトの依頼文に入力・出力・エラー処理のルールを入れる
「これを自動化して」を、実行可能な task description に変えます。sensitive data を含まない合成 sample と、手作業で確認した expected result を添えて、team ごとの work logs を集計する script request を完成させます。
AIが表やグラフを自然に説明していても、合計、割合、平均、増減率が間違っていることがあります。このガイドでは小さな合成売上データを使い、AIの各数値主張を再計算して確認します。
この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English
対象読者AIチャットアシスタントで表、グラフ、レポート、表計算データを要約し、そこに含まれる数値主張を検証したい人向けです。
グラフの説明がもっともらしく見えても、一部の数値が間違っている場合があります。特に、合計、平均、全体に占める割合、絶対差、増減率、「最大の増加」といった複数の計算が一つの回答に含まれると確認が必要です。実用的な方法は、AIの回答に出てくる各数値を独立した主張として扱い、元データからもう一度計算することです。
最終的な結論だけを確認してはいけません。たとえば「Q4が最も高く、年間売上の32.6%を占め、Q1から50%増加した」という文には複数の独立した主張があります。順位、構成比、増加率をそれぞれ別々に確認する必要があります。
この例は合成データです。四半期ごとの売上表に4つの値があるとします。例を小さくすることで、コードに頼る前にすべての結果を手計算で確認できます。
| 四半期 | 売上 |
|---|---|
| Q1 | 100 |
| Q2 | 120 |
| Q3 | 120 |
| Q4 | 150 |
4つの値から、年間合計は100 + 120 + 120 + 150 = 490です。平均は490 / 4 = 122.5です。Q4の構成比は150 / 490 × 100 = 約30.61%です。Q1からQ4までの差は150 - 100 = 50で、増加率は50 / 100 × 100 = 50%です。
曖昧な解釈だけを求めるのではなく、計算結果を明示するようAIに依頼します。たとえば「この四半期売上表を要約してください。合計、平均、年間合計に対するQ4の構成比、Q1からQ4までの増減率、最大の前四半期比増加を示し、それぞれの主張に使った数値も示してください」と依頼できます。
典型的なAI回答は次のようなものです。「年間売上は490で、四半期平均は120です。Q4は年間売上の32.6%を占めました。Q1からQ4まで売上は50%増加しました。最大の前四半期比増加はQ3からQ4で、30、または25%の増加です。」
この回答には、意図的に正しい主張と誤った主張を混ぜています。合計490は正しい値です。平均120は誤りで、正しくは122.5です。Q4の構成比32.6%も誤りで、実際は約30.61%です。Q1からQ4までの50%増加は正しく、Q3からQ4までの増加量30と増加率25%も正しい値です。
次のスクリプトは同じ合成データを保存し、必要な指標を再計算して、例として示したAI回答の数値主張と比較します。Python標準ライブラリだけを使用します。結果はoutputsフォルダ内のレポートに保存し、同じファイルがすでに存在する場合は上書きせず停止します。
from pathlib import Path
sales = {
"Q1": 100,
"Q2": 120,
"Q3": 120,
"Q4": 150,
}
ai_claims = {
"annual_total": 490,
"quarterly_average": 120,
"q4_share_percent": 32.6,
"q1_to_q4_change_percent": 50.0,
"largest_qoq_absolute_change": 30,
"largest_qoq_percent_change": 25.0,
}
values = list(sales.values())
quarters = list(sales.keys())
total = sum(values)
average = total / len(values)
q4_share = sales["Q4"] / total * 100
q1_to_q4_change = (sales["Q4"] - sales["Q1"]) / sales["Q1"] * 100
qoq_changes = []
for previous, current in zip(quarters, quarters[1:]):
old_value = sales[previous]
new_value = sales[current]
absolute_change = new_value - old_value
percent_change = absolute_change / old_value * 100
qoq_changes.append(
(previous, current, absolute_change, percent_change)
)
largest_qoq = max(qoq_changes, key=lambda item: item[2])
recomputed = {
"annual_total": total,
"quarterly_average": average,
"q4_share_percent": q4_share,
"q1_to_q4_change_percent": q1_to_q4_change,
"largest_qoq_absolute_change": largest_qoq[2],
"largest_qoq_percent_change": largest_qoq[3],
}
def close_enough(claim, actual, tolerance=0.05):
return abs(claim - actual) <= tolerance
lines = []
for name, claim in ai_claims.items():
actual = recomputed[name]
status = "PASS" if close_enough(claim, actual) else "FAIL"
lines.append(
f"{status}: {name}: AI={claim}, recomputed={actual:.2f}"
)
lines.append(
"Largest QoQ interval: "
f"{largest_qoq[0]} to {largest_qoq[1]}"
)
output_dir = Path("outputs")
output_dir.mkdir(exist_ok=True)
output_file = output_dir / "claims_check.txt"
if output_file.exists():
raise SystemExit(f"Stop: {output_file} already exists.")
output_file.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Wrote {output_file}")
この例では、合計、Q1からQ4までの増減率、最大の前四半期比絶対増加量、最大の前四半期比増加率はPASSになるはずです。平均とQ4の構成比はFAILになるはずです。表示された割合が丸められている場合に備えて許容誤差を使えますが、明らかな差を単なる丸め誤差として扱ってはいけません。
| 主張 | AIの値 | 再計算した値 | 結果 |
|---|---|---|---|
| 年間合計 | 490 | 490 | PASS |
| 四半期平均 | 120 | 122.5 | FAIL |
| Q4の構成比 | 32.6% | 30.61% | FAIL |
| Q1からQ4の変化 | 50% | 50% | PASS |
| 最大の前四半期比絶対増加 | 30 | 30 | PASS |
| 最大の前四半期比増加率 | 25% | 25% | PASS |
数値だけでなく、その数値を説明する表現も確認します。「25%増加した」と「25%になった」は意味が異なり、増減率とパーセントポイントの変化も別の概念です。計算結果が正しくても、分母、比較期間、単位が間違っていれば文章全体は誤りになります。
よくあるミスは、AIの回答がもっともらしいかだけを確認し、実際の計算を再現しないことです。また、代表的な数値だけを確認し、その周囲にある割合や増減率を検証しないこともあります。派生指標は、加重平均かどうか、欠損期間を除外するか、直前の期間と比較するか最初の期間と比較するかといった暗黙の条件でも変わります。
このPythonスクリプトは明示的に定義した計算だけを検証し、元の業務データそのものの意味や正しさを検証するものではありません。元の表が正確か、グラフからデータが欠落していないか、選択した指標が適切かは判断できません。これらは元資料と分析の文脈を別途確認する必要があります。
より大きな表でも原則は同じです。AIの各文章を検証可能な計算に変換し、元データから再計算し、適切な丸め許容範囲で結果を比較し、不一致があれば公開や共有の前に原因を確認します。
2026-09-21 · hand-checked example · Python 3.12
説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。