UTS Pengantar Statistika
Ujian Tengah Semester
Fadli Nafsin
Menempuh pendidikan di bidang Sains Data di Institut Teknologi Sains Bandung (ITSB), dengan ketertarikan pada Data Science, Data Analytics, dan pengembangan solusi berbasis data. Memiliki semangat untuk terus belajar, bereksplorasi, dan mengembangkan kemampuan di dunia teknologi dan data.
1 Petunjuk dan Ruang Lingkup
Dokumen ini memuat ringkasan materi Minggu 1–7 dan analisis eksploratif terhadap dataset 30 hari. Analisis pada Soal 2 dilakukan menggunakan R agar hasil tabel, ukuran statistik, dan visualisasi dapat diperbarui langsung dari dataset. Nilai ekstrem tetap dipertahankan pada analisis awal dan diperiksa berdasarkan konteks, bukan langsung dihapus.
2 Soal 1 – Ringkasan Materi Minggu 1–7
2.1 Minggu 1 – Konsep Dasar Statistika dan Data
Statistika merupakan ilmu yang mempelajari cara mengumpulkan, mengolah, menyajikan, menganalisis, dan menafsirkan data untuk membantu pengambilan keputusan. Statistika deskriptif menggambarkan data yang tersedia, sedangkan statistika inferensial menarik kesimpulan tentang populasi berdasarkan sampel. Populasi adalah seluruh objek yang menjadi perhatian, sementara sampel merupakan sebagian anggota populasi yang diamati. Parameter menggambarkan karakteristik populasi dan statistik menggambarkan karakteristik sampel. Variabel numerik berupa angka yang dapat dihitung, sedangkan variabel kategorik menunjukkan kelompok. Variabel independen berperan sebagai faktor penjelas, sementara variabel dependen menjadi hasil yang diamati. Contohnya, perusahaan menilai apakah kanal transaksi (independen) berkaitan dengan nilai transaksi (dependen). Konsep ini digunakan untuk menentukan tujuan analisis dan memahami batas kesimpulan dari data.
2.2 Minggu 2 – Jenis Data dan Skala Pengukuran
Data dibedakan menjadi kualitatif dan kuantitatif. Data kualitatif berupa kategori, seperti kanal Online dan Offline, sedangkan data kuantitatif berupa angka. Data kuantitatif diskrit merupakan hasil hitungan, misalnya jumlah transaksi, sementara data kontinu dapat diukur, seperti waktu proses. Sumber data dapat berupa data primer yang dikumpulkan langsung melalui survei atau pengamatan dan data sekunder yang berasal dari laporan atau basis data yang sudah tersedia. Skala pengukuran terdiri atas nominal (kategori tanpa urutan), ordinal (kategori berurutan), interval (jarak sama tanpa nol mutlak), dan rasio (jarak sama dengan nol mutlak). Dalam dataset, observasi adalah baris pengamatan dan variabel adalah kolom. Feature merupakan variabel masukan untuk analisis atau model, sedangkan target adalah variabel yang ingin diprediksi.
| Skala | Karakteristik | Contoh |
|---|---|---|
| Nominal | Kategori tanpa urutan | Kanal transaksi |
| Ordinal | Kategori memiliki urutan | Tingkat kepuasan |
| Interval | Jarak sama, tanpa nol mutlak | Suhu Celsius |
| Rasio | Jarak sama, memiliki nol mutlak | Waktu proses, jumlah transaksi |
2.3 Minggu 3 – Pengumpulan Data dan Sampling
Pengumpulan data dilakukan untuk memperoleh informasi yang sesuai dengan tujuan penelitian. Data primer dikumpulkan langsung, misalnya melalui survei atau wawancara, sedangkan data sekunder berasal dari sumber yang sudah tersedia, seperti laporan atau basis data. Sampling adalah proses memilih sebagian anggota populasi untuk diteliti. Metode probability sampling memberi peluang terpilih yang diketahui kepada anggota populasi, contohnya simple random sampling, systematic sampling, stratified sampling, dan cluster sampling. Non-probability sampling tidak memberikan peluang terpilih yang sama atau diketahui, contohnya convenience, purposive, quota, dan snowball sampling. Pemilihan metode harus mempertimbangkan tujuan, kerangka sampel, waktu, biaya, dan potensi bias. Sampel yang besar belum tentu mewakili populasi apabila proses pemilihannya tidak tepat.
| Probability sampling | Non-probability sampling |
|---|---|
| Peluang pemilihan dapat diketahui | Peluang pemilihan tidak diketahui secara pasti |
| Mendukung generalisasi jika rancangan tepat | Generalisasi lebih terbatas |
| Contoh: acak sederhana, stratifikasi | Contoh: purposive, convenience |
2.4 Minggu 4 – Penyajian dan Visualisasi Data
Penyajian data membantu pembaca melihat pola dan membandingkan informasi. Tabel distribusi frekuensi merangkum banyaknya data pada kategori atau kelas tertentu. Frekuensi relatif diperoleh dari frekuensi kelas dibagi jumlah seluruh data, sedangkan frekuensi kumulatif merupakan penjumlahan frekuensi secara bertahap. Untuk data numerik berkelompok, banyak kelas dapat diperkirakan dengan aturan Sturges, \(k = 1 + 3{,}322\log_{10}(n)\), lalu lebar kelas ditentukan dari rentang dibagi banyak kelas. Diagram batang dan lingkaran cocok untuk kategori, sedangkan histogram cocok untuk data numerik. Poligon frekuensi dan ogive juga dapat digunakan untuk menunjukkan bentuk distribusi dan frekuensi kumulatif. Visualisasi harus memiliki judul, label, skala yang wajar, serta tidak menyesatkan. Pemilihan grafik disesuaikan dengan jenis data dan tujuan analisis.
| Bentuk penyajian | Kegunaan utama |
|---|---|
| Diagram batang | Membandingkan frekuensi kategori |
| Diagram lingkaran | Menunjukkan proporsi kategori |
| Histogram | Melihat bentuk distribusi numerik |
| Poligon frekuensi | Membandingkan bentuk distribusi |
| Ogive | Melihat frekuensi kumulatif |
| Stem-and-leaf | Menampilkan pola sekaligus nilai data |
Contoh singkat di R:
contoh_kategori <- c("Online", "Offline", "Online", "Online", "Offline")
freq <- table(contoh_kategori)
freq # frekuensi absolut## contoh_kategori
## Offline Online
## 2 3
## contoh_kategori
## Offline Online
## 0.4 0.6
## Offline Online
## 2 5
barplot(table(contoh_kategori), col = c("#78a9c5", "#e6ad65"),
main = "Contoh Frekuensi Kanal", ylab = "Frekuensi")2.5 Minggu 5 – Ukuran Pemusatan dan Sebaran
Ukuran pemusatan menjelaskan nilai yang mewakili pusat data. Mean adalah rata-rata, median adalah nilai tengah setelah data diurutkan, dan modus adalah nilai yang paling sering muncul. Ukuran sebaran menunjukkan variasi data. Rentang merupakan selisih nilai maksimum dan minimum, varians mengukur rata-rata kuadrat penyimpangan dari mean, dan standar deviasi merupakan akar varians. Koefisien variasi (CV) membandingkan standar deviasi terhadap mean dalam bentuk persentase sehingga berguna untuk membandingkan variasi relatif antarvariabel dengan mean positif. Kuartil membagi data terurut menjadi empat bagian, sedangkan IQR adalah selisih kuartil ketiga dan pertama. Contohnya, dua kanal dapat memiliki rata-rata transaksi serupa tetapi standar deviasi berbeda; kanal dengan standar deviasi lebih besar memiliki jumlah transaksi yang lebih bervariasi.
\[ \bar{x}=\frac{\sum x_i}{n},\qquad s^2=\frac{\sum (x_i-\bar{x})^2}{n-1},\qquad s=\sqrt{s^2} \]
\[ CV=\frac{s}{\bar{x}}\times100\%,\qquad IQR=Q_3-Q_1 \]
Contoh singkat di R:
x_contoh <- c(12, 14, 15, 15, 19)
w_contoh <- c(1, 1, 2, 2, 1)
c(mean = mean(x_contoh), weighted_mean = weighted.mean(x_contoh, w_contoh),
median = median(x_contoh), sd = sd(x_contoh), range = diff(range(x_contoh)))## mean weighted_mean median sd range
## 15.00000 15.00000 15.00000 2.54951 7.00000
2.6 Minggu 6 – Distribusi Data dan Outlier
Ukuran posisi menunjukkan letak suatu nilai dalam data yang telah diurutkan. Kuartil membagi data menjadi empat bagian, desil menjadi sepuluh bagian, dan persentil menjadi seratus bagian. Median merupakan kuartil kedua atau persentil ke-50. IQR dihitung dari selisih kuartil ketiga dan pertama, sehingga menggambarkan sebaran 50% data tengah. Outlier dapat ditandai dengan batas bawah \(Q_1-1{,}5(IQR)\) dan batas atas \(Q_3+1{,}5(IQR)\). Cara lain adalah z-score, yaitu jarak suatu nilai dari mean dalam satuan standar deviasi; nilai dengan \(|z|>3\) sering diperiksa sebagai nilai ekstrem. Distribusi dapat simetris atau miring ke kanan maupun kiri. Boxplot merangkum median, kuartil, dan nilai yang berpotensi ekstrem. Outlier tidak langsung dihapus karena dapat berasal dari kesalahan pencatatan atau kejadian nyata yang perlu dijelaskan.
\[ IQR=Q_3-Q_1,\qquad z_i=\frac{x_i-\bar{x}}{s} \] \[ B_{bawah}=Q_1-1{,}5(IQR),\qquad B_{atas}=Q_3+1{,}5(IQR) \]
Contoh singkat di R:
x_posisi <- c(10, 12, 13, 14, 15, 16, 18, 40)
quantile(x_posisi, probs = c(0.1, 0.25, 0.5, 0.75, 0.9))## 10% 25% 50% 75% 90%
## 11.40 12.75 14.50 16.50 24.60
## [1] 3.75
z_score <- as.numeric(scale(x_posisi))
boxplot(x_posisi, main = "Boxplot Contoh Data", ylab = "Nilai")2.7 Minggu 7 – Exploratory Data Analysis (EDA)
Exploratory Data Analysis (EDA) merupakan proses mengeksplorasi data untuk memahami struktur, kualitas, pola, hubungan, dan kemungkinan anomali sebelum membuat kesimpulan. Tahapannya meliputi pemeriksaan kualitas data, analisis univariat, perbandingan kelompok, analisis bivariat atau multivariat, pemeriksaan outlier, dan penyusunan insight. Standardisasi z-score mengubah nilai berdasarkan mean dan standar deviasi sehingga menunjukkan posisi relatif suatu pengamatan. Dalam membandingkan kelompok, center dapat dilihat melalui mean atau median, spread melalui range atau standar deviasi, dan distribution melalui bentuk sebaran. Contohnya, waktu proses dapat dibandingkan antara kanal Online dan Offline untuk melihat perbedaan pusat, variasi, dan pola. EDA membantu menemukan pattern, anomaly, outlier, serta insight yang relevan. Namun, hubungan antarvariabel tidak otomatis membuktikan sebab-akibat; kesimpulan harus didukung tabel, grafik, dan konteks data.
\[ z_i=\frac{x_i-\bar{x}}{s} \]
Contoh singkat di R:
contoh_eda <- data.frame(
kanal = c("Online", "Online", "Offline", "Offline"),
waktu = c(12, 15, 18, 22)
)
aggregate(waktu ~ kanal, data = contoh_eda,
FUN = function(x) c(mean = mean(x), median = median(x), sd = sd(x)))contoh_eda$z_waktu <- as.numeric(scale(contoh_eda$waktu))
boxplot(waktu ~ kanal, data = contoh_eda,
xlab = "Kanal", ylab = "Waktu proses (menit)",
main = "Perbandingan Waktu Proses")2.8 Ringkasan Rumus
| Ukuran | Rumus | Keterangan |
|---|---|---|
| Mean | \(\bar{x}=\sum x_i/n\) | Rata-rata data |
| Weighted mean | \(\bar{x}_w=\sum w_ix_i/\sum w_i\) | Rata-rata berbobot |
| Varians sampel | \(s^2=\sum(x_i-\bar{x})^2/(n-1)\) | Sebaran kuadrat |
| Standar deviasi | \(s=\sqrt{s^2}\) | Sebaran dalam satuan asli |
| Koefisien variasi | \(CV=(s/\bar{x})\times100\%\) | Sebaran relatif |
| IQR | \(Q_3-Q_1\) | Rentang 50% data tengah |
| Batas outlier | \(Q_1-1{,}5IQR;\ Q_3+1{,}5IQR\) | Batas bawah dan atas |
| Z-score | \((x_i-\bar{x})/s\) | Posisi relatif nilai |
2.9 Keterkaitan Materi Minggu 1–7 dengan Studi Kasus
Materi Minggu 1–3 menjadi dasar untuk memahami tujuan analisis, jenis variabel, skala pengukuran, sumber data, dan kualitas proses pengumpulan data. Materi Minggu 4 digunakan untuk menyajikan frekuensi serta pola melalui tabel dan grafik. Materi Minggu 5 membantu merangkum pusat dan variasi setiap variabel. Materi Minggu 6 digunakan untuk memahami posisi data dan menandai nilai yang tidak biasa, sedangkan Minggu 7 menjadi alur kerja untuk menggabungkan pemeriksaan tersebut menjadi insight. Dengan demikian, analisis dataset transaksi pada Soal 2 dilakukan secara bertahap dan tetap mempertahankan konteks setiap pengamatan.
3 Soal 2 – Studi Kasus Exploratory Data Analysis
3.1 2.1 Data Understanding dan Data Quality
3.1.1 Import data
Letakkan file Dataset_EDA_30_Observasi.xlsx pada folder
yang sama dengan file R Markdown ini sebelum melakukan Knit.
df <- read_excel("Dataset_EDA_30_Observasi.xlsx", sheet = "Data") %>%
mutate(Tanggal = as.Date(Tanggal))
head(df, 10)3.1.2 Struktur dan dimensi data
## [1] 30 6
## [1] "Tanggal" "Kanal"
## [3] "Jenis_Layanan" "Jumlah_Transaksi"
## [5] "Waktu_Proses_Menit" "Nilai_Transaksi_Juta_Rp"
## tibble [30 × 6] (S3: tbl_df/tbl/data.frame)
## $ Tanggal : Date[1:30], format: "2026-01-01" "2026-01-02" ...
## $ Kanal : chr [1:30] "Online" "Offline" "Online" "Offline" ...
## $ Jenis_Layanan : chr [1:30] "Reguler" "Reguler" "Reguler" "Express" ...
## $ Jumlah_Transaksi : num [1:30] 48 42 55 50 50 52 57 145 70 60 ...
## $ Waktu_Proses_Menit : num [1:30] 41.5 42.1 42.6 43.1 42.7 37.7 36.4 37 36.3 33.6 ...
## $ Nilai_Transaksi_Juta_Rp: num [1:30] 2.26 2.69 2.44 2.17 2.44 2.63 2.58 3.16 3.03 3.13 ...
Dataset terdiri dari 30 baris pengamatan dan 6 variabel. Setiap baris mewakili satu hari pengamatan.
3.1.3 Tipe dan skala pengukuran
tabel_tipe <- tibble(
Variabel = names(df),
Tipe_data = c("Tanggal", "Kategorikal", "Kategorikal",
"Numerik diskrit", "Numerik kontinu", "Numerik kontinu"),
Skala_pengukuran = c("Interval waktu/temporal", "Nominal", "Nominal",
"Rasio", "Rasio", "Rasio"),
Alasan = c(
"Menunjukkan urutan waktu pengamatan harian.",
"Online dan Offline merupakan kategori tanpa tingkatan.",
"Reguler, Express, dan Premium merupakan kategori layanan.",
"Jumlah kejadian transaksi berupa hitungan dan memiliki nol mutlak.",
"Durasi proses dapat memiliki nilai pecahan dan nol berarti tidak ada durasi.",
"Nilai uang memiliki nol mutlak dan dapat dibandingkan secara rasio."
)
)
kable(tabel_tipe, caption = "Identifikasi tipe dan skala pengukuran", booktabs = TRUE)| Variabel | Tipe_data | Skala_pengukuran | Alasan |
|---|---|---|---|
| Tanggal | Tanggal | Interval waktu/temporal | Menunjukkan urutan waktu pengamatan harian. |
| Kanal | Kategorikal | Nominal | Online dan Offline merupakan kategori tanpa tingkatan. |
| Jenis_Layanan | Kategorikal | Nominal | Reguler, Express, dan Premium merupakan kategori layanan. |
| Jumlah_Transaksi | Numerik diskrit | Rasio | Jumlah kejadian transaksi berupa hitungan dan memiliki nol mutlak. |
| Waktu_Proses_Menit | Numerik kontinu | Rasio | Durasi proses dapat memiliki nilai pecahan dan nol berarti tidak ada durasi. |
| Nilai_Transaksi_Juta_Rp | Numerik kontinu | Rasio | Nilai uang memiliki nol mutlak dan dapat dibandingkan secara rasio. |
3.1.4 Pemeriksaan kualitas data
cek_kualitas <- tibble(
Pemeriksaan = c("Jumlah baris", "Jumlah kolom", "Missing value",
"Baris duplikat", "Tanggal paling awal", "Tanggal paling akhir"),
Hasil = c(
nrow(df), ncol(df),
sum(is.na(df)),
sum(duplicated(df)),
as.character(min(df$Tanggal, na.rm = TRUE)),
as.character(max(df$Tanggal, na.rm = TRUE))
)
)
kable(cek_kualitas, caption = "Ringkasan pemeriksaan kualitas data")| Pemeriksaan | Hasil |
|---|---|
| Jumlah baris | 30 |
| Jumlah kolom | 6 |
| Missing value | 0 |
| Baris duplikat | 0 |
| Tanggal paling awal | 2026-01-01 |
| Tanggal paling akhir | 2026-01-30 |
missing_kolom <- tibble(
Variabel = names(df),
Jumlah_missing = sapply(df, function(x) sum(is.na(x)))
)
kable(missing_kolom, caption = "Missing value pada setiap variabel")| Variabel | Jumlah_missing |
|---|---|
| Tanggal | 0 |
| Kanal | 0 |
| Jenis_Layanan | 0 |
| Jumlah_Transaksi | 0 |
| Waktu_Proses_Menit | 0 |
| Nilai_Transaksi_Juta_Rp | 0 |
Berdasarkan pemeriksaan tersebut, jumlah missing value adalah 0 dan jumlah baris duplikat adalah 0. Pemeriksaan ini menjadi dasar untuk menentukan kesiapan data sebelum analisis. Nilai ekstrem tidak dihapus pada tahap ini.
3.2 2.2 Analisis Univariat
3.2.1 Distribusi frekuensi variabel kategorikal
buat_frekuensi <- function(x) {
hasil <- as.data.frame(table(x), stringsAsFactors = FALSE)
names(hasil) <- c("Kategori", "Frekuensi")
hasil %>%
mutate(
Frekuensi_Relatif = Frekuensi / sum(Frekuensi),
Persentase = percent(Frekuensi_Relatif, accuracy = 0.1),
Frekuensi_Kumulatif = cumsum(Frekuensi)
)
}
freq_kanal <- buat_frekuensi(df$Kanal)
freq_layanan <- buat_frekuensi(df$Jenis_Layanan)
kable(freq_kanal, caption = "Distribusi frekuensi Kanal")| Kategori | Frekuensi | Frekuensi_Relatif | Persentase | Frekuensi_Kumulatif |
|---|---|---|---|---|
| Offline | 15 | 0.5 | 50.0% | 15 |
| Online | 15 | 0.5 | 50.0% | 30 |
| Kategori | Frekuensi | Frekuensi_Relatif | Persentase | Frekuensi_Kumulatif |
|---|---|---|---|---|
| Express | 10 | 0.3333333 | 33.3% | 10 |
| Premium | 10 | 0.3333333 | 33.3% | 20 |
| Reguler | 10 | 0.3333333 | 33.3% | 30 |
Frekuensi kumulatif pada tabel kategori mengikuti urutan kategori yang ditampilkan. Karena kanal dan jenis layanan berskala nominal, frekuensi kumulatif tidak menunjukkan tingkatan alami antarkategori.
3.2.2 Statistik deskriptif variabel numerik
modus <- function(x) {
x <- x[!is.na(x)]
nilai <- unique(x)
frek <- tabulate(match(x, nilai))
nilai[frek == max(frek)]
}
variabel_numerik <- c("Jumlah_Transaksi", "Waktu_Proses_Menit",
"Nilai_Transaksi_Juta_Rp")
stat_deskriptif <- map_dfr(variabel_numerik, function(v) {
x <- df[[v]]
tibble(
Variabel = v,
Mean = mean(x, na.rm = TRUE),
Median = median(x, na.rm = TRUE),
Modus = paste(modus(x), collapse = ", "),
Minimum = min(x, na.rm = TRUE),
Maksimum = max(x, na.rm = TRUE),
Rentang = diff(range(x, na.rm = TRUE)),
Varians = var(x, na.rm = TRUE),
Standar_Deviasi = sd(x, na.rm = TRUE),
CV_persen = sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE) * 100
)
})
kable(stat_deskriptif, digits = 2,
caption = "Statistik deskriptif variabel numerik")| Variabel | Mean | Median | Modus | Minimum | Maksimum | Rentang | Varians | Standar_Deviasi | CV_persen |
|---|---|---|---|---|---|---|---|---|---|
| Jumlah_Transaksi | 73.83 | 72.00 | 50, 71, 73, 87 | 12.00 | 145.0 | 133.00 | 599.45 | 24.48 | 33.16 |
| Waktu_Proses_Menit | 32.66 | 30.10 | 30.1, 26.6 | 3.50 | 88.0 | 84.50 | 181.32 | 13.47 | 41.23 |
| Nilai_Transaksi_Juta_Rp | 3.18 | 3.13 | 2.44, 3.13 | 0.12 | 9.8 | 9.68 | 2.09 | 1.45 | 45.46 |
3.2.3 Diagram batang dan lingkaran
ggplot(df, aes(x = Kanal, fill = Kanal)) +
geom_bar(width = 0.65, show.legend = FALSE) +
geom_text(stat = "count", aes(label = after_stat(count)), vjust = -0.5) +
scale_fill_manual(values = c("Online" = "#4C91B8", "Offline" = "#E6A15C")) +
labs(title = "Frekuensi Transaksi Berdasarkan Kanal",
x = "Kanal transaksi", y = "Jumlah pengamatan") +
tema_utspie_data <- df %>% count(Jenis_Layanan) %>%
mutate(label = paste0(Jenis_Layanan, "\n", percent(n / sum(n), accuracy = 0.1)))
ggplot(pie_data, aes(x = "", y = n, fill = Jenis_Layanan)) +
geom_col(width = 1, color = "white") +
coord_polar(theta = "y") +
geom_text(aes(label = label), position = position_stack(vjust = 0.5),
size = 3.5) +
labs(title = "Proporsi Jenis Layanan", x = NULL, y = NULL, fill = "Layanan") +
tema_uts + theme(axis.text = element_blank(), axis.ticks = element_blank(),
panel.grid = element_blank())3.2.4 Histogram variabel numerik
Jumlah kelas histogram menggunakan pendekatan Sturges, yaitu \(k=1+3{,}322\log_{10}(n)\). Batas kelas disesuaikan otomatis oleh fungsi histogram.
par(mfrow = c(3, 1), mar = c(4, 4, 3, 1))
for (v in variabel_numerik) {
x <- df[[v]]
hist(x, breaks = "Sturges", col = "#8DB7CC", border = "white",
main = paste("Histogram", v),
xlab = v, ylab = "Frekuensi")
}3.2.5 Boxplot setiap variabel numerik
data_long <- df %>%
select(all_of(variabel_numerik)) %>%
pivot_longer(everything(), names_to = "Variabel", values_to = "Nilai")
ggplot(data_long, aes(x = "", y = Nilai)) +
geom_boxplot(fill = "#8DB7CC", color = "#24536A", width = 0.45) +
facet_wrap(~ Variabel, scales = "free_y", ncol = 1) +
labs(title = "Boxplot Variabel Numerik", x = NULL, y = "Nilai") +
tema_uts3.3 2.3 Analisis Bivariat
3.3.1 Ringkasan numerik berdasarkan kanal
ringkasan_kanal <- df %>%
group_by(Kanal) %>%
summarise(
Jumlah_hari = n(),
Rata_rata_transaksi = mean(Jumlah_Transaksi, na.rm = TRUE),
Median_transaksi = median(Jumlah_Transaksi, na.rm = TRUE),
Rata_rata_waktu = mean(Waktu_Proses_Menit, na.rm = TRUE),
Rata_rata_nilai = mean(Nilai_Transaksi_Juta_Rp, na.rm = TRUE),
.groups = "drop"
)
kable(ringkasan_kanal, digits = 2,
caption = "Perbandingan ringkasan berdasarkan kanal")| Kanal | Jumlah_hari | Rata_rata_transaksi | Median_transaksi | Rata_rata_waktu | Rata_rata_nilai |
|---|---|---|---|---|---|
| Offline | 15 | 74.80 | 74 | 34.72 | 3.33 |
| Online | 15 | 72.87 | 71 | 30.59 | 3.03 |
3.3.2 Rata-rata jumlah transaksi berdasarkan kanal
ggplot(ringkasan_kanal, aes(x = Kanal, y = Rata_rata_transaksi, fill = Kanal)) +
geom_col(width = 0.6, show.legend = FALSE) +
geom_text(aes(label = round(Rata_rata_transaksi, 1)), vjust = -0.5) +
scale_fill_manual(values = c("Online" = "#4C91B8", "Offline" = "#E6A15C")) +
labs(title = "Rata-rata Jumlah Transaksi Berdasarkan Kanal",
x = "Kanal", y = "Rata-rata transaksi per hari") +
tema_uts3.3.3 Waktu proses berdasarkan kanal
ggplot(df, aes(x = Kanal, y = Waktu_Proses_Menit, fill = Kanal)) +
geom_boxplot(alpha = 0.85, show.legend = FALSE) +
scale_fill_manual(values = c("Online" = "#4C91B8", "Offline" = "#E6A15C")) +
labs(title = "Sebaran Waktu Proses Berdasarkan Kanal",
x = "Kanal", y = "Waktu proses (menit)") +
tema_uts3.3.4 Nilai transaksi berdasarkan jenis layanan
ggplot(df, aes(x = Jenis_Layanan, y = Nilai_Transaksi_Juta_Rp,
fill = Jenis_Layanan)) +
geom_boxplot(show.legend = FALSE, alpha = 0.85) +
scale_fill_manual(values = c("Reguler" = "#8DB7CC",
"Express" = "#E6A15C",
"Premium" = "#8BB99B")) +
labs(title = "Sebaran Nilai Transaksi Berdasarkan Jenis Layanan",
x = "Jenis layanan", y = "Nilai transaksi (juta rupiah)") +
tema_uts3.3.5 Hubungan jumlah transaksi dan nilai transaksi
ggplot(df, aes(x = Jumlah_Transaksi, y = Nilai_Transaksi_Juta_Rp,
color = Jenis_Layanan)) +
geom_point(size = 2.8, alpha = 0.85) +
geom_smooth(aes(group = 1), method = "lm", se = TRUE,
color = "#333333", linewidth = 0.8) +
labs(title = "Hubungan Jumlah Transaksi dan Nilai Transaksi",
x = "Jumlah transaksi", y = "Nilai transaksi (juta rupiah)",
color = "Jenis layanan") +
tema_utskorelasi <- cor(df$Jumlah_Transaksi, df$Nilai_Transaksi_Juta_Rp,
use = "complete.obs")
tibble(Hubungan = "Jumlah transaksi dan nilai transaksi",
Korelasi_Pearson = korelasi)Nilai korelasi Pearson sebesar 0.113 menunjukkan arah dan kekuatan hubungan linear pada dua variabel tersebut. Korelasi tidak membuktikan bahwa perubahan jumlah transaksi menyebabkan perubahan nilai transaksi.
3.4 2.4 Analisis Multivariat
3.4.1 Pola jumlah transaksi dan waktu proses dari waktu ke waktu
tren_long <- df %>%
select(Tanggal, Jumlah_Transaksi, Waktu_Proses_Menit) %>%
pivot_longer(-Tanggal, names_to = "Variabel", values_to = "Nilai")
ggplot(tren_long, aes(x = Tanggal, y = Nilai, color = Variabel)) +
geom_line(linewidth = 0.8) +
geom_point(size = 1.8) +
facet_wrap(~ Variabel, scales = "free_y", ncol = 1) +
scale_x_date(date_labels = "%d %b", date_breaks = "5 days") +
labs(title = "Perubahan Jumlah Transaksi dan Waktu Proses",
x = "Tanggal", y = "Nilai", color = "Variabel") +
tema_uts + theme(axis.text.x = element_text(angle = 45, hjust = 1))3.4.2 Hubungan beberapa variabel numerik
mat_korelasi <- cor(df %>% select(all_of(variabel_numerik)),
use = "pairwise.complete.obs")
korelasi_long <- as.data.frame(as.table(mat_korelasi)) %>%
rename(Variabel_1 = Var1, Variabel_2 = Var2, Korelasi = Freq)
ggplot(korelasi_long, aes(x = Variabel_1, y = Variabel_2, fill = Korelasi)) +
geom_tile(color = "white") +
geom_text(aes(label = round(Korelasi, 2)), size = 4) +
scale_fill_gradient2(low = "#C76D6D", mid = "white", high = "#4C91B8",
midpoint = 0, limits = c(-1, 1)) +
labs(title = "Matriks Korelasi Variabel Numerik",
x = NULL, y = NULL, fill = "Korelasi") +
tema_uts + theme(axis.text.x = element_text(angle = 25, hjust = 1))3.4.3 Perbandingan kanal dan jenis layanan
ringkasan_kombinasi <- df %>%
group_by(Kanal, Jenis_Layanan) %>%
summarise(
Jumlah_hari = n(),
Rata_rata_transaksi = mean(Jumlah_Transaksi, na.rm = TRUE),
Rata_rata_waktu = mean(Waktu_Proses_Menit, na.rm = TRUE),
Rata_rata_nilai = mean(Nilai_Transaksi_Juta_Rp, na.rm = TRUE),
.groups = "drop"
)
kable(ringkasan_kombinasi, digits = 2,
caption = "Ringkasan gabungan kanal dan jenis layanan")| Kanal | Jenis_Layanan | Jumlah_hari | Rata_rata_transaksi | Rata_rata_waktu | Rata_rata_nilai |
|---|---|---|---|---|---|
| Offline | Express | 5 | 65.4 | 46.30 | 2.78 |
| Offline | Premium | 5 | 82.2 | 26.88 | 4.02 |
| Offline | Reguler | 5 | 76.8 | 30.98 | 3.18 |
| Online | Express | 5 | 80.2 | 25.16 | 3.25 |
| Online | Premium | 5 | 76.6 | 29.56 | 3.19 |
| Online | Reguler | 5 | 61.8 | 37.06 | 2.65 |
ggplot(ringkasan_kombinasi,
aes(x = Jenis_Layanan, y = Kanal, fill = Rata_rata_transaksi)) +
geom_tile(color = "white") +
geom_text(aes(label = round(Rata_rata_transaksi, 1)), size = 4) +
scale_fill_gradient(low = "#EAF2F5", high = "#286783") +
labs(title = "Rata-rata Transaksi Menurut Kanal dan Layanan",
x = "Jenis layanan", y = "Kanal",
fill = "Rata-rata transaksi") +
tema_utsAnalisis multivariat memperlihatkan beberapa variabel secara bersamaan. Grafik tren digunakan untuk membaca perubahan antarhari, matriks korelasi untuk melihat hubungan linear antarkuantitas numerik, dan tabel/heatmap gabungan untuk membandingkan kanal serta jenis layanan. Hasilnya perlu dibaca bersama ukuran ringkasan karena hubungan statistik tidak otomatis menunjukkan hubungan sebab-akibat.
3.5 2.5 Deteksi dan Evaluasi Outlier
Deteksi dilakukan menggunakan batas IQR dan z-score. Pengamatan dengan \(|z|>2\) ditandai sebagai nilai yang perlu diperhatikan, sedangkan \(|z|>3\) ditandai sebagai outlier ekstrem berdasarkan pedoman tugas. Batas IQR menggunakan 1,5 kali IQR.
hasil_outlier <- map_dfr(variabel_numerik, function(v) {
x <- df[[v]]
q1 <- quantile(x, 0.25, na.rm = TRUE)
q3 <- quantile(x, 0.75, na.rm = TRUE)
iqr_x <- IQR(x, na.rm = TRUE)
batas_bawah <- q1 - 1.5 * iqr_x
batas_atas <- q3 + 1.5 * iqr_x
z <- (x - mean(x, na.rm = TRUE)) / sd(x, na.rm = TRUE)
tibble(
Tanggal = df$Tanggal,
Variabel = v,
Nilai = x,
Batas_IQR_Bawah = as.numeric(batas_bawah),
Batas_IQR_Atas = as.numeric(batas_atas),
Z_score = as.numeric(z),
Outlier_IQR = x < batas_bawah | x > batas_atas,
Perlu_diperhatikan_z = abs(z) > 2,
Outlier_ekstrem_z = abs(z) > 3
)
})
tabel_outlier <- hasil_outlier %>%
filter(Outlier_IQR | Perlu_diperhatikan_z) %>%
arrange(Variabel, Tanggal)
kable(tabel_outlier, digits = 2,
caption = "Pengamatan yang terdeteksi oleh IQR atau |z-score| > 2")| Tanggal | Variabel | Nilai | Batas_IQR_Bawah | Batas_IQR_Atas | Z_score | Outlier_IQR | Perlu_diperhatikan_z | Outlier_ekstrem_z |
|---|---|---|---|---|---|---|---|---|
| 2026-01-08 | Jumlah_Transaksi | 145.00 | 13.88 | 130.88 | 2.91 | TRUE | TRUE | FALSE |
| 2026-01-23 | Jumlah_Transaksi | 12.00 | 13.88 | 130.88 | -2.53 | TRUE | TRUE | FALSE |
| 2026-01-17 | Nilai_Transaksi_Juta_Rp | 9.80 | 1.29 | 4.77 | 4.58 | TRUE | TRUE | TRUE |
| 2026-01-28 | Nilai_Transaksi_Juta_Rp | 0.12 | 1.29 | 4.77 | -2.12 | TRUE | TRUE | FALSE |
| 2026-01-12 | Waktu_Proses_Menit | 88.00 | 11.34 | 52.24 | 4.11 | TRUE | TRUE | TRUE |
| 2026-01-26 | Waktu_Proses_Menit | 3.50 | 11.34 | 52.24 | -2.17 | TRUE | TRUE | FALSE |
3.5.1 Jumlah outlier per variabel
jumlah_outlier <- hasil_outlier %>%
group_by(Variabel) %>%
summarise(
Jumlah_IQR = sum(Outlier_IQR, na.rm = TRUE),
Jumlah_z_di_atas_2 = sum(Perlu_diperhatikan_z, na.rm = TRUE),
Jumlah_z_di_atas_3 = sum(Outlier_ekstrem_z, na.rm = TRUE),
.groups = "drop"
)
kable(jumlah_outlier, caption = "Jumlah penanda outlier berdasarkan metode")| Variabel | Jumlah_IQR | Jumlah_z_di_atas_2 | Jumlah_z_di_atas_3 |
|---|---|---|---|
| Jumlah_Transaksi | 2 | 2 | 0 |
| Nilai_Transaksi_Juta_Rp | 2 | 2 | 1 |
| Waktu_Proses_Menit | 2 | 2 | 1 |
3.5.2 Boxplot untuk pemeriksaan visual
ggplot(data_long, aes(x = "", y = Nilai)) +
geom_boxplot(fill = "#E6AD65", color = "#805A2B", outlier.color = "#B33A3A") +
facet_wrap(~ Variabel, scales = "free_y", ncol = 1) +
labs(title = "Pemeriksaan Visual Nilai Ekstrem",
x = NULL, y = "Nilai") +
tema_utsOutlier tidak langsung dihapus karena dapat mencerminkan kejadian operasional yang nyata. Pengamatan perlu ditinjau dengan melihat tanggal, variabel, dan konteks proses. Nilai yang sangat berbeda dapat berasal dari lonjakan transaksi, keterlambatan proses, atau kesalahan pencatatan; dataset ini sendiri belum memberikan bukti penyebabnya. Karena itu, hasil deteksi merupakan penanda untuk pemeriksaan lebih lanjut, bukan bukti bahwa data pasti salah.
3.6 2.6 Insight Bisnis dan Rekomendasi Strategis
3.6.1 Ringkasan temuan utama
kanal_tertinggi <- ringkasan_kanal %>% slice_max(Rata_rata_transaksi, n = 1, with_ties = FALSE)
kanal_waktu_terendah <- ringkasan_kanal %>% slice_min(Rata_rata_waktu, n = 1, with_ties = FALSE)
layanan_nilai_tertinggi <- ringkasan_kombinasi %>%
slice_max(Rata_rata_nilai, n = 1, with_ties = FALSE)
cat(
"Kanal dengan rata-rata transaksi tertinggi adalah", kanal_tertinggi$Kanal,
"dengan rata-rata", round(kanal_tertinggi$Rata_rata_transaksi, 2),
"transaksi per hari.\n\n",
"Kanal dengan rata-rata waktu proses terendah adalah", kanal_waktu_terendah$Kanal,
"dengan rata-rata", round(kanal_waktu_terendah$Rata_rata_waktu, 2),
"menit.\n\n",
"Kombinasi kanal dan layanan dengan rata-rata nilai transaksi tertinggi adalah",
kanal_nilai <- paste(layanan_nilai_tertinggi$Kanal,
layanan_nilai_tertinggi$Jenis_Layanan, sep = " - "),
"dengan rata-rata", round(layanan_nilai_tertinggi$Rata_rata_nilai, 2),
"juta rupiah."
)## Kanal dengan rata-rata transaksi tertinggi adalah Offline dengan rata-rata 74.8 transaksi per hari.
##
## Kanal dengan rata-rata waktu proses terendah adalah Online dengan rata-rata 30.59 menit.
##
## Kombinasi kanal dan layanan dengan rata-rata nilai transaksi tertinggi adalah Offline - Premium dengan rata-rata 4.02 juta rupiah.
Berdasarkan tabel dan grafik, kinerja tidak cukup dinilai dari jumlah transaksi saja. Jumlah transaksi yang tinggi belum tentu menunjukkan proses paling efisien atau nilai transaksi terbesar. Waktu proses, nilai transaksi, jenis layanan, serta konsistensi hasil juga perlu dipertimbangkan. Nilai ekstrem yang ditemukan perlu ditelusuri lebih lanjut sebelum digunakan sebagai dasar keputusan operasional.
3.6.2 Rekomendasi strategis
- Evaluasi efisiensi proses. Bandingkan waktu proses Online dan Offline secara berkala. Periksa hari dengan waktu proses yang jauh berbeda untuk mengetahui apakah terdapat hambatan operasional.
- Pantau kinerja berdasarkan jenis layanan. Evaluasi jumlah transaksi, waktu proses, dan nilai transaksi untuk setiap layanan. Hasilnya dapat digunakan untuk menyesuaikan kapasitas dan standar pelayanan.
- Lakukan pemeriksaan pada nilai ekstrem. Cocokkan tanggal dan nilai yang terdeteksi dengan catatan transaksi asli. Jangan menghapus data sebelum penyebabnya dipastikan.
- Gunakan indikator kinerja secara bersamaan. Pantau jumlah transaksi, nilai transaksi, dan waktu proses agar keputusan tidak hanya berfokus pada banyaknya transaksi.
- Perbarui analisis secara rutin. Penambahan data harian akan membantu melihat apakah pola pada 30 hari ini konsisten pada periode berikutnya.
3.7 2.7 Kualitas dan Reproduksibilitas Analisis
Seluruh proses impor, pengolahan, perhitungan statistik, dan
visualisasi pada Soal 2 dilakukan menggunakan R. Kode disusun dalam
beberapa bagian agar dapat dijalankan ulang. Untuk menghasilkan dokumen
HTML, pastikan file Excel berada pada folder yang sama dengan file
.Rmd, kemudian pilih Knit di RStudio. Jika
muncul pesan paket belum tersedia, instal paket yang disebutkan pada
pesan tersebut melalui Console.
4 Daftar Pustaka
Anderson, D. R., Sweeney, D. J., Williams, T. A., Camm, J. D., & Cochran, J. J. (2021). Statistics for Business & Economics. Cengage.
Diez, D. M., Barr, C. D., & Çetinkaya-Rundel, M. (2019). OpenIntro Statistics (4th ed.). OpenIntro.
Materi perkuliahan Pengantar Statistika SDT-1305, Minggu 1–7.