論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説(ジャストインタイム型データサイエンス教育)
AI倫理・公平性・プライバシー
AI Ethics, Fairness & Privacy
「できる」と「やってよい」は別 — 社会に出すAIに必要な視点
AI倫理公平性プライバシー規制

🔖 キーワード索引

AI倫理(AI Ethics)」は、 AI・データ分析を社会に適用するときに「できる」と「やってよい」を切り分ける原則と実践の体系。 本ページでは AI倫理を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・制度を含み、 文献検索や学習計画の起点になる。

AI倫理公平性透明性説明責任バイアスプライバシー説明可能性 (XAI)AIガバナンスGDPREU AI ActSSDSE-B-2026

これらのキーワードは「AI倫理の理解 → 適用 → 検証」のプロセスを構成する。 各セクションで詳しく解説する。

🧭 セクションへジャンプ

各リンクをクリックすると、 該当セクションが開きます:

なぜAI倫理 AI原則 公平性 公平性指標 統計的差別 潜むバイアス 説明可能性 (XAI) SHAP / LIME プライバシー 匿名化 差分プライバシー 連合学習 同意とオプトイン AIガバナンス 規制 GDPR EU AI Act Deepfake・誤情報

💡 30秒で分かる結論

🍰 まずはやさしく

AIを使うときのルールのようなものです。

社会に悪い影響が出ないようにします。

スマホの個人情報を守ることも含まれます。

AIの公平性やプライバシーについて読みます。

🧭 全体像 — AI 倫理の主要トピック

🤔 なぜ AI 倫理が必要か

AI システムは「自動化されたスケール」で意思決定を下す → 過去の不公平が拡大再生産される危険。

有名な事例

📋 主要な AI 原則

共通する 5 原則(OECD・G7・EU・日本ガイドライン)

  1. 人間中心・人権尊重
  2. 公平性・無差別
  3. 透明性・説明可能性
  4. 頑健性・安全性
  5. 責任・説明責任 (Accountability)

日本の「AI 利用ガイドライン」(2024)

総務省・経産省が共同で策定。 提供者・利用者・公開者の責務を整理。

⚖️ 公平性 (Fairness)

センシティブ属性 $A$(性別・人種・年齢等)に対し、 予測 $\hat{Y}$ が不当に依存しないこと。

主な公平性指標

指標 定義 何を保証
統計的均衡 (Demographic Parity)$P(\hat{Y}=1|A=a) = P(\hat{Y}=1|A=b)$グループ間の正例率の均等
等オッズ (Equalized Odds)$P(\hat{Y}=1|A=a, Y=y) = P(\hat{Y}=1|A=b, Y=y)$TPR/FPR の均等
機会均等 (Equal Opportunity)$P(\hat{Y}=1|A, Y=1)$ が均等TPR の均等
予測値均衡 (Predictive Parity)$P(Y=1|\hat{Y}=1, A)$ が均等PPV の均等
個人公平性 (Individual Fairness)似た個人は似た予測個別レベルの公平

不可能性定理 (Chouldechova 2017)

「Demographic Parity」「Equalized Odds」「Predictive Parity」は同時には満たせない(基底率が異なる場合)。 文脈に応じてどの公平性を優先するかの選択が必要。

統計的差別

個人ではなく「グループ統計」で判断する不公平。 例:「保険料を年齢で決める」のは統計的差別の代表例。 合理性と差別性のグレーゾーン。

データに潜むバイアス

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1301(15歳未満人口) A1303(65歳以上人口) A4101(出生数) A9101(婚姻件数) 北海道 5,092,000 514,000 1,681,000 24,430 17,281 東京都 14,086,000 1,513,000 3,205,000 86,348 71,774 沖縄県 1,468,000 236,000 350,000 12,549 6,316 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from fairlearn.metrics import demographic_parity_difference, equalized_odds_difference

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
X = df[['A1101', 'A1301', 'A1303', 'A9101']]      # 総人口/15歳未満/65歳以上/婚姻件数
rate = df['A4101'] / df['A1101'] * 1000            # 出生率(‰)
y = (rate >= rate.median()).astype(int)            # 正解: 出生率が中央値以上か
A = np.where(df['A1101'] >= 2_000_000, '都市部', '地方')   # センシティブ属性の代役

X_tr, X_te, y_tr, y_te, A_tr, A_te = train_test_split(
    X, y, A, test_size=0.3, random_state=0, stratify=y)
model  = RandomForestClassifier(random_state=0).fit(X_tr, y_tr)
y_pred = model.predict(X_te)

dpd = demographic_parity_difference(y_te, y_pred, sensitive_features=A_te)
eod = equalized_odds_difference(y_te, y_pred, sensitive_features=A_te)
print(f'正解率      : {(y_pred == y_te).mean():.3f}')
print(f'統計的均衡差: {dpd:.3f}')
print(f'等オッズ差  : {eod:.3f}')
📤 実行例(実測) 正解率 : 0.918 統計的均衡差: 0.101 等オッズ差 : 0.093

🔍 説明可能性 (XAI)

モデルの予測理由を人間が理解できる形で示す技術群。

