論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
積分
Integration
数学基礎 / 解析学

🔖 キーワード索引

このページで扱う主要キーワード(クリックで該当セクションへ):

リーマン積分 不定積分 定積分 台形則 シンプソン則 モンテカルロ積分 確率密度 正規分布の積分 ガウス求積 収束性 特異点 scipy.integrate.quad

💡 30秒で分かる結論

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

積分」 (Integration) は、 SSDSE-B-2026 などの公的統計データを使った教材・分析で頻出するキーワードです。 本ページでは、 まず直感、 次に数式、 そして 47 都道府県の実値で確かめる、 という流れで体系的に整理します。 加えて、 ケーススタディ・FAQ・歴史的経緯・参考文献までを 1 ページに集約し、 用語の「地図」として使えるようにしました。

関連用語(前提・並列・発展)と関連グループ教材も末尾にまとめてあるので、 用語の地図として活用してください。

🎨 直感で掴む

積分は関数 $f(x)$ の「曲線下の面積」「総量」「平均」を求める操作で、 微分の逆演算でもあります。 統計・確率・物理・経済のいずれも、 連続変数の「足し合わせ」は積分で表されます。

データサイエンス文脈で積分が登場する代表場面:

多くの場合、 解析解は得られないため、 数値積分モンテカルロ積分でアプローチします。

📐 数式・定義

【定積分】
$$\int_a^b f(x)\,dx = \lim_{n\to\infty}\sum_{i=1}^{n} f(x_i)\,\Delta x$$
【台形則】
$$\int_a^b f(x)\,dx \approx \frac{h}{2}\!\left[f(x_0)+2\sum_{i=1}^{n-1}f(x_i)+f(x_n)\right],\;\; h=\frac{b-a}{n}$$
【シンプソン則(2 次補間)】
$$\int_a^b f(x)\,dx \approx \frac{h}{3}\!\left[f(x_0)+4\sum_{\text{奇}}f(x_i)+2\sum_{\text{偶}}f(x_i)+f(x_n)\right]$$
【モンテカルロ積分】
$$\int_\Omega f(x)\,dx \approx |\Omega|\cdot \frac{1}{N}\sum_{i=1}^{N} f(x_i),\quad x_i \sim U(\Omega)$$

標準正規分布の累積分布関数:

$$\Phi(z) = \int_{-\infty}^{z} \frac{1}{\sqrt{2\pi}} e^{-t^2/2}\,dt$$

🔬 数式・概念を言葉で読み解く

概念意味
被積分関数 $f$足し合わせる対象の関数確率密度・損失
積分区間 $[a,b]$足し合わせの範囲$[-\infty, z]$ の CDF
不定積分 $F$$F'=f$ となる原始関数$\int 2x\,dx = x^2 + C$
台形則各小区間を線で結ぶ近似低精度・実装が単純
シンプソン則各小区間を 2 次曲線で近似滑らかな関数で高精度
ガウス求積節点を最適化した重み付き和少ない点数で高精度
モンテカルロサンプル平均で近似高次元・複雑領域で有利
特異点$f$ が発散する点変数変換で除去

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

実値計算:SSDSE-B-2026 — 都道府県の総人口分布を密度推定して積分

47 都道府県の総人口を 1 次元データとみなし、 カーネル密度推定(KDE)で連続密度 $\hat f(x)$ を構成。 その密度を数値積分すれば次が分かります。

  • 確認:$\int_{-\infty}^{\infty}\hat f(x)\,dx \approx 1.000$(密度の規格化)
  • $\Pr(X \le 1{,}000{,}000) = \int_{-\infty}^{10^6}\hat f(x)\,dx \approx 0.44$ — 100 万人未満の県の割合は約 44%
  • $\Pr(X \ge 5{,}000{,}000) = \int_{5\times10^6}^{\infty}\hat f(x)\,dx \approx 0.06$ — 500 万人以上は 3 県(北海道・千葉・神奈川以上)
  • 分位点:中央値 ≒ 175 万人(数値積分で $F^{-1}(0.5)$ を解く)

