AI数学講座 0.4.1: 確率の基本と確率変数 – 不確実な医療データをAIで扱う第一歩
【この記事で学ぶこと】
- 確率の基本的な定義(事象、確率空間)を、医療現場の例を用いて説明できるようになる。
- 「確率変数」が、現実世界の出来事と数値を結びつける「橋渡し」として機能する理由を理解する。
- Pythonを用いて簡単な確率シミュレーションを実行し、理論的な確率と実験的な確率の関係性を視覚的に確認できる。
【対象読者・前提知識】
- AIの背景にある数学の考え方を、直感的に学びたいと考えている医療従事者、研究者、学生の方。
- AIやプログラミングの経験は問いませんが、これまでの講座(特に0.2.1: スカラー、ベクトル、行列)で触れた「データを数値として扱う」という考え方に触れていると、よりスムーズに理解できます。
はじめに:なぜAIに「確率」が必要なのか?
これまでの講座で、私たちは線形代数(データの表現)と微分(学習の仕組み)という、AIの強力なツールを見てきました。微分が「損失」という山の傾斜を計算し、AIが「谷底」という正解へ向かう羅針盤になる、という話もしましたね。
しかし、実際の医療現場は、常に「100%黒」か「100%白」かで判断できるほど単純ではありません。「この患者さんが3年以内に再発する可能性は70%」「この検査の陽性的中率は約85%」といったように、私たちは日々不確実性 (Uncertainty) の中で意思決定を行っています。
AIが真に医療現場で役立つパートナーとなるためには、この「不確実性」を数学の言葉で、つまり確率 (Probability) を使って、定量的かつ論理的に扱えるようにならなければなりません。
今回の講座から始まる「確率・統計」のセクションでは、AIがこの不確実な世界をどのように捉え、意思決定を行っているのか、その根幹にある考え方を探求します。今回はその第一歩として、「確率とは何か?」という基本に立ち返り、現実の出来事を数値に変換するための重要な概念「確率変数」について学んでいきましょう。
1. 確率とは何か? — 「確からしさ」を表現する世界共通の言語
私たちは日常的に「確率50%」のような言葉を使いますが、その数学的な定義を少しだけ確認しておきましょう。これは、今後のAIの挙動を理解する上で非常に重要です。
- 試行 (Trial): コインを投げる、サイコロを振る、患者さんを一人選んで検査を行う、など、結果が偶然によって決まる行為。
- 事象 (Event): 試行の結果として起こり得ること。例えば、「コインの裏が出る」「サイコロの目が1である」「検査が陽性である」など。
- 根元事象 (Elementary Event): これ以上分解できない、最も基本的な事象の集まり。
- 標本空間 (Sample Space): 起こりうる全ての根元事象を集めた集合。例えば、サイコロを1回振る試行の標本空間は \(\Omega = \{1, 2, 3, 4, 5, 6\}\) です。
- 確率 (Probability): ある事象が起こる「確からしさ」を、0から1の間の数値で表現したもの。標本空間の全ての根元事象の確率を足し合わせると、必ず1になります (1, 2)。
例えば、ある疾患を持つ患者100人に対して新薬を投与する臨床試験を考えます。この試行における標本空間は、「薬が奏効した」「奏効しなかった」の2つの事象から成ります。もし80人の患者さんに効果が見られたなら、「薬が奏効する」という事象が起こる確率は、\(P(\text{奏効}) = \frac{80}{100} = 0.8\) と推定されます。これが、AIが確率を扱う上での基本的な考え方です。
2. 確率変数 — 「現実の出来事」と「コンピュータが扱う数値」を結ぶ橋渡し
さて、AI(コンピュータ)は「薬が奏効した」という言葉を直接理解できません。AIが扱えるのは、あくまで数値です。ここで、現実世界の出来事と数値を結びつけるための、非常に重要な「翻訳機」が登場します。それが確率変数 (Random Variable) です。
確率変数とは、試行の結果(事象)に応じて、特定の値(数値)をとる変数のことです。通常、大文字のアルファベット(例: \(X, Y\))で表されます。
先ほどの臨床試験の例で考えてみましょう。
「薬が奏効したか否か」という結果を、確率変数\(X\)を使って数値に翻訳します。
- 事象「薬が奏効した」 → \(X = 1\) とする
- 事象「奏効しなかった」 → \(X = 0\) とする
このようにルールを決めることで、私たちは「薬が奏効する確率」を、AIが扱える \(P(X=1)\) という数式で表現できるようになります。確率変数は、現実の出来事と数学の世界をつなぐ、不可欠な橋渡し役なのです。
確率変数には、その「とりうる値」の性質によって、大きく2つの種類があります。
- 離散確率変数 (Discrete Random Variable): とびとびの値(整数など)をとる変数。
例: サイコロの目 (\(X \in \{1, 2, 3, 4, 5, 6\}\))、コインの表裏 (\(X \in \{0, 1\}\))、ある日の外来患者数など。 - 連続確率変数 (Continuous Random Variable): ある範囲内の任意の実数値をとる変数。
例: 患者さんの身長や体重、血圧、検査値など。
この2つの区別は、次回以降に登場する「確率分布」を理解する上で重要になってきます。
3. Pythonで確率をシミュレートする
言葉だけの説明では、イメージが湧きにくいかもしれませんね。実際にPythonコードを動かして、確率の性質を体感してみましょう。
ここでは、公平な6面のサイコロを何度も振ったとき、それぞれの目が出る確率が、理論値である \(1/6\) (約0.167) に本当に近づいていくのかをシミュレーションで確かめます。
【実行前の準備】
以下のコードで日本語のグラフを表示させるには、あらかじめターミナルやコマンドプロンプトで pip install japanize-matplotlib
を実行してライブラリをインストールしてください。
graph TD A(開始) --> B["シミュレーション設定
(試行回数: 10,000回)"]; B --> C["設定回数サイコロを振る
(1〜6の乱数を生成)"]; C --> D["各目(1〜6)の
出現回数を集計"]; D --> E["観測された確率を計算
(出現回数 / 試行回数)"]; E --> F["結果をグラフで可視化
・観測確率を棒グラフで描画
・理論確率(1/6)を点線で描画"]; F --> G["観測された確率を
数値で出力"]; G --> H(終了);
# 必要なライブラリをインポートします
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib # matplotlibの日本語表示を簡単にする
# --- シミュレーションの設定 ---
# サイコロを振る回数
num_trials = 10000
# --- シミュレーションの実行 ---
# 1から6までの整数をランダムにN回生成します (N回サイコロを振ることに相当)
rolls = np.random.randint(1, 7, size=num_trials)
# --- 結果の集計 ---
# 各目が出た回数を数えます
# np.uniqueは配列のユニークな要素と、その出現回数を返してくれます
values, counts = np.unique(rolls, return_counts=True)
# 各目が出る確率(観測された確率)を計算します
observed_probabilities = counts / num_trials
# --- 結果の可視化 ---
plt.figure(figsize=(10, 6)) # グラフのサイズを設定
# 棒グラフで各目が出た確率を表示します
plt.bar(values, observed_probabilities, label='観測された確率', color='skyblue')
# 理論上の確率(1/6)を点線で描画します
plt.axhline(y=1/6, color='red', linestyle='--', label='理論上の確率 (1/6 ≈ 0.167)')
# グラフの見た目を整えます
plt.title(f'サイコロを{num_trials}回振ったときの各目の出現確率', fontsize=16)
plt.xlabel('サイコロの目', fontsize=12)
plt.ylabel('確率', fontsize=12)
plt.xticks(values) # x軸の目盛りを1,2,3,4,5,6に設定
plt.ylim(0, 0.25) # y軸の範囲を設定
plt.legend() # 凡例を表示
plt.grid(axis='y', linestyle='--', alpha=0.7) # y軸のグリッド線を表示
plt.show() # グラフを表示
print("--- 観測された確率 ---")
for v, p in zip(values, observed_probabilities):
print(f"目 {v}: {p:.4f}")

(注:上記コードを実行すると、結果のグラフが表示され、コンソールには以下の実行結果が出力されます。)
▼コンソールへの出力結果
--- 観測された確率 ---
目 1: 0.1683
目 2: 0.1664
目 3: 0.1658
目 4: 0.1687
目 5: 0.1640
目 6: 0.1668
このコードを実行すると、サイコロを振る回数(num_trials
)を増やせば増やすほど、観測された確率(青い棒グラフ)が、理論上の確率(赤い点線)に近づいていくことが視覚的に確認できるはずです。これは大数の法則として知られる、確率論の基本原則です (3)。
まとめ
- 確率は、不確実な事象が起こる「確からしさ」を0から1の数値で表現する、世界共通の言語です。
- 確率変数は、現実世界の出来事(例:検査陽性)と数値(例:1)を結びつけ、AIが確率を扱えるようにするための重要な「翻訳機」です。
- AIは、この確率という概念を用いることで、診断の信頼度を示したり、治療法の効果を予測したりと、医療現場の不確実性を伴う問題に取り組むことができます。例えば、画像診断AIは「この画像に悪性腫瘍が存在する確率は95%です」といった形で、その予測に「自信度」を添えて提示します (4, 5)。
確率の基礎を理解することは、AIがどのようにして「たぶん」「おそらく」といった人間の思考に近い判断を下しているのか、その根源を理解することに繋がります。
次回は、この確率の考え方を一歩進め、ある情報が与えられたときに、別の事象の確率がどう変化するのかを学ぶ「0.4.2: 条件付き確率とベイズの定理」について探求します。これは、AIによる診断推論の根幹をなす、非常に重要なテーマです。
参考文献
- DeGroot MH, Schervish MJ. Probability and Statistics. 4th ed. Pearson; 2012.
- Wasserman L. All of Statistics: A Concise Course in Statistical Inference. Springer; 2004.
- Yates F. The Place of the Principle of Randomization in the History of Experimental Design. In: Experimental Design: Selected Papers of Frank Yates, C.B.E., Sc.D., F.R.S. Charles Griffin & Company Ltd; 1970. p. 13-22.
- LeCun Y, Bengio Y, Hinton G. Deep learning. Nature. 2015;521(7553):436-444.
- Rajkomar A, Dean J, Kohane I. Machine Learning in Medicine. N Engl J Med. 2019;380(14):1347-1358.
- Bishop CM. Pattern Recognition and Machine Learning. New York: Springer; 2006.
- James G, Witten D, Hastie T, Tibshirani R. An Introduction to Statistical Learning. Springer; 2013.
- 法令遵守について
本教材はあくまで一般的な学習参考用の内容であり、医師法、薬機法、個人情報保護法、医療広告ガイドライン等の適用判断については、必ず厚生労働省・PMDA・経済産業省・各学会などの最新の法令・ガイドラインをご自身でご確認のうえご利用ください。 - 医療行為の責任について
本資料で紹介する AI 技術・手法は臨床診断・治療の補助を目的としていますが、最終的な診断・治療方針の決定および報告書の承認は必ず医師などの専門資格保持者が行ってください。AI の結果のみを鵜呑みにせず、Human-in-the-Loop の原則に則り、人間専門家による検証プロセスを実施してください。
本コンテンツは、医療AIに関する技術的な学習と理解を深めることを目的としており、特定の医療行為を推奨、あるいは医学的助言を提供するものではありません。実際の臨床判断は、必ず担当の医療専門家にご相談ください。 - プライバシー保護について
本コース内で紹介するデータセットを利用する際は、各データセットのライセンス条件および研究倫理指針を厳守し、患者情報の匿名化・同意取得など必要な個人情報保護措置を確実に講じてください。 - 知的財産権について
本記事中の図表・コード・文章などを二次利用または転載する場合は、必ず引用元を明示し、権利者の許諾および適切なライセンス表記を行ってください。 - 情報の正確性について
本資料に記載する数値、事例、ライブラリのバージョン情報などは執筆時点の情報に基づいています。機能やライブラリはアップデートにより変更される可能性がありますので、必ず最新の公式ドキュメントや文献をご確認のうえ適宜アップデートしてご活用ください。 - AI 活用の留意点
本内容には AI の提案をもとに作成した部分が含まれていますが、最終的には専門家の監修・編集のもとで公開しています。特に生成系 AI を用いる場合は、ハルシネーション(誤情報)やバイアスに十分注意し、必ず人間専門家が結果を検証してください。 - 免責事項
本資料の利用によって生じたいかなる損害についても、著作者および提供者は一切の責任を負いません。研究・学習目的以外での利用はご遠慮ください。 - 対象読者・前提知識
本教材は医療従事者および AI 技術に関心のある技術者を主対象とし、Python の基礎知識や統計学の初歩的理解を前提としています。 - 環境・互換性
本資料で扱うコード/ライブラリは執筆時点の特定バージョンを前提としています(例:PyTorch 2.0、Transformers 4.x)。実行環境(OS、ハードウェア、依存パッケージ)によっては動作しない場合がありますのでご注意ください。 - 免責範囲の明確化
本教材に記載された内容はいかなる場合も「診療行為」としての効力を持ちません。製品やサービスの導入検討にあたっては、別途法務・品質保証部門との協議および正式な承認プロセスを経てください。
For J³, may joy follow you.
コメント