確率分布と統計モデルの基礎


---

## 第1章：確率モデルの基礎

* **1.1 確率変数とは何か（試行／事象）**
* **1.2 確率分布関数と期待値・分散の定義**
* **1.3 離散型と連続型の違い**
* **1.4 現実の事象との対応（例：コイン・サイコロ・製品検査）**

---

## 第2章：離散型確率分布の応用

### 2.1 二項分布（Binomial Distribution）

* 実例：コイン投げ／ポケモン捕獲成功回数
* 可視化：`n=10, p=0.5` のグラフと期待値の導出
* Python演習：`scipy.stats.binom.pmf` を使った確率計算

### 2.2 ポアソン分布（Poisson Distribution）

* 実例：製品検査での不良品個数（λ=0.05）
* λと平均発生数の意味
* Python演習：不良品1個の確率（グラフ付き）

### 2.3 幾何分布（Geometric Distribution）

* 実例：サイコロを振って1が初めて出るまでの回数
* 期待値の導出（平均試行回数）
* Python演習：`scipy.stats.geom.pmf` を用いた分布表

### 2.4 超幾何分布（Hypergeometric Distribution）

* 実例：抽選箱からポケモンAとBを引く
* 有限母集団の抽出と置換なしの意味
* Python演習：N=20, A=7, n=5の確率表を作る

### 2.5 負の二項分布（Negative Binomial Distribution）

* 実例：3回成功するまでの失敗回数（例：コイントス）
* パラメータrとkの解釈
* Python演習：裏2回、表3回出る確率を求める

---

## 第3章：連続型確率分布の応用

### 3.1 指数分布（Exponential Distribution）

* 実例：次の客が来るまでの時間（平均30分）
* λの意味と「記憶なし性」
* グラフとPDFの可視化

### 3.2 正規分布（Normal Distribution）

* 実例：身長・体重、ポケモンの素早さ
* 標準化と68-95-99.7ルール
* Python演習：`stats.norm.pdf` による分布描画

### 3.3 対数正規分布（Lognormal Distribution）

* 実例：寿命分布、MTTFモデルとの関係
* μ, σの意味と右裾の長さ
* Python演習：`stats.lognorm.pdf`

### 3.4 ベータ分布（Beta Distribution）

* 実例：製品の初期故障モデル、信頼性設計
* α, βと形状パターンの関係
* 可視化とパラメータ調整の意味

---

## 第4章：統計モデルによる寿命推定と信頼性評価

* **4.1 MTTFとは何か（平均故障時間）**
* **4.2 アレニウスモデル（Arrhenius Equation）と温度加速試験**

  * \$\ln L = A + \frac{E\_a}{kT}\$
* **4.3 ワイブル分布・対数正規分布による寿命予測**
* **4.4 実測データの分布フィッティングとモデル選択**

---


