透かし検出率約95%を1万件へ換算:母集団率1・10・50%の算術比較

「感度95%、偽陽性率1%」だけを見ると、検出結果をほぼ確定判定に使えそうに見えます。しかし、透かし付き文章が全体の1%しかない1万件へ当てはめると、真陽性95件に対して偽陽性99件です。検出候補194件のうち真陽性は約49.0%という算術になります。
この記事で確かめたのは、OpenAIの検出器そのものではありません。OpenAIが公表した約95%の感度と目標FPR 1%を仮定値として固定し、母集団率だけを1%、10%、50%へ変えた混同行列です。個別文書の著者、正確性、所有権、開示義務を判定するものではありません。
公式評価と、今回の算術を分ける
OpenAIの2026年10月5日発表は、textGrainを単語選択へ統計的信号を加える技術として説明しています。心理学のような内容では、目標FPR 1%のとき、400 tokenの文章を約95%、200 tokenの文章を約80%検出したという提供元評価です。一方、数学のように語の選択余地が小さい内容では検出率が大幅に低いとも説明されています。
同日付の技術報告は、生成時の秘密鍵に基づく乱数とtokenの依存を検定する仕組み、検出統計量、成立に必要な独立性の仮定を示しています。本稿はそのアルゴリズムを実装・再現したものではありません。
両資料は2026年10月6日に開き直しました。発表では、APIは一部モデルで世界の顧客がopt-inでき、既定はoff、EUの対象ChatGPT/Codex出力は今後数週間で段階導入、テキスト検出器への初期アクセスは承認済みの研究者・専門組織へ限定するとされています。料金の記載は確認できませんでした。今回はAPI、検出器、申請、追加契約を使っておらず、費用は0円です。
検証条件:1条件を1万件に固定した
実行日は2026年10月6日(日本時間)、環境はWindows、PowerShell、Python 3.14.2です。追加パッケージ、ネットワーク通信、乱数、個人情報は使っていません。
| 項目 | 400 token比較 | 200 token比較 | 出所・扱い |
|---|---|---|---|
| 1条件の総数 | 10,000 | 10,000 | 当社が固定 |
| 母集団率 | 1% / 10% / 50% | 1% / 10% / 50% | 当社が比較用に設定 |
| 感度 | 95% | 80% | OpenAIの「約」を計算用に固定 |
| 偽陽性率 | 1% | 1% | OpenAIの目標値を仮定 |
| 出力 | TP / FN / FP / TN | TP / FN / FP / TN | 当社の決定的な算術 |
母集団率は実サイトで測った値ではありません。未知の母集団へ検出器をかける前に、仮定が変わると内訳がどれだけ変わるかを見る3つの例です。
感度95%でも、母集団率1%では偽陽性が真陽性を上回る
真陽性(TP)、見逃し(FN)、偽陽性(FP)、真陰性(TN)を次の式で求めました。
TP = 総数 × 母集団率 × 感度
FN = 総数 × 母集団率 × (1 - 感度)
FP = 総数 × (1 - 母集団率) × 偽陽性率
TN = 総数 × (1 - 母集団率) × (1 - 偽陽性率)
400 token相当の感度を95%、FPRを1%に固定した結果です。
| 母集団率 | TP | FN | FP | TN | 検出候補 | 陽性的中率 |
|---|---|---|---|---|---|---|
| 1% | 95 | 5 | 99 | 9,801 | 194 | 49.0% |
| 10% | 950 | 50 | 90 | 8,910 | 1,040 | 91.3% |
| 50% | 4,750 | 250 | 50 | 4,950 | 4,800 | 99.0% |
母集団率1%では、透かしのない9,900件の1%にあたる99件が偽陽性になります。透かしあり100件の95件を検出しても、検出候補内では偽陽性が1件多い結果です。母集団率10%なら偽陽性90件、50%なら50件へ減り、同じ感度・FPRでも陽性的中率は大きく変わります。
図は計算済みJSONを読みやすく再構成したもので、検出器の画面や実測ログではありません。表紙も母集団と判定の関係を表す概念画像で、検証証拠には数えていません。
200 token相当は感度80%として別に比べる
200 tokenの提供元評価は約80%なので、95%の表へ混ぜず、感度だけ80%へ変えました。
| 母集団率 | TP | FN | FP | TN | 検出候補 | 陽性的中率 |
|---|---|---|---|---|---|---|
| 1% | 80 | 20 | 99 | 9,801 | 179 | 44.7% |
| 10% | 800 | 200 | 90 | 8,910 | 890 | 89.9% |
| 50% | 4,000 | 1,000 | 50 | 4,950 | 4,050 | 98.8% |
短い文章の比較では見逃しが増えます。母集団率1%の例では、検出候補179件のうち真陽性80件、偽陽性99件です。ただし、token数だけで実際の感度が決まるわけではなく、内容の選択自由度や対象モデルなども異なり得ます。この80%をあらゆる200 token文へ一般化はできません。
編集0・10・25%は、透かしあり100件の独立表にした
同じ発表には別の編集耐性評価があります。400 tokenの英語ELI5回答で、同義語置換なしの約92%から、10%置換で66%、25%置換で17%へ低下したという値です。これは先ほどの「400 tokenで約95%」と評価の切り口が異なるため、95%から連続する一つの曲線として扱いません。
| 同義語置換 | 透かしあり100件中の概算検出 | 概算見逃し |
|---|---|---|
| 0% | 約92 | 約8 |
| 10% | 約66 | 約34 |
| 25% | 約17 | 約83 |
この100件は最初からすべてwatermarkedと置いた分母です。透かしなし文書がないため、FPR、母集団率、陽性的中率を計算できません。「25%編集ならAIである確率17%」という読み替えもできません。
標準Pythonで6条件を追試する
計算器・16テスト・固定results.json・READMEをまとめたZIPを展開し、そのフォルダで実行します。
python -m unittest discover -s . -p 'test_*.py' -v
python .\watermark_base_rate.py --output .\results.json
計算は浮動小数点数ではなく標準ライブラリのDecimalを使います。4セルが小数になる場合は、各値を切り捨て、残りを小数部分の大きい順へ1件ずつ配る最大剰余法です。同率ならTP、FN、FP、TNの順にします。これにより整数4セルの合計を必ず1万件に保ちます。今回の公開6条件は割り切れるため、丸め前から整数です。
16テストは、率の0・1境界、範囲外・NaN・無限大・booleanの拒否、総数の検証、最大剰余と同率時の順序、既知の6条件、合計1万件、陽性0件でのゼロ除算回避、編集表の分離、UTF-8 JSON保存を確認しました。元フォルダで3回連続して各16件PASSし、配布ZIPも別フォルダへ展開して同じ16件とJSON一致を追試しています。
限界:この計算で個別文書を裁かない
最大の限界は、入力した感度・FPRが当社の実測ではないことです。OpenAIの特定評価を、母集団率の効果を見るための仮定へ置いただけです。日本語、翻訳、長さ、分野、編集方法、対象モデル、生成時期が変われば同じ性能になる保証はありません。検出器へアクセスしていないため、手元の文章に透かしが入るか、検出結果がどう表示されるかも未検証です。
また、陽性的中率は「この仮定の母集団で陽性になったうち真陽性の割合」です。個別の人がAIを使った確率ではありません。OpenAIの発表も、透かしは人の寄与、所有権、責任、利用者、内容の正確性を示さず、未検出も人間執筆の証明にならないと明記しています。
実務への影響:公開・提出前に確認する順序
検出スコアを使う場合は、まず「何を陽性とするか」「対象内で透かし付き文章がどの程度あり得るか」「誤検出と見逃しを何件まで許容できるか」を件数で書きます。次に、短文、編集済み文、別言語、対象外モデルを同じ性能だと仮定していないか確認します。最後に、検出結果だけで削除・不合格・著者断定を自動実行せず、生成履歴、編集履歴、出典、本人確認など別の証拠へ戻します。
AI要約を一次資料へ戻す6項目の照合は主張の出典条件を確認する手順、日次ニュースの48時間判定は候補日時とschemaを仕分ける手順、HTMLとJSONの整合検査は二つの保存形式の差分を止める手順です。本稿はそれらと異なり、公開済みの感度・FPRを母集団率別の件数へ翻訳し、検出結果の読みすぎを防ぐことに絞っています。
公開後に提供範囲、検出器アクセス、評価値が更新された場合は、公式発表の値と当社の計算結果を同時に見直します。計算器のPASSは式と固定入力の再現性を示すだけで、OpenAIの性能や個別文書の判定を保証しません。