分類

SHAP(Shapley Additive exPlanations)

協力ゲーム理論の Shapley 値に基づき、 各特徴量の予測寄与を公平に分解。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import shap
import numpy as np

# 上のブロックで学習した model と X_te をそのまま使う
explainer = shap.TreeExplainer(model)
shap_values = np.asarray(explainer.shap_values(X_te))
# 2 クラス分類では (サンプル, 特徴量, クラス) の 3 次元。クラス 1 側を見る
print('shap_values.shape =', shap_values.shape)
mean_abs = np.abs(shap_values[:, :, 1]).mean(axis=0)
for f, v in zip(X_te.columns, mean_abs):
    print(f'  {f}: 平均|SHAP| = {v:.4f}')
📤 実行例(実測) shap_values.shape = (170, 4, 2) A1101: 平均|SHAP| = 0.0584 A1301: 平均|SHAP| = 0.1031 A1303: 平均|SHAP| = 0.1504 A9101: 平均|SHAP| = 0.1664

LIME(Local Interpretable Model-agnostic Explanations)

注目点の周辺で線形モデルを学習し、 局所的に近似説明。

PDP / ICE

Partial Dependence Plot:特徴量を動かしたときの予測平均。 ICE:個体ごとの予測。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4103(合計特殊出生率) L3221(消費支出(二人以上の世帯)) 北海道 5,092,000 1,681,000 1.06 296,888 東京都 14,086,000 3,205,000 0.99 341,320 沖縄県 1,468,000 350,000 1.6 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt      # 部分依存プロットの描画に必要
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import PartialDependenceDisplay

# ── この抜粋だけで動くように、モデル m と特徴量 X をここで作る ──
# (前の fairlearn の例はブラウザでは動かせないので、同じ列で作り直す)
_d = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
_d = _d[_d['SSDSE-B-2026'] == 2023]
X = pd.DataFrame({
    'A4103': pd.to_numeric(_d['A4103'], errors='coerce'),        # 合計特殊出生率
    '高齢化率': _d['A1303'] / _d['A1101'] * 100,                  # 高齢化率(%)
}).dropna()
y = _d.loc[X.index, 'L3221'].astype(float)                       # 消費支出
m = RandomForestRegressor(n_estimators=100, random_state=0).fit(X, y)

# 部分依存プロット: 1 つの特徴量を動かすと予測がどう変わるかを見る
PartialDependenceDisplay.from_estimator(m, X, ['A4103', '高齢化率'])  # 合計特殊出生率・高齢化率
plt.tight_layout()
plt.show()

🔒 プライバシー保護

匿名化技法

差分プライバシー (DP)

個人の有無で結果がほとんど変わらない保証。 Dwork ら 2006。 ノイズを加えて統計を計算。

