Menu
CoddyTech

Giá trị p

Thuộc phần Thống kê cho machine learning trong hành trình Machine Learning của Coddy. Bài học 44 trên 64.

Giá trị p-value biến các lần xáo trộn thành một con số: tỷ lệ các khoảng cách giả lớn bằng hoặc lớn hơn khoảng cách thật, xét cả hai phía.

1000 hiệu số được xáo trộn của nghiên cứu phông chữ dưới dạng biểu đồ tần suất. Các cột ở mức 6,6 giây trở lên về cả hai phía có màu đỏ, gồm 39 lần xáo trộn, và nhãn ghi p = 39 / 1000 = 0.039

Trong code, để nghiên cứu phông chữ:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # vòng lặp của bài học trước
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

Lệnh này in ra 0.039. np.abs tính độ chênh lệch -7 lớn bằng 7: câu hỏi là liệu các phông chữ có khác nhau hay không.

Thấp hơn mức ý nghĩa, thường là 0.05, thì may rủi khó giải thích được lợi ích của phông chữ hoặc mô hình. Đây không phải bằng chứng chắc chắn: 4 trong 100 lần xáo trộn vẫn cho kết quả đó.

challenge icon

Thử thách

Trung bình

Một trang trại tưới nước cho dâu tây vào buổi sáng hoặc buổi tối. Phần code khởi tạo chia strawberries.csv thành morning và evening, liệt kê columns, đọc level và định nghĩa shuffled_diffs.

  1. Với mỗi cột, tính độ chênh lệch thực tế (trung bình buổi tối trừ trung bình buổi sáng), các độ chênh lệch sau khi xáo trộn (buổi sáng trước) và giá trị p.
  2. In một dòng cho mỗi cột như bên dưới (độ chênh lệch có 2 chữ số thập phân, p có 3 chữ số): differs khi p nhỏ hơn level.
  3. Đếm số cột có độ chênh lệch.

Một trang trại khác, mức 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

Tự làm thử

import numpy as np
import pandas as pd


# Trả về các chênh lệch sau khi xáo trộn trong phép kiểm định hoán vị (vòng lặp của bài học 43): trung bình giả của b trừ trung bình giả của 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())
# Đừng thay đổi các dòng bên dưới
rng = np.random.default_rng(21)
shuffles = 1000

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Thống kê cho machine learning

Tự luyện tập: Trình biên dịch Python online