목표
- 가설검정의 다양한 주의점 이해
- 주의점들 참고하여 가설검정 진행
6.1 재현 가능성: 우연히 결과가 나오는 것이 아닌, 항상 일관된 결과가 나오는지 확인해야 함
- 동일한 연구나 실험 반복했을 때 일관된 결과가 나오는지 여부
- 연구의 신뢰성을 높이는 중요한 요소
- 최근 p 값에 대한 논쟁이 두드러지고 있음(p값 사용하지 않아야 된다 vs 유의수준을 0.05에서 변경해야 한다)
- 가설검정 원리상의 문제나 가설검정의 잘못된 사용이 낮은 재현성으로 이어진다는 문제 발생
- 최근 논문을 다시 재현해 실험을 해보는데 똑같은 결과가 안나오는 사례가 많아 재현성 위기가 문제되고 있음
- 중요성
- 결과가 재현되지 않는다면 해당 가설의 신뢰도가 떨어짐
- 원인
- 실험 조건을 동일하게 조성하기가 어려움
- 완전 동일하게 똑같은 실험을 수행하는 것이 쉽지 않음
- 가설검정 자체도 100% 검정력을 가진 것이 아니기 때문에 오차 존재
- 가설검정 사용법에 있어 잘못됨
- p 값이 0.05가 유도되게끔 조작하는 것이 가능 (p해킹)
- 실제로는 통계적으로 아무 의미가 없음에도 의미가 있다고 해버리는 1종 오류를 저지를 수 있음
- 0.05라는 것은 100번 중에 5번 옳음에도 불구하고 기각될수 있음
- 유의수준으로 통제하는 것이 중요
- 하지만, 유의수준 너무 낮추면 베타값이 커져버리는 문제가 발생
- 따라서, 어떤 논문에서는 유의수준을 0.005로 설정하면서 데이터 수를 70% 더 늘려 베타 값도 컨트롤하는 방향 제안
- 잘못된 가설을 세우더라도 우연히 0.05보다 낮아서 가설이 맞는것처럼 보일 수도 있음
- 따라서 가능한 좋은 가설을 세우는 것도 중요
6.2 p-해킹: 인위적으로 p-값을 낮추지 않을 수 있도록 조심해야 함
- 데이터 분석을 반복하여 p-값을 인위적으로 낮추는 행위
- 유의미한 결과 얻기 위해 다양한 변수 시도하거나, 데이터를 계속해서 분석하는 등의 방법을 포함
- 문제점
- p-해킹은 데이터 분석 결과의 신뢰성을 저하시킴
- 조심해야하는 경우
- 여러 가설 검정을 시도할 때
- 여러 가설 검정을 시도하여 유의미한 p-값을 얻을 때까지 반복 분석하는 것을 조심
- p-해킹은 유의한 결과를 얻기 위해 p-값이 0.05 이하인 결과만 선택적으로 보고하는 행위 조심
- 데이터의 수를 늘리다보니 특정 데이터 수를 기록할 때 잠깐 p값이 0.05 이하를 기록함으로 이를 바탕으로 대립가설 채택하는 것을 조심
- 즉, 결과를 보며 데이터 개수를 늘려서는 안됨
- 다양한 상황 중에서 p값이 유리하게 나오는 상황만 선별적으로 보고하는 것을 조심
- 다양한 변수를 건드리며 유리한 결과가 나올때 다시 처음부터 가설을 그 결과에 맞게 세우는 것
- 즉, 마음에 드는 상황만 골라서 보고해서도 안됨, 모든 결과를 다 보고하거나 더 엄격한 추가 실험 진행
- 가능한 가설을 미리 세우고 검증하는 가설검증형 방식으로 분석을 해야 하며 만약 탐색적으로 분석한 경우 가능한 모든 변수를 보고하고 본페로니 보정과 같은 방법을 사용
6.3 선택적 보고: 말 그대로 선택적으로 보고하는 것
- 유의미한 결과만을 보고하고, 유의미하지 않은 결과는 보고하지 않는 행위
- 이는 데이터 분석의 결과 왜곡하고, 신뢰성을 저하시킴
- 조심해야하는 경우
- 유의미한 결과만 공개
- 다수의 데이터 분석 중 유의미한 결과가 나온 실험만을 보고서에 작성
- 결과를 보며 가설을 다시 설정했는데 마치 처음부터 설정한 가설이라고 얘기
- 미리 가설과 실험 방법등에 대해 설정을 한 다음 연구를 수행하거나 연구하는 동안 얻어진 모든 변수와 결과에 대해 공개하지 못할 때
6.4 자료수집 중단 시점 결정: 원하는 결과가 나올때까지 자료를 수집하는 것을 조심
- 데이터 수집을 시작하기 전에 언제 수집을 중단할지 명확하게 결정하지 않으면, 원하는 결과가 나올 때까지 데이터를 계속 수집할 수 있음
- 이는 결과의 신뢰성을 떨어트림
- 조심해야 하는 경우
- 결과를 이미 정해놓고 그에 맞추기 위해 자료수집을 하고자 할 때
- 50명의 데이터를 수집하기로 했으나, 원하는 결과가 나오지 않자 100명까지 추가로 수집
6.5 데이터 탐색과 검증 분리: 검증하기 위한 데이터는 반드시 따로 분리 해놓아야 함
- 데이터 탐색을 통해 가설을 설정하고, 이를 검증하기 위해 별도의 독립된 데이터셋을 사용하는 것
- 데이터 과적합을 방지하고, 결과의 신뢰성을 높임
- 사용하는 경우
- 검증하기 위한 데이터가 따로 필요할 때
- 데이터셋을 탐색용과 검증용으로 분리하여 사용
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 데이터 생성
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("탐색용 데이터 - MSE: ", train_mse, '\nR2: ", train_r2")
# 검증용 데이터 평가
test_mse = mean_squared_error(y_test, y_test_pred)
test_r2 = r2_score(y_test, y_test_pred)
print("검증용 데이터 - MSE: ", test_mse, '\nR2: ", test_r2")
6.6 추가로 통계학을 공부하기 위하여: 다양한 통계학 자료
- 여인권 교수님의 기초통계학
- 고지마 히로유키, 세상에서 가장 쉬운 통계학 입문
- 아베 마사토, 통계 101 x 데이터 분석