$$P(M(D) \in S) \le e^\varepsilon P(M(D') \in S)$$

$\varepsilon$(プライバシー予算)が小さいほど強い保護。 米国 Census 2020 等で実装。

連合学習 (Federated Learning)

データを集めず、 端末上で学習しモデルの重みだけを集約。 スマホの予測変換等で実用化(Google)。

準同型暗号 / Secure Aggregation

暗号化したまま計算。 計算コスト大だが医療・金融で研究進行中。

🏛 AI ガバナンス

📜 主要な規制

GDPR(EU 一般データ保護規則、 2018)

EU AI Act(2024 採択、 2026 完全施行予定)

世界初の包括的 AI 規制。 リスクレベルで規制:

日本:改正個人情報保護法

米国:NIST AI Risk Management Framework

2023 公開。 任意ガイドラインだが業界標準化。 「Govern / Map / Measure / Manage」の 4 機能。

🎭 Deepfake と偽情報

⚖️ 公平性と精度のトレードオフ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from fairlearn.reductions import ExponentiatedGradient, DemographicParity
from sklearn.linear_model import LogisticRegression

base_clf  = LogisticRegression(max_iter=1000)
mitigator = ExponentiatedGradient(estimator=base_clf,
                                  constraints=DemographicParity())
mitigator.fit(X_tr, y_tr, sensitive_features=A_tr)

y_fair = mitigator.predict(X_te)
print(f'緩和前: 正解率 {(y_pred == y_te).mean():.3f} / 統計的均衡差 {dpd:.3f}')
print(f'緩和後: 正解率 {(y_fair == y_te).mean():.3f} / 統計的均衡差 '
      f'{demographic_parity_difference(y_te, y_fair, sensitive_features=A_te):.3f}')
📤 実行例(実測) 緩和前: 正解率 0.918 / 統計的均衡差 0.101 緩和後: 正解率 0.912 / 統計的均衡差 0.013

📍 あなたが今見ているもの

🍰 まずはやさしく

AIの使い方のまとめページです。

社会に受け入れられるAIを作るために使います。

部活の選抜で不公平がないようにすることに似ています。

ルールや法律についてまとめて読みます。

本ページでは、 AI 倫理を統合的に解説します。 公平性説明可能性 (XAI)プライバシー保護透明性規制(GDPR・EU AI Act・個人情報保護法)を一気通貫で扱います。

「AI モデルが高精度であること」と「社会で受け入れられること」は別です。 倫理は後付けではなく、 設計段階から組み込む必要があります。

🎨 Ethics by Design — 設計プロセスへの組み込み

🍰 まずはやさしく

AIを作る時の設計図のようなものです。

技術的にできても、社会に許されるか考えます。

買い物で特定の人だけ損をしない仕組みです。

AIを作る手順と注意点を読みます。

  1. 問題定義:誰のための・誰に影響する AI か
  2. 影響評価:誤判定で誰が損するかを群別に予測
  3. データ設計:偏りなくサンプリング、 センシティブ属性の取得
  4. モデル設計:解釈可能性・公平性を要件として組み込み
  5. 評価:精度・公平性・頑健性を多面的に
  6. ガバナンス:モデルカード・通報窓口・撤回手順
  7. 運用モニタリング:ドリフト・公平性の継続観測
  8. 退役:いつどう停止するかをあらかじめ計画

AI 倫理は「技術的に可能でも、 社会的に許されるのか」を問う領域。 採用 AI が性別で不利な判断を下す、 顔認証が特定の人種で誤検知が多い、 など実害が積み重なって体系化されてきた。 SSDSE-B-2026 のような都道府県集計値でも、 「離島を不利に扱うモデル」「過疎地の医療資源を低く評価するモデル」が無自覚に出来上がりうる。

💡 学習のコツ:直感で全体像を掴んだら、 次の「📐 定義・数式」で正確な意味を押さえ、 最後に「🧮 実値で計算してみる」で SSDSE-B-2026 の都道府県データを使った計算をなぞるのが効率的です。 比喩は厳密ではないので、 必ず数式と並べて確認してください。

AI 倫理 は「AIと社会」カテゴリの中核概念。 初めて触れる読者は、 まずこの「🎨 直感」セクションだけ通読し、 必要になった時点で「📐 数式」「🐍 Python」「⚠️ 落とし穴」へ戻る読み方が定着しやすいです。

📐 定義・数式 — AI 倫理

🍰 まずはやさしく

AI倫理を数式で表したものです。

言葉より速く正確に意味を伝えるために使います。

数学の公式でルールを確認する感覚です。

倫理を形作る要素と数式について読みます。

直感の次は、 厳密な定義を確認します。 数式は言語の一種で、 一度書き慣れれば「言葉より速く伝えられる」便利な道具。 慣れていない方は、 各記号が何を表すかを下の「🔬 数式を言葉で読み解く」で 1 つずつ確認してください。

【AI 倫理 の中心定義式】
$$ \text{Ethics} = \text{Fairness} \cap \text{Accountability} \cap \text{Transparency} \cap \text{Privacy} \cap \text{Safety} $$
この式が「AI 倫理」の骨格。 派生形・拡張形はここから生まれる。
📌 読み方のコツ:数式を見たら「左辺は何を定義しているか」「右辺の各項は何の合計・積・比か」を声に出して読み下してみる。 これだけで理解が大きく進みます。

🔬 数式を言葉で読み解く — 数式を「言葉」に翻訳

上の数式を眺めるだけでは身につかないので、 各記号がどんな役割を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。

左辺(結果側)
AI 倫理 で定義したい量。 解釈の対象。 単位・スケールを必ず確認する。
右辺(構成要素)
観測できる入力変数(SSDSE-B-2026 でいえば A1101・L3221 など)と推定対象パラメータ(β, σ 等)の組合せ。
添字 i, j, t
i=サンプル(県)、 j=変数、 t=時点。 SSDSE-B-2026 は i ∈ {1..47} 県、 t ∈ {2012..2023}。
和記号 Σ
「足し合わせ」を表す。 添字 i が 1 から n まで動く範囲を明示するのが習慣。
期待値 E[·]、 分散 Var[·]
「ランダム変数の平均」と「ばらつき」。 SSDSE-B-2026 のような集計値でも、 標本誤差・年次変動の文脈で使える。
📚 補足:同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表を確認しましょう。

🧮 SSDSE-B-2026 実値計算例 — 「消費支出」予測モデルに公平性指標を適用

SSDSE-B-2026(教育用標準データセット、 2023 年度)を総人口の中央値で「都市部 vs 非都市部」の 2 群に分け、 消費支出(二人以上の世帯)を予測する回帰モデルの誤差を群別に比較します。 これは公平性検査の最小例(地域属性で性能差が出ていないか)です。

グループ 予測平均 実測平均 MAE 公平性判定
都市部(総人口 中央値以上・24 県)302,867 円306,228 円13,131 円校正良好
非都市部(総人口 中央値未満・23 県)288,540 円285,033 円17,927 円誤差やや大
差(不均等)14,327 円21,195 円4,796 円監査対象
🎯 解説: SSDSE-B-2026(2023 年度)で消費支出を予測する回帰モデルを作り、 「都市部 / 非都市部」というグループ間で予測性能に差が出ていないかを検査する。 倫理は「後付け」ではなく「設計段階」で組み込むべき要素。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4103(合計特殊出生率) L3221(消費支出(二人以上の世帯)) 北海道 5,092,000 1,681,000 1.06 296,888 東京都 14,086,000 3,205,000 0.99 341,320 沖縄県 1,468,000 350,000 1.6 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]              # 2023年度・47都道府県
df['高齢化率'] = df['A1303'] / df['A1101'] * 100

# 都市部・非都市部を総人口の中央値で分割
median_pop = df['A1101'].median()
df['group'] = (df['A1101'] >= median_pop).map({True: '都市部', False: '非都市部'})

X = df[['A1101', 'A4103', '高齢化率']]           # 総人口・合計特殊出生率・高齢化率
y = df['L3221']                                  # 消費支出(二人以上の世帯)
m = LinearRegression().fit(X, y)
df['pred'] = m.predict(X)

for g, sub in df.groupby('group'):
    mae = mean_absolute_error(sub['L3221'], sub['pred'])
    print(f"{g}: pred平均={sub['pred'].mean():.0f}, "
          f"実測平均={sub['L3221'].mean():.0f}, MAE={mae:.0f}")
📥 入力例: data/raw/SSDSE-B-2026.csv 47 都道府県 × 12 年度 × 112 列(2023 年度のみ抽出して使用) A1101=総人口, A1303=65歳以上人口, A4103=合計特殊出生率, L3221=消費支出(二人以上の世帯)
📤 実行結果: 都市部: pred平均=300351, 実測平均=306228, MAE=15322 非都市部: pred平均=291166, 実測平均=285033, MAE=20555 → 非都市部の MAE は都市部の約 1.3 倍(誤差の偏り)
💬 読み方: 倫理的 AI は「平均精度の高さ」だけでなく「グループ別の最悪ケース」を見る。 非都市部の予測誤差は都市部の約 1.3 倍で、 このまま政策判断に使うと非都市部の予測が系統的に粗くなる。 SHAP 等で「なぜその予測か」を説明できる仕組みを併設し、 Disparate Impact < 0.8(4/5 ルール)などの基準と併せて監査する。

🧮 実値で計算してみる — SSDSE-B-2026

数式だけでは「実感」が湧きにくいので、 実データ data/raw/SSDSE-B-2026.csv(47 都道府県 × 12 年度)で 1 度手計算してみると理解が定着します。

SSDSE-B-2026 の 2023 年データで、 「都市集中度」を A1101 を使って計算すると、 上位 8 県(東京・神奈川・大阪・愛知・埼玉・千葉・兵庫・福岡)で全国人口の約 51% を占める。 もし AI が「人口の少ない県のデータを学習データから除外」する設計だと、 残り 39 県の生活実態はそもそもモデルに反映されない。 これは「データ被覆性 (Data Coverage)」の倫理問題に直結する。

都道府県A1101 総人口A1303 65 歳以上L3221 消費支出
東京都14,086,0003,205,000341,320
神奈川県9,229,0002,390,000306,565
大阪府8,763,0002,424,000271,246
愛知県7,477,0001,923,000300,221
埼玉県7,331,0002,012,000344,092
千葉県6,257,0001,756,000306,943

上記は SSDSE-B-2026 (2023) からの抜粋。 手計算で確認した値が、 後述の Python 実装で得る値と一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。

🧮 数式に値を入れて手で計算する: 公平性指標 (採用率の差)

厚生労働省「雇用均等基本調査」「労働力調査」に準じた代表的な男女別応募・採用シナリオを題材に、 男女別の採用率と Disparate Impact (DI) を計算する。 倫理評価でよく使う指標。 SSDSE-B-2026 を題材にした公平性監査の実装は「🐍 Python ライブラリと実装」の fairlearn の例を参照。

Step 1: 群別の応募数と採用数

応募採用採用率
男性100400.400
女性80200.250

Step 2: Disparate Impact

DI = 0.250 / 0.400 = 0.625 基準: DI ≧ 0.80 で公平とされる (4/5 ルール) 0.625 < 0.80 → 公平性に懸念あり

🐍 Python で再現

1
2
3
4
5
6
7
8
9
apply_m, hire_m = 100, 40
apply_f, hire_f = 80, 20
rate_m = hire_m / apply_m
rate_f = hire_f / apply_f
di = rate_f / rate_m
print(f"男性採用率: {rate_m}")
print(f"女性採用率: {rate_f}")
print(f"DI = {di}")
print(f"4/5 ルール判定: {'OK' if di >= 0.8 else 'NG'}")

📤 実行結果

男性採用率: 0.4 女性採用率: 0.25 DI = 0.625 4/5 ルール判定: NG

💬 手計算 (Step 2) 0.625 と Python 出力 (4/5 ルール NG) が完全一致。

🐍 Python ライブラリと実装

📦 ライブラリ早見表

用途 パッケージ
公平性評価・緩和fairlearn (Microsoft), aif360 (IBM), aequitas
XAIshap, lime, captum, interpret (Microsoft), eli5
差分プライバシーopacus (PyTorch), tensorflow-privacy, diffprivlib
連合学習flower, fedml, tensorflow-federated
匿名化arx (Java), python-anonymizer
モデルカードmodel-card-toolkit (Google)
レッドチーミングgarak, promptfoo, advbench
電子透かしc2pa-python, synthid

📜 AI 倫理の歴史

💼 実務での実装

✅ AI 倫理チェックリスト

❓ よくある質問

Q. 「精度が高ければ公平性は気にしなくていい」?

A. ノー。 全体精度が高くてもグループ間で偏ったエラー分布になりうる。 採用・与信・医療など、 個人の人生に影響する判断では公平性が必須。

Q. センシティブ属性を学習データから削除すれば公平?

A. ノー。 郵便番号・名前など代理変数経由でセンシティブ属性が間接的に学習される。 公平性指標で必ず検証する。

Q. すべての公平性指標を満たすにはどうすれば?

A. 原理的に不可能(Chouldechova 2017)。 文脈に応じて優先する公平性を選び、 トレードオフを明示する。

Q. 生成 AI の倫理問題は?

A. 著作権侵害(学習データ)、 ハルシネーション、 Deepfake、 マイノリティの表現バイアス、 環境負荷(CO₂排出)、 労働への影響など多岐。

📖 倫理事例の深掘り

COMPAS(米国・再犯予測ツール)

2016 年 ProPublica が分析。 アフリカ系米国人に対し誤って高リスクと判定する率(誤陽性率)が白人の約 2 倍。 一方、 開発元 Northpointe は「予測値均衡(Predictive Parity)は満たしている」と反論。

これは Chouldechova の不可能性定理の代表例:基底再犯率が異なる集団間で「等オッズ」と「予測値均衡」は両立しない。 どちらの公平性を優先するかは社会的判断。

Amazon の採用 AI(2014-2017)

過去 10 年の履歴書で学習 → 「女性」を含む単語にペナルティ。 過去の採用バイアスがそのまま学習されたケース。 開発中止に。

教訓:歴史的バイアスはセンシティブ属性を削除しても代理変数経由で残る。

顔認識の精度差(Gender Shades 2018)

MIT の Joy Buolamwini らが大手 3 社の顔認識システムを評価。 「白人男性」エラー率 0.8% に対し「黒人女性」エラー率 34.7%。 訓練データの偏りが原因。

ChatGPT・大規模言語モデルの課題

🅰️ fairlearn — 公平性指標と緩和

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4103(合計特殊出生率) L3221(消費支出(二人以上の世帯)) 北海道 5,092,000 1,681,000 1.06 296,888 東京都 14,086,000 3,205,000 0.99 341,320 沖縄県 1,468,000 350,000 1.6 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# pip install fairlearn
import numpy as np
import pandas as pd
from fairlearn.metrics import demographic_parity_difference, equalized_odds_difference
from sklearn.linear_model import LogisticRegression

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]              # 2023年度・47都道府県
df['高齢化率'] = df['A1303'] / df['A1101'] * 100
df['log_pop'] = np.log(df['A1101'])