```Python
# Program Name: probability_distributions_colab.py
# Creation Date: 20250612
# Overview: Visualize and analyze key probability distributions using Python (for Google Colab)
# Usage: Run this script on Google Colab. All graphs and tables will be displayed inline.

# ライブラリのインストール（Google Colab用） / Install libraries for Colab
!pip install numpy scipy matplotlib pandas --quiet

# ライブラリのインポート / Import libraries
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
import pandas as pd

# 数値を一元管理 / Centralized parameter definition
params = {
    "binom_n": 10,
    "binom_p": 0.5,
    "poisson_lambda": 0.05,
    "geom_p": 1/6,
    "hyper_N": 20,
    "hyper_A": 7,
    "hyper_n": 5,
    "nbinom_r": 3,
    "nbinom_k": 2,
    "nbinom_p": 0.5,
    "exp_lambda": 1/30,
    "lognorm_mu": 3,
    "lognorm_sigma": 0.4,
    "beta_alpha": 2,
    "beta_beta": 5
}

# 二項分布 / Binomial Distribution
x_binom = np.arange(0, params["binom_n"] + 1)
y_binom = stats.binom.pmf(x_binom, params["binom_n"], params["binom_p"])
plt.figure()
plt.stem(x_binom, y_binom, basefmt=" ")
plt.title("Binomial Distribution (n=10, p=0.5)")
plt.xlabel("Number of Heads")
plt.ylabel("Probability")
plt.grid(True)
plt.show()

# ポアソン分布 / Poisson Distribution
x_poisson = np.arange(0, 5)
y_poisson = stats.poisson.pmf(x_poisson, params["poisson_lambda"])
plt.figure()
plt.stem(x_poisson, y_poisson, basefmt=" ")
plt.title("Poisson Distribution (λ=0.05)")
plt.xlabel("Number of Defects")
plt.ylabel("Probability")
plt.grid(True)
plt.show()

# 幾何分布 / Geometric Distribution
x_geom = np.arange(1, 10)
y_geom = stats.geom.pmf(x_geom, params["geom_p"])
plt.figure()
plt.stem(x_geom, y_geom, basefmt=" ")
plt.title("Geometric Distribution (p=1/6)")
plt.xlabel("Trial Number")
plt.ylabel("Probability")
plt.grid(True)
plt.show()

# 超幾何分布 / Hypergeometric Distribution
x_hyper = np.arange(0, params["hyper_n"] + 1)
y_hyper = stats.hypergeom.pmf(x_hyper, params["hyper_N"], params["hyper_A"], params["hyper_n"])
plt.figure()
plt.stem(x_hyper, y_hyper, basefmt=" ")
plt.title("Hypergeometric Distribution (N=20, A=7, n=5)")
plt.xlabel("Number of A in Sample")
plt.ylabel("Probability")
plt.grid(True)
plt.show()

# 負の二項分布 / Negative Binomial Distribution
neg_binom_prob = stats.nbinom.pmf(params["nbinom_k"], params["nbinom_r"], params["nbinom_p"])

# 指数分布 / Exponential Distribution
x_exp = np.linspace(0, 60, 100)
y_exp = stats.expon.pdf(x_exp, scale=1 / params["exp_lambda"])
plt.figure()
plt.plot(x_exp, y_exp)
plt.title("Exponential Distribution (mean=30min)")
plt.xlabel("Time until Next Arrival (min)")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# 対数正規分布 / Lognormal Distribution
x_lognorm = np.linspace(0.1, 100, 200)
y_lognorm = stats.lognorm.pdf(x_lognorm, s=params["lognorm_sigma"], scale=np.exp(params["lognorm_mu"]))
plt.figure()
plt.plot(x_lognorm, y_lognorm)
plt.title("Lognormal Distribution (μ=3, σ=0.4)")
plt.xlabel("Time")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# ベータ分布 / Beta Distribution
x_beta = np.linspace(0, 1, 200)
y_beta = stats.beta.pdf(x_beta, params["beta_alpha"], params["beta_beta"])
plt.figure()
plt.plot(x_beta, y_beta)
plt.title("Beta Distribution (α=2, β=5)")
plt.xlabel("x")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# 結果まとめ（表形式） / Summary table of key probabilities
result_df = pd.DataFrame({
    "Distribution": [
        "Poisson P(X=1) (λ=0.05)",
        "Negative Binomial P(K=2 failures, R=3 successes)"
    ],
    "Probability": [
        stats.poisson.pmf(1, params["poisson_lambda"]),
        neg_binom_prob
    ]
})

# 表の表示 / Display summary table
from IPython.display import display
display(result_df)

# Program Name: continuous_distributions_and_reliability_colab.py
# Creation Date: 20250612
# Overview: Unified script for continuous probability distributions and reliability modeling
# Usage: Execute in Google Colab for visualization and probability/statistical evaluation

# Install required libraries
!pip install numpy scipy matplotlib pandas --quiet

# Import libraries
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
import pandas as pd

# Parameter definition / 数値一元管理
params = {
    "exp_lambda": 1/30,            # 平均30分 → λ = 1/30
    "norm_mu": 100,                # 平均値（例：身長や素早さ）= 100
    "norm_sigma": 15,              # 標準偏差 = 15
    "lognorm_mu": 3,               # 対数正規分布の μ（ln tの平均）
    "lognorm_sigma": 0.4,          # 対数正規分布の σ（ln tの標準偏差）
    "beta_alpha": 2,               # ベータ分布 α
    "beta_beta": 5,                # ベータ分布 β
    "Ea": 0.7,                     # 活性化エネルギー [eV]
    "k": 8.617e-5,                 # ボルツマン定数 [eV/K]
    "T1": 300,                     # 試験温度1 [K]
    "T2": 350                      # 試験温度2 [K]
}

# -------------------------------------
# 3.1 Exponential Distribution 指数分布
# -------------------------------------
x_exp = np.linspace(0, 120, 200)
y_exp = stats.expon.pdf(x_exp, scale=1 / params["exp_lambda"])

plt.figure()
plt.plot(x_exp, y_exp)
plt.title("Exponential Distribution (mean=30min)")
plt.xlabel("Time until next arrival (min)")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# -------------------------------------
# 3.2 Normal Distribution 正規分布
# -------------------------------------
x_norm = np.linspace(params["norm_mu"] - 4*params["norm_sigma"],
                     params["norm_mu"] + 4*params["norm_sigma"], 300)
y_norm = stats.norm.pdf(x_norm, loc=params["norm_mu"], scale=params["norm_sigma"])

plt.figure()
plt.plot(x_norm, y_norm)
plt.title("Normal Distribution (μ=100, σ=15)")
plt.xlabel("x (e.g. Height, Speed)")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# -------------------------------------
# 3.3 Lognormal Distribution 対数正規分布
# -------------------------------------
x_lognorm = np.linspace(0.1, 150, 300)
y_lognorm = stats.lognorm.pdf(x_lognorm,
                              s=params["lognorm_sigma"],
                              scale=np.exp(params["lognorm_mu"]))

plt.figure()
plt.plot(x_lognorm, y_lognorm)
plt.title("Lognormal Distribution (μ=3, σ=0.4)")
plt.xlabel("Time (e.g. Lifetime)")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# -------------------------------------
# 3.4 Beta Distribution ベータ分布
# -------------------------------------
x_beta = np.linspace(0, 1, 300)
y_beta = stats.beta.pdf(x_beta,
                        a=params["beta_alpha"],
                        b=params["beta_beta"])

plt.figure()
plt.plot(x_beta, y_beta)
plt.title("Beta Distribution (α=2, β=5)")
plt.xlabel("x (Proportion)")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

# -------------------------------------
# 4.1 MTTF（平均故障時間）計算
# -------------------------------------
MTTF_exp = 1 / params["exp_lambda"]  # 指数分布のMTTF
MTTF_lognorm = np.exp(params["lognorm_mu"] + (params["lognorm_sigma"] ** 2) / 2)  # 対数正規分布のMTTF

# -------------------------------------
# 4.2 アレニウス式による加速因子
# -------------------------------------
def calc_arrhenius_AF(Ea, k, T1, T2):
    return np.exp(Ea / k * (1/T1 - 1/T2))

AF = calc_arrhenius_AF(params["Ea"], params["k"], params["T1"], params["T2"])

# -------------------------------------
# 4.3-4.4 信頼性モデル結果を表形式でまとめる
# -------------------------------------
result_df = pd.DataFrame({
    "Model / Metric": [
        "MTTF (Exponential, min)",
        "MTTF (Lognormal, min)",
        "Arrhenius Acceleration Factor (300K→350K)"
    ],
    "Value": [
        round(MTTF_exp, 2),
        round(MTTF_lognorm, 2),
        round(AF, 2)
    ]
})

# 表示 / Display summary
from IPython.display import display
display(result_df)


```