Skip to content

データサイエンスにおける統計と確率の解明

Updated on

統計と確率は、データサイエンスの根幹です。これらの概念を理解することで、私たちは日常的に扱う大規模なデータセットから分析・解釈・結論を導くツールを備えることができます。本稿では、重要な概念、実用的な例、および各ポイントを説明するPythonコードスニペットを探求していきます。

確率分布

確率分布は、確率がランダム変数の値にわたってどのように分布するかを説明します。離散変数の場合、各結果に等しい確率がある一様分布を使用することがよくあります。

これを説明するために、公正な6面ダイスを考えてみましょう。出現回数の確率分布は均一で、1から6までの各数字は等しい確率で1/6を持っていることになります。

import numpy as np
 
outcomes = [1, 2, 3, 4, 5, 6]
probabilities = np.full(6, 1/6)
 
print(f'公正なダイスの確率分布:')
for outcome, probability in zip(outcomes, probabilities):
    print(f'P(X={outcome}) = {probability}')

バスの到着時間のような連続変数の場合、確率密度関数(PDF)を使用します。PDFは、変数がある値の範囲内に落ち着く確率を示します。

よく知られた連続的な確率分布の例としては、正規分布、またはガウス分布があります。それは、ベル型の曲線によって特徴付けられます。

import matplotlib.pyplot as plt
import numpy as np
 
# 正規分布からランダムサンプルを生成する
mu = 0  # 平均
sigma = 1  # 標準偏差
samples = np.random.normal(mu, sigma, 1000)
 
# サンプルのヒストグラムをプロットする
plt.hist(samples, bins=30, density=True, alpha=0.7)
plt.xlabel('値')
plt.ylabel('確率密度')
plt.title('正規分布')
plt.show()

平均、分散、標準偏差

平均は、データセットの平均値です。すべての値を合計して、値の数で割ることで計算されます。

分散は、セット内の各数値が平均からどの程度離れているかを測定します。データの拡散や分布度合いを量的に示しています。標準偏差は分散の平方根であり、データセット内のばらつきの量を示す指標となります。

import numpy as np
 
data = np.random.normal(0, 1, 1000)  # 平均0、標準偏差1の正規分布を生成する
 
mean = np.mean(data)  # 平均を算出
variance = np.var(data)  # 分散を算出
std_dev = np.std(data)  # 標準偏差を算出
 
print(f'平均: {mean:.2f}')
print(f'分散: {variance:.2f}')
print(f'標準偏差: {std_dev:.2f}')

最頻値、中央値、四分位数

最頻値は、データセットで最も頻繁に現れる値です。分布内のピークまたは最も一般的な値を示します。

中央値は、データサンプルの上位半分と下位半分を分ける中央の値です。偏ったデータや外れ値を扱う場合に便利です。

四分位数は、順位付けされたデータセットを4つの等しい部分に分割します。第1四分位数(Q1)は、データの25%が以下の値です。第2四分位数(Q2)は中央値であり、第3四分位数(Q3)は、データ75%が以下の値です。

import numpy as np
 
data = np.array([3, 7, 1, 5, 2, 9, 4, 6, 8, 2])
 
mode = np.argmax(np.bincount(data))  # 最頻値を算出
median = np.median(data)  # 中央値を算出
q1 = np.percentile(data, 25)  # 第1四分位数を算出
q3 = np.percentile(data, 75)  # 第3四分位数を算出
 
print(f'最頻値: {mode}')
print(f'中央値: {median}')
print(f'第1四分位数(Q1): {q1}')
print(f'第3四分位数(Q3): {q3}')

実世界のデータと正規分布

実世界のデータはしばしば正規分布に従います。例えば、野球選手の体重は、特定の平均値と標準偏差で正規分布に従う可能性があります。これらのパラメータを把握することにより、潜在的な野球選手の体重を模倣するランダムサンプルを生成できます。

import numpy as np
 
mean = 180
std_dev = 10
sample_size = 1000
 
weights = np.random.normal(mean, std_dev, sample_size)
 
print(f'潜在的な野球選手の体重のサンプル:')
print(weights[:10])

信頼区間

信頼区間は、一定の信頼度で真の母集団パラメータが存在する範囲を提供します。サンプルから母集団の平均値や分散を推定するために重要です。 信頼区間を計算するためには、標本平均、標本標準偏差、標本サイズ、および希望する信頼水準を知る必要があります。正規分布変数の平均の95%信頼区間を計算すると仮定してみましょう。

import numpy as np
from scipy.stats import norm
 
data = np.random.normal(0, 1, 100)  # 正規分布からのサンプルの生成
 
confidence_level = 0.95
sample_mean = np.mean(data)
sample_std_dev = np.std(data)
sample_size = len(data)
 
z_score = norm.ppf((1 + confidence_level) / 2)
margin_of_error = z_score * (sample_std_dev / np.sqrt(sample_size))
 
confidence_interval = (sample_mean - margin_of_error, sample_mean + margin_of_error)
 
print(f'95%信頼区間:{confidence_interval}')

帰無仮説検定

帰無仮説検定により、しばしば効果や差がないことを提案する帰無仮説の下で想定される観測されたサンプルデータと結果の違いを調べることで、人口について推論が可能になります。

一般的な帰無仮説検定は、2つのサンプルの平均を比較するt検定です。Scipyパッケージは、t検定を実行するためのttest_ind関数を提供しています。

from scipy.stats import ttest_ind
 
sample1 = np.random.normal(0, 1, 100)
sample2 = np.random.normal(1, 1, 100)
 
t_statistic, p_value = ttest_ind(sample1, sample2)
 
print(f'T統計量:{t_statistic:.2f}')
print(f'P値:{p_value:.2f}')

共分散と相関

共分散は、2つの変数がどのように関連するかを測定します。変数間の関係の方向を示します。一方、相関は方向だけでなく、関係の強さも示します。

import numpy as np
 
data1 = np.array([1, 2, 3, 4, 5])
data2 = np.array([5, 4, 3, 2, 1])
 
covariance = np.cov(data1, data2)[0, 1]
correlation = np.corrcoef(data1, data2)[0, 1]
 
print(f'共分散:{covariance:.2f}')
print(f'相関:{correlation:.2f}')

確率と統計を理解することは、データサイエンティストにとって基本的なことです。これらの概念は、データを分析し、適切な意思決定を行い、意味のある洞察を得るためのツールと手法を提供します。これらの原則を適用し、Pythonの強力なライブラリを活用することにより、データサイエンスの可能性を最大限に引き出すことができます。

結論

結論として、データサイエンスの分野で仕事をする人は統計学と確率の概念を理解することが重要です。これらの概念を習得することで、データから意味のある洞察を引き出し、堅牢な機械学習モデルを設計し、正しい判断を行うことができるようになります。