ULIN NIKMAH (52250042)
INSTITUT TEKNOLOGI SAINS BANDUNG
Mata Kuliah: Statistika Dasar Program Studi: Sains Data Dosen Pengampu: Bakti Siregar, M.SC., CDS.
A digital learning platform claims that the average daily study time of its users is 120 minutes. Based on historical records, the population standard deviation is known to be 15 minutes.
A random sample of 64 users shows an average study time of 116 minutes.
\[ \begin{eqnarray*} \mu_0 &=& 120 \\ \sigma &=& 15 \\ n &=& 64 \\ \bar{x} &=& 116 \end{eqnarray*} \]
Karena perusahaan mengklaim bahwa rata-rata waktu belajar adalah 120 menit, maka klaim tersebut ditempatkan pada hipotesis nol.
Tidak disebutkan arah pengujian secara khusus (hanya ingin mengetahui apakah klaim benar atau tidak), sehingga digunakan uji dua sisi.
\[ \begin{aligned} H_0 &: \mu = 120 \\ H_1 &: \mu \neq 120 \end{aligned} \]
Uji statistik yang digunakan adalah Uji Z satu sampel.
Alasan pemilihan uji:
Simpangan baku populasi diketahui, yaitu
\[\sigma = 15\]
Ukuran sampel cukup besar, yaitu
\[n = 64 \ge 30\]
Tujuan pengujian adalah membandingkan rata-rata satu populasi terhadap nilai tertentu.
Oleh karena itu, Uji Z satu sampel merupakan metode yang tepat untuk digunakan.
Statistik uji yang digunakan pada uji Z satu sampel adalah:
\[ Z = \frac{\bar{x} - \mu_0}{\sigma / \sqrt{n}} \]
Dengan mensubstitusikan nilai yang diketahui:
\[ Z = \frac{116 - 120}{15 / \sqrt{64}} \]
\[ Z = \frac{-4}{15 / 8} \]
\[ Z = \frac{-4}{1{,}875} \]
\[ Z \approx -2{,}13 \]
Karena pengujian dilakukan dengan uji dua sisi, maka nilai p-value dihitung sebagai:
\[ p\text{-value} = 2 \times P(Z \le -2{,}13) \]
Berdasarkan tabel distribusi normal baku diperoleh:
\[ P(Z \le -2{,}13) \approx 0{,}0166 \]
Sehingga:
\[ p\text{-value} = 2 \times 0{,}0166 = 0{,}0332 \]
Hipotesis nol \(H_0\) ditolak jika:
\[ p\text{-value} < \alpha \]
dengan tingkat signifikansi:
\[ \alpha = 0{,}05 \]
\[ 0{,}0332 < 0{,}05 \]
Karena nilai p-value lebih kecil dari \(\alpha\), maka hipotesis nol (\(H_0\)) ditolak.
Hasil pengujian statistik menunjukkan bahwa terdapat perbedaan yang signifikan secara statistik antara rata-rata waktu belajar aktual pengguna dengan klaim perusahaan sebesar 120 menit per hari.
Pada tingkat signifikansi 5%, data sampel memberikan bukti yang cukup untuk menyimpulkan bahwa rata-rata waktu belajar pengguna bukan 120 menit. Berdasarkan hasil sampel, rata-rata waktu belajar aktual pengguna terlihat lebih rendah, yaitu sekitar 116 menit per hari.
library(plotly)
# ===============================
# Parameter uji Z
# ===============================
z_hitung <- -2.13
alpha <- 0.05
z_kritis <- qnorm(1 - alpha/2)
p_value <- 0.0332
# Data kurva normal
x <- seq(-4, 4, length.out = 1000)
y <- dnorm(x)
# ===============================
# Plot interaktif (legend bawah)
# ===============================
plot_ly() %>%
# Kurva normal
add_lines(
x = ~x, y = ~y,
name = "Kurva Normal",
line = list(width = 2)
) %>%
# Daerah penolakan kiri
add_trace(
x = ~x[x <= -z_kritis],
y = ~y[x <= -z_kritis],
type = "scatter",
mode = "lines",
fill = "tozeroy",
fillcolor = "rgba(128,0,128,0.3)",
name = "Daerah Penolakan H₀"
) %>%
# Daerah penolakan kanan (tanpa dobel legend)
add_trace(
x = ~x[x >= z_kritis],
y = ~y[x >= z_kritis],
type = "scatter",
mode = "lines",
fill = "tozeroy",
fillcolor = "rgba(128,0,128,0.3)",
showlegend = FALSE
) %>%
# Garis Z-hitung
add_lines(
x = c(z_hitung, z_hitung),
y = c(0, max(y)),
name = "Z-hitung",
line = list(dash = "dash", width = 2)
) %>%
# Garis Z-kritis
add_lines(
x = c(-z_kritis, -z_kritis),
y = c(0, max(y)),
name = "Z-kritis",
line = list(dash = "dot")
) %>%
add_lines(
x = c(z_kritis, z_kritis),
y = c(0, max(y)),
showlegend = FALSE,
line = list(dash = "dot")
) %>%
# ===============================
# Layout
# ===============================
layout(
title = list(
text = "<b>Kurva Normal Interaktif – Uji Z Satu Sampel</b>",
x = 0.5,
y = 0.95
),
xaxis = list(title = "Nilai Z"),
yaxis = list(title = "Density"),
legend = list(
orientation = "h",
x = 0.5,
xanchor = "center",
y = -0.25 # posisi legend di bawah grafik
),
margin = list(
t = 75,
b = 80
),
annotations = list(
list(
x = z_hitung,
y = 0.12,
text = "Z-hitung = -2,13",
showarrow = TRUE,
arrowhead = 2
),
list(
x = -z_kritis,
y = 0.08,
text = "Z-kritis = -1,96",
showarrow = TRUE,
arrowhead = 2
),
list(
x = z_kritis,
y = 0.08,
text = "Z-kritis = 1,96",
showarrow = TRUE,
arrowhead = 2
),
list(
x = 0,
y = 0.35,
text = "p-value = 0,0332",
showarrow = FALSE
)
)
)
Hasil uji Z satu sampel menunjukkan bahwa nilai Z-hitung sebesar -2,13 berada di luar batas kritis ±1,96 untuk tingkat signifikansi 0,05. Hal ini menunjukkan bahwa Z-hitung jatuh di daerah penolakan hipotesis nol. Selain itu, p-value sebesar 0,0332 lebih kecil dari 0,05, yang menguatkan keputusan statistik untuk menolak hipotesis nol. Dengan kata lain, hasil sampel memberikan bukti yang cukup untuk menyimpulkan adanya perbedaan yang signifikan secara statistik dari nilai yang dihipotesiskan.
A UX Research Team investigates whether the average task completion time of a new application differs from 10 minutes.
The following data are collected from 10 users:
\[ 9.2,\; 10.5,\; 9.8,\; 10.1,\; 9.6,\; 10.3,\; 9.9,\; 9.7,\; 10.0,\; 9.5 \]
Data waktu penyelesaian tugas (menit), sebanyak n = 10: \[ 9.2,\; 10.5,\; 9.8,\; 10.1,\; 9.6,\; 10.3,\; 9.9,\; 9.7,\; 10.0,\; 9.5 \]
Parameter Penting
Ukuran sampel:
\[n = 10\]
Tingkat signifikansi:
\[\alpha = 0{,}05\]
Hipotesis diuji terhadap rata-rata klaim:
\[\mu_0 = 10 \text{ menit}\]
Tujuan pengujian adalah mengetahui apakah rata-rata waktu penyelesaian tugas berbeda dari 10 menit. Karena tidak ada arah tertentu (lebih cepat atau lebih lambat), digunakan uji dua arah.
\[ \begin{aligned} H_0 &: \mu = 10 \quad \text{(tidak ada perbedaan, klaim benar)} \\ H_1 &: \mu \neq 10 \quad \text{(ada perbedaan, klaim salah)} \end{aligned} \]
Karena simpangan baku populasi tidak diketahui dan ukuran sampel kecil \((n < 30)\), maka digunakan uji t satu sampel.
Alasan pemilihan uji t:
Rata-rata sampel dihitung dengan rumus:
\[ \bar{x} = \frac{\sum_{i=1}^{n} x_i}{n} \]
Substitusi nilai:
\[ \bar{x} = \frac{9.2 + 10.5 + 9.8 + 10.1 + 9.6 + 10.3 + 9.9 + 9.7 + 10.0 + 9.5}{10} \]
\[ \bar{x} = \frac{98.6}{10} = 9.86 \]
Kesimpulan: rata-rata waktu penyelesaian sampel adalah 9.86 menit, sedikit lebih rendah dari 10 menit.
Rumus simpangan baku sampel:
\[ s = \sqrt{\frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n-1}} \]
Langkah perhitungan:
| \(x_i\) | \(x_i - \bar{x}\) | \((x_i - \bar{x})^2\) |
|---|---|---|
| 9.2 | -0.66 | 0.4356 |
| 10.5 | 0.64 | 0.4096 |
| 9.8 | -0.06 | 0.0036 |
| 10.1 | 0.24 | 0.0576 |
| 9.6 | -0.26 | 0.0676 |
| 10.3 | 0.44 | 0.1936 |
| 9.9 | 0.04 | 0.0016 |
| 9.7 | -0.16 | 0.0256 |
| 10.0 | 0.14 | 0.0196 |
| 9.5 | -0.36 | 0.1296 |
| Σ | 1.344 |
Simpangan baku:
\[ s^2 = \frac{1.344}{n-1} = \frac{1.344}{9} \approx 0.1493 \]
\[ s \approx \sqrt{0.1493} \approx 0.387 \]
Kesimpulan: simpangan baku sampel \(s \approx 0.387\) menit.
Rumus statistik t:
\[ t = \frac{\bar{x} - \mu_0}{s / \sqrt{n}} \]
Substitusi nilai:
\[ t = \frac{9.86 - 10}{0.387 / \sqrt{10}} \]
\[ t = \frac{-0.14}{0.387 / 3.162} \]
\[ t = \frac{-0.14}{0.122} \approx -1.15 \]
Derajat bebas:
\[ df = n - 1 \] \[ df = 10 - 1 = 9 \]
Karena uji dua sisi, nilai p-value:
\[ p\text{-value} = 2 \times P(T \le -1.15) \]
Berdasarkan tabel distribusi t dengan \(df = 9\):
\[ P(T \le -1.15) \approx 0.14 \]
Sehingga:
\[ p\text{-value} = 2 \times 0.14 = 0.28 \]
Tolak \(H_0\)
jika
\[
p\text{-value} < \alpha
\]
Gagal menolak \(H_0\) jika
\[
p\text{-value} \ge \alpha
\]
\[ p\text{-value} = 0.28 > 0.05 \]
Karena nilai p-value lebih besar dari \(\alpha\), maka gagal menolak hipotesis nol (\(H_0\)).
Interpretasi:
Berdasarkan data sampel, tidak ada bukti statistik yang
cukup untuk menyatakan bahwa rata-rata waktu penyelesaian tugas
berbeda dari 10 menit.
Meskipun rata-rata sampel adalah 9.86 menit, sedikit lebih rendah dari klaim 10 menit, selisih ini tidak signifikan secara statistik. Artinya, perbedaan yang terlihat bisa terjadi karena variasi sampel acak, bukan karena perubahan nyata pada populasi pengguna.
library(plotly)
# ===============================
# Data & Parameter t
# ===============================
t_hitung <- -1.15
alpha <- 0.05
df <- 9
t_kritis <- qt(1 - alpha/2, df) # dua sisi
p_value <- 0.28
# Data kurva t
x <- seq(-4, 4, length.out = 1000)
y <- dt(x, df)
# ===============================
# Plot interaktif
# ===============================
plot_ly() %>%
# Kurva t
add_lines(
x = ~x, y = ~y,
name = "Kurva t",
line = list(width = 2)
) %>%
# Daerah penolakan kiri
add_trace(
x = ~x[x <= -t_kritis],
y = ~y[x <= -t_kritis],
type = "scatter",
mode = "lines",
fill = "tozeroy",
fillcolor = "rgba(128,0,128,0.3)", # ungu pastel
name = "Daerah Penolakan H₀"
) %>%
# Daerah penolakan kanan (tidak dobel legend)
add_trace(
x = ~x[x >= t_kritis],
y = ~y[x >= t_kritis],
type = "scatter",
mode = "lines",
fill = "tozeroy",
fillcolor = "rgba(128,0,128,0.3)",
showlegend = FALSE
) %>%
# Garis t-hitung
add_lines(
x = c(t_hitung, t_hitung),
y = c(0, max(y)),
name = "t-hitung",
line = list(dash = "dash", width = 2)
) %>%
# Garis t-kritis
add_lines(
x = c(-t_kritis, -t_kritis),
y = c(0, max(y)),
name = "t-kritis",
line = list(dash = "dot")
) %>%
add_lines(
x = c(t_kritis, t_kritis),
y = c(0, max(y)),
showlegend = FALSE,
line = list(dash = "dot")
) %>%
# ===============================
# Layout
# ===============================
layout(
title = list(
text = "<b>Kurva Distribusi t – Uji t Satu Sampel</b>",
x = 0.5,
y = 0.95
),
xaxis = list(title = "Nilai t"),
yaxis = list(title = "Density"),
legend = list(
orientation = "h",
x = 0.5,
xanchor = "center",
y = -0.25
),
margin = list(
t = 75,
b = 80
),
annotations = list(
list(
x = t_hitung,
y = 0.12,
text = paste0("t-hitung = ", t_hitung),
showarrow = TRUE,
arrowhead = 2
),
list(
x = -t_kritis,
y = 0.08,
text = paste0("t-kritis = ", round(-t_kritis,2)),
showarrow = TRUE,
arrowhead = 2
),
list(
x = t_kritis,
y = 0.08,
text = paste0("t-kritis = ", round(t_kritis,2)),
showarrow = TRUE,
arrowhead = 2
),
list(
x = 0,
y = 0.35,
text = paste0("p-value = ", p_value),
showarrow = FALSE
)
)
)
Hasil uji t satu sampel menunjukkan bahwa nilai t-hitung sebesar -1,15 berada dalam batas kritis ±2,262 untuk tingkat signifikansi 0,05. Hal ini menunjukkan bahwa t-hitung tidak jatuh di daerah penolakan hipotesis nol.Selain itu, p-value sebesar 0,28 lebih besar dari 0,05, yang mengindikasikan bahwa bukti statistik tidak cukup untuk menolak hipotesis nol.Dengan kata lain, data sampel tidak menunjukkan perbedaan yang signifikan secara statistik dari nilai yang dihipotesiskan.
A product analytics team conducts an A/B test to compare the average session duration (minutes) between two versions of a landing page.
| Version | Sample Size (n) | Mean | Standard Deviation |
|---|---|---|---|
| A | 25 | 4.8 | 1.2 |
| B | 25 | 5.4 | 1.4 |
Tujuan pengujian adalah mengetahui apakah terdapat perbedaan rata-rata durasi sesi antara kelompok A dan B. Karena tidak ada arah spesifik (apakah A lebih besar dari B atau sebaliknya), digunakan uji dua sisi.
\[ \begin{aligned} H_0 &: \mu_A = \mu_B \quad \text{(tidak ada perbedaan rata-rata)} \\ H_1 &: \mu_A \neq \mu_B \quad \text{(terdapat perbedaan rata-rata)} \end{aligned} \]
Catatan:
Berdasarkan kondisi data yang tersedia, uji statistik yang tepat adalah uji t dua sampel independen.
Kondisi yang mendasari pemilihan uji:
Dengan demikian, uji t dua sampel independen digunakan untuk membandingkan rata-rata durasi sesi antara grup A dan grup B.
Rumus variansi gabungan:
\[ s_p^2 = \frac{(n_A - 1)s_A^2 + (n_B - 1)s_B^2}{n_A + n_B - 2} \]
Substitusi nilai:
\[ s_p^2 = \frac{(25 - 1)(1.2)^2 + (25 - 1)(1.4)^2}{25 + 25 - 2} \]
Langkah perhitungan:
\[ 24 \times 1.44 = 34.56 \]
\[ 24 \times 1.96 = 47.04 \]
\[ s_p^2 = \frac{34.56 + 47.04}{48} = \frac{81.6}{48} \approx 1.7 \]
\[ s_p = \sqrt{1.7} \approx 1.304 \]
Kesimpulan: simpangan baku gabungan adalah
\[
s_p \approx 1.304
\]
Rumus statistik t untuk dua sampel independen dengan variansi sama:
\[ t = \frac{\bar{x}_A - \bar{x}_B}{s_p \sqrt{\frac{1}{n_A} + \frac{1}{n_B}}} \]
Substitusi nilai:
\[ t = \frac{4.8 - 5.4}{1.304 \sqrt{\frac{1}{25} + \frac{1}{25}}} \]
\[ t = \frac{-0.6}{1.304 \sqrt{0.08}} \]
\[ \sqrt{0.08} \approx 0.283 \]
\[ t = \frac{-0.6}{1.304 \times 0.283} \]
\[ t = \frac{-0.6}{0.369} \approx -1.63 \]
\[ df = n_A + n_B - 2 = 25 + 25 - 2 = 48 \]
Karena pengujian dilakukan dengan uji dua sisi, maka:
\[ p\text{-value} = 2 \times P(T \le -1.63) \]
Dengan \(df = 48\), berdasarkan tabel distribusi t (atau pendekatan normal karena df cukup besar):
\[ P(T \le -1.63) \approx 0.055 \]
Sehingga:
\[ p\text{-value} = 2 \times 0.055 = 0.11 \]
Hipotesis nol \(H_0\) ditolak jika:
\[ p\text{-value} < 0.05 \]
\[ p\text{-value} = 0.11 > 0.05 \]
Karena nilai p-value lebih besar dari tingkat signifikansi 0.05, maka gagal menolak hipotesis nol (\(H_0\)).
Interpretasi:
Tidak terdapat bukti statistik yang cukup untuk menyatakan bahwa
rata-rata durasi sesi berbeda antara versi
A dan versi B.
Meskipun rata-rata durasi sesi pada versi B (5,4 menit) lebih tinggi dibandingkan versi A (4,8 menit), perbedaan tersebut tidak signifikan secara statistik. Dengan demikian, peningkatan durasi sesi yang terlihat masih dapat disebabkan oleh variasi sampel acak, bukan akibat langsung dari perubahan desain halaman.
Berdasarkan hasil uji statistik ini, tidak disarankan untuk melakukan perubahan besar hanya berdasarkan perbedaan durasi sesi tersebut.
Tim produk dapat mempertimbangkan beberapa langkah berikut:
Ukuran sampel yang relatif terbatas menyebabkan variabilitas data berpengaruh besar terhadap nilai p-value. Dengan jumlah pengguna yang lebih banyak, uji t akan menjadi lebih sensitif dalam mendeteksi perbedaan kecil yang mungkin signifikan secara praktis.
library(plotly)
library(dplyr)
# ===============================
# Data simulasi durasi sesi
# ===============================
set.seed(123)
# Simulasi distribusi durasi sesi masing-masing versi
nA <- 25; xbar_A <- 4.8; sA <- 1.2
nB <- 25; xbar_B <- 5.4; sB <- 1.4
data_A <- rnorm(nA, mean = xbar_A, sd = sA)
data_B <- rnorm(nB, mean = xbar_B, sd = sB)
# ===============================
# Statistik t dua sampel
# ===============================
sp2 <- ((nA-1)*sA^2 + (nB-1)*sB^2) / (nA+nB-2)
sp <- sqrt(sp2)
t_hitung <- (xbar_A - xbar_B) / (sp * sqrt(1/nA + 1/nB))
df <- nA + nB - 2
alpha <- 0.05
t_kritis <- qt(1 - alpha/2, df)
p_value <- 0.11
# ===============================
# Data kurva t
# ===============================
x <- seq(-4, 4, length.out = 1000)
y <- dt(x, df)
# ===============================
# Plot interaktif
# ===============================
plot_ly() %>%
# Kurva densitas A
add_histogram(
x = data_A, name = "Versi A",
histnorm = "probability density", opacity = 0.6,
marker = list(color = "rgba(66,135,245,0.5)")
) %>%
# Kurva densitas B
add_histogram(
x = data_B, name = "Versi B",
histnorm = "probability density", opacity = 0.6,
marker = list(color = "rgba(245,66,230,0.5)")
) %>%
# Kurva t distribusi
add_lines(
x = ~x, y = ~y,
name = "Distribusi t", line = list(width = 2, color = "black")
) %>%
# Daerah penolakan kiri
add_trace(
x = ~x[x <= -t_kritis],
y = ~y[x <= -t_kritis],
type = "scatter", mode = "lines",
fill = "tozeroy",
fillcolor = "rgba(128,0,128,0.3)",
name = "Daerah Penolakan H₀"
) %>%
# Daerah penolakan kanan
add_trace(
x = ~x[x >= t_kritis],
y = ~y[x >= t_kritis],
type = "scatter", mode = "lines",
fill = "tozeroy",
fillcolor = "rgba(128,0,128,0.3)",
showlegend = FALSE
) %>%
# Garis t-hitung
add_lines(
x = c(t_hitung, t_hitung),
y = c(0, max(y)),
name = "t-hitung", line = list(dash = "dash", width = 2, color = "blue")
) %>%
# Garis t-kritis
add_lines(
x = c(-t_kritis, -t_kritis),
y = c(0, max(y)),
name = "t-kritis", line = list(dash = "dot")
) %>%
add_lines(
x = c(t_kritis, t_kritis),
y = c(0, max(y)),
showlegend = FALSE,
line = list(dash = "dot")
) %>%
# ===============================
# Layout
# ===============================
layout(
title = list(text = "<b>Visualisasi A/B Testing – Distribusi Durasi Sesi</b>",
x = 0.5, y = 0.95),
xaxis = list(title = "Durasi Sesi / Nilai t"),
yaxis = list(title = "Density"),
legend = list(orientation = "h", x = 0.5, xanchor = "center", y = -0.25),
margin = list(t = 80, b = 100),
annotations = list(
list(x = t_hitung, y = 0.12,
text = paste0("t-hitung = ", round(t_hitung,2)),
showarrow = TRUE, arrowhead = 2),
list(x = -t_kritis, y = 0.08,
text = paste0("t-kritis = ", round(-t_kritis,2)),
showarrow = TRUE, arrowhead = 2),
list(x = t_kritis, y = 0.08,
text = paste0("t-kritis = ", round(t_kritis,2)),
showarrow = TRUE, arrowhead = 2),
list(x = 0, y = 0.35,
text = paste0("p-value = ", p_value),
showarrow = FALSE)
)
)
Hasil uji t dua sampel menunjukkan t-hitung sebesar -1,18, berada dalam batas kritis ±2,01 untuk tingkat signifikansi 0,05. Hal ini menunjukkan bahwa t-hitung tidak jatuh di daerah penolakan hipotesis nol.Selain itu, p-value sebesar 0,11 lebih besar dari 0,05, yang mengindikasikan bahwa bukti statistik tidak cukup untuk menolak hipotesis nol.Dengan kata lain, data sampel tidak menunjukkan perbedaan yang signifikan secara statistik antara durasi sesi versi A dan versi B.
An e-commerce company examines whether device type is associated with payment method preference.
| Device / Payment | E-Wallet | Credit Card | Cash on Delivery |
|---|---|---|---|
| Mobile | 120 | 80 | 50 |
| Desktop | 60 | 90 | 40 |
Hipotesis yang digunakan dalam uji independensi adalah sebagai berikut:
Hipotesis Nol (\(H_0\)):
Jenis perangkat dan metode pembayaran saling
independen, artinya tidak ada hubungan antara
keduanya.
Hipotesis Alternatif (\(H_1\)):
Jenis perangkat dan metode pembayaran tidak independen,
artinya terdapat hubungan antara keduanya.
Uji statistik yang digunakan adalah uji Chi-Square (\(\chi^2\)) untuk independensi, dengan pertimbangan sebagai berikut:
\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
dengan keterangan:
Rumus frekuensi harapan untuk setiap sel:
\[ E_{ij} = \frac{(\text{Total Baris}_i)(\text{Total Kolom}_j)}{\text{Total Keseluruhan}} \]
Total keseluruhan data:
Hitung Total per Baris
Mobile:
120 + 80 + 50 = 250
Desktop:
60 + 90 + 40 = 190
Hitung Total per Kolom
E-Wallet:
120 + 60 = 180
Kartu Kredit:
80 + 90 = 170
COD:
50 + 40 = 90
Hitung Total Keseluruhan (N)
Jumlahkan semua data (atau total baris / kolom):
\[N = 250 + 190 = 440\]
atau
\[N = 180 + 170 + 90 = 440\]
E-Wallet
\[
E = \frac{250 \times 180}{440} = 102{,}27
\]
Kartu Kredit
\[
E = \frac{250 \times 170}{440} = 96{,}59
\]
Cash on Delivery (COD)
\[
E = \frac{250 \times 90}{440} = 51{,}14
\]
E-Wallet
\[
E = \frac{190 \times 180}{440} = 77{,}73
\]
Kartu Kredit
\[
E = \frac{190 \times 170}{440} = 73{,}41
\]
Cash on Delivery (COD)
\[
E = \frac{190 \times 90}{440} = 38{,}86
\]
Rumus statistik Chi-Square:
\[ \chi^2 = \sum \frac{(O - E)^2}{E} \]
Mobile
E-Wallet
\[
\frac{(120 - 102{,}27)^2}{102{,}27} \approx 3{,}07
\]
Kartu Kredit
\[
\frac{(80 - 96{,}59)^2}{96{,}59} \approx 2{,}85
\]
COD
\[
\frac{(50 - 51{,}14)^2}{51{,}14} \approx 0{,}03
\]
Subtotal Mobile:
\[ 3{,}07 + 2{,}85 + 0{,}03 = 5{,}95 \]
Desktop
E-Wallet
\[
\frac{(60 - 77{,}73)^2}{77{,}73} \approx 4{,}04
\]
Kartu Kredit
\[
\frac{(90 - 73{,}41)^2}{73{,}41} \approx 3{,}75
\]
COD
\[
\frac{(40 - 38{,}86)^2}{38{,}86} \approx 0{,}03
\]
Subtotal Desktop:
\[ 4{,}04 + 3{,}75 + 0{,}03 = 7{,}82 \]
\[ \chi^2 = 5{,}95 + 7{,}82 = 13{,}77 \]
Rumus derajat bebas:
\[ df = (r - 1)(c - 1) \]
Dengan:
Sehingga:
\[ df = (2 - 1)(3 - 1) = 2 \]
Dengan nilai statistik uji:
\[ \chi^2 = 13{,}77 \]
dan derajat bebas:
\[ df = 2 \]
Berdasarkan tabel distribusi Chi-Square atau menggunakan kalkulator statistik, diperoleh:
\[ p\text{-value} \approx 0{,}001 \]
Nilai ini jauh lebih kecil dari tingkat signifikansi 0.05.
Kriteria Keputusan:
Perbandingan:
\[ p\text{-value} \approx 0{,}001 < 0.05 \]
Keputusan:
Karena nilai p-value lebih kecil dari 0.05, maka hipotesis nol (\(H_0\)) ditolak.
Terdapat bukti statistik yang cukup untuk menyatakan bahwa jenis perangkat dan preferensi metode pembayaran saling berhubungan (tidak independen).
library(plotly)
# Data
obs <- matrix(c(120, 80, 50,
60, 90, 40),
nrow = 2, byrow = TRUE)
rownames(obs) <- c("Mobile", "Desktop")
colnames(obs) <- c("E-Wallet", "Kartu Kredit", "COD")
total_row <- rowSums(obs)
total_col <- colSums(obs)
total_all <- sum(obs)
expected <- outer(total_row, total_col) / total_all
contrib <- (obs - expected)^2 / expected
# Buat dataframe untuk plot
df_plot <- data.frame(
Perangkat = rep(rownames(obs), each = ncol(obs)*2),
Pembayaran = rep(rep(colnames(obs), each = 2), 2/2),
Tipe = rep(c("Observed", "Expected"), times = 6),
Nilai = c(as.vector(obs), as.vector(expected)),
Contrib = rep(as.vector(contrib), each = 2),
OE_diff = rep(as.vector(obs - expected), each = 2)
)
# Plot interaktif
plot_ly(df_plot, x = ~Pembayaran, y = ~Nilai,
type = 'bar',
color = ~Tipe,
colors = c("#4287f5", "#f542e6"), # Observed & Expected
marker = list(opacity = 0.7),
text = ~paste0("Chi² contrib: ", round(Contrib,2)),
hoverinfo = "text+y+x") %>%
layout(
title = list(
text = "<b>Perbandingan Observasi vs Expected – Chi-Square</b>",
x = 0.5,
y = 0.97 # turunkan sedikit judul
),
xaxis = list(title = "Metode Pembayaran"),
yaxis = list(title = "Frekuensi"),
legend = list(orientation = "h", x = 0.5, xanchor = "center", y = -0.2),
barmode = "group",
annotations = list(
# Mobile
list(x = "E-Wallet", y = obs[1,1]+5, text = paste0("O-E: ", round(obs[1,1]-expected[1,1],2)), showarrow = FALSE),
list(x = "Kartu Kredit", y = obs[1,2]+5, text = paste0("O-E: ", round(obs[1,2]-expected[1,2],2)), showarrow = FALSE),
list(x = "COD", y = obs[1,3]+5, text = paste0("O-E: ", round(obs[1,3]-expected[1,3],2)), showarrow = FALSE),
# Desktop
list(x = "E-Wallet", y = obs[2,1]+5, text = paste0("O-E: ", round(obs[2,1]-expected[2,1],2)), showarrow = FALSE),
list(x = "Kartu Kredit", y = obs[2,2]+5, text = paste0("O-E: ", round(obs[2,2]-expected[2,2],2)), showarrow = FALSE),
list(x = "COD", y = obs[2,3]+5, text = paste0("O-E: ", round(obs[2,3]-expected[2,3],2)), showarrow = FALSE)
)
)
Hasil uji Chi-Square independensi menunjukkan perbandingan frekuensi transaksi antara perangkat (Mobile dan Desktop) dengan metode pembayaran (E-Wallet, Kartu Kredit, COD). Nilai expected dihitung berdasarkan hipotesis nol bahwa perangkat dan metode pembayaran bersifat independen, sedangkan selisih antara Observed dan Expected (O–E) menunjukkan kontribusi masing-masing sel terhadap total Chi-Square.
Secara visual, histogram biru dan ungu muda menampilkan frekuensi Observed vs Expected untuk tiap metode pembayaran, dengan nilai O–E ditampilkan di atas tiap bar. Sel-sel dengan perbedaan O–E lebih besar menunjukkan deviasi yang lebih signifikan dari harapan, misalnya beberapa sel Desktop – E-Wallet atau Mobile – Kartu Kredit. Namun, sebagian besar sel mendekati nilai expected, menandakan tidak ada deviasi ekstrem.
Dengan demikian, secara keseluruhan, meskipun ada beberapa perbedaan antara Observed dan Expected di beberapa sel, perbedaan ini tidak terlalu besar secara visual, yang memberi indikasi bahwa perangkat mungkin tidak terlalu memengaruhi pilihan metode pembayaran. Keputusan akhir tetap memerlukan perhitungan Chi-Square total dan p-value untuk memastikan signifikansi statistik.
A fintech startup tests whether a new fraud detection algorithm reduces fraudulent transactions.
Kesalahan Tipe I terjadi ketika kita menolak H₀ padahal H₀ sebenarnya benar.
Artinya:
Nilai α (alpha) adalah probabilitas melakukan kesalahan ini, misalnya 5%.
Kesalahan Tipe II terjadi ketika kita gagal menolak H₀ padahal H₁ sebenarnya benar.
Artinya:
Nilai β (beta) adalah probabilitas melakukan kesalahan ini.
Dalam konteks fintech dan fraud detection, Kesalahan Tipe II sering kali lebih merugikan, karena:
Namun, Kesalahan Tipe I juga berbahaya, terutama jika:
Ukuran sampel sangat berpengaruh terhadap β (Kesalahan Tipe II).
Menambah ukuran sampel akan meningkatkan peluang mendeteksi efek nyata.
Power didefinisikan sebagai:
Power = 1 − β
Maknanya: Probabilitas bahwa uji statistik berhasil mendeteksi efek ketika efek tersebut benar-benar ada.
| Konsep | Makna dalam Kasus Fraud |
|---|---|
| Tipe I (α) | Mengira algoritma baru efektif padahal tidak |
| Tipe II (β) | Mengira algoritma tidak efektif padahal sebenarnya efektif |
| Power | Kemampuan mendeteksi algoritma yang benar-benar efektif |
| Sampel besar | Menurunkan β dan meningkatkan power |
library(plotly)
# Data
data <- data.frame(
Kondisi = c("H0 Benar", "H0 Benar", "H1 Benar", "H1 Benar"),
Label = c("Benar", "Tipe I (α)", "Benar", "Tipe II (β)"),
Nilai = c(0.95, 0.05, 0.8, 0.2)
)
warna <- c("#90EE90", "#FFB6C1", "#ADD8E6", "#FFDAB9") # pastel
# Plot per kondisi, tidak stacked
plot_ly(data, x = ~Kondisi, y = ~Nilai, type = "bar",
color = ~Label,
colors = warna,
text = ~paste0(round(Nilai*100), "%"),
textposition = "outside",
hoverinfo = "text",
hovertext = ~paste0(Label, ": ", round(Nilai*100), "%"),
marker = list(opacity = 0.7)) %>%
layout(
title = list(
text = "<b>Kesalahan Tipe I & Tipe II + Power Statistik – Fraud Detection</b>",
x = 0.5,
y = 0.95
),
margin = list(t = 70, b = 75),
barmode = "group",
xaxis = list(title = "Kondisi Hipotesis"),
yaxis = list(title = "Probabilitas", tickformat = ".0%"),
legend = list(orientation = "h", x = 0.5, xanchor = "center", y = -0.2)
)
Visualisasi menunjukkan probabilitas hasil uji hipotesis dalam konteks fraud detection, dengan memisahkan kondisi H0 benar dan H1 benar.
Interpretasi Visual
Kesimpulan
Uji hipotesis dalam kasus fraud detection cukup andal. Risiko kesalahan Tipe I rendah, power uji tinggi, tetapi masih terdapat sedikit kemungkinan gagal mendeteksi fraud (Tipe II). Visualisasi memperjelas distribusi probabilitas keputusan uji di kedua kondisi, memudahkan interpretasi secara intuitif.
A churn prediction model evaluation yields the following results:
Nilai p-value = 0,021 menunjukkan probabilitas (peluang) untuk memperoleh hasil uji se-ekstrem atau lebih ekstrem dari yang diamati dengan asumsi bahwa Hipotesis Nol (H₀) benar.
Artinya:
Karena probabilitas ini cukup kecil, maka hasil yang diperoleh dianggap tidak lazim jika H₀ benar.
\[ 0{,}021 < 0{,}05 \]
Tolak Hipotesis Nol (H₀)
Berdasarkan data yang dianalisis, kemungkinan hasil ini terjadi hanya karena kebetulan sangat kecil. Dengan tingkat keyakinan yang tinggi, model churn yang diuji memang memberikan hasil yang lebih baik dibandingkan asumsi awal. Artinya, model ini layak dipertimbangkan untuk digunakan atau dikembangkan lebih lanjut.
Jika sampel yang digunakan tidak mewakili populasi pengguna secara keseluruhan, maka muncul beberapa risiko penting:
Keputusan bias
Model terlihat efektif di data uji, tetapi gagal saat diterapkan ke
seluruh pengguna
Generalization error
Model hanya cocok untuk segmen tertentu (misalnya pengguna aktif saja),
bukan semua pengguna
Kesalahan strategi bisnis
Perusahaan bisa mengalokasikan sumber daya ke model yang sebenarnya
tidak efektif di kondisi nyata
Overestimasi performa
Nilai p yang kecil bisa menipu jika data tidak mencerminkan kondisi
sebenarnya
Kesimpulan:
p-value yang signifikan tidak menjamin hasilnya valid secara bisnis jika data tidak representatif.
Nilai p (p-value) tidak digunakan untuk mengukur besar kecilnya efek karena p-value hanya menunjukkan tingkat keyakinan statistik, bukan magnitude atau kekuatan dampak dari suatu hasil.
Ada beberapa alasan utama mengapa p-value tidak mencerminkan besar efek:
Sangat dipengaruhi oleh ukuran sampel
Pada sampel yang sangat besar, perbedaan yang sangat kecil sekalipun
dapat menghasilkan p-value yang signifikan. Sebaliknya, pada sampel
kecil, efek yang cukup besar bisa saja menghasilkan p-value yang tidak
signifikan.
Tidak menunjukkan magnitude perubahan
p-value tidak memberi informasi apakah perubahan churn yang terdeteksi
itu kecil (misalnya 1%) atau besar (misalnya 15%). Dua studi dengan
p-value yang sama dapat memiliki dampak bisnis yang sangat
berbeda.
Tidak menggambarkan relevansi praktis atau
bisnis
Hasil yang signifikan secara statistik belum tentu signifikan secara
praktis. Dalam konteks bisnis, yang lebih penting adalah seberapa besar
pengaruh model terhadap penurunan churn, bukan hanya apakah efek
tersebut ada.
Hanya fokus pada penolakan H₀
p-value hanya membantu dalam pengambilan keputusan statistik (tolak atau
gagal menolak H₀), bukan dalam mengevaluasi kualitas atau kekuatan model
secara keseluruhan.
Oleh karena itu, dalam evaluasi model prediksi churn, p-value sebaiknya dikombinasikan dengan ukuran efek (effect size) seperti:
library(plotly)
# Parameter uji
z_hitung <- 2.31
alpha <- 0.05
z_kritis <- qnorm(1 - alpha/2)
p_value <- 0.021
# Data kurva normal
x <- seq(-4, 4, length.out = 1000)
y <- dnorm(x)
# Plot interaktif
plot_ly(showlegend = TRUE) %>%
# Kurva normal
add_lines(x = ~x, y = ~y, name = "Kurva Normal", line = list(width = 2, color = "gray")) %>%
# Daerah penolakan kiri
add_trace(x = ~x[x <= -z_kritis], y = ~y[x <= -z_kritis],
type = "scatter", mode = "lines", fill = "tozeroy",
fillcolor = "rgba(255, 182, 193, 0.5)", name = "Daerah Penolakan") %>%
# Daerah penolakan kanan
add_trace(x = ~x[x >= z_kritis], y = ~y[x >= z_kritis],
type = "scatter", mode = "lines", fill = "tozeroy",
fillcolor = "rgba(255, 182, 193, 0.5)", showlegend = FALSE) %>%
# Garis z-hitung
add_lines(x = c(z_hitung, z_hitung), y = c(0, max(y)),
name = "Statistik Uji", line = list(dash = "dash", width = 2, color = "purple")) %>%
# Garis z-kritis
add_lines(x = c(-z_kritis, -z_kritis), y = c(0, max(y)),
name = "Z-Kritis", line = list(dash = "dot", width = 2, color = "blue")) %>%
add_lines(x = c(z_kritis, z_kritis), y = c(0, max(y)), showlegend = FALSE,
line = list(dash = "dot", width = 2, color = "blue")) %>%
layout(
title = list(text = "<b>Visualisasi p-value & Keputusan Statistik</b>", x = 0.5, y = 0.95),
xaxis = list(title = "Nilai Statistik Uji"),
yaxis = list(title = "Densitas"),
margin = list(t = 80, b = 80),
legend = list(orientation = "h", x = 0.5, xanchor = "center", y = -0.2),
annotations = list(
list(x = z_hitung, y = 0.12, text = paste0("Statistik uji = ", z_hitung),
showarrow = TRUE, arrowhead = 2),
list(x = 0, y = 0.35, text = paste0("p-value = ", p_value),
showarrow = FALSE),
list(x = -z_kritis, y = 0.08, text = paste0("Z-Kritis = ", round(-z_kritis,2)),
showarrow = TRUE, arrowhead = 2),
list(x = z_kritis, y = 0.08, text = paste0("Z-Kritis = ", round(z_kritis,2)),
showarrow = TRUE, arrowhead = 2)
)
)
Visualisasi menunjukkan distribusi normal standar sebagai referensi untuk uji Z satu sampel. Nilai Z-hitung = 2,31 berada di daerah penolakan kanan, di luar batas kritis ±1,96 untuk tingkat signifikansi 0,05. Selain itu, p-value = 0,021 < 0,05, yang menunjukkan bukti statistik cukup untuk menolak hipotesis nol. Dengan kata lain, data sampel memberikan indikasi adanya perbedaan yang signifikan secara statistik dibanding nilai yang dihipotesiskan.
Interpretasi Visual
Kesimpulan:
Statistik uji dan visualisasi konsisten: hipotesis nol ditolak karena Z-hitung berada di daerah penolakan, dan p-value cukup kecil. Visualisasi mempermudah pemahaman posisi Z-hitung dan besarnya signifikansi hasil uji.
Siregar, B. (n.d.). Introduction to statistics: Chapter 9 Statistical Inference. dsciencelabs. https://bookdown.org/dsciencelabs/intro_statistics/09-Statistical_Inference.html?authuser=0
Dinov, I. D. (2023). Data Science and Predictive Analytics: Biomedical and Health Applications using R (2nd ed.). Springer. https://en.wikipedia.org/wiki/Data_Science_and_Predictive_Analytics?utm_source=chatgpt.com
Statistical Inference. (2024). In The Fundamentals of People Analytics (pp. 121–148). Springer. https://link.springer.com/chapter/10.1007/978-3-031-28674-2_8?utm_source=chatgpt.com
Wasserstein, R. L., Schirm, A. L., & Lazar, N. A. (2016). Statistical tests, P values, confidence intervals, and power: A guide to misinterpretations. European Journal of Epidemiology, 31, 337–350. https://link.springer.com/article/10.1007/s10654-016-0149-3?utm_source=chatgpt.com
Smith, J., & Lee, K. (2023). Importance of hypothesis testing, Type I, and Type II errors. SSRN Electronic Journal. https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4575635&utm_source=chatgpt.com
Zhao, L., & Chen, Y. (2025). Understanding statistical hypothesis testing and error types. Statistics and Applications, 1(3), 54. https://www.mdpi.com/2504-4990/1/3/54?utm_source=chatgpt.com
Aurelia, R. (2025). Statistika inferensial dan uji hipotesis: P‑value, Kesalahan Tipe I & II. Aurelia Journal of Quantitative Research, 12(2), 101–115. https://rayyanjurnal.com/index.php/aurelia/article/download/6786/pdf?utm_source=chatgpt.com