주차를 나누어서 작성하는 것이 좋을 것 같아
TIL을 나누어서 작성했다.
https://justdata.tistory.com/49
TIL_24.08.07_상관계수
상관계수5.1 피어슨 상관계수두 연속형 변수 간의 선형관계를 측정하는 지표-1에서 1사이의 값을 가지며1은 완전한 양의 선형 관계-1은 완전한 음의 선형 관계0은 선형 관계가 없음을 의미 피어
justdata.tistory.com
6.1 재현가능성
우연히 결과가 나오는 것이 아닌, 항상 일관된 결과가 나오는지 확인해야 한다.
1) 재현 가능성이란 무엇인가
- 동일한 연구나 실험을 반복했을 때 일관된 결과가 나오는지 여부. 연구의 신뢰성을 높이는 중요한 요소.
- 가설 검정 원리상의 문제나 가설검정의 잘못된 사용이 낮은 재현성으로 이어진다는 문제 발생
- 최근 논문을 다시 재현해서 실험을 해보는데 똑같은 결과가 안나오는 사례가 많은... 재현성 위기가 문제가 되고 있다.
중요성
- 결과가 재현되지 않는다면 해당 가설의 신뢰도 떨어짐.
2) 재현성 위기의 원인
실험 조건을 동일하게 조성하기 어려움
- 완전 동일하게 다시 똑같은 실험을 수행하는 것이 쉽지 않음
- 또한 가설검정 자체도 100% 검정력을 가진것이 아니기 때문에 오차가 나타날 수 있음.
가설 검정 사용 방법에 있어서 잘못됨
- p값이 0.05가 유도되게끔 조작하는 것이 가능(p해킹)
- 실제로는 통계적으로 아무 의미가 없음에도 의미가 있다고 해버리는 1종 오류를 저지를 수 있다.
- 0.05라는 것은 100번 중에 5번 즉, 20번 중에 1번은 귀무가설이 옮음에도 불구하고 기각될 수 있다.
- 유의수준으로 통제하는 것이 중요
- 하지만, 유의수준을 너무 낮추면 베타값이 커져버리는 문제발생..
- 따라서 , 어떤 논문에서는 유의수준을 0.005로 설정하면서 데이터 수를 70% 더 늘려서 베타 값도 컨트롤 하는 방향을 제안하기도 한다.
6-2 p-해킹
인위적으로 p-값을 낮추지 않을 수 있도록 조심해야 한다.
- p-해킹은 데이터 분석을 반복하여 p-값을 인위적으로 낮추는 행위
- 유의미한 결과를 얻기 위해 다양한 변수를 시도하거나, 데이터를 계속해서 분석하는 등의 방법을 포함
- 마음에 드는 상황만 골라서 보고해서도 안됨 모든 결과를 다보고하거나 더 엄격한 추가실험을 수행
- 가능한 가설을 미리 세우고 검증하는 가설검증형 방식으로 분석을 해야 하며 만약 탐색적으로 분석한 경우 가능한 모든 변수를 보고하고 본페로니 보정과 같은 방법을 사용해야 함.
6-3 선택적 보고
조심해야 하는 부분
- 유의미란 결과만 공개할 때
- 다수의 데이터 분석 중 유의미한 결과가 나온 실험만을 보고서에 작성하여 발표
- 결과를 보면서 가설을 다시 새로 설정했는데 마치 처음부터 설정한 가설이라고 얘기할 때
- 미리 가설과 실험 방법 등에 대해서 설정을 한 다음 연구를 수행하거나 연구하는 동안 얻어진 모든 변수와 결과에 대해서 공개하지 못할 때
6-4 자료수집 중단 시점 결정
자료수집 중단 시점 결정
- 데이터 수집을 시작하기 전에 언제 수집을 중단할지 명확하게 결정하지 않으면, 원하는 결과가 나올 때가지 데이터를 계속 수집할 수 있음. 이는 결과의 신뢰성을 떨어뜨림
* 코드실습을 하기 전에 colab에서 한글폰트가 깨졌을 때 한글폰트 설치하는 방법
- 구글 colab에서 시각화 라이브러리 (matplotlib, seaborn)을 사용하게 되면
한글 깨짐 현상이 나타난다.
* 해결 방법
step 1. colab 파일을 연 뒤 첫 번째 cell에 아래 코드를 실행 후 런타임 재시작
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
step 2. matplotlib의 폰트를 설치한 폰트로 지정
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')
예시)
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 데이터 수집 예시
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)
plt.rc('font', family='NanumBarunGothic')
# p-값 시각화
plt.plot(sample_sizes, p_values, marker = 'o')
plt.axhline(y=0.05, color='r', linestyle='--', linewidth=1)
plt.title('자료수집 중단 시점에 따른 p-값 변화')
plt.xlabel('샘플 크기')
plt.ylabel('p-값')
plt.show()
6-5 데이터 탐색 및 검증 분리
- 데이터 탐색과 검증을 분리하면 탐색 과정에서 발견된 패턴이
- 검증 데이터에서도 유효한지 확인 가능
- 검증 데이터는 철저하게 탐색 데이터와 구분되어져야 함
데이터 탐색과 검증 분리는 언제 사용해야 하는가?
- 검증하기 위한 데이터가 따로 필요할 때
- 데이터셋을 탐색용(training) 과 검증용 (test)으로 분리하여 사용
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(f'탐색용 데이터셋 MSE: {train_mse}')
print(f'탐색용 데이터셋 R^2: {train_r2}')
# -- 탐색용 데이터셋 MSE: 0.8476788564209705
# -- 탐색용 데이터셋 R^2: 0.7582381034538057
# 검증용 데이터 평가
test_mse = mean_squared_error(y_test, y_test_pred)
test_r2 = r2_score(y_test, y_test_pred)
print(f'검증용 데이터셋 MSE: {test_mse}')
print(f'검증용 데이터셋 R^2: {test_r2}')
# -- 검증용 데이터셋 MSE: 0.6536995137170021
# -- 검증용 데이터셋 R^2: 0.8072059636181392
'데이터분석 study > 통계학 기초' 카테고리의 다른 글
TIL_24.08.07_상관계수 (0) | 2024.08.07 |
---|---|
TIL_24.08.06_회귀 (0) | 2024.08.06 |
TIL_24.08.06_ 유의성 검정 (0) | 2024.08.06 |
TIL_24.08.05_ 모집단과 표본, 분포 정리 (0) | 2024.08.05 |
TIL_24.08.05_데이터 분석과 통계 (0) | 2024.08.05 |