일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데드리프트
- 개발자
- 코테준비
- 오블완
- 코테 공부
- Knowledge Tracing
- 다이어트
- 티스토리챌린지
- 연구 시작
- 개인 PT
- 프로그래머스
- 하체운동
- 라섹 수술 후기
- 바디프로필
- 개인 피티
- 개인 운동
- 체스트프레스
- 영화 비평
- 바프준비
- pytorch
- 논문 리뷰
- 암풀다운
- 건강
- PT 운동
- github
- 운동
- 코딩테스트
- 코드
- 디버깅
- 덤벨운동
- Today
- Total
치즈의 AI 녹이기
Significance Test 하기 본문
가설검정이란,
모집단의 특징에 대한 통계적 가설을 추출된 표본을 통하여 검토하는 추론 방법이다.
대립가설 : 주장하고자 하는 사실
귀무가설: 기각하고자 하는 사실
방법 : 검정 통계량을 구한 뒤 일정 기준을 만족시키는 가를 확인함
일정 기준의 척도는 유의 수준과 p값이 됨.
p값(유의 확률) : 귀무가설이 옳다는 가정 하에 검정 통계량(귀무가설보다 극단적인 결과가 실제로 관측될 확률)
유의수준 : 1종 오류의 상한선, 1종 오류가 일어날 확률의 최대허용치
이는 귀무가설이 옳은데 실수로 기각될 확률(1종 오류)를 범하게 될 확률을 최소화 하기 위함
만약 귀무가설이 옳다는 가정 하에 검정 통계량이 계산될 확률인 p값이 정해진 유의수준을 넘어선다면,
1종 오류를 범할 가능성이 커졌다고 간주하고, 귀무가설을 함부로 기각하지 않는다.
예를들어,
검정 통계량을 구한 후, 유의 수준이 0.05(신뢰도 95%)이라면,
p값이 0.05보다 작을 경우 귀무가설을 기각한다.
즉, 대립가설이 참이라는 사실을 신뢰수준 95% 확률로 주장할 수 있다는 의미다.
<독립표본 T-test 방법>
1. 등분산 가정
A그룹과 B그룹 사이의 분산의 차이가 커질 때 분석하는 의미가 적어지는 것을 피하기 위함.
[데이터] -> [데이터 분석] -> [F-검정 : 분산에 대한 두 집단]
대립가설: A그룹 분산 != B그룹 분산
귀무가설: A그룹 분산 = B그룹 분산
단측 검정 결과에 X2를 하여 양측검정(같거나 다르거나)를 확인함.
유의수준보다 검정 결과가 높을 시, '귀무가설: A그룹 분산 = B그룹 분산'이라는 귀무가설을 채택한다.
2. 독립표본 T-test
서로 분산이 같다는 것을 전제로 진행함.
[데이터] -> [데이터 분석] -> [t-검정: 등분산 가정 두집단]
양측 검정 결과를 확인하여 유의수준보다 높으면 귀무가설을 채택하고, 그렇지 않으면 대립가설을 채택한다.
<코드를 이용하여 수행하는 예시>
위와 같은 시트에서 significance test를 수행하기 위한 코드를 짜보았다.
import csv
import pandas as pd
csv_input = pd.read_csv(filepath_or_buffer="/content/sigir-perform0216.csv", encoding="ms932", sep=",")
csv_input.head(5)
for model in ["sakt", "akt", "cl4kt", "rdemkt"]:
for data in ["algebra05", "bridge06", "assistments09", "slepemapy"]:
for metric in ["auc_d", "acc_d", "acc_w"]:
print(f"{model} | {data} | {metric}")
print(csv_input[(csv_input.Model==model) & (csv_input.Dataset==data)].groupby('de_type')[metric].mean().round(4))
print("*"*20)
from scipy import stats
# !pip install pingouin
import pingouin as pg
def levene(group1, group2, a, info):
l, p = stats.levene(group1,group2)
if p > a:
# print("\n 결과: 두집단의 분산의 동질성검정결과는 유의하다.")
return
else:
print('두 집단의 분산의 동질성(homegeneity)검정 결과 \n')
print(f'1. levene test statistics = {l:.2f}')
print(f'2. levene test p-value = {p:.4f}')
print(info)
print("\n 결과: 집단의 분산의 동질성검정결과는 유의하지 않다.")
print("*"*20)
def ttest(group1, group2, a, info):
result = pg.ttest(group1, group2, correction='auto')
if result['p-val'].values[0] > a:
return
elif result['p-val'].values[0] <= 0.01:
print(0.01, info[1:])
print("\n 결과: 검정결과는 유의하다.")
print("*"*20)
else:
print(info)
print("\n 결과: 검정결과는 유의하다.")
print("*"*20)
target_csv = csv_input
for a in [0.05]:
for model in ["sakt"]:
for data in ["algebra05", "bridge06", "assistments09", "slepemapy"]:
for metric in ["auc_d", "acc_d", "acc_w"]:
pass_ = []
for de in ["basic_10", "monotonic_10", "relative_10"]:
target = target_csv[(target_csv.Model==model) & (target_csv.Dataset==data)]
group1 = target[target.de_type == "alibi1_10"][metric]
group2 = target[target.de_type == de][metric]
output = levene(group1, group2, a, [a, de, model, data, metric])
if output:
pass_.append(ttest(group1, group2, a, [a, de, model, data, metric]))
if sum(pass_) == 3:
print(model, data, metric," 검정결과는 유의하다.")
print("*"*20)
참고 링크:
https://blog.naver.com/PostView.naver?blogId=shoutjoy&logNo=222209601666
'인공지능 대학원생의 생활 > 구글링' 카테고리의 다른 글
[Python] requirements.txt 생성 및 설치 (0) | 2022.05.31 |
---|---|
서버에서 서버로 파일 옮기는 방법 (0) | 2022.05.27 |
[pytorch] collate_fn에 arg 추가하기 (0) | 2022.04.08 |
터미널에서 permission denied 해결하기 (0) | 2022.04.08 |
How to Detach specific components in the loss? (0) | 2022.04.03 |