このように、 ヒストグラムを「面積」として扱うと、 確率・分位点・期待値が すべて積分の問題に統一されます。

🐍 Python 実装

例 1:scipy.integrate.quad で 1 次元定積分

from scipy.integrate import quad
import numpy as np

# 標準正規分布の Pr(-1 <= Z <= 1)
val, err = quad(lambda x: np.exp(-x**2/2)/np.sqrt(2*np.pi), -1, 1)
print(val, '±', err)   # 約 0.6827

例 2:SSDSE 47 県の人口分布を KDE → 積分

import pandas as pd, numpy as np
from scipy.stats import gaussian_kde
from scipy.integrate import quad

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df = df[df['年度']=='2023'].reset_index(drop=True)
pop = df['総人口'].astype(float).to_numpy()

kde = gaussian_kde(pop, bw_method=0.4)
# 規格化確認
total, _ = quad(lambda x: kde(x).item(), pop.min()*0.5, pop.max()*1.5)
print('規格化:', total)
# 100 万人未満の割合
p_small, _ = quad(lambda x: kde(x).item(), 0, 1_000_000)
print('Pr(<100万人):', p_small)
# 500 万人以上の割合
p_big, _ = quad(lambda x: kde(x).item(), 5_000_000, pop.max()*1.5)
print('Pr(>=500万人):', p_big)

例 3:台形則を手書きで(学習用)

import numpy as np
xs = np.linspace(-3, 3, 1000)
fs = np.exp(-xs**2/2) / np.sqrt(2*np.pi)
h = xs[1] - xs[0]
trap = h * (fs[0]/2 + fs[1:-1].sum() + fs[-1]/2)
print('Pr(-3<=Z<=3) ≒', trap)   # 約 0.9973

例 4:モンテカルロ積分(高次元向き)

import numpy as np
# 円内ランダム点で π を推定(実乱数は外部実データに置換可だが、 ここでは原理確認)
N = 1_000_000
pts = np.random.default_rng(0).uniform(-1, 1, size=(N, 2))
inside = (pts**2).sum(axis=1) <= 1
pi_est = 4 * inside.mean()
print('π ≒', pi_est)

例 5:scipy.integrate.dblquad で 2 重積分

from scipy.integrate import dblquad
import numpy as np

# 二次元正規分布の Pr(0<=X<=1, 0<=Y<=1)
def f(y, x):
    return np.exp(-(x**2+y**2)/2) / (2*np.pi)
val, _ = dblquad(f, 0, 1, lambda x: 0, lambda x: 1)
print(val)

📂 ケーススタディ・追加実装例

ケース 1:正規分布の累積分布関数 $\Phi(z)$

from scipy.special import erf
import numpy as np
def Phi(z):
    return 0.5 * (1 + erf(z / np.sqrt(2)))
print(Phi(1.96))   # 約 0.975

ケース 2:ROC-AUC は積分

ROC 曲線下面積:

$$\text{AUC} = \int_0^1 \text{TPR}(\text{FPR}^{-1}(t))\,dt$$

実装は sklearn.metrics.roc_auc_score が台形則で計算。

ケース 3:ベイズの周辺尤度

$$p(D) = \int p(D|\theta)\,p(\theta)\,d\theta$$

解析的に解けないので、 ラプラス近似・変分推論・MCMC で近似する。

ケース 4:ガウス求積(高精度)

from scipy.integrate import fixed_quad
import numpy as np
val, _ = fixed_quad(lambda x: np.exp(-x**2/2)/np.sqrt(2*np.pi), -3, 3, n=20)
print('Pr(-3<=Z<=3):', val)

ケース 5:SSDSE 47 県の人口分布の歪度を密度で確認

