오랑우탄의 반란
[기초통계] 가설검정의 주의점 (파이썬) 본문
반응형
기초통계 시리즈의 마지막으로 가설검정의 주의점에 대해 간단하게 짚고 넘어가겠습니다.
재현 가능성, p해킹, 선택적 보고
- 동일 연구나 실험을 반복했을 때 결과가 일관되게 재현이 가능해야 하고, 이는 연구의 신뢰성을 높여줌.
- 하지만 0.05 수준의 p값에 대해 가설검정의 잘못된 사용이 낮은 재현성으로 이어진다는 문제가 발생하고 있다고 함
- 0.05라는 것은 20번 중에 1번은 귀무가설이 옳을 수 있음에도 이것이 기각될 수 있다는 얘기인데, 이런 오류를 피하기 위해 데이터 모수를 늘리는 방향이 제안됨
- p해킹이란 p값을 인위적으로 낮추고자 데이터 분석을 반복하거나, 유의미한 결과를 얻기 위해 분석을 반복하는 것
- 결과에 따라 가설을 변경하거나 데이터 개수를 늘려서 결과에 이를 맞추려고 하면 안됨
- 유의미한 결과, 유의미하지 않은 결과 모두 보고해야 함
자료수집 중단 시점 결정
- 데이터 수집을 시작하기 전에 언제 수집을 중단할지 명확하게 결정하지 않으면 원하는 결과가 나올 때까지 데이터를 계속 수집할 수 있으며, 이는 결과의 신뢰성을 떨어뜨림
- 예) 50명의 데이터를 수집하기로 했으나, 원하는 결과가 나오지 않자 100명까지 추가로 수집
# 데이터 수집 예시
np.random.seed(42)
data = np.random.normal(0, 1, 1000)
sample_sizes = [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
p_values = []
for size in sample_sizes:
sample = np.random.choice(data, size)
_, p_value = stats.ttest_1samp(sample, 0)
p_values.append(p_value)
# p-값 시각화
plt.plot(sample_sizes, p_values, marker='o')
plt.axhline(y=0.05, color='red', linestyle='dashed', linewidth=1)
plt.title('자료수집 중단 시점에 따른 p-값 변화')
plt.xlabel('샘플 크기')
plt.ylabel('p-값')
plt.show()
데이터 탐색과 검증 분리
- 데이터 탐색을 통해 가설을 설정하고, 이를 검증하기 위해 별도의 독립된 데이터셋을 사용하는 것으로, 이는 데이터 과적합을 방지하고 결과의 신뢰성을 높임
- 데이터셋을 탐색용(training)과 검증용(test)으로 분리하여 사용
from sklearn.model_selection import train_test_split
# 데이터 생성
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
# 데이터 분할 (탐색용 80%, 검증용 20%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 탐색용 데이터로 예측
y_train_pred = model.predict(X_train)
# 검증용 데이터로 예측
y_test_pred = model.predict(X_test)
# 탐색용 데이터 평가
train_mse = mean_squared_error(y_train, y_train_pred)
train_r2 = r2_score(y_train, y_train_pred)
print(f"탐색용 데이터 - MSE: {train_mse}, R2: {train_r2}")
# 검증용 데이터 평가
test_mse = mean_squared_error(y_test, y_test_pred)
test_r2 = r2_score(y_test, y_test_pred)
print(f"검증용 데이터 - MSE: {test_mse}, R2: {test_r2}")
원래는 탐색용 데이터 결과가 더 잘 나온다고 합니다.
탐색용 데이터 - MSE: 0.8476788564209705, R2: 0.7582381034538057
검증용 데이터 - MSE: 0.6536995137170021, R2: 0.8072059636181392
이상 파이썬을 활용한 데이터분석의 기반이 되는 기초 통계 관련 내용을 살펴봤습니다.
오랑우탄이 영어를 하고 오랑이가 데이터분석가가 되는 그날까지~
반응형
'PYTHON > 데이터분석' 카테고리의 다른 글
한 눈에 보는 데이터 인프라 (ETL, 웨어하우스, 레이크, 마트) (2) | 2024.09.04 |
---|---|
[Pandas] value_counts 완전분석 (활용 포함) (0) | 2024.08.02 |
[기초통계] 상관관계 (파이썬) (0) | 2024.08.02 |
[기초통계] 회귀 (파이썬) (0) | 2024.08.02 |
[기초통계] 유의성검정 (파이썬) (0) | 2024.08.01 |