# 消費支出の上位/下位を 0/1 にして 2 値分類問題を作る
y = (df['L3221'] >= df['L3221'].median()).astype(int)
sensitive = (df['A1101'] >= df['A1101'].median()).astype(int)  # 人口規模を敏感属性とみなす
X = df[['A4103', '高齢化率', 'log_pop']]

m = LogisticRegression(max_iter=2000).fit(X, y)
yhat = m.predict(X)
print('Demographic Parity Diff:', demographic_parity_difference(y, yhat, sensitive_features=sensitive))
print('Equalized Odds Diff   :', equalized_odds_difference(y, yhat, sensitive_features=sensitive))
📤 実行結果: Demographic Parity Diff: 0.661231884057971 Equalized Odds Diff : 0.6517857142857143 → 「高消費支出」判定が人口規模の大きい群に大きく偏っている(要監査)

🅱️ SHAP で説明可能性

1
2
3
4
5
6
# pip install shap
import shap
explainer = shap.LinearExplainer(m, X)
shap_values = explainer.shap_values(X)
shap.summary_plot(shap_values, X)   # 全体寄与
shap.dependence_plot('高齢化率', shap_values, X)  # 単一変数の依存

🅲 AIF360 — IBM のフレームワーク

1
2
3
4
5
# pip install aif360
from aif360.datasets import BinaryLabelDataset
from aif360.metrics import BinaryLabelDatasetMetric
# BinaryLabelDataset へ変換して disparate_impact() などを呼ぶ
# 詳細は AIF360 ドキュメント参照

