Menu
CoddyTech

Nilai-p

Termasuk bagian Statistik untuk ML dalam perjalanan Machine Learning di Coddy. Pelajaran 44 dari 64.

p-value mengubah hasil pengacakan menjadi satu angka: proporsi selisih semu yang setidaknya sebesar selisih sebenarnya, di kedua sisi.

1000 selisih yang diacak dari studi font dalam bentuk histogram. Batang pada atau melewati 6.6 detik di kedua sisi berwarna merah, sebanyak 39 hasil pengacakan, dan labelnya berbunyi p = 39 / 1000 = 0.039

Dalam kode, untuk studi font:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # perulangan dari pelajaran sebelumnya
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

Ini mencetak 0.039. np.abs menghitung selisih -7 sama besarnya dengan 7: pertanyaannya adalah apakah font berbeda sama sekali.

Di bawah tingkat signifikansi, yang sering kali 0.05, peluang bukan penjelasan yang meyakinkan untuk peningkatan pada font atau model. Ini bukan bukti: 4 dari 100 pengocokan tetap menghasilkan hal itu.

challenge icon

Tantangan

Sedang

Sebuah lahan pertanian menyiram stroberi pada pagi atau sore hari. Kode awal memisahkan strawberries.csv menjadi morning dan evening, mencantumkan columns, membaca level, lalu mendefinisikan shuffled_diffs.

  1. Untuk setiap kolom, hitung selisih sebenarnya (rata-rata sore dikurangi rata-rata pagi), selisih hasil pengacakan (pagi lebih dulu), dan nilai-p.
  2. Cetak satu baris untuk setiap kolom seperti di bawah ini (selisih 2 angka desimal, p 3 angka): differs saat p lebih kecil dari level.
  3. Hitung jumlah kolom yang memiliki selisih.

Lahan pertanian lain, dengan 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

Coba sendiri

import numpy as np
import pandas as pd


# Mengembalikan selisih yang diacak dari uji permutasi (perulangan pada pelajaran 43): rata-rata b semu dikurangi rata-rata a semu
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())
# Jangan ubah baris-baris di bawah ini
rng = np.random.default_rng(21)
shuffles = 1000

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Statistik untuk ML

Latihan sendiri: Compiler Python online