데이터 사이언스에서의 통계와 확률 이해
Published on
통계와 확률은 데이터 사이언스의 기반이다. 이러한 개념을 이해하면 우리는 매일 다루는 대규모 데이터셋으로부터 분석, 해석 및 결론을 얻을 수 있는 도구를 갖추게 된다. 이 기사에서는 주요 개념, 실제 예제 및 각 지점을 설명하기 위한 파이썬 코드 조각을 탐색할 것이다.
확률 분포
확률 분포는 무작위 변수의 값에 대한 확률이 어떻게 분포되는지를 설명한다. 이산 변수의 경우, 우리는 종종 모든 결과가 동일한 확률을 가지는 균등 분포를 사용한다.
이를 설명하기 위해 공정한 여섯 면 주사위를 생각해 보자. 결과의 확률 분포는 균등하며, 각각 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}')
최빈값, 중앙값, 사분위수
최빈값은 데이터 세트에서 가장 자주 나타나는 값이다. 분포에서 꼭대기 또는 가장 일반적인 값을 나타낸다.
중앙값은 데이터 샘플의 상위 절반과 하위 절반을 분리하는 중간 값이다. 데이터가 치우친 경우나 이상치를 처리하는 데 유용하다.
사분위수는 순위별로 정렬된 데이터 세트를 네 개의 동일한 부분으로 나눈다. 첫 번째 사분위(Q1)는 데이터 중 25%가 해당하는 값보다 낮은 값이며, 두 번째 사분위(Q2)는 중앙값이다. 세 번째 사분위(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)
q3 = np.percentile(data, 75)
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}')
가설 검정
가설 검정을 통해 표본 데이터와 널 가설(일반적으로 효과나 차이가 없음을 제안)하에서 기대되는 결과 사이의 차이를 검사하여 모집단에 대한 추론을 할 수 있습니다.
두 개의 표본 평균을 비교하기 위해 t 테스트와 같은 흔한 가설 검정이 사용됩니다. t-검정을 수행하기 위해 SciPy 패키지에서 '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}')
공분산과 상관관계
공분산은 두 변수가 어떻게 관련되어 있는지를 측정합니다. 두 변수 간 관계의 방향을 제시합니다. 반면 상관관계는 방향 뿐만 아니라 관계의 강도도 제공합니다.
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}')
확률과 통계를 이해하는 것은 모든 데이터 과학자에게 필수적입니다. 이러한 개념은 데이터를 분석하고, 정보화된 결정을 내리고, 의미 있는 인사이트를 얻는 데 필요한 도구와 기술을 제공합니다. 이 원리를 적용하고 파이썬의 강력한 라이브러리를 활용하면 데이터 과학의 모든 잠재력을 발휘할 수 있습니다.
결론
결론적으로, 데이터 과학 분야에서 일하는 사람이라면 통계 및 확률 개념을 이해하는 것이 매우 중요합니다. 이러한 개념을 숙달함으로써 데이터에서 의미 있는 인사이트를 도출하고 견고한 머신 러닝 모델을 설계하며, 정보화된 결정을 내릴 수 있게 됩니다.