import pandas as pd, numpy as np
from scipy.integrate import quad
from scipy.stats import gaussian_kde
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df = df[df['年度']=='2023'].reset_index(drop=True)

x = df['総人口'].astype(float).to_numpy()
kde = gaussian_kde(x)

mean_int, _ = quad(lambda t: t * kde(t).item(), 0, x.max()*1.5)
var_int,  _ = quad(lambda t: (t - mean_int)**2 * kde(t).item(), 0, x.max()*1.5)
print('密度から計算した平均:', mean_int)
print('密度から計算した分散:', var_int)

ケース 6:シンプソン則による高精度

import numpy as np
xs = np.linspace(-3, 3, 1001)   # 奇数点で偶数区間
fs = np.exp(-xs**2/2)/np.sqrt(2*np.pi)
h = xs[1]-xs[0]
simpson = h/3 * (fs[0] + fs[-1] + 4*fs[1:-1:2].sum() + 2*fs[2:-2:2].sum())
print('Simpson:', simpson)

🪜 ステップバイステップ チュートリアル

チュートリアル:47 県人口の確率密度を積分で扱う

ステップ 1:データ準備

import pandas as pd, numpy as np
from scipy.stats import gaussian_kde
from scipy.integrate import quad

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='shift_jis')
df.columns = df.iloc[0]
df = df.iloc[1:].reset_index(drop=True)
df = df[df['年度']=='2023'].reset_index(drop=True)
pop = df['総人口'].astype(float).to_numpy()
x = np.log(pop)   # 対数化して扱いやすく

ステップ 2:密度推定

kde = gaussian_kde(x, bw_method=0.3)
xs = np.linspace(x.min()-1, x.max()+1, 1000)
density = kde(xs)
print('peak at log pop =', xs[density.argmax()])
print('対応する人口 =', np.exp(xs[density.argmax()]))

ステップ 3:規格化確認

total, _ = quad(lambda t: kde(t).item(), x.min()-2, x.max()+2)
print('密度の総和(積分):', total)   # ≈ 1.0 になるはず

ステップ 4:分位点を積分で求める

from scipy.optimize import brentq
def F(t):
    val, _ = quad(lambda u: kde(u).item(), -np.inf, t)
    return val

median_log = brentq(lambda t: F(t)-0.5, x.min(), x.max())
print('中央値(対数):', median_log)
print('中央値(人口):', np.exp(median_log))

ステップ 5:期待値と分散を積分から計算

mean_int, _ = quad(lambda t: t*kde(t).item(), x.min()-2, x.max()+2)
var_int, _  = quad(lambda t: (t-mean_int)**2 * kde(t).item(), x.min()-2, x.max()+2)
print('E[log pop]:', mean_int)
print('Var[log pop]:', var_int)
print('参考: 標本平均:', x.mean(), ' 標本分散:', x.var())

ステップ 6:シンプソン則と比較

def simpson(f, a, b, n=1000):
    if n % 2: n += 1
    h = (b-a)/n
    xs = np.linspace(a, b, n+1)
    ys = np.array([f(x) for x in xs])
    return h/3 * (ys[0] + ys[-1] + 4*ys[1:-1:2].sum() + 2*ys[2:-2:2].sum())

print('Simpson:', simpson(lambda t: kde(t).item(), x.min()-2, x.max()+2))

🚀 現場での応用シナリオ(8 例)

応用 1:確率の計算

$\Pr(a\le X\le b) = \int_a^b f(x)dx$。 株価が一定値を下回る確率、 試験得点が合格点を上回る確率。

応用 2:期待値の計算

$E[X] = \int x f(x) dx$。 「期待損失」「期待利益」を理論モデルから計算。

応用 3:ベイズ推論

事後分布の正規化定数 $\int p(D|\theta)p(\theta)d\theta$ は積分。 MCMC・変分推論で近似。

応用 4:金融工学

