📚 関連グループ教材・さらに学ぶには
このサイト内
論文一覧に戻る — 偽陰性 を実際に使った再現論文をハンズオン形式で読む
関連用語ページ — このページの「🔗 関連用語」から派生
用語集トップ — 全用語を一覧で確認
概念マップ — 用語間の関係を視覚化
推奨書籍・教材
『統計学入門』 (東京大学出版会)― 日本語統計入門の定番。 評価指標 の基礎が押さえられる。
『Pythonによるデータ分析入門』 (Wes McKinney、 O'Reilly)― pandas 作者による実装ガイド。
『機械学習のエッセンス』 (加藤公一、 SBクリエイティブ)― ML 基礎を Python で実装しながら学ぶ。
『因果推論の科学』 (Judea Pearl、 文藝春秋)― 相関と因果の違いを徹底解説。
オンライン教材
scikit-learn 公式ドキュメント — 機械学習の標準実装。
StatQuest (YouTube) — 統計概念を直感的に解説。
Coursera / edX — 体系的なオンライン講座。
SSDSE 公式 — 本サイトで使う公的データの提供元。
困ったときは
データの可視化 (散布図・ヒストグラム・箱ひげ図) で全体像を把握
サンプルサイズ・欠損・外れ値を確認
適用条件 (前提) が満たされているか診断
類似研究での標準的な手法を確認
結果を複数手法でクロスチェック
📜 歴史的背景と学習の位置づけ
偽陰性 は 評価指標 の領域で発展してきた概念です。 ここでは大まかな歴史的背景と、 なぜこの概念が必要になったのかを整理します。 用語が「降ってきた」のではなく、 現実の問題を解くために順番に 編み出されたものだと知ると、 学習の納得感が違います。
なぜこの概念が生まれたか
データ分析や AI を実務で使うと、 「単純な数式」「直感だけのモデル」では太刀打ちできない場面が必ず出てきます。 偽陰性 は、 そうした実務的な課題を整理し、 共通言語として定式化したものです。 そのため、 教科書だけで完結する話ではなく、 使う場面 と使わない場面 を見極めることが何より重要になります。
学習の位置づけ
初学者: まず「30秒で分かる結論」「直感で掴む」だけ読めば、 論文に出てきたときに「あ、 あれね」と分かります。
中級者: 数式と Python 実装をセットで覚え、 自分の手元データに適用できる状態を目指します。
上級者: 落とし穴と派生手法を理解し、 場面に応じた使い分け・改良ができることが目標です。
🔍 近接概念との比較
同じ 評価指標 カテゴリにある近接概念と、 偽陰性 はどう違うのか? 混同しがちなポイントを整理します。
観点 偽陰性 近接概念
目的 主に 偽陰性 固有の課題 (本文参照) 近接概念は関連はするが目的が異なる (本文の「関連手法・派生」参照)
前提条件 本文「前提・落とし穴」参照 手法ごとに前提が異なるため要確認
出力 数値 / 確率 / 集合など (上記公式参照) 同じ入力に異なる粒度の出力を返すことが多い
適用場面 本文「いつ使うか」参照 同じ問題でも視点が異なる手法を組み合わせるのが定石
計算コスト 用途範囲に応じて妥当な水準 精度と引き換えにコストが増える派生がある
📌 使い分けの原則: まずは本ページの定義を押さえ、 次に「🌐 関連手法・派生」「🔗 関連用語」のリンクから近接概念を確認し、 自分の問題に対してどれを使うか意識的に 選ぶことを習慣にしてください。
❓ よくある質問 (FAQ)
本サイトの教材を読み進めるなかで、 受講者からよく質問される項目をまとめました。
Q1. 偽陰性 を覚えるべき優先度は?
A. 論文を読んだり、 業務で類似の分析に出会うときに必ず登場します。 「30秒で分かる結論」までは押さえておけば、 都度本ページを参照しながら作業すれば十分です。 全暗記は不要、 引き出しに入れておく 感覚で OK。
Q2. 数式が苦手だが大丈夫?
A. 大丈夫。 まず「直感で掴む」「実値で計算してみる」を読み、 そのあと「定義・数式」に戻ると、 記号の意味が腑に落ちます。 数式は 後追い で構いません。 重要なのは、 結果の数字を見たときに、 何を意味するか言葉で説明できる ことです。
Q3. Python が動かないときは?
A. まず pandas や scikit-learn が pip install されているか確認。 SSDSE 系の CSV は encoding='utf-8' または 'cp932' で読めることが多く、 skiprows=1 でヘッダー行を飛ばすケースが大半。 列名が違うときは df.columns で確認して書き換えてください。
Q4. もっと深く学びたい場合は?
A. ページ末尾の「📚 関連グループ教材・さらに学ぶには」に紹介した書籍・オンライン教材へ。 加えて、 「🔗 関連用語」 から派生概念を順に学ぶと、 体系として理解が深まります。
Q5. 論文で 偽陰性 をどう報告すべき?
A. 「定義 → 使った理由 → 数値結果 → 解釈」の順で書くと読みやすくなります。 結果は 数値だけでなく不確実性 (CI・SE) も併記し、 限界 (適用範囲外の主張は避ける) も明示するのが現代的な書き方です。
✅ 実務チェックリスト
分析作業のなかで 偽陰性 を使うときは、 以下のチェックリストを上から順に確認してください。 抜けがあると後工程で痛い目に遭います。
① 分析設計フェーズ
□ 目的を 1 文で書ける か? (「何を、 どうしたいか」)
□ 偽陰性 がその目的に 本当に 合っているか?
□ 必要なデータの種類・量・期間を見積もったか?
□ 結果をどう報告・意思決定に使うか、 事前に決めたか?
② データ準備フェーズ
□ データの出典・取得日 を記録したか? (再現性)
□ 列の尺度 (名義 / 順序 / 間隔 / 比例) を確認したか?
□ 欠損 ・外れ値 の方針を決めたか?
□ サンプルサイズ は手法の最低要件を満たしているか?
③ 分析実行フェーズ
□ 前提条件 を満たしているか診断したか?
□ 結果は複数手法でクロスチェック したか?
□ コードは Git で管理 しているか?
□ 結果が 外れ値 1 件で激変 しないか確認したか?
④ 解釈・報告フェーズ
□ 数値 と不確実性 (CI / SE) を併記したか?
□ 「相関 ≠ 因果 」の境界を踏み越えていないか?
□ 適用範囲外 への拡張主張を避けたか?
□ 限界・前提 を明示したか?
📝 レポート・論文での書き方
論文・社内レポート・ステークホルダー報告書で 偽陰性 を扱うとき、 含めるべき項目とテンプレートをまとめました。
必須記載項目
項目 具体例
データ出典 独立行政法人統計センター SSDSE-B-2026 を加工
サンプルサイズ n=47 (47都道府県、 2023年データ)
使用変数 目的変数:医療費 / 説明変数:高齢化率、 人口密度
分析手法 偽陰性を適用 (scikit-learn 1.4 / Python 3.11)
結果指標 数値 + 95% 信頼区間 + p 値
解釈 何を意味するか/意味しないか
限界 サンプル特性、 適用範囲外への拡張不可
🎓 深掘り:シナリオで身につける
ここまで定義・計算・落とし穴を見てきました。 ここでは 偽陰性 をより深く理解するための思考フレーム と実務シナリオ を、 ストーリー形式で整理します。 用語そのものより、 「どんなときに思い出して、 どう使うか 」を体に染み込ませることが、 教材を読む真の目的です。
シナリオ A:研究室での卒論データ分析
「卒業研究で 47 都道府県のデータを分析したい」。 そんなとき 偽陰性 はどう登場するでしょうか。 担当の先生から「データを見たうえで、 関連する手法を 1 つ選んで適用してきて」と言われたとします。 まずデータの性質 (量・尺度・期間) を確認し、 「偽陰性 がこの問題に合っているか」を本ページの 30 秒結論で照らし合わせます。 もし合っていれば、 落とし穴セクションで「やってはいけないこと」をチェック、 計算例を真似して結果を出し、 解釈を言葉でまとめる ── 卒論の 1 セクション分の作業がここで完結します。
シナリオ B:データサイエンスのインターン
企業のインターンで「過去 3 年の顧客データから来期の予測モデルを作って」と任された。 上司は 偽陰性 を当然知っている前提で話します。 言葉が通じないと議論についていけません。 そこで本ページの「定義・数式」「Python 実装」を 30 分で 押さえ、 上司の使う用語に追随する ── ジャストインタイム学習の典型シーンです。 後日、 自分でも実装した結果を上司に説明するとき、 「レポート・論文での書き方」テンプレートに沿って書けば、 過不足なく伝えられます。
シナリオ C:論文を読んでつまずいたとき
本サイトのトップから論文一覧をたどり、 ある論文を読んでいたら 偽陰性 が出てきた。 「これ、 なんだっけ?」と思った瞬間、 本ページに飛んでくる ── これが ジャストインタイム型教材 の使い方です。 30 秒結論を読み、 「あ、 そういう意味か」と納得したら、 元の論文に戻ります。 必要に応じて落とし穴セクションだけ読んで、 著者の解釈が妥当か批判的に確認することも可能です。
よくある誤解 3 連続
誤解 1:「偽陰性 は常に最強の選択肢」
どんな手法にも適用範囲があります。 「FN を「精度」で見逃す」のように、 前提を踏まえずに使うと結論を誤ります。 本ページの「落とし穴」「前提条件」を毎回必ず確認する習慣を。
誤解 2:「数式が分からないと使えない」
逆です。 まず Python 実装で結果を出してから、 数式に戻ると「なるほど、 ここが分子で、 ここが分母か」と腑に落ちます。 数式は 結果の意味を説明する補助 として使ってください。
誤解 3:「1 度読めば全部分かる」
分かりません (と断言します)。 概念は使ってこそ 身に付きます。 卒論や業務で実際にデータに当てはめ、 結果を解釈し、 説明する経験を 3 回くらい繰り返したら、 ようやく自分のものになります。 本ページは その傍らに置いておく辞書 として使ってください。
意思決定フレーム:使う?使わない?
状況 判断
前提条件が満たされている ✅ 適用 OK。 落とし穴に注意しつつ進める。
サンプル数が不足 ⚠️ 慎重に。 信頼区間が広くなり結論が出ない可能性。
前提が破れている (例:独立性なし) ❌ 別手法を検討。 関連手法・派生セクションを参照。
因果を主張したい ❌ 偽陰性 単独では因果は言えない。 RCT/操作変数等を併用。
解釈が直感に反する 🔍 まず再現性確認 → 可視化 → 単純モデルとのクロスチェック。
🧪 偽陰性をデータで掴む — 拡張ケーススタディ
「偽陰性 (False Negative; FN)」 とは、 本当は陽性 なのに モデルが 「陰性」 と判定した誤りである。 ここまでの定義と式は理解できても、 「実データに当てはめたときに FN が何件出るのか」 「FN を減らそうとすると別の何が悪化するのか」 を体感していないと、 現場で起きる議論 (とくに医療・与信・不正検知) で意思決定の根拠を提示できない。 本セクションでは、 公開データである SSDSE-B-2026 (都道府県別の社会指標) をベースに、 偽陰性が 「人数」 「金額」 「リスク」 の単位でどのような意味を持つかを具体的に追体験する。
教材設計のポイントとして、 合成データを使わない 。 都道府県別人口・高齢化率・医療費等の SSDSE-B 列を使って 「健康診断で陽性 (要精密検査) を見逃した世帯数」 という仮想シナリオを構築し、 そこに分類器を当てる。 これにより 「FN=12 だった」 という抽象的な数値が 「12 県分の住民、 概ね 30 万世帯が見逃された」 と読み替えられるようになり、 ビジネス側との会話の解像度が変わる。
🖼 図 1: 真陽性率と偽陰性率の散布図 (基本パターン)
下図は、 都道府県別の検診データ (SSDSE-B-2026) に対して 47 種類の閾値で分類器を切り、 各閾値での 真陽性率 (TPR) と 偽陰性率 (FNR) を散布図にしたものである。 真陽性率と偽陰性率は TPR + FNR = 1 の関係にあり、 散布図は理論的には直線になるが、 サンプリングのばらつきで点が縦に揺れる。 これを実データで確認しておくことが、 後の閾値設計のときに 「FN を減らせば必ず FP が増える」 という感覚を持てるかどうかの分かれ目になる。
図 1. 都道府県別データに 47 閾値を当てたときの TPR–FNR 散布。 直線関係に近いことから、 FN を 1 件減らすには TN 候補から 1 件を 「陽性予測」 に振り替える必要があると分かる。
🖼 図 2: 陰性予測スコアの分布 (ヒストグラム)
下図は、 モデルが出力したスコア (0〜1) を 「実際は陽性」 「実際は陰性」 の 2 群に分けて重ねたヒストグラムである。 偽陰性は 「実際は陽性 (赤)」 のうちスコアが閾値より低い部分 として目に見える。 多くの教科書ではこのヒストグラムを描かずに 「FN を減らしましょう」 と書くが、 実務では どこを切ると赤の山がどれだけ閾値より左に残るか を見ずに閾値は決められない。 SSDSE-B-2026 を素材にすれば、 都道府県という分かりやすい単位で同じ分布を描ける。
図 2. スコアヒストグラム。 赤 (実際は陽性) の山が閾値より左に残った面積が、 そのまま偽陰性件数に相当する。
🖼 図 3: 群別 FN 件数の箱ひげ (地域別ばらつき)
同じモデル・同じ閾値でも、 適用先の地域 (北日本/東日本/西日本/南日本) によって FN 件数のばらつきが変わる。 下図は、 都道府県を 4 地域に分け、 ブートストラップ 200 回で算出した FN 件数の箱ひげ図である。 「平均 FN=15 件」 という単一値だけを見るのは危険 で、 地域ごとに中央値・四分位範囲・外れ値が異なる。 こうしたばらつきを示す図を 1 枚でも入れておくことで、 「他の地域に展開したらどうなるか」 「来年も同じ FN で済むか」 という議論ができるようになる。
図 3. 地域別 FN 件数の箱ひげ。 中央値だけでなく IQR と外れ値も見ると、 地域差を吸収する閾値設計が必要だと分かる。
📊 表 1: FN を 「人数」 「金額」 「リスク」 に換算する
FN という数字だけでは、 経営層は意思決定できない。 同じ FN=10 件でも、 ドメインごとに 「1 件あたりのコスト」 が桁違いに違うため、 換算しなければならない。 下表は、 5 つのドメインで FN 1 件あたりの平均影響と、 FN を 1 件減らすために許容できる追加コストの目安をまとめたものである (一般公開資料からの典型値)。
ドメイン FN の典型例 1 件あたり影響 FN を 1 件減らす許容コスト
健康診断 (がん) 早期がんを見逃す 治療遅延・予後悪化・数百万円 数十万円 (FP 増を厭わない)
与信・融資 不正申込を見逃す 貸倒れ平均 80 万円 8 万円程度の追加審査コスト
スパムフィルタ スパムを受信箱に通過 ユーザー時間 1-2 分・数十円 数円〜数十円
設備故障予知 故障の前兆を見逃す ライン停止・数百万円 数十万円の点検増
採用書類選考 合格候補を不合格に 機会損失 (定量化困難) 1 次面接 1 件 5,000 円程度
🐍 Python 実装 (拡張) — 閾値スイープで FN 推移を可視化
このコードでやること : SSDSE-B-2026 から 「高齢化率 (A1303/A1101×100) が高い県を要支援県として陽性ラベル」 に設定し、 「1 世帯あたり保健医療費 (L322106)」 を特徴量に持つロジスティック回帰を学習する。 そのあと閾値を 0.05 刻みで 0.05〜0.95 まで動かし、 各閾値での FN・FP・TP・TN を表にする。 これにより 「閾値を下げると FN がどれだけ減るか / 引き換えに FP がいくつ増えるか」 を一覧できる。
📥 入力データ例 (SSDSE-B-2026 抜粋, df.head()):
Code 都道府県名 高齢化率(%) 保健医療費(円) 人口(千人)
R01000 北海道 33.0 15491 5092
R02000 青森県 35.2 12072 1184
R03000 岩手県 35.0 14615 1163
R04000 宮城県 29.2 16836 2264
R05000 秋田県 39.1 12305 914
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . reset_index ( drop = True ) # 2023 年の 47 都道府県
df [ 'aging' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100 # 高齢化率(%) = 65 歳以上人口 / 総人口
df = df . rename ( columns = { 'A1101' : 'pop' , 'L322106' : 'medical' })
df [ 'y' ] = ( df [ 'aging' ] >= 32.0 ) . astype ( int ) # 高齢化率 32% 以上を陽性
model = LogisticRegression ()
model . fit ( df [[ 'medical' ]], df [ 'y' ])
prob = model . predict_proba ( df [[ 'medical' ]])[:, 1 ]
rows = []
for thr in [ 0.05 * i for i in range ( 1 , 20 )]:
pred = ( prob >= thr ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( df [ 'y' ], pred ) . ravel ()
rows . append ({ '閾値' : round ( thr , 2 ), 'TP' : tp , 'FN' : fn , 'FP' : fp , 'TN' : tn })
print ( pd . DataFrame ( rows ) . to_string ( index = False ))
📤 実行例 (出力):
閾値 TP FN FP TN
0.05 23 0 24 0
0.10 23 0 23 1
0.15 23 0 23 1
0.20 23 0 20 4
0.25 22 1 20 4
0.30 21 2 18 6
0.35 21 2 15 9
0.40 19 4 14 10
0.45 16 7 9 15
0.50 14 9 8 16
0.55 13 10 6 18
0.60 12 11 5 19
0.65 9 14 4 20
0.70 5 18 2 22
0.75 2 21 0 24
0.80 0 23 0 24
0.85 0 23 0 24
0.90 0 23 0 24
0.95 0 23 0 24
💬 結果の読み方 : 閾値 0.50 で FN=9 件 (9 県の高齢化県を見逃し), FP=8 件。 閾値を 0.40 に下げると FN は 4 に減るが FP が 14 に増える。 健康診断であれば FN を絶対に避けたいので閾値 0.20 前後を選ぶ (FN=0, FP=20)。 スパム判定なら逆に FP を避けたいので 0.60 以上を選ぶ。 このトレードオフ表を 1 枚出せれば、 業務側との合意形成は格段にスムーズになる 。 (保健医療費 L322106 は高齢化率の弱い予測子なので、 医療の教科書例より FN・FP がやや多めに出る点に注意。)
📝 より正確な分析 :SSDSE-B-2026 には「高齢化率」や「1 人あたり医療費」の専用列が無いため、 高齢化率は A1303(65 歳以上人口) ÷ A1101(総人口) × 100 で算出し、 医療費特徴量には実在する L322106(保健医療費・二人以上世帯) を用いています (旧版が参照していた A2301・I5101 は SSDSE-B に存在しない列でした)。 あわせて年次フィルタ (2023 年) と skiprows=[1] を補い、 47 都道府県のみで再計算しています。 本セクションの表・出力・地域別集計は、 この実データ実行結果へ差し替え済みです。
🐍 Python 実装 (拡張 2) — コスト最小化で最適閾値を選ぶ
このコードでやること : FN 1 件あたり 50 万円 (見逃し損)、 FP 1 件あたり 3 万円 (追加検査コスト) という仮定で、 閾値ごとの 「総コスト」 を計算し、 最小となる閾値を選ぶ。 上で作った表をそのまま流用する。 これは医療・与信・故障予知などで現場が最も知りたい計算である。
📋 コピー cost_fn = 500_000 # FN 1 件あたり 50 万円
cost_fp = 30_000 # FP 1 件あたり 3 万円
result = pd . DataFrame ( rows )
result [ '総コスト(円)' ] = result [ 'FN' ] * cost_fn + result [ 'FP' ] * cost_fp
opt = result . loc [ result [ '総コスト(円)' ] . idxmin ()]
print ( result . to_string ( index = False ))
print ( ' \n 最適閾値 =' , opt [ '閾値' ], ' 総コスト =' , int ( opt [ '総コスト(円)' ]), '円' )
📤 実行例 (抜粋):
閾値 TP FN FP TN 総コスト(円)
0.1 23 0 23 1 690000
0.2 23 0 20 4 600000
0.3 21 2 18 6 1540000
0.4 19 4 14 10 2420000
0.5 14 9 8 16 4740000
最適閾値 = 0.2 総コスト = 600000 円
💬 結果の読み方 : FN コスト 50 万 / FP コスト 3 万の比率なら、 閾値 0.20 が最適 (総コスト 60 万円)。 教科書的な閾値 0.50 だと総コストは 474 万円となり、 約 8 倍。 「とりあえず 0.5」 は経済的に最適でないことが多い という事実を、 数値で示せるようになる。
📊 表 2: 偽陰性が深刻なドメインと、 採るべき対策
ドメイン FN の致命度 第 1 対策 第 2 対策 (補助)
悪性腫瘍スクリーニング ★★★★★ 閾値を大幅に下げる 複数の検査の併用 (アンサンブル)
不正取引検知 ★★★★☆ 陽性データを過剰サンプリング (SMOTE) ルールベースとの併用
設備故障予知 ★★★★☆ 複数センサーの異常を OR で統合 予防保全インターバルの短縮
顔認識 (本人確認) ★★★☆☆ 複数モダリティで再認証 (PIN 追加) 時間窓内の再試行を許可
スパム判定 ★★☆☆☆ ユーザー教育 (グレー判定の UI) フィードバック学習
📊 表 3: 偽陰性を 「測り間違える」 ありがちなパターン
パターン 本来の FN との差 修正方法
学習データに FN がそもそも含まれていない FN を過小評価 (見えない FN) 能動的なラベリング・専門家レビュー
陽性率が極端に低いクラスで Accuracy だけ見る FN の影響が Accuracy に出ない Recall・F1・PR-AUC を必ず併用
時系列ドリフトを無視 時間が経つほど FN が増える 月次で再評価・モデルモニタリング を運用に組み込む
層別評価をしない 特定属性で FN が極端に高くなる 年齢・性別・地域で層別の混同行列を出す
テストデータがリーク FN を過小評価 (現場では激増) 時間スプリット、 ID スプリットの厳格化
🧯 「FN を 0 にすれば良い」 の誤解
医療・与信・故障予知のドメインでは 「FN は何としても 0 にしたい」 という要求が出る。 しかし、 FN を 0 にするには陽性確率がほぼ 0 の事例まで陽性予測しなければならず、 結果として FP が大量発生する 。 たとえば上の SSDSE-B-2026 の例で閾値を 0.05 まで下げると FN は 0 になるが、 FP は 24 件で、 47 県すべてが 「要支援」 と判定されてしまい、 業務上意味を失う。 「FN を 0 にする」 は数学的にはほぼ常に可能だが、 経済的にはほぼ常に不合理 である。 そこで実務では、 ドメインのコスト構造に基づく許容 FN 水準 (たとえば 「年間 5 件まで」) を先に決める Service Level Objective (SLO) のような考え方が採られる。
SLO を決める際は、 (1) 過去の FN がどんな悪影響を起こしたか、 (2) FN を 1 件減らすのに必要な追加コスト、 (3) 同じコストで他の改善 (たとえば検査機の更新) ができないか、 の 3 点を経営側と合意するのがよい。 「データサイエンス側だけで FN 水準を決めない」 のがプロジェクト失敗を防ぐコツである。
✅ FN を扱うときの拡張チェックリスト
FN の単位を 「件」 だけでなく 「人」 「金額」 「リスク」 に換算したか
FN コストと FP コストの比率を経営側と合意したか
閾値スイープ表 (上の Python 例) を 1 枚作って関係者に共有したか
陽性率が低いクラスで Accuracy だけを見ていないか、 Recall / F1 / PR-AUC で併用評価したか
層別 (年齢・性別・地域) の混同行列を出して、 特定セグメントで FN が偏っていないか確認したか
時系列ドリフトを想定し、 月次再評価のワークフローを定義したか
「FN=0」 を要求されたとき、 FP がどれだけ増えるかをコストで示し、 SLO で代替したか
テストデータのリークを確認し、 時間スプリット・ID スプリットを徹底したか
陽性データを過剰サンプリング (SMOTE 等) する場合、 評価指標まで偏らせていないか確認したか
モデル更新時、 旧モデルとの FN 差分 (どの事例で FN が変わったか) を必ずレビューしているか
❓ さらなる FAQ (実務でよく出る質問)
質問 回答
FN と 偽陽性 (FP) は どちらが悪い? ドメイン依存。 健康診断や故障予知では FN が圧倒的に悪い。 顧客への一斉メール送信などでは FP が悪い。 必ずコスト比率で決める。
FN を減らすには SMOTE を使うべき? SMOTE は学習データの陽性数を増やすことで、 モデルが陽性を引っ張りやすくなる効果があるが、 評価データでの FN 改善にならない場合もあるので必ず保留した検証データで確認する。
FN を減らせば必ず Recall が上がる? はい。 Recall = TP / (TP+FN) なので、 FN が減れば Recall は単調に上がる (TP が一定の前提)。 ただし FP も同時に増えがちで Precision が下がる。
PR 曲線と ROC 曲線、 FN 重視ならどちら? 陽性率が低い (不均衡) データで FN を語るなら PR 曲線が有用。 ROC は陽性率が極端に低いと楽観的に見える。
FN を 「人間が再レビュー」 で減らすのは妥当? グレーゾーンの事例 (確率 0.3〜0.7 など) を人間レビューに回す Human-in-the-Loop は実務的に最も費用対効果が高い対策の 1 つ。
アンサンブルすると FN は減る? 複数モデルの OR (どれか 1 つでも陽性なら陽性) は FN を減らすが FP が増える。 AND (全て陽性で陽性) は FP を減らすが FN が増える。
🎭 ストーリー: 健診クリニックでの 1 か月の運用
想定: 健診クリニックが、 受診者の血液検査値からがんスクリーニングモデルを運用している。 1 か月で 1,000 人が受診し、 そのうち本当の陽性 (要精密検査) は 20 人。 モデルは閾値 0.5 で 18 人を陽性と予測。 このうち 15 人が真の陽性、 3 人が FP。 残る 5 人 (真陽性 20 - 真陽性的中 15) が FN 。 つまり 5 人が見逃された。
クリニック側は 「20 人中 15 人を捕まえたから Recall=75%。 まあまあでは?」 と考えがちだが、 見逃した 5 人にとっては 致命的 。 その後の経営会議では、 「閾値を 0.3 に下げて FN を 1 人に減らす代わり、 FP を 12 人に増やす」 という選択肢が出る。 FP=12 人の精密検査追加コスト (1 人 1.5 万円 × 12 = 18 万円) と、 FN=4 人減らせる便益 (見逃しによる治療遅延コスト 1 人 200 万円 × 4 = 800 万円) を比較すると、 FN を減らす方が圧倒的に得である。 こうした計算を即座にできるようになるのが、 本ページのゴールである。
📊 表 4: FN を増やす施策と FN を減らす施策 (両面整理)
実務では 「FN を減らしたい」 ばかりが議論されがちだが、 ドメインによっては FN を 「あえて増やす」 ことが正解になる。 たとえば、 軽症で偽陽性を増やしたくない場面 (在宅遠隔モニタリングのアラート) では、 閾値を上げて FN をある程度許容することがある。 下表は両面を整理したもので、 提案を書くときの言語の引き出しとして役立つ。
アクション FN への影響 副作用 採用が妥当なドメイン
閾値を下げる 減 FP が増える、 業務負荷増 医療・故障予知
SMOTE / 過剰サンプリング 減 学習データ偏向リスク 不正検知 (陽性 1% 未満)
コスト感度学習 減 FP コストとの均衡が必要 医療・与信
アンサンブル OR 結合 減 FP が増える、 計算コスト セキュリティ・故障予知
人間レビュー (HITL) 減 人件費、 ボトルネック 採用・与信・医療
閾値を上げる 増 陽性を捕捉できない スパム・アラート抑制
アンサンブル AND 結合 増 陽性検出が落ちる 本人確認・誤検出回避
🐍 Python 実装 (拡張 3) — 層別 (地域別) 混同行列で FN の偏りを可視化
このコードでやること : 同じモデル・同じ閾値でも、 地域 (北日本/東日本/西日本/南日本) によって FN がどう違うかを確認する。 全体の平均だけ見ていると、 特定地域で FN が極端に多い 「公平性問題」 を見逃しがち。 層別評価は 公平性 の議論にも直結する。
📥 入力データ例 (df.head(), 地域コード付与後):
Prefecture region aging medical y
0 北海道 北日本 33.0 15491 1
1 青森県 北日本 35.2 12072 1
2 岩手県 北日本 35.0 14615 1
3 宮城県 東日本 29.2 16836 0
4 秋田県 北日本 39.1 12305 1
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 region_map = {
'北海道' : '北日本' , '青森県' : '北日本' , '岩手県' : '北日本' , '秋田県' : '北日本' ,
'山形県' : '北日本' , '宮城県' : '東日本' , '福島県' : '東日本' , '茨城県' : '東日本' ,
'栃木県' : '東日本' , '群馬県' : '東日本' , '埼玉県' : '東日本' , '千葉県' : '東日本' ,
'東京都' : '東日本' , '神奈川県' : '東日本' , '新潟県' : '東日本' , '富山県' : '東日本' ,
'石川県' : '西日本' , '福井県' : '西日本' , '山梨県' : '西日本' , '長野県' : '西日本' ,
'岐阜県' : '西日本' , '静岡県' : '西日本' , '愛知県' : '西日本' , '三重県' : '西日本' ,
'滋賀県' : '西日本' , '京都府' : '西日本' , '大阪府' : '西日本' , '兵庫県' : '西日本' ,
'奈良県' : '西日本' , '和歌山県' : '西日本' , '鳥取県' : '西日本' , '島根県' : '西日本' ,
'岡山県' : '西日本' , '広島県' : '西日本' , '山口県' : '西日本' ,
'徳島県' : '南日本' , '香川県' : '南日本' , '愛媛県' : '南日本' , '高知県' : '南日本' ,
'福岡県' : '南日本' , '佐賀県' : '南日本' , '長崎県' : '南日本' , '熊本県' : '南日本' ,
'大分県' : '南日本' , '宮崎県' : '南日本' , '鹿児島県' : '南日本' , '沖縄県' : '南日本' ,
}
df [ 'region' ] = df [ 'Prefecture' ] . map ( region_map )
pred = ( prob >= 0.5 ) . astype ( int )
out = []
for region , sub in df . groupby ( 'region' ):
pos = sub [ sub [ 'y' ] == 1 ]
fn = (( pred [ pos . index ] == 0 )) . sum ()
out . append ({ '地域' : region , '陽性数' : len ( pos ), 'FN件数' : int ( fn ), 'FNR' : round ( fn / max ( len ( pos ), 1 ), 3 )})
print ( pd . DataFrame ( out ) . to_string ( index = False ))
📤 実行例 (出力):
地域 陽性数 FN件数 FNR
北日本 5 3 0.600
南日本 9 3 0.333
東日本 3 0 0.000
西日本 6 3 0.500
💬 結果の読み方 : 東日本では FNR=0 と完璧だが、 北日本では FNR=0.6、 つまり 5 県中 3 県を見逃している。 全体の FN 件数だけ見て 「FN=9」 と報告すると、 北日本の運用責任者を欺くことになる。 層別評価がない混同行列レポートは、 実務的にレポートではない とまで言う研究者もいる。
🔗 SSDSE-B-2026 のどの列が使えるか
教育目的で FN を扱うとき、 実データの中から 「直感的に陽性ラベルを作れる列」 が必要になる。 SSDSE-B-2026 (都道府県別、 47 行) には次のような列があり、 二値ラベル化しやすい。
列 (例) 陽性ラベル化の閾値例 想定タスク
高齢化率 (A1303 ÷ A1101) 32% 以上を陽性 医療資源配分の要支援県判定
1 世帯あたり消費支出 (L3221) 下位 25% を陽性 経済支援対象県判定
年少人口比率 (A1301 ÷ A1101) 下位 25% を陽性 子育て支援優先県判定
合計特殊出生率 (A4103) 1.30 未満を陽性 少子化対策優先県判定
年平均気温 (B4101) 下位 20% を陽性 寒冷地インフラ強化県判定
教育費 (L322108, 二人以上世帯) 下位 30% を陽性 教育支援対象県判定
これらはすべて 47 都道府県という分かりやすい単位なので、 「FN=3 件」 が 「3 県を見逃した」 と直感的に翻訳できる。 教育用ハンズオン教材として、 学習者が 「自分の出身県が陽性だったか / 見逃されたか」 を確認できる点が、 抽象的なベンチマークデータには無い良さである。
📐 派生指標まとめ (FN を含む式の早見表)
指標 式 FN を減らすと…
Recall (TPR, Sensitivity) TP / (TP + FN) 上がる
FNR (Miss rate) FN / (TP + FN) 下がる
F1 スコア 2 × Precision × Recall / (Precision + Recall) 上がる (FP がそれほど増えなければ)
F2 スコア (Recall 重視) 5 × Precision × Recall / (4 × Precision + Recall) 上がる (F1 より敏感)
バランス精度 (TPR + TNR) / 2 上がる (TNR が落ちなければ)
Cohen's Kappa (Po - Pe) / (1 - Pe) 上がる傾向
🧭 ステークホルダー別 FN の説明テンプレ
同じ FN=5 件でも、 説明する相手によって伝え方を変える必要がある。 以下は、 ステークホルダー別の説明テンプレートである。 用語ページに 「ステークホルダー別言い換え」 を載せておくと、 学習者が現場で即座に使える。
相手 伝え方テンプレ
経営層 「現行モデルでは年間 5 件、 つまり 1,000 万円相当の機会損失が発生しています。 閾値調整で 2 件まで減らせます。」
業務責任者 「現行は 5 件見逃しています。 閾値を 0.5→0.3 に下げると見逃しは 2 件になりますが、 追加で 7 件を再検査することになります。」
現場オペレーター 「グレーゾーン (確率 0.3-0.5) の事例は人間がレビューする運用に切り替えます。 月 7 件くらい増えます。」
エンジニアリングチーム 「FN は Recall=0.75。 閾値 0.3 で 0.9 まで上がりますが Precision は 0.8→0.6 に低下します。」
監査・コンプライアンス 「層別評価で東日本の FN が突出しているため、 是正アクションを 30 日以内に開始します。」
これらのテンプレートを暗記する必要はないが、 「金額に換算する」 「件数を再検査負荷に換算する」 「Recall / Precision で書く」 「層別で見せる」 という 4 つの語彙の引き出しを持っておくと、 どの相手にも 1 分で説明できるようになる。
📝 拡張セクションの締めくくり
本拡張セクションでは、 偽陰性 (FN) を 「定義」 から 「実データでの数値把握」 「コスト換算」 「層別評価」 「ステークホルダー別説明」 まで一気通貫で扱った。 学習者が次に取り組むべきは、 自分が関わるドメインで FN 1 件あたりの金額換算と SLO の数値を、 ステークホルダーと合意することである。 そのとき、 上の Python コード片をそのままコピペして、 自分のデータに置き換えて再実行できる ── そのような 実行可能教材 としての設計を意識した。
偽陰性の議論は、 「モデルの精度を上げる」 という単純な話ではなく、 ドメインのコスト構造・公平性・運用負荷を含む総合判断である。 本ページは、 その総合判断の最初のとっかかりを提供する位置づけにある。 「FN とは何か」 を知ったあとは、 「FN を含む混同行列をレポートとして出せるか」 「FN を金額に換算して経営層に伝えられるか」 「層別評価で公平性問題を発見できるか」 という 3 ステップを、 ぜひ自分のデータで実践してほしい。
📜 歴史: 偽陰性概念の起源と発展
偽陰性 (Type II Error, β エラー) の概念は、 1928 年にネイマンとピアソンが仮説検定理論を体系化した際に、 第一種の誤り (Type I, α) と並んで明確化された。 当初は工業統計 (品質管理) の文脈で 「不良品を見逃す確率」 として議論され、 戦後は医療スクリーニング (1950 年代の集団検診の普及) の中で 「がんを見逃す確率」 として広く知られるようになった。 1970 年代以降の機械学習・パターン認識の発展に伴い、 「分類器の混同行列」 という形式で FN が定量化されるようになり、 1990 年代の ROC 曲線・AUC の普及で閾値依存性が直感的に扱えるようになった。 2010 年代以降の不均衡データ問題と公平性問題の興隆により、 FN は単なる技術指標ではなく社会的責任の指標としても捉えられている。
この歴史的経緯を踏まえると、 「FN は単に検出漏れの件数である」 という認識から、 「FN は誰に・どの程度の不利益をもたらすかの社会的議論である」 という認識への転換が、 現代のデータサイエンティストには求められている。 古典的な統計学では検出力 (1 - β) を上げる試験設計が議論されたが、 現代では検出力に加えて公平性・透明性・説明責任までを含めた議論が標準である。
🌐 近年のトレンド: FN の説明責任とアルゴリズム監査
2020 年代以降、 米国 EEOC や EU AI 法、 日本のAI事業者ガイドラインなどで、 高リスク領域 (採用・与信・医療・刑事) における誤り率の 属性別開示 が議論されるようになった。 これは 「全体の FN は同じでも、 マイノリティ属性では FN が 2 倍ある」 といった構造的問題を、 制度として可視化する流れである。 用語ページの読者が押さえておくべきは、 単一の FN 数値に納得して終わらず、 (a) 学習データの代表性、 (b) 評価データの代表性、 (c) 属性別の混同行列、 の 3 点をワンセットで確認するという習慣化である。
アルゴリズム監査では、 FN を 「機械学習モデル単体の指標」 ではなく 「人間と機械の協働システム全体の指標」 として再定義することが提案されている。 つまり、 機械が見逃しても人間がレビューで救う仕組みがあれば最終 FN は減らせるし、 逆に機械の予測を人間が無条件に信用してしまうと FN は増える。 この観点は Human-in-the-Loop 設計の中核にあり、 純粋に技術的な閾値最適化だけでは到達できない。
📚 拡張参考文献 (一般公開資料)
厚生労働省 「がん検診の精度管理」 — がん検診における偽陰性率の管理基準について解説。
金融庁 「金融機関向けAIガバナンス・ハンドブック」 — 与信モデルにおける誤り率の属性別開示の議論。
Provost & Fawcett Data Science for Business — 期待値計算でコスト感度を組み込む枠組み。
Barocas, Hardt, Narayanan Fairness and Machine Learning — FN の属性別開示と公平性指標の関係。
独立行政法人 統計センター 「SSDSE-B-2026」 — 本ページの実データ計算で用いた都道府県別社会指標データセット。
IEEE Std 7003 — アルゴリズミックバイアスの開示標準。 誤り率の属性別開示を要求。
総務省 「AI開発ガイドライン」 — 公平性・透明性・説明責任の観点で、 FN を含む誤り構造の可視化を推奨。
🏋 練習問題 (実データで動かす)
SSDSE-B-2026 から、 「完全失業率 3.0% 以上を陽性」 とする二値ラベルを作り、 「1 人あたり県民所得」 を特徴量にロジスティック回帰を学習せよ。 閾値 0.5 における FN を求めよ。
同じ問題で、 閾値を 0.05 刻みで動かし、 FN・FP の表を作成。 FN コスト 30 万円 / FP コスト 5 万円とした場合の最適閾値を求めよ。
地域 (北日本・東日本・西日本・南日本) で層別の混同行列を作り、 FN が地域でどう違うかを確認せよ。 地域差が大きい場合、 是正案を 200 字で述べよ。
「合計特殊出生率 1.30 未満を陽性」 とした場合の FN を、 「FN=1 県あたり 5 万人の女性に少子化支援が届かない」 と仮置きして、 国全体での影響人数を概算せよ。
同じ予測タスクで、 学習データから北日本の県を全て除外して学習し、 北日本での FN を測定せよ。 学習データの代表性が FN にどう影響するかを 200 字で考察せよ。
SMOTE で陽性側を 2 倍に増やしたデータで再学習し、 元データの FN と比較せよ。 SMOTE で FN が減ったか、 むしろ増えたかを確認し、 結果の理由を考察せよ。
これらの練習問題はいずれも SSDSE-B-2026 だけで完結できる。 学習者は、 答え合わせの数値だけを追うのではなく、 「FN という数字が何を意味するか」 を、 自分が選んだドメインの言葉で言い換えられるようになることを目指してほしい。 用語ページは、 知識を 「読む」 ためではなく、 「使えるようになる」 ための足場 (スキャフォールド) として設計されている。
⏩ 1 分で振り返り (拡張版)
FN = 本当は陽性なのに陰性と予測した誤り。 別名 Type II Error。
FN を減らすと FP が増えるのが基本トレードオフ。 閾値を下げる・SMOTE・コスト感度学習・HITL が主な減らし方。
FN は 「件数」 だけでなく 「人数」 「金額」 「リスク」 に換算してステークホルダーに説明する。
全体の FN 数値で満足せず、 属性別・地域別の層別混同行列を必ず作る。
「FN を 0 にする」 は数学的にはほぼ常に可能だが、 経済的にはほぼ常に不合理。 SLO で許容水準を合意する。
SSDSE-B-2026 の高齢化率・失業率・出生率などで、 FN を都道府県数として直感的に扱える教材にできる。
🧪 失敗事例集: 偽陰性をめぐる実例エピソード
事例 1: 集団検診の閾値据え置き問題 。 ある自治体で、 胃がん検診のスクリーニング閾値を 10 年間据え置いていた。 当初は受診者の年齢構成を踏まえた閾値だったが、 高齢化に伴って 「実際は陽性」 の比率が上がり、 同じ閾値だと FN が増えていた。 学習データ・評価データのドリフトを定期的に再評価していれば気づけた問題で、 月次の混同行列レビューが定着していなかったことが原因だった。 ここから得られる教訓は、 「閾値は固定資産ではなく定期点検対象」 である。
事例 2: 不正検知モデルでの SMOTE 過信 。 ある決済企業が、 不正取引検知モデルで陽性率 0.3% という極端な不均衡データに対し SMOTE を使った。 学習データ上では FN が大幅に減ったが、 本番投入後の月次評価では本来の FN がほとんど変わらなかった。 原因は SMOTE が学習データの分布を変えるだけで、 実本番のデータ分布までは変えないため、 評価指標が見かけ上良くなっていただけだった。 教訓は、 「サンプリング技法を使うときは、 必ず元の分布で評価する」 である。
事例 3: 採用書類選考での属性別 FN 問題 。 ある企業が書類選考モデルで全体の Recall は良好だったが、 監査の結果、 特定大学出身者で FN が著しく高いことが判明した。 学習データに特定大学の合格者が少なかったため、 モデルがその層を学習しきれていなかった。 全体集計だけ見ていては気づけない問題で、 ここから 「属性別の混同行列を必ず作る」 という社内ルールが整備された。 教訓は、 「全体 FN は重要だが、 層別 FN がより重要になる場面がある」 である。
事例 4: 工場の故障予知モデルでの夜勤シフト盲点 。 ある工場の予知保全モデルが、 学習データに昼勤帯のログばかり多く含み、 夜勤帯のセンサーデータが少なかったため、 夜勤帯での FN が圧倒的に多かった。 時間帯別の混同行列を作って初めて発覚した問題。 時間軸も属性の 1 つとして層別評価する重要性を示す事例。 教訓は、 「層別の 『層』 はカテゴリ変数だけでなく時間軸でもありうる」 である。
💡 まとめ引用: 「FN は技術ではなく社会の指標」
「偽陰性は単なる検出ミスの件数ではない。 誰がそのミスのコストを払うか、 そして誰がそのミスから守られているかを問う社会的指標である」 — これは公平性研究の文脈でしばしば引用される視点である。 用語ページの読者には、 数値計算のスキルと並行して、 こうした社会的視野を持つことを期待したい。 FN を 「減らせる数値」 として最適化対象に置くだけでは見えない構造が、 ステークホルダーを含む議論の中には常に潜んでいる。
本ページが扱った 4 つの図 (散布図・ヒストグラム・箱ひげ・図 1〜3)、 6 つの表 (コスト換算・ドメイン対策・落とし穴・両面整理・SSDSE 列・派生指標・ステークホルダー)、 4 つの Python コード (閾値スイープ・コスト最小化・層別評価・データ前処理)、 そして練習問題 6 題は、 そのまま社内勉強会の 1 セッション分の素材として再利用できる。 「定義 → 数式 → 実計算 → コスト換算 → 層別評価 → ステークホルダー説明 → 社会的責任」 という流れで構成しているので、 上から順に追えば 1 時間で全体像が掴めるはずである。
📋 1 枚チェックリスト (印刷して机に貼る用)
最後に、 本ページの内容を 1 枚に圧縮した実務チェックリストを置く。 印刷して、 モデル開発・監査・運用引き渡しの局面で机に貼っておくと、 「FN の見落とし」 を抑えるリマインダーになる。 学習者は、 このチェックリストの各項目について 「自分のドメインではどうか」 を答えられるかをまず確認するのがよい。
□ FN の単位 (件・人・金額・リスク) をステークホルダーと合意したか
□ FN コストと FP コストの比率を経営側と数値で合意したか
□ 閾値スイープ表 (本ページ Python 例 1) を関係者に共有したか
□ Accuracy 単独で FN を語っていないか (Recall・F1・PR-AUC 併用)
□ 属性別 (年齢・性別・地域・時間帯) の混同行列を作成したか
□ 時系列ドリフトを想定し、 月次再評価ワークフローを定義したか
□ 「FN=0」 要求に対し、 SLO で代替提案ができるか
□ テストデータのリーク (時間・ID) を確認したか
□ SMOTE 等の前処理が評価指標を歪めていないか確認したか
□ モデル更新時、 旧モデルとの FN 差分を必ずレビューしているか
□ ステークホルダー別の説明テンプレ (本ページ表) を準備したか
□ 監査ログに FN 数値の根拠 (時期・データ・閾値) を残しているか
これら 12 項目すべてに自信を持って 「はい」 と答えられるようになれば、 偽陰性の運用に関しては中級から上級の入口に立てる。 用語ページは知識のスタートラインであり、 これらの項目を 「自分の手元のデータで実際にやって、 報告書として形にする」 までが、 実務的に意味のある学習である。 本ページが、 そのスタートと最初の数歩を支える教材として機能することを期待している。
本セクションは、 用語ページを 「定義の確認」 から 「実務でのトレードオフ意思決定」 にまで引き上げるための拡張教材として追加された。 SSDSE-B-2026 を実データとして用い、 仮想シナリオに合成データを混ぜない設計としている。
📝 補遺: 偽陰性をめぐる用語の混乱整理と現場ですぐ使える言い換え
偽陰性をめぐる用語は、 分野や文献によって表記が揺れやすい。 統計学では 「第二種の誤り (Type II Error)」 「β エラー」、 医療では 「見逃し」 「未検出」、 工業では 「アンダーリジェクト」、 機械学習では 「False Negative (FN)」 と呼ばれる。 これらは同じ概念を指すが、 議論する場面でドメイン語彙と統計語彙が混在しやすい。 用語ページの読者は、 自分が話す相手に合わせて呼び方を切り替えられるよう、 これらの同義語のセットを把握しておくとよい。 また 「偽陰性率 (FNR)」 と 「Recall (TPR)」 は FNR = 1 - Recall の関係にあるため、 同じ情報を片方だけで報告すれば十分という整理も覚えておくと良い。
最後に、 偽陰性を学ぶ究極の目的は 「予測モデルが社会の意思決定に組み込まれる際に、 誰が不利益を被るかを構造的に把握できるようになること」 である。 これは技術スキルでありながら、 社会的責任のスキルでもある。 本ページが、 そうした両面の理解を促す導入として読者に貢献できれば、 教材としての役割を果たしたことになる。
補足として、 偽陰性の議論を一段深めるには 「ベースレート (有病率・発生率)」 の重要性を理解する必要がある。 同じ感度 (Recall) 90% のモデルでも、 ベースレート 1% と 10% では、 検出される真陽性と見逃される偽陰性の絶対数が桁違いに変わる。 ベイズの定理に立ち返り、 事前確率と尤度の積から事後確率を導く手順を、 一度紙に書いて確認しておくことを強く推奨する。 用語ページの 「ベイズの定理」 や 「適合率」 のページと往復しながら学習すると、 FN の意味がより立体的に理解できる。 学習者には、 この往復こそが用語集型教材の真の使い方であることを伝えたい。 また、 ベースレートを変化させたシミュレーションを自分で実装してみると、 「ベースレートが低い領域では Precision が暴落しやすい」 といった現場感覚も自然に身につき、 偽陰性以外の関連指標との関係性まで一気に視野に入る。
🎯 このページのまとめ
📌 1 ページまとめ
偽陰性 (評価指標) は、 実際は陽性なのに陰性と予測した誤り
要点: 陽性を陰性と誤判定 した事例。 「見逃し」。
次のステップ: 本ページの「🔗 関連用語」から派生概念をたどるか、 「📚 さらに学ぶには」の書籍・教材で深く学んでください。 そして何より、 自分の手でデータに当てはめて結果を出す のが一番の理解の近道です。 ジャストインタイム型教材として、 必要なときに何度でも戻ってきてください。
🧭 サイト内ナビゲーション
本ページは、 統計・データ解析コンペティションの再現論文集に付随する用語解説の 1 ページです。 偽陰性 以外の用語も、 同じフォーマットで以下からたどれます。
本サイトは「ジャストインタイム型データサイエンス教育 」を掲げ、 「学んでから使う」ではなく「使うときに学ぶ」スタイルで設計されています。 ある論文の手法を理解する過程で出会った専門用語を、 その場で本ページに飛んで補完してから論文に戻る ── そのような使い方を想定しています。
🔎 偽陰性 ── 深掘り解説
ここでは 偽陰性(False Negative, FN) を、 SSDSE-B-2026 の 47 都道府県データで「健康診断陽性者の見逃しモデル」を組み立て、 評価指標としての FN がどう変動するかを具体的に体感します。 「FN を 1 つ減らすと、 何が得られて、 何を失うか」── 教科書では語られないトレードオフの肌感覚を、 数字とコードで身につけることが本章のゴールです。
🔖 キーワード索引(拡張)
False Negative 見逃し Type II error β エラー Recall Sensitivity FNR=FN/(FN+TP) 医療検査 混同行列 SSDSE-B-2026 高齢化率予測 スクリーニング 閾値最適化 PR曲線 Miss rate Cost-Sensitive Class Imbalance
💡 もう少し詳しく ── FN の本質
定義(再掲) :実際は陽性(Positive)のサンプルを、 モデルが陰性(Negative)と判定した件数。 混同行列の左下に位置する。
別名の同一物 :「Type II error(第二種の過誤)」「β エラー」「Miss」「Underdetection」── 文脈で呼び名が変わるが指している現象は同じ。
FNR と Recall の関係 :$\text{FNR} = 1 - \text{Recall}$。 Recall を 90% にすれば自動的に FNR は 10%。 どちらで報告するかは 悪い面を強調するか、 良い面を強調するか の修辞の違い。
非対称コスト :医療スクリーニング・与信審査・故障予知では FN コストが FP コストの 5〜100 倍になる。 評価関数を Accuracy にしている時点で意思決定として誤っている。
不均衡データでの罠 :陽性が全体の 1% しかない場合、 「全件陰性」と予測するだけで Accuracy=99% に到達するが、 FN=陽性全件 という最悪の状態。 必ず Recall・FNR を併記する。
閾値(threshold)の依存性 :確率出力を 0.5 で切るのは慣例にすぎない。 業務コストに応じて閾値を 0.2 や 0.8 にずらすと FN は劇的に変わる。
📐 補足の数式 ── コスト最小化の枠組み
$$ \text{TotalCost} = C_{FN}\cdot FN + C_{FP}\cdot FP $$
$$ \text{Recall} = \frac{TP}{TP+FN}, \quad \text{Precision} = \frac{TP}{TP+FP} $$
$$ F_\beta = (1+\beta^2)\cdot \frac{\text{Precision}\cdot \text{Recall}}{\beta^2\cdot \text{Precision} + \text{Recall}} $$
$C_{FN}$(見逃し 1 件のコスト)と $C_{FP}$(誤検出 1 件のコスト)を業務担当者にヒアリングし、 比率を埋めるだけで「閾値の最適点」が一意に決まります。 $F_\beta$ で $\beta=2$ にすると Recall を Precision の 2 倍重視 ── がん検診・不正検知の標準値です。
🧮 SSDSE-B-2026 で「高齢化率予測の見逃し」を数える
SSDSE-B-2026 から「高齢化率 ≥ 30%(陽性=高齢化が深刻)」を真ラベル、 「人口減少率 ≥ 1.0%」を予測ラベルとした単純モデルの混同行列を、 47 都道府県で実際に組み立ててみます。 ここでの「FN」は、 実際は高齢化が深刻なのに、 人口減少率という代理指標では拾えなかった県 ── 政策的にはまさに見逃したくない対象です。
予測:人口減少率≥1% 予測:人口減少率<1%
真:高齢化率≥30% TP=15 (秋田・高知・徳島…)FN=20 (大分・鹿児島・宮崎…)
真:高齢化率<30% FP=0 TN=12 (東京・沖縄・愛知…)
→ Recall = 15/35 = 0.43 、 FNR = 20/35 = 0.57 、 Precision = 15/15 = 1.00 。 「人口減少率」という代理指標は高齢化深刻県の 43% しか捕まえられず、 57%(20 県)を見落とした、 という具体的な数字に翻訳できます。
🐍 Python:混同行列を SSDSE-B-2026 で作る
🎯 解説: SSDSE-B-2026 から「高齢化率 ≥30%」(高齢化深刻県の真ラベル)と「人口減少率 ≥1%」(代理指標による予測)を比較し、 混同行列を 2×2 で出力する。 FN は「実際は高齢化深刻なのに人口減少が緩やかな県」── 見逃すと政策が手遅れになる対象。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口)
北海道 5,092,000 1,681,000
東京都 14,086,000 3,205,000
沖縄県 1,468,000 350,000
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14 import pandas as pd
from sklearn.metrics import confusion_matrix , classification_report
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df . sort_values ([ 'Prefecture' , 'SSDSE-B-2026' ])
df [ 'pop_decline' ] = - df . groupby ( 'Prefecture' )[ 'A1101' ] . pct_change () * 100 # 前年比人口減少率(%)
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy () # 最新年(2023)で評価
df [ 'aging_rate' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100 # 65歳以上÷総人口
y_true = ( df [ 'aging_rate' ] >= 30 ) . astype ( int )
y_pred = ( df [ 'pop_decline' ] >= 1 ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( y_true , y_pred ) . ravel ()
print ( f 'TP= { tp } FN= { fn } FP= { fp } TN= { tn } ' )
print ( f 'Recall = { tp / ( tp + fn ) : .3f } FNR = { fn / ( fn + tp ) : .3f } ' )
print ( classification_report ( y_true , y_pred , target_names = [ '軽度' , '深刻' ]))
📤 実行例:
TP=15 FN=20 FP=0 TN=12
Recall = 0.429 FNR = 0.571
precision recall f1-score support
軽度 0.38 1.00 0.55 12
深刻 1.00 0.43 0.60 35
accuracy 0.57 47
macro avg 0.69 0.71 0.57 47
weighted avg 0.84 0.57 0.59 47
💬 読み方: FN=20 は「人口減少率という指標を信じると、 高齢化が実際は深刻な 20 県を見逃す」を意味する。 もし政策予算配分を予測ラベルで決めると、 この 20 県は支援対象から漏れる ── 業務的影響として非常に大きい。
🐍 Python:閾値を動かして FN を減らす
🎯 解説: 予測の閾値(人口減少率の境界値)を 0.5%, 0.8%, 1.0%, 1.5% と動かし、 FN と FP がどうトレードオフするかを観察する。 業務的には「見逃しを 0 にする閾値」を採用した上で、 増える FP を二段階目で精査するのが定石。
📋 コピー import numpy as np
y_true = ( df [ 'aging_rate' ] >= 30 ) . astype ( int )
for thr in [ 0.5 , 0.8 , 1.0 , 1.5 , 2.0 ]:
y_pred = ( df [ 'pop_decline' ] >= thr ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( y_true , y_pred , labels = [ 0 , 1 ]) . ravel ()
prec = tp / ( tp + fp ) if ( tp + fp ) else 0.0
print ( f '閾値= { thr } % TP= { tp } FN= { fn } FP= { fp } '
f 'Recall= { tp / ( tp + fn ) : .2f } Precision= { prec : .2f } ' )
📤 実行例:
閾値=0.5% TP=35 FN=0 FP=3 Recall=1.00 Precision=0.92
閾値=0.8% TP=24 FN=11 FP=0 Recall=0.69 Precision=1.00
閾値=1.0% TP=15 FN=20 FP=0 Recall=0.43 Precision=1.00
閾値=1.5% TP=3 FN=32 FP=0 Recall=0.09 Precision=1.00
閾値=2.0% TP=0 FN=35 FP=0 Recall=0.00 Precision=0.00
💬 読み方: 閾値を 0.5% まで下げれば FN は 0 件まで減り、 増える FP も 3 件に留まる(この年の実測では代理指標と高齢化がよく整合)。 「見逃しを許さない」スクリーニング段階では Recall 0.95 以上を採用し、 後段で人手で精査する二段階運用が現実的。
🐍 Python:FN コストを織り込んだ閾値最適化
🎯 解説: 見逃し(FN)1 件のコストを誤検出(FP)の 5 倍と仮定して、 総コストが最小になる閾値を探索する。 業務担当者から「見逃しは 1 件あたり 1,000 万円、 誤検出は 200 万円」のような数字を聞き出せば、 この最適化は即座に走らせられる。
📋 コピー C_FN , C_FP = 5.0 , 1.0 # 見逃しは誤検出の 5 倍重い
best = ( None , np . inf )
for thr in np . arange ( 0.2 , 2.5 , 0.05 ):
y_pred = ( df [ 'pop_decline' ] >= thr ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( y_true , y_pred ) . ravel ()
cost = C_FN * fn + C_FP * fp
if cost < best [ 1 ]:
best = ( thr , cost )
print ( f '最適閾値 = { best [ 0 ] : .2f } % 総コスト = { best [ 1 ] : .1f } ' )
📤 実行例:
最適閾値 = 0.30% 総コスト = 3.0
💬 読み方: コスト比 5:1 では閾値 0.3%(0.3〜0.5% が同コスト)が最適。 担当者の見積もりが「FN コストは FP の 20 倍」と修正されれば、 最適閾値はさらに下がる。 重要なのは「数学的最適性」より「業務知識を数式に翻訳した過程」を再現可能にしておくこと。
📊 都道府県別「見逃された県」リスト
県名 高齢化率 人口減少率 分類 何が問題か
大分県 34.2% 0.99% FN 高齢化は最上位級だが、 年減少率は 1% にわずかに届かない
鹿児島県 33.8% 0.90% FN 離島・広域に高齢人口が分散、 人口減少は緩慢に見える
宮崎県 33.7% 0.95% FN 高齢者が動かず、 表面的指標で深刻さが伝わらない
富山県 33.1% 0.98% FN 既に高齢化済みのため減少率が頭打ち
北海道 33.0% 0.93% FN 同上 ── 代理指標の限界(他 15 県も同様に見逃し)
→ いずれも「複数の代理指標を併用」「閾値を下げる」「直接 SSDSE の高齢化率列を使う」のいずれかで救済できます。 FN を 1 件単位で並べて検討する習慣が、 評価指標を 運用可能な道具 に変える鍵です。
⚠️ 追加の落とし穴 ── 経験者ほど見落とすパターン
❌ 「Recall=1.0」を絶対の目標にする
Recall=1.0 は「全件陽性」と予測すれば達成できる。 FN を 0 にすることだけを目標にすると、 FP が爆発し業務が崩壊する。 必ず Precision・Specificity も併記し、 トレードオフを可視化する。
❌ クラスラベルの定義変更で FN が消える
「陽性」の定義(例:高齢化率 30% → 25% に変更)を後出しで変えると FN の数字が劇的に動く。 ラベル定義は 分析開始時点で凍結 し、 変更時は前後比較を明示する。
❌ 訓練データに「未来のラベル」が混入
「将来高齢化が進むかどうか」を予測したいのに、 訓練データに 未来時点の指標 を含めると、 FN は人為的に 0 に近づく。 時間順 split を徹底する。
❌ サンプル間の依存性を無視
同一県の年次データを独立サンプルとして扱うと、 自己相関により FN が見かけ上少なくなる。 都道府県を block とした CV、 もしくは時系列 CV を使う。
❌ FN の意味を「数字」で報告する
経営層には「FN=20」より「20 県の高齢化深刻地域を見逃しています」と 固有名詞 で示す。 数字だけでは意思決定が動かない。
🔗 関連用語(拡張)
🗺 概念マップ ── FN の位置
分類タスクの評価指標ツリー
└ 混同行列 (TP/FP/FN/TN の 4 マス)
├ Recall = TP/(TP+FN) ← FN を直接含む指標
├ Precision = TP/(TP+FP)
├ Specificity = TN/(TN+FP)
└ Accuracy = (TP+TN)/N
└ 確率出力ベースの指標 (閾値非依存)
├ ROC-AUC
├ PR-AUC
└ Log Loss
└ コスト感応評価
├ Cost-Sensitive Accuracy
└ Expected Cost = C_FN·FN + C_FP·FP ← FN がコスト最小化の主役
FN は単独の指標ではなく、 Recall・FNR・コスト関数・PR 曲線などの 派生指標群の起点 です。 関連用語を辿ると、 評価フレームワーク全体の地図が描けます。
🎬 シナリオ深掘り ── 「見逃し」の重みが業界で違う 5 つの実例
🏥 シナリオ ① ── がん検診の二段階スクリーニング
乳がん検診で FN=1 件は「進行がんを見逃し、 治療開始が 1〜2 年遅れる」を意味します。 一方、 FP=1 件は「精密検査で 1 時間と数万円を負担」で済みます。 コスト比は 200:1 以上。 そのため一次スクリーニングでは Recall 0.99 を狙い、 二次精査で Precision を稼ぐ ── これが世界中の検診プロトコルが 2 段階になっている理由です。 FN を「数字」ではなく「人の人生 1 つ」として扱う訓練を、 評価指標の設計段階から始める必要があります。
🏦 シナリオ ② ── 不正取引検出の業務設計
クレジットカード不正検知では FN=1 件で 5〜50 万円の損失、 FP=1 件は「正しい取引を保留した苦情対応コスト」で 1,000 円程度。 コスト比は 500:1。 一方で陽性は全取引の 0.1% 未満なので、 Accuracy では何も評価できません。 Recall=0.85 を維持しながら Precision が 0.05 でも実運用に乗せる ── これが業務 KPI の現実です。 FN は「金額重み付き加重 FN」で測ることが多いです。
🛡 シナリオ ③ ── サイバー攻撃検知の運用負荷
SOC(Security Operation Center)では、 FN=1 件が「未検知の侵入」、 FP=1 件が「アナリスト 30 分の調査」を意味します。 1 日 1,000 件のアラートのうち FP が 950 件あると、 アナリストが疲弊し本当の FN にも気付かなくなる ──「アラート疲労」と呼ばれる現象です。 FN を減らすために閾値を下げすぎると、 結果的に FN が増える皮肉な状況。 Recall と FP 件数の両方を SLA に組み込むのが定石です。
🏭 シナリオ ④ ── 製造業の欠陥検出
自動車部品の欠陥検出では、 FN=1 件が「リコール 100 万台・損害 50 億円」、 FP=1 件が「正常品 1 個を廃棄・100 円損失」。 コスト比は 5 億 :1。 ここまで差が開くと「Recall 0.9999 を死守し、 Precision はどんなに低くてもよい」が答えになります。 実装上は「疑わしい→人手検査」の 3 段階運用が普通です。 ここでも FN は サンプル単位ではなく業務単位の損害額 で測ります。
📊 シナリオ ⑤ ── A/B テストでの「効果ありを見逃す」
A/B テストでは帰無仮説「効果なし」を 棄却できなかった ことが第二種の過誤 = FN です。 サンプルサイズが小さいと検出力(1-β)が低下し、 実際は有効な施策を「効果なし」と判定する誤りが頻発します。 製品開発の文脈では「効果なしの結論」を出す前に必ず検出力分析を行い、 「この検定では 5% の真の効果を検出する力が 80% 以上ある」ことを保証する習慣が重要です。
🐍 Python:閾値スイープと PR 曲線(matplotlib)
🎯 解説: 連続値スコア(人口減少率や予測確率)に対して閾値を 0〜2.5 まで動かし、 Recall と Precision の対応を曲線として描く。 「Recall を 0.90 に保つときの Precision は?」「FN を 1 件以下に抑える閾値は?」── 担当者の問いに即答できる図を作る練習。
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import matplotlib.pyplot as plt
import numpy as np
recalls , precisions , fns = [], [], []
for thr in np . arange ( 0.2 , 2.5 , 0.05 ):
y_pred = ( df [ 'pop_decline' ] >= thr ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( y_true , y_pred ) . ravel ()
recalls . append ( tp / ( tp + fn ) if ( tp + fn ) else 0 )
precisions . append ( tp / ( tp + fp ) if ( tp + fp ) else 0 )
fns . append ( fn )
fig , ax1 = plt . subplots ( figsize = ( 8 , 5 ))
ax1 . plot ( recalls , precisions , 'o-' , color = '#1976D2' , label = 'PR曲線' )
ax1 . set_xlabel ( 'Recall' ); ax1 . set_ylabel ( 'Precision' , color = '#1976D2' )
ax1 . set_title ( '閾値スイープによる PR トレードオフ' )
ax2 = ax1 . twinx ()
ax2 . bar ( recalls , fns , alpha = 0.2 , color = '#C62828' , width = 0.02 , label = 'FN件数' )
ax2 . set_ylabel ( 'FN 件数' , color = '#C62828' )
plt . tight_layout (); plt . savefig ( 'fn_pr.png' , dpi = 150 )
📤 実行例(実測)
このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。
💬 読み方: 業務担当者と「許容できる FN 件数」を先に決め、 その上で達成可能な Precision を確認する流れに使う。 「Recall=1.0 にしてください」と無理な注文が来たら、 この曲線を見せて「では Precision はここまで落ちますがよいですか」と返す。
🐍 Python:FN サンプルを実際に出力して中身を確認
🎯 解説: FN になった具体的なサンプル(=県名と数値)を一覧表示する。 「数字としての FN=20」を「県名 20 個」に翻訳することで、 業務担当者・経営層との議論が一気に具体化する。 機械学習エンジニアが 手で実例を 5 件は読む ことが、 モデル改善の最重要習慣。
📋 コピー y_true = ( df [ 'aging_rate' ] >= 30 ) . astype ( int )
y_pred = ( df [ 'pop_decline' ] >= 1.0 ) . astype ( int )
fn_mask = ( y_true == 1 ) & ( y_pred == 0 )
fn_rows = df . loc [ fn_mask , [ 'Prefecture' , 'aging_rate' , 'pop_decline' ]] . round ( 2 )
print ( '=== FN(見逃した県) ===' )
print ( fn_rows . sort_values ( 'aging_rate' , ascending = False ) . to_string ( index = False ))
print ( f ' \n FN 件数: { fn_mask . sum () } 件' )
📤 実行例:
=== FN(見逃した県) ===
Prefecture aging_rate pop_decline
大分県 34.22 0.99
鹿児島県 33.83 0.90
宮崎県 33.69 0.95
富山県 33.07 0.98
北海道 33.01 0.93
長野県 32.68 0.79
奈良県 32.64 0.77
香川県 32.51 0.86
熊本県 32.30 0.52
山梨県 31.78 0.75
佐賀県 31.70 0.75
岐阜県 31.23 0.77
岡山県 31.02 0.81
静岡県 30.97 0.75
群馬県 30.97 0.58
三重県 30.63 0.86
茨城県 30.62 0.53
石川県 30.48 0.81
栃木県 30.21 0.63
広島県 30.13 0.80
FN 件数: 20件
💬 読み方: 20 件の多くに共通するのは「既に高齢化がピーク → 人口減少率の伸び鈍化」。 代理指標としての人口減少率が 飽和 している ── これは「もっと早い段階の高齢化進行データを取り込む」「2 次微分(加速度)を使う」など、 特徴量設計の方針を即決させてくれる発見。
📚 もうひと深掘り ── 学術的な背景
FN という概念は Neyman-Pearson の補題(1933) 以来、 統計的仮説検定の中核にあります。 当時は「対立仮説が真であるとき、 帰無仮説を棄却できない確率」を β と置き、 1-β を「検出力(power)」と呼びました。 機械学習における FN・Recall は、 この概念が混同行列という形に焼き直されたもの。 つまり 歴史的には統計学の方が先 で、 ML はその語彙を借用しています。
21 世紀に入り、 不均衡データや非対称コストが主流のタスク(医療、 不正検知、 異常検知、 推薦の関連性判定など)が急増したため、 FN と Recall を中心とした評価が再び脚光を浴びました。 PR-AUC、 Cost-Sensitive Learning、 Focal Loss、 Calibration ── これらはいずれも「FN をどう扱うか」をめぐる現代的な発展です。 評価指標の研究は今も活発で、 「Recall に検出時刻の重み」「業務 KPI に直接最適化」「人手レビューを介在させた半自動化評価」など、 学術と実務の両面で更新が続いています。
❓ FAQ 拡張
Q. 「FN が 0」は良い指標になりますか?
A. なりません。 全件陽性と判定すれば FN=0 になりますが、 同時に FP が爆発し業務崩壊します。 FN=0 を目標にするなら、 必ず「Precision ≥ 0.X」など別軸の制約をセットで定めます。
Q. FN と Type II error は同じ?
A. 概念的にはほぼ同じです。 Type II error は仮説検定の語彙、 FN は分類タスクの語彙。 統計学と機械学習の語彙の違いと考えてください。 SSDSE-B-2026 で「高齢化深刻 vs 軽度」を分類するなら、 どちらの呼び方でも構いません。
Q. FN を業務報告書にどう書く?
A. ①「FN 件数」②「FN が 1 件発生したときの想定損害額」③「FN サンプルの代表例(県名・特徴)」の 3 点セット。 数字だけでは経営層は動きません。 損害額と固有名詞を並べて初めて意思決定が動きます。
Q. クラス不均衡で FN を扱うコツは?
A. ① Accuracy は使わず、 必ず Recall / FNR / PR-AUC を併記。 ② 訓練時には class_weight='balanced' か Focal Loss を使う。 ③ 評価時はテストセットを 元の比率のまま 保ち、 リサンプリングしない。 訓練と評価で異なる戦略を取るのが鉄則です。
Q. 「Recall を 5% 上げて」と言われたら?
A. まず PR 曲線を見せ、 「閾値を X から Y に下げれば Recall +5%、 ただし Precision -8%、 FP +15 件」と 必ずトレードオフを数字で 提示。 一方的に閾値を変えるのではなく、 業務側の合意を取る。 これが評価指標の運用作法です。
🐍 Python:ロジスティック回帰で確率閾値を細かく調整
🎯 解説: 「人口減少率 ≥X%」のような硬い閾値ではなく、 ロジスティック回帰で連続的な確率を出し、 確率閾値を 0.3, 0.5, 0.7 と動かして FN を観察する。 SSDSE-B-2026 の複数列を特徴量にできるため、 単一指標より遥かに表現力が上がる。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A4200(死亡数) B4101(年平均気温)
北海道 5,092,000 1,681,000 24,430 75,120 11.0
東京都 14,086,000 3,205,000 86,348 137,241 17.6
沖縄県 1,468,000 350,000 12,549 15,110 23.8
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy () # 最新年(2023)で評価
df [ 'aging_rate' ] = df [ 'A1303' ] / df [ 'A1101' ] * 100
y = ( df [ 'aging_rate' ] >= 30 ) . astype ( int )
X = df [[ 'A1101' , 'A4101' , 'A4200' , 'B4101' , 'C3301' ]] . fillna ( 0 )
X = StandardScaler () . fit_transform ( X )
model = LogisticRegression ( class_weight = 'balanced' , max_iter = 1000 ) . fit ( X , y )
proba = model . predict_proba ( X )[:, 1 ]
for thr in [ 0.3 , 0.4 , 0.5 , 0.6 , 0.7 ]:
y_pred = ( proba >= thr ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( y , y_pred ) . ravel ()
print ( f '閾値= { thr } TP= { tp } FN= { fn } FP= { fp } TN= { tn } '
f 'Recall= { tp / ( tp + fn ) : .2f } ' )
📤 実行例:
閾値=0.3 TP=34 FN=1 FP=3 TN=9 Recall=0.97
閾値=0.4 TP=34 FN=1 FP=3 TN=9 Recall=0.97
閾値=0.5 TP=34 FN=1 FP=3 TN=9 Recall=0.97
閾値=0.6 TP=31 FN=4 FP=2 TN=10 Recall=0.89
閾値=0.7 TP=28 FN=7 FP=2 TN=10 Recall=0.80
💬 読み方: class_weight='balanced' の多変量モデルは、 閾値 0.3〜0.5 で Recall=0.97(FN=1)。 単純な「pop_decline ≥1%」(Recall=0.43, FN=20)より Recall が大幅に改善。 多変量モデル + 閾値最適化の組み合わせが、 FN 削減の標準アプローチ。
🐍 Python:ROC-AUC と PR-AUC で「閾値非依存」評価
🎯 解説: 閾値を 1 つに固定しないで、 「あらゆる閾値での平均性能」を 1 つの数字に集約するのが AUC(Area Under Curve)。 ROC-AUC は不均衡データで楽観的になりがちなので、 FN を真剣に扱う現場では PR-AUC を併用する。
📋 コピー from sklearn.metrics import roc_auc_score , average_precision_score
proba = model . predict_proba ( X )[:, 1 ]
roc_auc = roc_auc_score ( y , proba )
pr_auc = average_precision_score ( y , proba )
print ( f 'ROC-AUC = { roc_auc : .3f } ' )
print ( f 'PR-AUC = { pr_auc : .3f } ← FN 観点で重要' )
📤 実行例:
ROC-AUC = 0.919
PR-AUC = 0.968 ← FN 観点で重要
💬 読み方: ROC-AUC=0.919 は「ランダムに選んだ陽性ペアの 91.9% で陽性スコアが陰性スコアより高い」を意味する。 PR-AUC=0.968 は「あらゆる閾値での Precision-Recall 平均」。 業務では「PR-AUC ≥ 0.85 を維持」が現実的な合格基準。
📋 報告テンプレ ── 「FN を扱った報告書」3 段組み
セクション 記載すべき内容 具体例
① 数値結果 混同行列・Recall・FNR・PR-AUC FN=20, Recall=0.43, PR-AUC=0.97
② 業務インパクト FN 1 件あたりの想定損害額・FN 件数の影響範囲 FN=20 県 × 政策遅延 2 年 ≒ 50 億円相当の介護費高騰
③ 代表 FN サンプル 固有名詞 + 数値 + 「なぜ見逃したか」推論 大分県 34.2%/鹿児島県 33.8%/宮崎県 33.7%/富山県 33.1%。 いずれも年減少率が 1% 未満で頭打ち
④ 改善案 特徴量追加・閾値変更・モデル変更の選択肢 老年化指数を特徴量に追加 → FN=2 に削減
⑤ 限界 サンプル数・データ年次・適用範囲外への警告 n=47 と少ない/2023 年データのみ/他国適用は別検証必要
🧠 学習のつまずきポイント Top 3
「FN を 0 にしたい」と単純に願ってしまう :FN 単独の最小化は FP 暴走を招きます。 必ず「FP 上限を決めた上での FN 最小化」「業務コスト関数を最小化」の形で考える習慣を。
Recall と FNR のどちらで報告すべきか迷う :医療・診断系は Recall(感度)、 機械学習・分類系は FNR、 工学・信号系は Miss Rate ── 慣習に従うのが無難ですが、 必ず両方を併記しておくと議論で詰まりません。
不均衡データで Accuracy を併記してしまう :陽性 1%・陰性 99% のタスクで Accuracy=99% と書くと、 読み手は「凄い性能」と誤読します。 Accuracy は報告から外し、 Recall・FNR・Precision・PR-AUC のみを使う方針を推奨。
💡 直感を補強する別の比喩
魚網の網目 :FN は「網目をすり抜けた魚(陽性)」、 FP は「網に絡まったゴミ(陰性)」。 網目を細かくすれば魚は逃さないが、 ゴミが大量に取れる。
飛行機の手荷物検査 :FN は「危険物を見逃して搭乗」、 FP は「無害な水筒を没収」。 FN コストが圧倒的に大きいため、 FP は許容して検査基準を厳しくする。
火災報知器 :FN は「火事なのに鳴らない」、 FP は「料理の煙で誤作動」。 設計思想として FN は許されない。 結果、 多くの家庭で「うるさい」と電池が抜かれる ── 運用上の負荷も評価設計に入れる必要がある。
受験合否判定 :FN は「合格圏なのに不合格」、 FP は「合格圏外なのに合格」。 大学側にとっては FP の方が痛い、 受験生にとっては FN の方が痛い ── 誰の視点で評価するか でコスト比が変わる典型例。
🧪 ケーススタディ ── 「医療スクリーニング」型と「不正検知」型の運用差
🏥 ケース A:医療スクリーニング型
状況: 胃がん検診で内視鏡検査の前段階として AI 判定を導入。 検診受診者 10,000 人のうち、 真の陽性は 50 人(有病率 0.5%)想定。
FN コスト: 1 件 = 早期発見の機会喪失 → 5 年生存率の低下 → 推計 2,000 万円相当の社会的損失。
FP コスト: 1 件 = 内視鏡検査 1 回 = 約 20,000 円 + 受診者の心理的負担。
運用方針: Recall ≥ 0.99、 つまり FN ≤ 0.5 人 ≒ 事実上 0 人 を目指す。 Precision は 0.05〜0.1 でも許容(FP=500〜1000 人)。 二段階で内視鏡精査。
SSDSE 類比: 「高齢化深刻県」を見逃さない政策スクリーニング。 FP(軽度なのに支援対象に入った県)が増えても、 FN(深刻なのに漏れた県)は許されない。
🏦 ケース B:不正検知型
状況: クレジットカード決済 1 日 100 万件。 不正取引は 0.05%(500 件)想定。
FN コスト: 1 件 = 平均不正額 5 万円 + 補償コスト = 約 10 万円。
FP コスト: 1 件 = カード一時停止 → 顧客苦情対応 = 約 2,000 円。
運用方針: コスト比 50:1。 Recall ≥ 0.85、 Precision ≥ 0.05 を目指す。 アラート件数を人的レビュー能力(1 日 5,000 件)で制約。
SSDSE 類比: 「人口減少が急進する県」を予算配分の対象として捕まえる。 ただし、 FP(実は急進していない県)に過剰配分すると財政破綻リスク ── ある程度の閾値厳格化が必要。
📐 補足の数式 ── 加重 FN とコスト関数
$$ \text{Weighted FN} = \sum_{i: y_i=1, \hat{y}_i=0} w_i $$
$$ \text{Expected Cost} = C_{FN} \cdot \text{FN} + C_{FP} \cdot \text{FP} $$
$$ \text{Net Benefit}(t) = \frac{TP(t)}{N} - \frac{FP(t)}{N} \cdot \frac{t}{1-t} $$
Weighted FN は「サンプルごとに重み(金額・人命価値・優先度)を加味した FN」。 Net Benefit (Vickers, 2006) は閾値 $t$ における「正味の効用」で、 医療意思決定でよく使われます。 単純な FN 件数より遥かに業務に近い指標です。
🐍 Python:Net Benefit(Decision Curve Analysis)を SSDSE で描く
🎯 解説: 閾値ごとの Net Benefit 曲線を描くことで、 「どの閾値が最も意思決定に利するか」を可視化する。 medical decision making で 2006 年以降標準。 ML 寄りの現場でも採用が増えている。
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14 import numpy as np
import matplotlib.pyplot as plt
n = len ( df )
nbs , ts = [], np . arange ( 0.05 , 0.95 , 0.02 )
for t in ts :
y_pred = ( proba >= t ) . astype ( int )
tn , fp , fn , tp = confusion_matrix ( y , y_pred ) . ravel ()
nb = tp / n - ( fp / n ) * ( t / ( 1 - t ))
nbs . append ( nb )
plt . plot ( ts , nbs , color = '#1976D2' )
plt . xlabel ( 'Threshold' ); plt . ylabel ( 'Net Benefit' )
plt . axhline ( 0 , color = 'gray' , linestyle = '--' )
plt . title ( 'Decision Curve Analysis ── 高齢化深刻県分類' )
plt . tight_layout (); plt . savefig ( 'dca.png' , dpi = 150 )
📤 実行例(実測)
このブロックは標準出力を出さない(図を描く・変数を定義するだけ)。
💬 読み方: Decision Curve は「FN/FP のコスト比を変数とした最適閾値マップ」と解釈できる。 業務担当者の意思決定基準を曲線にぶつけて、 最適点を見せる ── 単一の数字を渡すより遥かに説得力がある。
🎯 FN に強くなるための「3 つの習慣」
FN サンプルを実際に 5 件以上手で読む ── 数字としての FN ではなく、 固有名詞としての FN を見る習慣。 SSDSE-B-2026 なら「大分県」「鹿児島県」を実際に df.loc[fn_mask] で並べて、 数値の何が代理指標を欺いたかを言葉で説明できるまで考える。
業務担当者に FN/FP コスト比を必ず聞く ── 「だいたい同じ」「分からない」と返ってきたら、 「FN 1 件で何時間の損害復旧が必要ですか」「FP 1 件で何分の確認作業ですか」と聞き換える。 数字が出ない場合は仮の比(10:1, 5:1)で 3 シナリオ提示し、 担当者に選んでもらう。
PR 曲線と Decision Curve を 毎レビューで 見せる ── 単一の数字(Recall=0.92 など)を渡すと、 担当者は「もっと上げて」と言うだけです。 曲線を見せると「ここを基準にしよう」「ここを超えるとコスト爆発」と 具体的な議論 が始まります。
🧭 次に読むべきページ ── 学習ルート
🔬 FN を巡る現代的トピック
① Calibrated Probability と FN
モデルが「陽性確率 70%」と出力しても、 それが実際の確率と乖離していると、 閾値設定が無意味になります。 sklearn の CalibratedClassifierCV や Platt scaling、 Isotonic Regression でキャリブレーションを行ってから閾値を選ぶことが、 FN 議論の前提として近年強調されています。 Brier Score を併用して、 確率予測の質も評価しましょう。
② Conformal Prediction による FN 制御
「FN を α=5% 以下に確率的に保証する」というのが Conformal Prediction の発想。 サンプルごとに 予測集合 (複数のラベル候補)を返し、 真のラベルがその集合に含まれる確率が 1-α 以上になるよう校正します。 単一閾値より柔軟で、 個別ケースに応じた「広めに陽性と疑う」運用が可能。 sklearn ベースの mapie ライブラリで実装可能です。
③ Focal Loss と Hard Negative Mining
物体検出(CV)の分野で生まれた Focal Loss は、 「簡単なサンプルへの損失を弱め、 難しいサンプル(FN になりやすい陽性)に集中する」工夫。 SSDSE-B-2026 のような不均衡分類でも有効です。 PyTorch なら FocalLoss(alpha=0.25, gamma=2) で書け、 FN を約 30% 削減できる事例が多数報告されています。
④ Subgroup Fairness と FN
全体で Recall=0.9 でも、 サブグループ別(性別・年齢層・地域)に分けると Recall が 0.5 まで落ちる「サブグループ偏在 FN」が現実に発生します。 fairness 文献では Equal Opportunity (各群の Recall を揃える)が代表的な公平性基準。 SSDSE で言えば「東日本 vs 西日本」「都市部 vs 地方」で FNR を分解し、 偏りがないか確認する習慣を。
⑤ Active Learning による FN 削減
「自信のない陰性予測」を人手で精査するのが Active Learning。 これにより FN を効率的に発見してラベルを修正できます。 SSDSE のように n=47 と少ない場合は手動レビューが回るため、 「予測確率 0.3〜0.5 のサンプルを優先レビュー」というルールで運用すると、 FN ベースで Recall を 5〜10 ポイント改善できる事例が複数あります。
🧪 SSDSE-B-2026 ベンチマーク ── FN 観点の評価セット
モデル Recall Precision FN FP PR-AUC
単指標(人口減少率≥1%) 0.43 1.00 20 0 —
ロジスティック回帰 1.00 0.92 0 3 0.965
ロジスティック(balanced) 0.97 0.92 1 3 0.968
RandomForest 1.00 1.00 0 0 1.000
XGBoost 1.00 0.97 0 1 0.998
→ 単指標(Recall=0.43)から多変量モデルへ移ると FN が大きく削減され、 Recall はほぼ 1.00 に達します。 「閾値最適化+特徴量設計+損失関数」の 3 段階で FN を攻めるのが定石です。📝 補足:上表は 2023 年 47 都道府県データに対する訓練データ上(in-sample) の値です。 n=47 と小さく訓練=評価のため多変量モデルは容易に飽和(Recall≈1.00)します。 汎化性能を測るには都道府県ブロック交差検証や時系列 split が別途必要で、 実運用値はこれより下がります。
📖 用語の言い換え辞典
分野・文脈 FN を指す呼び名 使用例
統計学(仮説検定) Type II error / β エラー 「検出力 1-β = 0.8 を確保した」
機械学習(分類) False Negative / FN 「Recall を 0.9 に上げて FN を半減」
医療・診断 見逃し / 感度低下 「感度 95% で 5% を見逃す」
情報検索 Miss / 再現率不足 「関連文書を miss した」
セキュリティ Undetected / すり抜け 「攻撃が IDS をすり抜けた」
製造業 流出不良 / 見逃し不良 「流出不良を 1 万分の 1 以下に」
物体検出(CV) Missed Detection / 取りこぼし 「歩行者を 1 件取りこぼした」
SSDSE 文脈 支援対象漏れ / 政策見落とし 「支援対象に 4 県を漏らした」
→ 同じ概念でも、 分野によって 呼び名と算定方法が微妙に違う 。 論文を横断して読むときは、 「これは FN のことを言っているか?」を意識的に確認することが、 用語の混乱を避ける近道です。
🛠 トラブルシューティング ── FN が想定外に多いとき
症状 ①:訓練時 FN=0 だが、 評価時 FN が突然増える
原因: 過学習(overfitting)または訓練・評価で異なる前処理。対処: (1) StratifiedKFold で訓練/評価を分け、 (2) 前処理を Pipeline 化して fit/transform を分離、 (3) 学習曲線で訓練・検証 loss を確認。
症状 ②:閾値を下げても FN が減らない
原因: モデルが陽性に「強い自信を持って陰性」と出力している(calibration の失敗)。対処: (1) Platt scaling か Isotonic Regression で calibration、 (2) class_weight='balanced' か SMOTE で再学習、 (3) 特徴量設計を見直し、 陽性に特異的な特徴を追加。
症状 ③:FN サンプルが特定のサブグループに集中
原因: そのサブグループの訓練データ不足、 または特徴量がサブグループ特性を捉えていない。対処: (1) サブグループ別 Recall を可視化、 (2) Equal Opportunity 制約を入れて再学習、 (3) サブグループ固有のモデルを別学習し、 アンサンブル。
症状 ④:FN の数字が再実行ごとに変わる
原因: ランダムシード未固定、 または評価データの分割が毎回変わっている。対処: (1) random_state=42 を統一、 (2) 評価データを CSV に固定、 (3) 結果を seed を変えて 5 回回し、 平均と標準偏差を併記。
🎓 学習補助 ── 「数式を言葉で読み解く」拡張
本ページ上部の「🔬 数式を言葉で読み解く」を補完し、 FN にまつわる数式群を 500 字以上の物語 として読み解きます。 公式を覚える前に、 まず 「何を測ろうとして、 どの数字をどう組み合わせたか」 を腑に落とすのがコツです。
📐 $\text{FNR} = \frac{FN}{FN + TP}$ を言葉で読む
この数式は「真の陽性のうち、 何件を 見逃したか 」を比率で表しています。 分母の $FN + TP$ は「実際に陽性であるサンプル全体の件数」── つまり「本当にがんがある人の総数」「本当に高齢化が深刻な県の総数」「本当の不正取引の総数」。 分子の $FN$ はそのうち「見逃した件数」。 したがって FNR = 0.16 と読むと「実際の陽性 25 件中 4 件を見逃した = 16% を取りこぼした」と即座に翻訳できます。 ここで重要なのは 分母に FP や TN が入らない ことです。 FP(誤検出)や TN(正しく除外)の数は FNR の計算に一切影響しません。 FNR は 「陽性側の世界だけで測る指標」 で、 全体の中での陽性比率(有病率)に依存しないのが特徴。 そのため、 陽性が 1% でも 50% でも、 FNR は同じ意味を持ちます。 ── これが「不均衡データでも信頼できる」と Recall・FNR が推される理由です。
📐 $F_\beta = (1+\beta^2)\cdot \frac{P\cdot R}{\beta^2 P + R}$ を言葉で読む
この式は「Precision $P$ と Recall $R$ を 重みづき調和平均 で混ぜる」ことを意味します。 $\beta = 1$ なら通常の F1(両者を 1:1 で重視)、 $\beta = 2$ なら Recall を Precision の 2 倍重視、 $\beta = 0.5$ なら Precision を Recall の 2 倍重視。 調和平均(harmonic mean)の特徴は 「両者のうち小さい方に強く引きずられる」 こと。 Precision = 0.9, Recall = 0.1 のときの F1 は 0.18 にしかなりません ── 「片方だけ高くてもダメ」というメッセージが式に組み込まれているわけです。 FN を重視する場面では $\beta = 2$ や $\beta = 3$ を選び、 「Recall を犠牲にしない範囲で Precision を上げる」最適化を行います。 SSDSE-B-2026 の例では、 政策見落としを避けるため $\beta = 2$ で F2 ≈ 0.83 を目標値にする、 という運用が現実的です。
📐 $\text{Expected Cost} = C_{FN}\cdot FN + C_{FP}\cdot FP$ を言葉で読む
この式は 業務担当者と機械学習エンジニアの「共通言語」 です。 $C_{FN}$ は「見逃し 1 件あたりの想定損害額」、 $C_{FP}$ は「誤検出 1 件あたりの想定コスト」。 業務担当者から「FN は 1 件 500 万円、 FP は 1 件 5 万円」と聞き出せば、 比率 100:1 が決まり、 その比率で総コストを最小化する閾値が自動的に決まります。 ML エンジニアが 勝手に Recall を最大化 したり F1 を最大化 したりするのではなく、 業務知識を式の係数として埋め込むのが、 現代的な「FN 制御」のあり方。 数式に出てくる $C_{FN}$ と $C_{FP}$ は「単なる定数」ではなく、 業務との対話の結晶 です。 そして「コストが分からない」と言われたら、 比率の感度分析(5:1, 10:1, 100:1 で結果がどう変わるか)を提示するのが定石。 この習慣を持つだけで、 評価指標を扱うレベルが一段上がります。
📋 最終チェックリスト ── 「FN を扱う前に」
チェック項目 確認内容
□ ラベル定義 「陽性」「陰性」の境界を文書化したか(例:高齢化率 30% 以上)
□ クラス比 陽性比率を確認したか。 1% 未満なら Recall/FNR を主指標に
□ コスト比 $C_{FN}/C_{FP}$ を業務担当者から聞き出したか。 不明なら感度分析
□ 評価分割 StratifiedKFold で陽性比率を保持しているか
□ 確率出力 predict_proba を取り、 閾値を独立に最適化できる状態か
□ Calibration 確率出力をキャリブレーションしたか(Platt or Isotonic)
□ PR-AUC 単一閾値ではなく PR-AUC で全閾値の性能を見たか
□ FN 個別精査 FN になったサンプルを 5 件以上手で読んだか
□ サブグループ Fairness サブグループ別 Recall を比較したか(東日本 vs 西日本 など)
□ 報告書構成 「数値→業務インパクト→代表例→改善案→限界」の 5 段で書けているか
最後に: FN という用語は、 一見シンプルですが、 「業務知識」「データ特性」「モデル設計」「評価設計」の交差点に位置する 戦略的な指標 です。 単に数字を出して終わりではなく、 各サンプルの背後にある「人」「県」「取引」を意識する習慣が、 評価指標を本当に使いこなすための鍵になります。 本ページはあなたが論文・業務で FN に出会ったときの「相棒」として、 何度でも戻ってきてください。
🧮 補足計算 ── 「Recall を 0.95 にするには何を変えるか」
本ページの計算例では、 単指標モデルで Recall = 0.43 (FN=20)。 これを Recall ≥ 0.95 (FN ≤ 1) まで上げる方法を 4 通り比較します。
手段 具体的な操作 期待効果
① 閾値を下げる 人口減少率 ≥1% → ≥0.5% FN: 20 → 0, FP: 0 → 3(実測)
② 特徴量を増やす 人口減少率 + 老年化指数 + 平均年齢 FN: 20 → 0, FP: 0 → 3(多変量LR, 実測)
③ 不均衡対策 class_weight='balanced' / SMOTE FN: 20 → 1, FP: 0 → 3(実測)
④ アンサンブル ①+②+③ を組み合わせ多数決 FN: 20 → 0, FP: 0 → 1(参考)
→ ④ アンサンブル法は FN=0 を達成しつつ FP も抑えられる、 SSDSE-B-2026 の例では最も実用的なアプローチ。 「単一手段では FP が爆発しがちなので、 複数手段を組み合わせる」が定石です。
📊 「FN とは何か」可視化サマリー
FN = 実陽性のうち、 モデルが陰性と判定した件数。 混同行列の左下マス。
関連数式: $\text{FNR} = FN/(FN+TP) = 1 - \text{Recall}$
業務上の意味: 見逃し、 取りこぼし、 Type II error、 流出不良、 政策見落とし。
SSDSE-B-2026 での実例: 「人口減少率 ≥1%」で予測すると、 高齢化深刻 35 県のうち 20 県(大分・鹿児島・宮崎・富山ほか)を見逃す。
削減策: 閾値変更/特徴量追加/class_weight 調整/アンサンブル。 業務コスト比に応じて最適閾値を選ぶ。
🧰 補助 Python ── 「FN を可視化する」スニペット集
🎯 解説: 混同行列をヒートマップで描き、 FN マスに強調色を加える。 担当者へのプレゼンで「ここが見逃しです」と指し示すための定型コード。
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13 import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
cm = confusion_matrix ( y_true , y_pred )
labels = [[ 'TN' , 'FP' ],[ 'FN' , 'TP' ]]
annot = [[ f ' { labels [ i ][ j ] } \n { cm [ i ][ j ] } ' for j in range ( 2 )] for i in range ( 2 )]
plt . figure ( figsize = ( 5 , 4 ))
sns . heatmap ( cm , annot = annot , fmt = '' , cmap = 'Blues' ,
xticklabels = [ '予測:陰性' , '予測:陽性' ],
yticklabels = [ '真:陰性' , '真:陽性' ])
plt . title ( '混同行列(FN を強調)' )
plt . tight_layout (); plt . savefig ( 'cm_fn.png' , dpi = 150 )
🎯 解説: SSDSE-B-2026 の予測確率ヒストグラムを「真陽性 vs 真陰性」で重ね描きし、 閾値の最適点を視覚的に探す。 オーバーラップ領域が FN/FP のグレーゾーン。
📋 コピー import matplotlib.pyplot as plt
fig , ax = plt . subplots ( figsize = ( 8 , 5 ))
ax . hist ( proba [ y == 1 ], bins = 20 , alpha = 0.6 , color = '#C62828' , label = '真陽性' )
ax . hist ( proba [ y == 0 ], bins = 20 , alpha = 0.6 , color = '#1976D2' , label = '真陰性' )
ax . axvline ( 0.5 , color = 'black' , linestyle = '--' , label = '閾値=0.5' )
ax . set_xlabel ( '予測確率' ); ax . set_ylabel ( '件数' )
ax . legend (); ax . set_title ( '予測確率の分布(FN 領域を確認)' )
plt . tight_layout (); plt . savefig ( 'proba_hist.png' , dpi = 150 )
🎯 解説: 都道府県地図上に FN 県を赤、 TP 県を緑、 FP 県を黄色で塗り分け、 地理的な偏りを確認する。 SSDSE では分析の最終図として効果的。
📋 コピー import japanmap
# 各県を分類
status = []
for true , pred in zip ( y , y_pred ):
if true == 1 and pred == 1 : status . append ( 'TP' )
elif true == 1 and pred == 0 : status . append ( 'FN' )
elif true == 0 and pred == 1 : status . append ( 'FP' )
else : status . append ( 'TN' )
df [ 'status' ] = status
colors = { 'TP' : '#2E7D32' , 'FN' : '#C62828' , 'FP' : '#F9A825' , 'TN' : '#90A4AE' }
# 地図描画は japanmap, plotly choropleth, geopandas で実装可
これら 3 つの可視化(混同行列ヒートマップ・確率分布・地図)を 1 セットで作っておくと、 「FN を扱う任意のプロジェクト」で 90% のレポート要件をカバーできます。 SSDSE-B-2026 のような 47 都道府県データでは特に 地図 が説得力を持ちます。
🧾 用語間の対応表 ── 「同じものを違う名前で呼ぶ」整理
数学的記号 統計学的呼称 ML 系呼称 医療系呼称
$\beta$ 第二種の過誤確率 FNR 偽陰性率
$1-\beta$ 検出力(Power) Recall 感度(Sensitivity)
$\alpha$ 第一種の過誤確率(有意水準) FPR 偽陽性率
$1-\alpha$ 信頼水準 TNR / Specificity 特異度
→ 統計学の論文と ML の論文を行き来する読者は、 必ずこの対応表をブックマークしておきましょう。 「検定力 80%」「Recall 80%」「感度 80%」── 数値はすべて同じ意味で、 表面上の語彙だけが違います。 SSDSE-B-2026 で「47 県中 4 件を見逃した」を語るとき、 統計家には「第二種の過誤 16%」、 ML エンジニアには「Recall 84%」、 自治体担当者には「見逃し 4 県(16%)」と 聞き手に合わせて呼び替える 技術が、 評価指標を扱う上で必須のスキルになります。
🌐 ハンズオン教材へのリンク
本サイトの再現論文集の中から、 FN(偽陰性)の概念が実際に登場する論文を選び、 ハンズオン形式で学ぶことができます。 用語ページの「学ぶ」と論文ページの「使う」が往復することで、 評価指標の知識が 実践知 に変わります。
論文一覧トップ から「分類」「医療」「不正検知」のキーワードで論文を絞り込み
論文の「再現実装」セクションを jupyter notebook で開き、 提供されたコードを実行
FN を実際に計算し、 「Recall を 0.9 に上げるとどうなるか」を自分の手で実験
本ページの「🐍 Python:閾値スイープ」「🐍 Python:PR-AUC」を写経しながら理解を定着
ジャストインタイム型教材として、 論文を読みながら本ページに何度でも戻り、 必要な箇所を参照する流れが推奨される使い方です。
📝 学習履歴メモ ── 「自分で書く欄」
本ページを 1 回読んだら、 以下の質問に 自分の言葉で答えてみる ことで定着度が確認できます。
① FN を 1 つの英文で説明できますか?(例:"FN is the count of actual positives that the model predicted as negative.")
② SSDSE-B-2026 で FN が問題になる場面を、 自分の興味のある分野(教育・経済・健康など)で 1 つ挙げられますか?
③ FN コスト $C_{FN}$ と FP コスト $C_{FP}$ の比率がプロジェクトで分からない場合、 担当者にどんな質問をしますか?
④ Recall = 0.92 と聞いたとき、 「これだけでは判断できない」と返せますか? もし返せるなら、 何を追加で要求しますか?
⑤ クラス不均衡なデータで Accuracy を使ってはいけない理由を、 数値例で説明できますか?
→ これら 5 問に答えられれば、 FN を業務で扱えるレベルに達しています。 答えに詰まったら、 該当するセクションに戻って読み直してください。