Menu
CoddyTech

t-검정

Coddy Machine Learning 여정의 머신러닝을 위한 통계 섹션에 포함된 레슨. 64개 중 45번째.

컴퓨터가 등장하기 전, 통계에는 지름길이 있었습니다. 바로 t-test입니다. 공식 하나로 평균, 분산, 그룹 크기를 한 번에 p값으로 바꿉니다:

from scipy import stats

result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))

글꼴 연구에서는 0.031과 -2.61이 출력됩니다. 1000번의 섞기에서는 0.039가 나왔습니다. 평소처럼 근접한 값입니다.

글꼴 연구에서 섞은 1000개의 차이를 옅은 히스토그램으로 나타내고, 그 위에 t-test의 종 모양 곡선이 놓여 있으며, 실제 차이인 -6.6 위치에 빨간색 점선이 있는 그래프. 범례에는 섞기의 p = 0.039와 공식의 0.031이 표시되어 있습니다

t 값은 표준 오차 단위로 나타낸 차이이며, 부호는 어느 그룹이 먼저 나왔는지만 나타냅니다. 이 공식은 데이터가 종 모양이라고 가정하므로, 작고 치우친 그룹의 경우 셔플 결과를 신뢰하세요.

또한 한 모델이 실제로 다른 모델보다 더 나은지 확인합니다.

challenge icon

챌린지

중급

페인트 제조업체가 세 가지 마감재의 건조 시간을 측정했습니다. 시작 코드에서는 각 마감재의 시간을 times에 넣고, 세 개의 pairs를 나열하며, permutation_p(a, b)를 정의하고 level을 읽습니다.

  1. 무광과 새틴의 t-검정 p값을 셔플의 p값 옆에 출력하세요.
  2. 각 쌍을 테스트하고, 첫 번째 마감재를 먼저 두어 p값이 가장 작은 쌍을 출력하세요.
  3. level보다 작은 p값을 가진 쌍의 수를 세세요.

p값은 소수점 셋째 자리까지 반올림하세요. 다른 제조업체의 경우, 0.05:

matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3

직접 해보기

import numpy as np
import pandas as pd
from scipy import stats


# 지난 두 강의에서 다룬 순열 검정: a와 b를 비교한 p값을 반환합니다
def permutation_p(a, b, shuffles=1000, seed=0):
    rng = np.random.default_rng(seed)
    pooled = np.concatenate([a, b])
    diffs = []
    for i in range(shuffles):
        shuffled = rng.permutation(pooled)
        diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
    real = b.mean() - a.mean()
    return (np.abs(np.array(diffs)) >= np.abs(real)).mean()


paint = pd.read_csv("paint.csv")
times = {
    "matte": paint[paint["finish"] == "matte"]["minutes"],
    "satin": paint[paint["finish"] == "satin"]["minutes"],
    "gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

머신러닝을 위한 통계의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러