🅳 差分プライバシー(diffprivlib)

1
2
3
4
# pip install diffprivlib
from diffprivlib.models import LogisticRegression as DPLogReg
dp = DPLogReg(epsilon=1.0, data_norm=5.0).fit(X, y)
print('DP モデル精度:', dp.score(X, y))

📦 主要ライブラリ早見表

用途 ライブラリ 代表機能
公平性指標fairlearn / aif360DP, EO, Calibration
説明可能性shap / lime / dalex局所・大域寄与
DP / プライバシーdiffprivlib / opacusε,δ-DP, PyTorch 対応
モデルカードmodel-card-toolkitJSON 自動生成
監査ログmlflow / wandb再現性確保

🐍 Python 実装 — AI 倫理

公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで AI 倫理 を動作させます。 まずはこのまま実行してみてください。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) L3221(消費支出(二人以上の世帯)) 北海道 5,092,000 1,681,000 296,888 東京都 14,086,000 3,205,000 341,320 沖縄県 1,468,000 350,000 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# AI 倫理 を SSDSE-B-2026 で実行する最小コード
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]  # 2023 年のみ抽出
print(df.shape)  # (47, 112)
print(df[['Prefecture','A1101','A1303','L3221']].head())

# 都市集中度の計算(倫理レビュー用)
top = df.sort_values('A1101', ascending=False).head(8)
print('上位8県の人口合計:', top['A1101'].sum())
print('全国人口:', df['A1101'].sum())
print(f'集中度: {top["A1101"].sum()/df["A1101"].sum():.1%}')
# 65歳以上比率(県別)
df['aging_rate'] = df['A1303'] / df['A1101']
print('最高高齢化率:', df['aging_rate'].max())
print('最低高齢化率:', df['aging_rate'].min())
📤 実行例(実測) (47, 112) Prefecture A1101 A1303 L3221 0 北海道 5092000 1681000 296888 12 青森県 1184000 417000 263371 24 岩手県 1163000 407000 298536 36 宮城県 2264000 662000 305541 48 秋田県 914000 357000 272086 上位8県の人口合計: 63616000 全国人口: 124353000 集中度: 51.2% 最高高齢化率: 0.39059080962800874 最低高齢化率: 0.227530881726537

▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install matplotlib numpy pandas scikit-learn が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。

⚠️ AI 倫理の落とし穴

落とし穴 対処
「精度が高いから正しい」公平性・誤判定の影響を必ず併せて評価。
センシティブ属性を削除すれば公平代理変数(郵便番号→人種)で漏れる。
SHAP で「説明済み」SHAP は寄与の説明であり、 因果説明ではない。
匿名化したから安全準識別子の組合せで再同定可。 k-匿名性等で検証。
同意さえあれば何でも「形式的同意」と「実質的同意」は別。 説明責任を伴う。
倫理を後工程で考える設計段階から組み込む(Ethics by Design)。
技術者だけで判断法務・倫理・ドメイン専門家・ステークホルダーを含めた検討。

🏋️ 練習問題

Q1. SSDSE-B-2026 で「消費支出の高低を二値分類」するモデルを構築し、 「人口規模の大小」をセンシティブ属性とみなして公平性指標を計算しなさい。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4103(合計特殊出生率) L3221(消費支出(二人以上の世帯)) 北海道 5,092,000 1,681,000 1.06 296,888 東京都 14,086,000 3,205,000 0.99 341,320 沖縄県 1,468,000 350,000 1.6 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import pandas as pd
from sklearn.linear_model import LogisticRegression
from fairlearn.metrics import demographic_parity_difference, equalized_odds_difference

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023]
df['高齢化率'] = df['A1303'] / df['A1101'] * 100
df['y'] = (df['L3221'] >= df['L3221'].median()).astype(int)    # 消費支出の高低
A = (df['A1101'] >= df['A1101'].median()).astype(int)          # 人口規模(疑似センシティブ属性)
X = df[['A4103', '高齢化率']]                                  # 合計特殊出生率・高齢化率
m = LogisticRegression(max_iter=1000).fit(X, df['y'])
pred = m.predict(X)
print('DPD:', demographic_parity_difference(df['y'], pred, sensitive_features=A))
print('EOD:', equalized_odds_difference(df['y'], pred, sensitive_features=A))
📤 実行例(実測) DPD: 0.6195652173913043 EOD: 0.5378151260504201
Q2. 上記モデルの SHAP 値を計算し、 各特徴量の寄与を解釈しなさい。
1
2
3
4
import shap
explainer = shap.LinearExplainer(m, X)
sv = explainer.shap_values(X)
shap.summary_plot(sv, X)
Q3. 過去 5 年で報道された AI の差別事例を 1 つ選び、 (1) 何が起きたか、 (2) どんなバイアスか、 (3) どう防げたかをまとめなさい。

例:Amazon の採用 AI、 顔認証の精度差、 与信スコアの性別差等。

📝 モデルカード・レポートの記載例

Google の Model Cards や HuggingFace の Model Card に従う:

⚠️ 落とし穴(補強版 — AI 倫理実装で踏みやすい7つの罠)

