Menu
CoddyTech

P-값

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

p-value는 셔플 결과를 하나의 숫자로 나타냅니다. 즉, 어느 쪽이든 실제 차이만큼 크거나 더 큰 가짜 차이의 비율입니다.

글꼴 연구에서 1000개의 셔플된 차이를 히스토그램으로 나타낸 그래프. 양쪽에서 6.6초 이상인 막대는 빨간색이며, 셔플은 39회이고, 레이블에는 p = 39 / 1000 = 0.039라고 표시되어 있습니다

코드에서, 글꼴 연구의 경우:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # 지난 강의에서 사용한 반복문
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

이것은 0.039를 출력합니다. np.abs는 간격 -7을 크기가 7인 것으로 계산합니다. 여기서 질문은 글꼴이 조금이라도 다른지 여부입니다.

유의수준(흔히 0.05)보다 낮으면, 글꼴이나 모델의 성능 향상을 우연으로 설명하기 어렵습니다. 그렇다고 증명된 것은 아닙니다. 100번의 셔플 중 4번은 여전히 그런 결과가 나왔습니다.

challenge icon

챌린지

중급

한 농장에서는 아침이나 저녁에 딸기에 물을 줍니다. 시작 코드는 strawberries.csv를 morning과 evening으로 나누고, columns를 나열하고, level을 읽고, shuffled_diffs를 정의합니다.

  1. 각 열에 대해 실제 차이(저녁 평균에서 아침 평균을 뺀 값), 섞은 차이(아침 데이터를 먼저 배치)와 p값을 계산합니다.
  2. 아래와 같이 열마다 한 줄을 출력합니다(차이는 소수점 이하 2자리, p값은 3자리). p값이 level보다 작으면 differs를 출력합니다.
  3. 차이가 있는 항목의 수를 셉니다.

다른 농장의 level은 0.05입니다.

berries: difference -5.4, p = 0.009, differs
weight_g: difference 0.2, p = 1.0, could be chance
sweetness_brix: difference 0.46, p = 0.022, differs
leaf_spots: difference 0.6, p = 0.397, could be chance
Columns that differ: 2 of 4

직접 해보기

import numpy as np
import pandas as pd


# 순열 검정에서 섞어서 구한 차이들을 반환합니다(lesson 43의 반복문): 가상의 b 평균에서 가상의 a 평균을 뺀 값
def shuffled_diffs(a, b, shuffles, rng):
    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())
    return np.array(diffs)


beds = pd.read_csv("strawberries.csv")
morning = beds[beds["watering"] == "morning"]
evening = beds[beds["watering"] == "evening"]
columns = ["berries", "weight_g", "sweetness_brix", "leaf_spots"]
level = float(input())
# 아래 줄들을 변경하지 마세요
rng = np.random.default_rng(21)
shuffles = 1000

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

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

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

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