Pandas & NumPy Academy · Pelajaran

Pengujian-t untuk Membandingkan Rata-Rata

Jalankan pengujian-t satu sampel, dua sampel independen, dan sampel berpasangan dengan scipy.stats, lalu tafsirkan interval kepercayaan.

Pelajaran 2 dari 413 langkah

Pengujian-t untuk Membandingkan Rata-Rata adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa Itu Uji-T?

Uji-t adalah pengujian hipotesis yang menentukan apakah perbedaan mean antarkelompok signifikan secara statistik atau kemungkinan disebabkan oleh kebetulan acak. Uji ini membandingkan perbedaan yang diamati dengan variabilitas dalam data, lalu menghasilkan statistik-t dan nilai-p. Jika p ≤ 0.05 (ambang konvensional), kita menolak hipotesis nol bahwa mean-nya sama. Ada tiga jenis umum: satu sampel, dua sampel independen, dan uji-t berpasangan, yang masing-masing digunakan untuk rancangan eksperimen yang berbeda.

Uji-T Satu Sampel

Uji-t satu sampel menguji apakah mean suatu sampel berbeda secara signifikan dari mean populasi yang diketahui atau dihipotesiskan. Contoh: “Apakah waktu pengiriman rata-rata kita berbeda secara signifikan dari standar industri, yaitu 3 hari?” Gunakan scipy.stats.ttest_1samp(data, popmean). Hipotesis nolnya adalah H₀: mean = popmean. Nilai-p yang kecil membuat Anda menolak H₀ dan menyimpulkan bahwa mean sampel berbeda dari target.

import numpy as np
from scipy import stats

np.random.seed(42)
# Delivery times in days (true mean is ~3.5, not 3)
delivery_times = np.random.normal(loc=3.5, scale=0.8, size=50)

# Test: is our mean significantly different from 3 days?
stat, p = stats.ttest_1samp(delivery_times, popmean=3.0)
print(f'Sample mean: {delivery_times.mean():.3f}')
print(f't-statistic: {stat:.3f}')
print(f'p-value: {p:.4f}')
print('Differs from 3?', 'Yes' if p < 0.05 else 'No')

Uji-T Dua Sampel Independen

uji-t dua sampel independen membandingkan mean dari dua kelompok independen. Contohnya: "Apakah varian uji A/B menghasilkan pendapatan rata-rata yang lebih tinggi daripada kontrol?" Gunakan scipy.stats.ttest_ind(group_a, group_b). Parameter equal_var penting: tetapkan equal_var=False (uji-t Welch) ketika kedua kelompok mungkin memiliki varians yang berbeda, yang merupakan pilihan default yang aman untuk sebagian besar data nyata.

import numpy as np
from scipy import stats

np.random.seed(0)
# A/B test revenue per session
control = np.random.normal(loc=25.0, scale=8.0, size=80)
variant = np.random.normal(loc=28.0, scale=9.0, size=80)

# Welch's t-test (does not assume equal variances)
stat, p = stats.ttest_ind(control, variant, equal_var=False)
print(f'Control mean: {control.mean():.2f}')
print(f'Variant mean: {variant.mean():.2f}')
print(f't-statistic: {stat:.3f}')
print(f'p-value: {p:.4f}')
print('Significant difference?', 'Yes' if p < 0.05 else 'No')

Uji Satu Arah vs Dua Arah

Secara default, uji-t bersifat dua arah: uji ini memeriksa apakah mean berbeda ke arah mana pun (lebih besar OR lebih kecil). Jika Anda memiliki hipotesis berarah ("varian meningkatkan pendapatan"), gunakan uji satu arah dengan parameter alternative: 'greater' atau 'less'. Uji satu arah memiliki daya yang lebih besar untuk arah tertentu, tetapi tidak memberikan bukti tentang arah sebaliknya. Tentukan arahnya sebelum melihat data untuk menghindari HARKing (Membuat Hipotesis Setelah Mengetahui Hasil).

import numpy as np
from scipy import stats

np.random.seed(1)
control = np.random.normal(25, 8, 100)
variant = np.random.normal(27, 8, 100)

# Two-tailed (default): does mean differ at all?
stat, p_two = stats.ttest_ind(control, variant, equal_var=False,
                              alternative='two-sided')
# One-tailed: is variant > control?
stat, p_one = stats.ttest_ind(control, variant, equal_var=False,
                              alternative='less')

print(f'Two-tailed p: {p_two:.4f}')
print(f'One-tailed p (variant greater): {p_one:.4f}')

Uji-T Berpasangan

uji-t berpasangan digunakan ketika setiap pengamatan dalam kelompok A memiliki pasangan alami dalam kelompok B — misalnya, pengukuran sebelum dan sesudah perlakuan pada subjek yang sama, atau toko yang sama pada dua bulan berbeda. Pemasangan mengendalikan variabilitas antar-subjek, sehingga uji ini lebih kuat daripada uji-t independen untuk data yang sama. Gunakan scipy.stats.ttest_rel(before, after). Urutan elemen harus dipasangkan: before[i] dan after[i] harus berasal dari subjek yang sama.