① 保護属性を「単に削除」すれば公平になると思う
性別や人種などの保護属性を入力から削除しても、 強く相関するプロキシ変数(郵便番号、 名前、 購買履歴等)から間接的に予測されてしまいます。 これを「プロキシ差別」と呼びます。 単に削除するのではなく、 公平性指標を計測し、 必要なら adversarial debiasing や reweighing で明示的に緩和する必要があります。 「保護属性を使わなかったから公平」というのは法的にも技術的にも不十分な弁明です。
② 複数の公平性指標を同時に満たそうとする(不可能性定理)
Chouldechova (2017) と Kleinberg ら (2017) によると、 基本率が群間で異なる場合、 「人口統計学的均等」「機会均等」「予測価値均等」は同時に成立しないのが数学的に証明されています。 つまり「全部の公平性指標を満たせ」は不可能な要求。 用途に応じてどの指標を優先するか明示的に選択するのが倫理的に正しい姿勢で、 「うちのモデルは全部公平です」という主張は嘘です。
③ SHAP / LIME を「真の因果説明」と誤解する
SHAP は「予測値への各特徴量の寄与」を計算するもので、 因果関係を保証しません。 「SHAP 値が高いから、 その変数を介入すれば結果が変わる」は誤った推論です。 介入の効果を評価したいなら因果推論(do-calculus、 傾向スコア、 RCT)を併用する必要があります。 説明可能性ツールの出力を、 適切な前提なしに政策・採用判断に転用するのは倫理的にも実務的にも危険です。
④ 訓練データの「歴史的バイアス」を放置
過去の採用・融資・刑事司法のデータには、 当時の差別的判断が含まれている可能性が高い。 そのデータをそのまま学習させると、 モデルは差別を自動化・スケール化します。 Amazon の採用 AI(2018 廃止)や COMPAS(米司法)の事例が典型。 「データに語らせる」は中立ではなく、 過去の不正義を未来に投影する行為。 データ収集の社会的文脈を意識し、 必要なら再ラベル付けサンプル重み付けで補正します。
⑤ プライバシー保護を「匿名化」だけで済ます
氏名や住所を消す「単純匿名化」は、 他のデータと突合すれば再同定可能です(Netflix 賞データ事件、 NYC タクシーデータ事件など)。 GDPR や日本の改正個人情報保護法では「容易に照合可能なら個人情報」と扱われます。 差分プライバシー(DP)、 k-匿名性、 ℓ-多様性などの定量的な保護指標を採用し、 「単に名前を消した」ではなく「ε=X の DP を保証する」と報告するのが現代標準です。
⑥ 生成 AI の出力に責任所在を曖昧にする
LLM がハルシネーション(虚偽生成)した内容を判断に使い、 損害が発生した場合の責任は誰にあるか。 「AI が言った」は法的に通用しません。 開発者・運用者・利用者の責任分担を事前に明文化し、 出力の検証プロセスを設計する必要があります。 EU AI Act の高リスク AI 規制でも、 人間による監督と監査ログの保存が義務化されました。 「ブラックボックスだから分からない」は今後の規制下では弁明になりません。
⑦ 公平性監査を「リリース前 1 回」で終わらせる
リリース後のデータドリフト(入力分布の変化)でモデルの公平性は劣化します。 「リリース時点では公平でした」は弁明になりません。 NIST AI RMF や ISO/IEC 23894 では継続的監視を必須としています。 公平性指標を本番監視に組み込み、 閾値を超えたら自動でアラート、 再訓練、 緊急停止のフローを構築するのが現代の運用基準。 「監査=リリース前のチェックリスト」は古いパラダイムです。

⚠️ よくある落とし穴 — AI 倫理

AI 倫理 を使うときに初学者が踏みやすい失敗パターン。 1 度経験してしまえば次から避けられますが、 先に知っておくに越したことはありません。

❌ 「精度が高ければ良い」誤解
全体精度 95% でも、 マイノリティ群で 60% なら倫理的に許容されない場面が多い。 群別評価が必須。
❌ センシティブ属性削除で公平になる誤解
代理変数(住所・名前・購買履歴)から属性が漏れる。 削除ではなく 影響評価 が必要。
❌ Ethics Washing
原則を掲げるだけで実装に反映しないこと。 行動規範・監査・修正サイクルが揃って初めて意味を持つ。
❌ 「技術は中立」という誤解
アルゴリズム自体に悪意がなくても、 学習データの偏り・目的変数の選び方・運用の文脈を通じて社会の不公平を増幅しうる。 COMPAS や Amazon 採用 AI の事例が示す通り、 「中立な道具だから責任はない」は成立しない。 何を最適化するかの選択自体が価値判断である。
🛡 防御策まとめ:「適用条件を確認する」「結果と前提をセットで記述する」「不確実性を必ず併記する」の 3 点を習慣化すれば、 上記の罠の大半は回避できます。

🗺 概念マップ

「AI倫理」を中心とした関連概念マップ。

AI 倫理 AI と社会 (前提) AI 原則 (並列) AI 規制 (発展) 公平性指標 (応用) バイアス (対比) 説明責任 (統合)

AI 倫理は「べき論」ではなく、 EU AI Act では High-Risk システムに具体的義務 (適合性評価・市場後監視) を課す実装ルールに進化した。 Asilomar AI Principles、 OECD AI Principles、 UNESCO 勧告など複数の枠組みが並立する。

