はじめに: サンプルから母集団まで
La 推論統計 あることについて結論を導き出すことができます 人口 一つだけを観察することで全体がわかる サンプル。 ML では、これは 基本: トレーニング セット (サンプル) でトレーニングし、モデルを実行する必要があります。 見たことのないデータ (人口)。信頼区間、仮説検定、および A/B テストは、すべてのデータ サイエンティストにとって不可欠なツールです。
何を学ぶか
- 標準誤差と標本分布
- 信頼区間: その本当の意味
- 仮説検定: 帰無仮説、p 値、タイプ I および II エラー
- T 検定とカイ二乗検定
- A/B テスト: セットアップ、電力分析、早期停止
- 効果の大きさと p 値が十分ではない理由
サンプル分布と標準誤差
La サンプル配布 平均値はサンプルの平均がどのように変化するかを表します 何度も実験を繰り返すと。 CLTの場合:
L'標準誤差 (SE) と標本分布の標準偏差:
どこ s そしてサンプルの標準偏差。 SE は次のように減少します。 \\sqrt{n}: 不確実性を半分にするには、4 倍のデータが必要です。
信頼区間
Un 信頼区間 平均で 95% であり、次のとおりです。
少量のサンプルを使用すると (n < 30)、ディストリビューションが使用されます t 通常のものではなく学生の:
それが本当に意味すること: 95% CI は、「95% の可能性がある」という意味ではありません。 真の値が範囲内にあることを確認します。」それは、実験を無限に繰り返した場合、 計算された間隔の 95% に真の値が含まれます。違いは微妙ですが、決定的です。
import numpy as np
from scipy import stats
# Campione di accuracies da 10 esperimenti
accuracies = np.array([0.92, 0.89, 0.91, 0.93, 0.90, 0.88, 0.91, 0.94, 0.90, 0.92])
n = len(accuracies)
mean = np.mean(accuracies)
se = stats.sem(accuracies) # Standard Error
# CI al 95% con distribuzione t
t_critical = stats.t.ppf(0.975, df=n-1)
ci_lower = mean - t_critical * se
ci_upper = mean + t_critical * se
print(f"Media: {mean:.4f}")
print(f"SE: {se:.4f}")
print(f"CI 95%: [{ci_lower:.4f}, {ci_upper:.4f}]")
# Metodo rapido con scipy
ci = stats.t.interval(0.95, df=n-1, loc=mean, scale=se)
print(f"CI 95% (scipy): [{ci[0]:.4f}, {ci[1]:.4f}]")
仮説検証
Un 仮説検証 観察されたデータが仮説と互換性があるかどうかを評価します。
- H_0 (帰無仮説): 影響はありません (例: 2 つのモデルの精度は同じです)
- H_1 (対立仮説):効果あり
検定統計量と P 値
サンプルの平均を既知の値と比較するには、 t 統計:
Il p値 そして、そのような極端な(またはそれ以上の)結果が観察される確率は、 H_0 本当だった。もし p < \\アルファ (通常は 0.05)、拒否します H_0.
タイプ I およびタイプ II エラー
La potenza テストeの 1 - \\ベータ: 確率 実際の効果を検出します。
2 サンプルの T 検定
2 つのモデルを比較するには、 2 つの独立したサンプルの t 検定:
import numpy as np
from scipy import stats
# Modello A vs Modello B: accuracies su 15 run
np.random.seed(42)
model_a = np.array([0.92, 0.89, 0.91, 0.93, 0.90, 0.88, 0.91, 0.94,
0.90, 0.92, 0.91, 0.89, 0.93, 0.90, 0.91])
model_b = np.array([0.94, 0.93, 0.95, 0.92, 0.94, 0.91, 0.93, 0.95,
0.93, 0.94, 0.92, 0.93, 0.94, 0.93, 0.94])
# T-test a due campioni
t_stat, p_value = stats.ttest_ind(model_a, model_b)
print(f"Modello A: media={model_a.mean():.4f}, std={model_a.std():.4f}")
print(f"Modello B: media={model_b.mean():.4f}, std={model_b.std():.4f}")
print(f"t-statistic: {t_stat:.4f}")
print(f"p-value: {p_value:.6f}")
print(f"Significativo (alpha=0.05): {p_value < 0.05}")
効果量: P 値を超える
p 値は、効果があるかどうかを示します。 統計的に有意な、しかしどれくらいではありません e 大きい。ザ」効果の大きさ (Cohen の d) は効果の大きさを測定します。
解釈: d\\約0.2 小さい、 d\\約0.5 中くらい、 d\\約0.8 大きい。
ML の A/B テスト
L'A/B テスト 2 つのバリアント (A = コントロール、B = 治療) を比較して決定します。 どれが最もパフォーマンスが良いか。セットアップには次のものが必要です。
- メトリクスを定義する: クリック率、コンバージョン、精度
- サンプルサイズを計算する 必要(電力解析)
- ランダム化 グループ内のユーザー
- データを収集する あらかじめ定められた期間中
- 分析する 適切な統計テストを使用して
検出力分析: サンプルは何個必要ですか?
La 電力解析 効果を検出するために必要なサンプルサイズを計算します 偉大さの d 力を持って 1-\\ベータ:
import numpy as np
from scipy import stats
def power_analysis(effect_size, alpha=0.05, power=0.8):
"""Calcola sample size necessario per gruppo."""
z_alpha = stats.norm.ppf(1 - alpha/2)
z_beta = stats.norm.ppf(power)
n = ((z_alpha + z_beta) / effect_size) ** 2
return int(np.ceil(n))
# Scenario: vogliamo rilevare un miglioramento del 2% nell'accuracy
# Accuracy base: 90%, target: 92%, std stimata: 5%
effect_size = 0.02 / 0.05 # Cohen's d = 0.4
n_per_group = power_analysis(effect_size)
print(f"Effect size (Cohen's d): {effect_size:.2f}")
print(f"Sample size per gruppo: {n_per_group}")
# A/B test simulato
np.random.seed(42)
n = n_per_group
group_a = np.random.normal(0.90, 0.05, n) # Controllo
group_b = np.random.normal(0.92, 0.05, n) # Trattamento
t_stat, p_value = stats.ttest_ind(group_a, group_b)
diff = group_b.mean() - group_a.mean()
s_pooled = np.sqrt((group_a.var() + group_b.var()) / 2)
cohens_d = diff / s_pooled
print(f"\nA/B Test Results:")
print(f" Gruppo A: {group_a.mean():.4f}")
print(f" Gruppo B: {group_b.mean():.4f}")
print(f" Differenza: {diff:.4f}")
print(f" p-value: {p_value:.6f}")
print(f" Cohen's d: {cohens_d:.4f}")
print(f" Significativo: {p_value < 0.05}")
複数のテストの修正
多くのテストを同時に実行する場合 (例: 10 個のモデルを比較する)、 少なくとも 1 つの偽陽性が増加します。そこには ボンフェローニ補正 レベルを分ける テストの数に重要な影響を与える:
どこ m そして検査数。そして保守的です。アプローチのために それほど深刻ではない手順が使用されます ベンジャミニ・ホッホベルク Falseを制御するもの 発見率 (FDR)。
まとめ
覚えておくべき重要なポイント
- 標準誤差: \\text{SE} = s / \\sqrt{n} - データが増えると不確実性が減少します
- 信頼区間 95%: \\bar{x} \\pm 1.96 \\cdot \\text{SE} - 確率ではなく頻度です
- P値: このような極端なデータの確率は次のとおりです。 H_0 そして本当の
- 効果の大きさ (コーエンの d): 重要性だけでなく、効果の大きさを測定します。
- 電力解析: データを収集する前に必要なサンプル数を計算します。
- ボンフェローニ: 正しい \\アルファ 複数のテスト用
次の記事で: を探索してみます トランスフォーマーの数学。 自己注意、スケーリングされたドット積、マルチヘッド アテンション、位置エンコーディング: 彼らは NLP と AI に革命をもたらしました。