import numpy as np
from scipy import stats

np.random.seed(5)
# Blood pressure before and after medication (paired)
before = np.random.normal(130, 10, 30)
after = before - np.random.normal(5, 3, 30)  # Treatment reduces BP by ~5

stat, p = stats.ttest_rel(before, after)
print(f'Mean before: {before.mean():.2f}')
print(f'Mean after: {after.mean():.2f}')
print(f't-statistic: {stat:.3f}')
print(f'p-value: {p:.4f}')
print('Treatment effective?', 'Yes' if p < 0.05 else 'No')

<p><strong>statistik-t</strong> mengukur berapa banyak galat baku jarak perbedaan yang diamati dari nol. Statistik-t sebesar 2 berarti perbedaan yang diamati berada 2 galat baku di atas nilai yang diharapkan berdasarkan hipotesis nol. Untuk uji dua arah pada α=0.05 dengan sampel besar, nilai kritisnya kira-kira ±1.96 — jadi |t| > 1.96 menghasilkan p < 0.05. Nilai-p mengubah statistik-t menjadi probabilitas, sehingga lebih mudah ditafsirkan tanpa melihat tabel distribusi-t.</p>

Statistik-t mengukur berapa banyak galat baku yang memisahkan perbedaan yang diamati dari nol. Statistik-t sebesar 2 berarti perbedaan yang diamati berada 2 galat baku di atas nilai yang diharapkan berdasarkan hipotesis nol. Untuk uji dua arah pada α=0.05 dengan sampel besar, nilai kritisnya kira-kira ±1.96 — sehingga |t| > 1.96 menghasilkan p < 0.05. Nilai-p mengubah statistik-t menjadi probabilitas, sehingga lebih mudah ditafsirkan tanpa harus merujuk pada tabel distribusi-t.

import numpy as np
from scipy import stats

# Demonstrate relationship between t-statistic and p-value
for t_val in [1.0, 1.96, 2.5, 3.0, 4.0]:
    # degrees of freedom = large sample -> t ~ normal
    p = 2 * stats.t.sf(abs(t_val), df=100)  # two-tailed
    print(f't = {t_val:4.2f} -> p = {p:.4f} '
          f'({'significant' if p < 0.05 else 'not significant'})')

Interval Kepercayaan untuk Perbedaan Mean

Nilai-p saja tidak memberi tahu Anda besarnya efek. Selalu hitung interval kepercayaan untuk perbedaan mean. CI 95% yang mencakup nol konsisten dengan p > 0.05 (tidak signifikan); CI yang tidak mencakup nol berarti perbedaannya signifikan. CI juga memberi tahu apakah ukuran efek bermakna secara praktis — perbedaan pendapatan sebesar $0.01 yang signifikan secara statistik mungkin tidak relevan, sedangkan perbedaan sebesar $50 dengan p=0.06 mungkin tetap penting bagi bisnis.

import numpy as np
from scipy import stats

np.random.seed(0)
control = np.random.normal(25, 8, 80)
variant = np.random.normal(28, 8, 80)

diff = variant.mean() - control.mean()
se = np.sqrt(control.var()/len(control) + variant.var()/len(variant))
df = len(control) + len(variant) - 2
t_crit = stats.t.ppf(0.975, df=df)
ci_low = diff - t_crit * se
ci_high = diff + t_crit * se

print(f'Mean difference: {diff:.2f}')
print(f'95% CI: [{ci_low:.2f}, {ci_high:.2f}]')
print('CI excludes zero:', ci_low > 0 or ci_high < 0)

Ukuran Efek: Cohen's d

Signifikansi statistik bergantung pada ukuran sampel — dengan sampel yang cukup besar, perbedaan yang sangat kecil pun menjadi signifikan. Cohen's d mengukur signifikansi praktis (ukuran efek): perbedaan mean dibagi simpangan baku gabungan. Panduan: d < 0.2 dapat diabaikan, 0.2–0.5 kecil, 0.5–0.8 sedang, dan > 0.8 besar. Selalu laporkan ukuran efek bersama nilai-p — nilai-p yang signifikan dengan d = 0.05 berarti perbedaannya nyata, tetapi kemungkinan tidak bermakna dalam praktik.

import numpy as np
from scipy import stats

np.random.seed(0)
g1 = np.random.normal(25, 8, 200)
g2 = np.random.normal(28, 8, 200)

stat, p = stats.ttest_ind(g1, g2)

# Cohen's d
pooled_std = np.sqrt((g1.var() + g2.var()) / 2)
cohens_d = (g2.mean() - g1.mean()) / pooled_std

print(f'p-value: {p:.4f}')
print(f'Cohen\'s d: {cohens_d:.3f}')

if cohens_d < 0.2: print('Effect: negligible')
elif cohens_d < 0.5: print('Effect: small')
elif cohens_d < 0.8: print('Effect: medium')
else: print('Effect: large')