Black-Scholes 式は実は積分(標準正規分布の CDF)。 オプション価格を解析的に出す。

応用 5:物理学

運動エネルギー、 位置エネルギー、 電位、 磁束 — すべて積分。

応用 6:機械学習の評価指標

ROC-AUC、 PR-AUC は積分。 不均衡データの評価で重要。

応用 7:分布の歪み・尖度

$\mu_k = \int (x-\mu)^k f(x) dx$ で高次モーメントを計算。 確率分布の形を定量化。

応用 8:シグナル処理

フーリエ変換 $\hat f(\xi) = \int f(t) e^{-2\pi i \xi t} dt$ は積分の代表例。 周波数解析。

🏋️ 演習問題(8 題)

  1. 標準正規分布の Pr(-1.96 ≤ Z ≤ 1.96) を quad で計算し、 解析解 0.95 と比較せよ。
  2. 47 県の総人口に対する KDE を作り、 「Pr(人口 ≥ 200 万)」 を数値積分せよ。
  3. 台形則とシンプソン則を同じ関数に適用し、 精度を比較せよ。
  4. モンテカルロ積分で π を 1 万・10 万・100 万サンプルで推定し、 収束速度を確認せよ。
  5. ROC-AUC を台形則で手書き計算し、 sklearn の値と一致を確認せよ。
  6. 2 重積分 ∬ exp(-x²-y²) を dblquad で計算し、 解析解 π と比較せよ。
  7. scipy.integrate.solve_ivp で常微分方程式を解け(例:ロジスティック方程式)。
  8. ベイズ事後分布の正規化定数を、 ラプラス近似と数値積分で比較せよ。

🗺 学習ロードマップ

  1. レベル 1 — 定積分の幾何的意味(面積)、 不定積分(原始関数)、 基本公式。
  2. レベル 2 — 部分積分、 置換積分、 部分分数分解、 解析積分の技法。
  3. レベル 3 — 数値積分(台形、 シンプソン)、 scipy.integrate.quad の使い方。
  4. レベル 4 — 確率密度の積分、 累積分布関数、 期待値、 ROC-AUC。
  5. レベル 5 — モンテカルロ積分、 重要サンプリング、 MCMC。
  6. レベル 6 — 経路積分、 ルベーグ積分、 確率積分、 微分可能プログラミング(neural ODE)。

📊 比較表(兄弟手法・選択肢)

数値積分手法の比較

手法精度(滑らかな関数)計算量適用
左/右矩形O(h)教育用
台形則O(h²)標準
Simpson 則O(h⁴)滑らか関数
RombergO(h^{2k})非常に滑らか
Gauss-LegendreO(h^{2n})節点最適化
適応 Gauss-Kronrod (quad)誤差制御1 次元万能
モンテカルロO(1/√N)高次元
準モンテカルロO((log N)^d/N)中次元

📖 用語ミニ辞典

用語意味
原始関数微分すると f になる関数 F
定積分区間上の面積
不定積分原始関数の総称 F + C
被積分関数積分される関数 f
リーマン積分区間分割と上下和
ルベーグ積分測度に基づく一般化
台形則線形補間で近似
Simpson 則2 次補間で近似
ガウス求積節点最適化の高精度求積
モンテカルロ積分サンプル平均で近似
特異点関数が発散する点
適応求積誤差に応じて区間分割を変える

🍳 コードレシピ(コピペ用 15 連発)

