Menu
CoddyTech

Uji-t

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

Sebelum komputer, statistik punya jalan pintas: t-test. Sebuah rumus mengubah rata-rata, sebaran, dan ukuran kelompok menjadi p-value sekaligus:

from scipy import stats

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

Untuk studi font, ini mencetak 0.031 dan -2.61. Pengacakan sebanyak 1000 kali menghasilkan 0.039, seperti biasa, nilainya mendekati.

Perbedaan yang diacak sebanyak 1000 kali dalam studi font ditampilkan sebagai histogram pucat, dengan kurva berbentuk lonceng dari uji t di atasnya, serta garis merah putus-putus pada selisih sebenarnya sebesar -6.6. Legenda menunjukkan p = 0.039 untuk pengacakan dan 0.031 untuk rumus

Nilai t menunjukkan selisih dalam satuan galat baku; tandanya hanya menunjukkan kelompok mana yang dikurangkan lebih dahulu. Rumus ini mengasumsikan data berbentuk lonceng, jadi untuk kelompok kecil yang menceng, percayai hasil pengacakan.

Ini juga memeriksa apakah satu model benar-benar mengungguli model lain.

challenge icon

Tantangan

Sedang

Pembuat cat mengukur waktu pengeringan tiga jenis lapisan. Kode awal menempatkan menit untuk setiap jenis lapisan di times, mencantumkan tiga pairs, mendefinisikan permutation_p(a, b), dan membaca level.

  1. Cetak nilai-p uji-t untuk matte vs satin di samping nilai-p dari pengacakan.
  2. Uji setiap pasangan, dengan jenis lapisan pertama lebih dulu, lalu cetak pasangan dengan nilai-p terkecil.
  3. Hitung pasangan yang nilai-p-nya di bawah level.

Bulatkan nilai-p ke 3 angka desimal. Pembuat lain, level 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

Coba sendiri

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


# Uji permutasi dari dua pelajaran terakhir: mengembalikan nilai-p untuk a dibandingkan dengan b
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())

# 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