中央に「AI 倫理」を置き、 (a) 上位フレームとして AI と社会・ELSI (倫理/法/社会的課題)・人間中心の AI を、 (b) 並列フレームとして OECD AI 原則・EU 信頼できる AI 倫理ガイドライン・Asilomar AI Principles・UNESCO AI 倫理勧告を、 (c) 実装原則として 公平性 (Fairness)・透明性 (Transparency)・説明責任 (Accountability)・プライバシー・安全性・頑健性を、 (d) 法制度として EU AI Act (High-Risk)・米国 AI 権利章典・日本 AI 事業者ガイドラインを、 (e) 検証手法として AI 監査・モデルカード・データシート・Red Teaming・XAI を放射状に配置する。

これらの周辺概念を組み合わせて理解することで、 AI 倫理を単なる「べき論」ではなく「原則 → ガイドライン → 法規制 → 認証 → 監査」という多層実装パイプラインとして位置付けられる。 設計時の Fairness 制約から運用時のドリフト監視・第三者監査まで、 倫理が技術と運用に翻訳される連鎖を意識することで、 実務での適用力につながる。

🔗 隣接手法への橋渡し

「AI 倫理」は規範論。 社会論・原則・規制をつなぐ上流概念で、 実装側 (公平性指標等) と一体で扱う。 上流・並列・下流の隣接概念とセットで理解する。

この上流→「AI倫理」→下流の流れを意識して学ぶと、 周辺領域への橋渡しがスムーズになる。 「🌐 関連手法・派生」セクションに更に広いネットワークがある。

🔌 接続: 倫理を実装に落とす橋

AI 倫理は「価値判断」、 そのままではコードにならない。 ① 公平性指標 で「人を不利に扱わない」を数値化、 ② 説明可能性 で「説明できる」を技術化、 ③ 説明責任 + プライバシー + 安全性 で運用フェーズを担保する。 倫理章だけ立派でも、 この 5 つの実装橋が無ければ現場では機能しない。 OECD AI 原則は 5 つの価値 (Inclusive growth / 人間中心 / 透明性 / 堅牢性 / 説明責任) を掲げており、 そのまま実装橋の地図にできる。

🧬 統合: 規範 × プロセス × 評価の三層パッケージ

AI 倫理は (規範) 原則文書 + (プロセス) 倫理レビュー / Ethics by Design / 倫理委員会 + (評価) バイアス監査 / 影響評価 / モデルカード を統合してはじめて実効性を持つ。 NIST AI RMF (GOVERN/MAP/MEASURE/MANAGE) や ISO/IEC 42001 (AI MS) は、 まさにこの三層をプロセス化したもの。 倫理憲章 1 枚で終わらせず、 開発ライフサイクル全段階に倫理チェックポイントを挿入する設計が要 (Ethics by Design)。

⚖️ 比較: 隣接概念との切替判断

AI 倫理は近接概念と混同されやすい。 主軸を間違えると議論がかみ合わない。

概念主な問い強制力AI 倫理との関係
AI 倫理 (AI Ethics)「何が善い AI か」自主規範 (ソフトロー)本概念。 価値判断の出発点
AI 社会原則「政府として何を保証するか」政策文書 (準ソフトロー)倫理を行政文書化したもの
AI ガイドライン「現場で何をすればよいか」業界自主 (ソフトロー)倫理を手順化した実践指針
AI 規制 (AI Act 等)「違反すれば罰則は何か」法律 (ハードロー)倫理を法的義務に変換
AI ガバナンス「組織として誰がどう管理するか」組織内規程倫理を体制で支える枠組み

役割分離の指針: 「🌐 関連手法・派生(広域マップ)」は隣接概念の鳥瞰カタログ、 本セクション(🔗 隣接手法への橋渡し)は 切替判断 (規範 / 政策 / 指針 / 法律 / 体制のどの軸で議論するか)、 「🌳 手法選択フロー」は 初期選択 (組織で最初に着手すべきは何か) を担う。 重複ではなく層が違う。

🌳 手法選択フロー

「AI倫理」を実務で適用する/別手法に切り替える判断を、 状況別の 3 分岐で示す。 一律のレシピではなく、 自分の問題の特徴に応じて分岐を進めること。

  1. 分岐 1(前提条件): 「規範を作るのか守るのか?」 作る → ガイドライン策定、 守る → 自社の AI 倫理チェック
  2. 分岐 2(手法特性): 「対象領域は?」 採用・与信・医療 → 公平性最優先、 マーケ → プライバシー
  3. 分岐 3(運用要件): 「ステークホルダーは?」 開発者 → モデルカード、 ユーザー → 説明責任、 行政 → 監督枠組み

フローは出発点であって絶対解ではない。 領域知識・データ特性・運用制約を加えて最終判断する。 迷ったときは「🔗 隣接手法への橋渡し」と「🌐 関連手法・派生」を見直し、 単一の手法に固執しないこと。

🔖 キーワード索引(拡張版 — AI 倫理の関連トピック)

クリックで該当章にジャンプします。 国際標準(NIST RMF, EU AI Act)、 公平性指標、 説明可能性まで網羅。

SSDSE-B 公平性 人口統計学的均等 機会均等 予測価値均等 校正 SHAP LIME Counterfactual プロキシ差別 情報漏えい 公平性のトレードオフ fairlearn AIF360 EU AI Act NIST AI RMF