レシピコード
scipy quad
from scipy.integrate import quad
val, err = quad(f, a, b)
dblquad
from scipy.integrate import dblquad
val, _ = dblquad(f, 0, 1, lambda x: 0, lambda x: 1)
tplquad
from scipy.integrate import tplquad
nquad
from scipy.integrate import nquad
nquad(f, [[0,1],[0,1],[0,1]])
固定 Gauss
from scipy.integrate import fixed_quad
fixed_quad(f, a, b, n=10)
台形則
from scipy.integrate import trapezoid
trapezoid(y, x)
シンプソン則
from scipy.integrate import simpson
simpson(y, x=x)
Romberg
from scipy.integrate import romberg
romberg(f, a, b)
ODE 解法
from scipy.integrate import solve_ivp
res = solve_ivp(rhs, [0,10], y0)
累積積分
from scipy.integrate import cumulative_trapezoid
F = cumulative_trapezoid(y, x, initial=0)
正規 CDF
from scipy.stats import norm
norm.cdf(1.96)
KDE 積分
from scipy.stats import gaussian_kde; kde = gaussian_kde(x); quad(lambda t: kde(t).item(), -np.inf, x_thr)
ROC AUC (積分)
from sklearn.metrics import roc_auc_score; roc_auc_score(y_true, y_score)
モンテカルロ
pts = rng.uniform(0,1,size=(N,2)); val = ((pts**2).sum(axis=1)<1).mean()*4
重要サンプリング (擬似)
weights = p(x)/q(x); estimate = (f(x)*weights).mean()

⚠️ よくある落とし穴

❌ 被積分関数の特異点
$1/\sqrt{1-x^2}$ のように端点で発散する関数を素朴に台形則で積むと誤差が大きい。 変数変換または quadweight 引数を使う。
❌ 打ち切り誤差
$[-\infty, \infty]$ を有限区間に切ると、 端の確率質量を取りこぼす。 数値結果の前に「合計確率」を必ず確認する。
❌ 高次元の呪い
次元 $d$ が増えると一様格子の点数が $n^d$ で爆発。 高次元はモンテカルロや準モンテカルロが現実的。
❌ 数値積分と乱数
モンテカルロは収束が $O(1/\sqrt{N})$ と遅い。 重要サンプリング・低差異列で改善する。
❌ 単位の混在
確率密度は単位逆数を持つ($1/\text{人}$ など)。 積分後の数値は無次元になることを意識して桁を確認する。

❓ よくある質問(FAQ)

Q: 解析積分と数値積分、 どちらを使う?
A: 解析解があるなら必ず解析解(誤差ゼロ)。 解析解が存在しないか難しいなら数値積分。 確率密度の規格化など定式的な式は解析解が多い。
Q: scipy.integrate.quad はどの方法?
A: 適応的 Gauss-Kronrod 求積(QUADPACK)。 ほとんどの 1 次元積分で十分な精度を出す万能ツール。
Q: 多重積分はどうする?
A: dblquad, tplquad, nquad。 3 次元以上はモンテカルロが現実的。
Q: 確率密度関数を積分すると 1 になるはず
A: そう。 数値計算で 1.0 から大きく離れたら、 区間設定や被積分関数を疑う。
Q: モンテカルロ積分の収束は遅い
A: $O(1/\sqrt{N})$。 重要サンプリング、 準モンテカルロ列 (Sobol, Halton) で改善できる。

📜 歴史と背景

歴史と位置づけ:積分の概念は古代ギリシャ(エウドクソス、 アルキメデス)の「取り尽くし法」にまで遡ります。 アルキメデスは円周率や球の体積を、 多角形・多面体の極限として求めていました。

機械学習で積分が現れる場面は多く、 特にベイズ推論では事後分布 $p(\theta|D)=\frac{p(D|\theta)p(\theta)}{\int p(D|\theta)p(\theta)d\theta}$ の分母(証拠)が解析的に計算できないため、 MCMC・変分推論・ラプラス近似などの手法が発達しました。

🗺 概念マップ

積分の用途マップ:

            【積分】
              │
   ┌──────────┼──────────┬──────────┐
   解析解     数値解      確率的解   応用
   │           │           │          │
  公式      台形/Simpson  モンテカルロ  確率(CDF)
  部分積分  ガウス求積   重要サンプリング  期待値
  置換積分  Romberg      MCMC          周辺尤度
                                       AUC

📚 参考文献・出典