Asumsi Uji-T

Uji-t independen mengasumsikan: (1) Independensi — pengamatan dalam setiap kelompok saling independen; (2) Normalitas — data dalam setiap kelompok kira-kira berdistribusi normal (cukup tangguh untuk n > 30 melalui CLT); (3) untuk uji-t Student (equal_var=True), varians yang sama. Uji-t Welch (equal_var=False) melonggarkan asumsi 3 dan lebih disarankan. Jika normalitas sangat dilanggar pada sampel kecil (< 30), gunakan uji Mann-Whitney U.

import numpy as np
from scipy import stats

np.random.seed(0)
g1 = np.random.normal(10, 2, 30)
g2 = np.random.normal(11, 5, 30)  # Very different variance!

# Levene test for equal variances
stat_l, p_l = stats.levene(g1, g2)
print(f'Levene test p: {p_l:.4f}')
if p_l < 0.05:
    print('Unequal variances -> use Welch\'s (equal_var=False)')
    stat, p = stats.ttest_ind(g1, g2, equal_var=False)
else:
    print('Equal variances OK -> Student\'s t-test')
    stat, p = stats.ttest_ind(g1, g2, equal_var=True)
print(f'Result: t={stat:.3f}, p={p:.4f}')

Uji-T pada Series Pandas

Dalam praktiknya, data yang ingin Anda uji berada di kolom DataFrame Pandas. Anda dapat langsung meneruskan Series Pandas ke fungsi scipy.stats — fungsi tersebut bekerja dengan lancar baik pada Series maupun array NumPy. Alur kerja yang umum: filter DataFrame untuk mendapatkan Series tiap kelompok, jalankan uji-t, lalu simpan hasilnya dalam DataFrame ringkasan. Pola ini dapat digunakan untuk menguji banyak pasangan kolom atau kelompok dalam sebuah perulangan.

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

np.random.seed(0)
df = pd.DataFrame({
    'group': ['A']*60 + ['B']*60,
    'revenue': np.concatenate([
        np.random.normal(100, 20, 60),
        np.random.normal(110, 22, 60)
    ])
})

grp_a = df.loc[df['group'] == 'A', 'revenue']
grp_b = df.loc[df['group'] == 'B', 'revenue']

stat, p = stats.ttest_ind(grp_a, grp_b, equal_var=False)
print(f'A mean: {grp_a.mean():.2f}, B mean: {grp_b.mean():.2f}')
print(f'p-value: {p:.4f}')

Masalah Perbandingan Berganda

Menjalankan banyak uji-t secara bersamaan meningkatkan peluang positif palsu. Jika Anda menjalankan 20 uji-t pada α=0.05, Anda memperkirakan 1 positif palsu terjadi secara kebetulan. Inilah masalah perbandingan berganda. Terapkan koreksi Bonferroni: bagi α dengan jumlah uji (p_threshold = 0.05 / n_tests). Untuk daya yang lebih besar dengan sifat yang tidak terlalu konservatif, gunakan koreksi False Discovery Rate (FDR) Benjamini-Hochberg yang tersedia di statsmodels. Selalu lakukan koreksi untuk perbandingan berganda dalam pengujian A/B dengan banyak metrik.

import numpy as np
from scipy import stats

np.random.seed(0)
n_tests = 10
results = []
for i in range(n_tests):
    g1 = np.random.normal(0, 1, 50)
    g2 = np.random.normal(0.1, 1, 50)  # Tiny true effect
    _, p = stats.ttest_ind(g1, g2)
    results.append(p)

print('p-values:', [round(p, 3) for p in results])
bonferroni_thresh = 0.05 / n_tests
print(f'Bonferroni threshold: {bonferroni_thresh}')
print('Significant after Bonferroni:', sum(p < bonferroni_thresh for p in results))

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Analisis Data dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari: ttest_1samp menguji mean sampel terhadap nilai acuan, ttest_ind (uji Welch dengan equal_var=False) membandingkan dua kelompok independen, dan ttest_rel menangani pengukuran berpasangan. Selalu laporkan Cohen's d bersama nilai-p untuk membedakan signifikansi statistik dari signifikansi praktis. Selanjutnya, kita menguji hubungan antara variabel kategorikal dengan uji khi-kuadrat.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengujian-t untuk Membandingkan Rata-Rata” gratis?

Ya — teks lengkap “Pengujian-t untuk Membandingkan Rata-Rata” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengujian-t untuk Membandingkan Rata-Rata”?

Jalankan pengujian-t satu sampel, dua sampel independen, dan sampel berpasangan dengan scipy.stats, lalu tafsirkan interval kepercayaan. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pengujian-t untuk Membandingkan Rata-Rata” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Statistik Deskriptif dan Pengujian Normalitas
  2. Pengujian-t untuk Membandingkan Rata-Rata
  3. Pengujian Chi-Kuadrat untuk Independensi
  4. ANOVA dan Pengujian Pasca-Hoc
← Kembali ke Pandas & NumPy Academy