Inklusi keuangan merupakan agenda strategis dalam pembangunan ekonomi global, didefinisikan Bank Dunia sebagai kemampuan individu dan pelaku usaha untuk mengakses produk dan layanan keuangan yang bermanfaat dan terjangkau, mulai dari transaksi, pembayaran, tabungan, kredit, hingga asuransi [1]. Di Indonesia, inklusi keuangan terbukti berkontribusi terhadap pertumbuhan ekonomi dan pemberantasan kemiskinan [2], dan telah diwujudkan melalui berbagai kebijakan konkret seperti Strategi Nasional Keuangan Inklusif (SNKI) serta program digitalisasi layanan keuangan oleh Otoritas Jasa Keuangan (OJK) [3]. Rekening bank formal kerap disebut sebagai “pintu pertama” inklusi keuangan karena tanpanya seseorang sulit mengakses layanan keuangan lain yang lebih kompleks.
Data Global Findex 2025 mencatat bahwa sekitar 52,8% orang dewasa Indonesia telah memiliki rekening bank formal [1], namun angka ini juga berarti hampir separuh populasi dewasa masih unbanked dan ini merupakan sebuah tantangan struktural yang besar.
Pesatnya perkembangan teknologi pembayaran digital seperti QRIS, dompet elektronik, dan transfer berbasis aplikasi telah mengubah cara masyarakat bertransaksi secara fundamental. Adopsi keuangan digital terbukti memperluas akses layanan keuangan sekaligus mendorong stabilitas sistem keuangan [6]. Penggunaan pembayaran digital diduga kuat berkaitan erat dengan kepemilikan rekening bank, mengingat sebagian besar layanan digital mensyaratkan rekening formal sebagai prasyaratnya.
Di luar faktor digital, berbagai literatur juga mengaitkan disparitas perkotaan-perdesaan dan perbedaan tingkat pendapatan dengan kesenjangan inklusi keuangan [4,5,7].
Berdasarkan latar belakang di atas, penelitian ini bertujuan untuk:
Data yang digunakan dalam penelitian ini bersumber dari Global Financial Inclusion Database (Global Findex) 2025: Connectivity and Financial Inclusion in the Digital Economy, yang diterbitkan oleh Bank Dunia [1]. Data dikumpulkan pada periode Mei–Desember 2024 melalui survei tatap muka yang representatif secara nasional, dengan melibatkan 1.068 responden dewasa berusia 15 tahun ke atas di Indonesia. Dataset tersedia secara publik dan dapat diakses melalui World Bank Microdata Library (DOI: https://doi.org/10.48529/cdk5-2m94) [1].
Dalam penelitian ini digunakan dua jenis variabel, yaitu variabel dependen yang berbentuk biner dan tiga variabel independen sebagai prediktor [8]. Variabel-variabel tersebut disajikan pada Tabel 1.
Tabel 1. Deskripsi Variabel Penelitian
| Variabel | Jenis Variabel | Kode | Skala | Keterangan |
|---|---|---|---|---|
| Kepemilikan rekening bank | Dependen (Y) | account_fin | Nominal biner | 0 = tidak punya, 1 = punya |
| Penggunaan pembayaran digital | Independen (X1) | anydigpayment | Nominal biner | 0 = tidak, 1 = ya |
| Wilayah tempat tinggal | Independen (X2) | urbanicity | Nominal biner | 1 = urban, 2 = rural |
| Kuintil pendapatan | Independen (X3) | inc_q | Numerik ordinal | 1 = termiskin, 5 = terkaya |
Dari total 1.068 responden, sebanyak 564 orang (52,8%) dilaporkan telah memiliki rekening di lembaga keuangan formal, sedangkan 504 orang (47,2%) belum memiliki rekening bank. Distribusi ini mencerminkan kondisi inklusi keuangan Indonesia yang masih berada pada tahap transisi, di mana separuh lebih populasi memang telah terjangkau layanan perbankan formal, namun gap yang tersisa masih cukup substansial untuk menjadi perhatian kebijakan.
# IMPORT DATA
library(readxl)
library(dplyr)
library(ggplot2)
library(broom)
library(knitr)
library(scales)
library(car)
library(ResourceSelection)
raw_data <- readxl::read_excel("Data Project ADK (2).xlsx")
# Rename kolom
findex <- raw_data %>%
rename(
account_fin = `account_fin (Y)`,
anydigpayment = `anydigpayment (X1)`,
urbanicity = `urbanicity (X2)`,
inc_q = `inc_q (X3)`
)# PERSIAPAN VARIABEL
findex_model <- findex %>%
mutate(
account_fin = factor(
account_fin, levels = c(0, 1),
labels = c("Tidak Punya Rekening", "Punya Rekening")
),
anydigpayment = factor(
anydigpayment, levels = c(0, 1),
labels = c("Tidak", "Ya")
),
urbanicity = factor(
urbanicity, levels = c(1, 2),
labels = c("Urban", "Rural")
),
inc_q = as.numeric(inc_q)
)# Distribusi variabel dependen
class_summary <- findex_model %>%
count(account_fin, name = "Jumlah") %>%
mutate(Proporsi = scales::percent(Jumlah / sum(Jumlah), accuracy = 0.1)) %>%
rename(`Status Rekening` = account_fin)
knitr::kable(class_summary,
caption = "**Tabel 2.** Distribusi Kepemilikan Rekening",
align = c("l", "c", "c"))| Status Rekening | Jumlah | Proporsi |
|---|---|---|
| Tidak Punya Rekening | 504 | 47.2% |
| Punya Rekening | 564 | 52.8% |
# Visualisasi distribusi Y
ggplot(findex_model, aes(x = account_fin, fill = account_fin)) +
geom_bar(width = 0.62, color = "white", linewidth = 0.8) +
geom_text(
stat = "count",
aes(label = after_stat(count)),
vjust = -0.4, fontface = "bold"
) +
scale_fill_manual(
values = c("Tidak Punya Rekening" = "#e76f51", "Punya Rekening" = "#2a9d8f")
) +
labs(
title = "Distribusi Kepemilikan Rekening Bank",
subtitle = "Data Findex Indonesia 2025",
x = NULL, y = "Jumlah responden"
) +
theme_minimal(base_size = 12) +
theme(legend.position = "none")Gambar 1. Distribusi Kepemilikan Rekening Bank (Findex Indonesia 2025)
Kondisi ini sejalan dengan data Global Findex terbaru yang menunjukkan Indonesia mengalami peningkatan inklusi keuangan secara bertahap, terutama didorong oleh program pemerintah seperti Laku Pandai, Simpanan Pelajar (SimPel), dan perluasan infrastruktur keuangan digital. Meski demikian, angka hampir separuh penduduk yang belum terbanked mengindikasikan masih terdapat hambatan struktural yang perlu diatasi secara sistemik.
Tabulasi silang antara penggunaan pembayaran digital dan kepemilikan rekening bank menunjukkan pola yang sangat kontras. Di antara responden yang tidak menggunakan pembayaran digital (n = 624), hanya 25,6% (160 orang) yang memiliki rekening bank. Sebaliknya, dari responden yang menggunakan pembayaran digital (n = 444), sebanyak 91,0% (404 orang) tercatat memiliki rekening. Perbedaan proporsi yang mencapai lebih dari 65 persentase poin ini menunjukkan asosiasi yang kuat antara literasi dan adopsi teknologi keuangan digital dengan kepemilikan rekening formal.
# Tabulasi silang X1 vs Y
tabulasi_digital <- findex_model %>%
group_by(anydigpayment) %>%
summarise(
Jumlah = n(),
Punya = sum(account_fin == "Punya Rekening"),
Proporsi = scales::percent(Punya / Jumlah, accuracy = 0.1),
.groups = "drop"
) %>%
rename(`Pembayaran Digital` = anydigpayment)
knitr::kable(tabulasi_digital,
caption = "**Tabel 3.** X1 vs Kepemilikan Rekening",
align = c("l", "c", "c", "c"))| Pembayaran Digital | Jumlah | Punya | Proporsi |
|---|---|---|---|
| Tidak | 624 | 160 | 25.6% |
| Ya | 444 | 404 | 91.0% |
ggplot(findex_model, aes(x = anydigpayment, fill = account_fin)) +
geom_bar(position = "fill", width = 0.6, color = "white", linewidth = 0.7) +
geom_text(
stat = "count",
aes(label = scales::percent(after_stat(count) / tapply(after_stat(count),
after_stat(x), sum)[after_stat(x)], accuracy = 0.1)),
position = position_fill(vjust = 0.5),
color = "white", fontface = "bold", size = 4
) +
scale_fill_manual(
values = c("Tidak Punya Rekening" = "#e76f51", "Punya Rekening" = "#2a9d8f"),
name = "Status Rekening"
) +
scale_y_continuous(labels = scales::percent) +
labs(
title = "Proporsi Kepemilikan Rekening Menurut Pembayaran Digital",
subtitle = "Data Findex Indonesia 2025",
x = "Penggunaan Pembayaran Digital", y = "Proporsi"
) +
theme_minimal(base_size = 12)Gambar 2. Proporsi Kepemilikan Rekening Berdasarkan Penggunaan Pembayaran Digital
Proporsi kepemilikan rekening antara responden urban dan rural memperlihatkan perbedaan yang relatif kecil namun tetap bermakna. Responden di wilayah urban (n = 613) memiliki proporsi kepemilikan rekening sebesar 51,4%, sedangkan wilayah rural (n = 455) mencatat angka 54,7%. Secara deskriptif, kepemilikan rekening di pedesaan justru sedikit lebih tinggi dibandingkan perkotaan, yang mungkin mencerminkan keberhasilan program pemerintah seperti penyaluran bantuan sosial non-tunai dan program Kartu Keluarga Sejahtera (KKS) yang secara masif diarahkan ke daerah rural.
tabulasi_wilayah <- findex_model %>%
group_by(urbanicity) %>%
summarise(
Jumlah = n(),
Punya = sum(account_fin == "Punya Rekening"),
Proporsi = scales::percent(Punya / Jumlah, accuracy = 0.1),
.groups = "drop"
) %>%
rename(Wilayah = urbanicity)
knitr::kable(tabulasi_wilayah,
caption = "**Tabel 4.** X2 vs Kepemilikan Rekening",
align = c("l", "c", "c", "c"))| Wilayah | Jumlah | Punya | Proporsi |
|---|---|---|---|
| Urban | 613 | 315 | 51.4% |
| Rural | 455 | 249 | 54.7% |
ggplot(findex_model, aes(x = urbanicity, fill = account_fin)) +
geom_bar(position = "fill", width = 0.6, color = "white", linewidth = 0.7) +
geom_text(
stat = "count",
aes(label = scales::percent(after_stat(count) / tapply(after_stat(count),
after_stat(x), sum)[after_stat(x)], accuracy = 0.1)),
position = position_fill(vjust = 0.5),
color = "white", fontface = "bold", size = 4
) +
scale_fill_manual(
values = c("Tidak Punya Rekening" = "#e76f51", "Punya Rekening" = "#2a9d8f"),
name = "Status Rekening"
) +
scale_y_continuous(labels = scales::percent) +
labs(
title = "Proporsi Kepemilikan Rekening Menurut Wilayah",
subtitle = "Data Findex Indonesia 2025",
x = "Wilayah Tempat Tinggal", y = "Proporsi"
) +
theme_minimal(base_size = 12)Gambar 3. Proporsi Kepemilikan Rekening Berdasarkan Wilayah Tempat Tinggal
Kepemilikan rekening menunjukkan pola yang cenderung meningkat seiring dengan kelompok pendapatan yang lebih tinggi, meski tidak monoton sempurna. Kelompok termiskin (kuintil 1) mencatat proporsi kepemilikan rekening sebesar 44,8%, sementara kelompok terkaya (kuintil 5) mencapai 68,0%. Yang menarik, kuintil 3 justru mencatat angka terendah (42,4%), yang sedikit di bawah kuintil 1. Pola ini menunjukkan bahwa hubungan antara pendapatan dan kepemilikan rekening bersifat umum positif, namun terdapat variasi yang dapat dipengaruhi oleh faktor lain.
tabulasi_pendapatan <- findex_model %>%
group_by(inc_q) %>%
summarise(
Jumlah = n(),
Punya = sum(account_fin == "Punya Rekening"),
Proporsi = scales::percent(Punya / Jumlah, accuracy = 0.1),
.groups = "drop"
) %>%
rename(`Kuintil Pendapatan` = inc_q)
knitr::kable(tabulasi_pendapatan,
caption = "**Tabel 5.** X3 vs Kepemilikan Rekening",
align = c("c", "c", "c", "c"))| Kuintil Pendapatan | Jumlah | Punya | Proporsi |
|---|---|---|---|
| 1 | 210 | 94 | 44.8% |
| 2 | 199 | 93 | 46.7% |
| 3 | 210 | 89 | 42.4% |
| 4 | 205 | 122 | 59.5% |
| 5 | 244 | 166 | 68.0% |
ggplot(findex_model, aes(x = factor(inc_q), fill = account_fin)) +
geom_bar(position = "fill", width = 0.65, color = "white", linewidth = 0.7) +
geom_text(
stat = "count",
aes(label = scales::percent(after_stat(count) / tapply(after_stat(count),
after_stat(x), sum)[after_stat(x)], accuracy = 0.1)),
position = position_fill(vjust = 0.5),
color = "white", fontface = "bold", size = 3.8
) +
scale_fill_manual(
values = c("Tidak Punya Rekening" = "#e76f51", "Punya Rekening" = "#2a9d8f"),
name = "Status Rekening"
) +
scale_y_continuous(labels = scales::percent) +
scale_x_discrete(labels = c("1\n(Termiskin)", "2", "3", "4", "5\n(Terkaya)")) +
labs(
title = "Proporsi Kepemilikan Rekening Menurut Kuintil Pendapatan",
subtitle = "Data Findex Indonesia 2025",
x = "Kuintil Pendapatan", y = "Proporsi"
) +
theme_minimal(base_size = 12)Gambar 4. Proporsi Kepemilikan Rekening Berdasarkan Kuintil Pendapatan
Guna memperoleh evaluasi model yang tidak bias, data dibagi secara stratifikasi (stratified split) ke dalam data training dan data testing dengan rasio 80:20. Stratifikasi dilakukan berdasarkan variabel dependen agar proporsi kelas kepemilikan rekening tetap terjaga pada kedua subset.
# SPLIT DATA: TRAINING (80%) & TESTING (20%)
findex_model <- findex_model %>%
mutate(account_bin = as.integer(account_fin == "Punya Rekening"))
stratified_split <- function(y, prop = 0.8) {
idx_by_class <- split(seq_along(y), y)
train_idx <- lapply(
idx_by_class,
function(idx) sample(idx, size = floor(length(idx) * prop))
)
unlist(train_idx, use.names = FALSE)
}
set.seed(42)
train_id <- stratified_split(findex_model$account_bin, prop = 0.8)
train_data <- findex_model[train_id, ]
test_data <- findex_model[-train_id, ]
split_summary <- bind_rows(
train_data %>% count(account_fin) %>% mutate(data = "Training"),
test_data %>% count(account_fin) %>% mutate(data = "Testing")
) %>%
group_by(data) %>%
mutate(Proporsi = scales::percent(n / sum(n), accuracy = 0.1)) %>%
ungroup() %>%
select(data, account_fin, n, Proporsi) %>%
rename(
Data = data,
`Status Rekening` = account_fin,
Jumlah = n
)
knitr::kable(split_summary,
caption = "**Tabel 6.** Distribusi Training–Testing (80:20)",
align = c("l", "l", "c", "c"))| Data | Status Rekening | Jumlah | Proporsi |
|---|---|---|---|
| Training | Tidak Punya Rekening | 403 | 47.2% |
| Training | Punya Rekening | 451 | 52.8% |
| Testing | Tidak Punya Rekening | 101 | 47.2% |
| Testing | Punya Rekening | 113 | 52.8% |
Hasilnya, data training terdiri dari 854 observasi (403 tidak punya rekening, 451 punya rekening) dan data testing sebanyak 214 observasi (101 tidak punya rekening, 113 punya rekening). Proporsi 47,2% : 52,8% terjaga identik di kedua subset, memastikan bahwa model tidak dilatih maupun dievaluasi pada distribusi kelas yang berbeda.
Sebelum model regresi logistik diestimasi, dilakukan serangkaian uji asumsi untuk memastikan bahwa data dan model memenuhi prasyarat yang diperlukan agar hasil estimasi dapat diandalkan dan valid secara statistik.
Multikolinieritas merujuk pada kondisi di mana dua atau lebih variabel prediktor saling berkorelasi tinggi sehingga dapat mengacaukan estimasi koefisien. Untuk mendeteksinya, digunakan nilai Variance Inflation Factor (VIF). Nilai VIF > 10 mengindikasikan adanya masalah multikolinieritas yang serius.
# UJI ASUMSI — Multikolinearitas (VIF)
vif_model <- lm(
account_bin ~ anydigpayment + urbanicity + inc_q,
data = train_data
)
nilai_vif <- car::vif(vif_model)
vif_table <- data.frame(
Variabel = c("Penggunaan Pembayaran Digital (X1)",
"Wilayah Tempat Tinggal (X2)",
"Kuintil Pendapatan (X3)"),
VIF = round(nilai_vif, 3),
Keterangan = ifelse(nilai_vif < 10,
"Tidak ada multikolinearitas",
"Gejala Multikolinearitas")
)
row.names(vif_table) <- NULL
knitr::kable(vif_table,
caption = "**Tabel 7.** Uji Multikolinearitas (VIF)",
align = c("l", "c", "l"))| Variabel | VIF | Keterangan |
|---|---|---|
| Penggunaan Pembayaran Digital (X1) | 1.047 | Tidak ada multikolinearitas |
| Wilayah Tempat Tinggal (X2) | 1.009 | Tidak ada multikolinearitas |
| Kuintil Pendapatan (X3) | 1.049 | Tidak ada multikolinearitas |
Hasil pengujian menunjukkan bahwa seluruh variabel prediktor memiliki nilai VIF jauh di bawah ambang 10, sehingga asumsi tidak adanya multikolinearitas terpenuhi.
Catatan: Nilai VIF < 10 menunjukkan tidak ada masalah multikolinieritas.
Uji Box–Tidwell dilakukan untuk memeriksa apakah variabel numerik
inc_q (kuintil pendapatan) memiliki hubungan yang linear
dengan logit dari variabel dependen. Pengujian dilakukan dengan
menambahkan interaksi antara inc_q dan
ln(inc_q) ke dalam model. Apabila interaksi tersebut tidak
signifikan (p > 0,05), maka asumsi linearitas terpenuhi.
# UJI ASUMSI — Linearitas Logit (Box-Tidwell)
train_data_box <- train_data %>%
mutate(inc_q_log = inc_q * log(inc_q))
box_tidwell_fit <- glm(
account_bin ~ anydigpayment + urbanicity + inc_q + inc_q_log,
data = train_data_box,
family = binomial(link = "logit")
)
p_val_box <- broom::tidy(box_tidwell_fit) %>%
filter(term == "inc_q_log") %>%
pull(p.value)
box_result <- data.frame(
Asumsi = "Linearitas Logit (Box-Tidwell)",
Variabel = "inc_q",
`p-value` = round(p_val_box, 4),
Keterangan = ifelse(p_val_box > 0.05,
"Memenuhi (Linear)",
"Tidak Memenuhi (Non-linear)"),
check.names = FALSE
)
knitr::kable(box_result,
caption = "**Tabel 8.** Uji Linearitas Logit (Box–Tidwell)",
align = c("l", "c", "c", "l"))| Asumsi | Variabel | p-value | Keterangan |
|---|---|---|---|
| Linearitas Logit (Box-Tidwell) | inc_q | 0.8309 | Memenuhi (Linear) |
Hasil uji menunjukkan nilai p = 0,8308 (> 0,05),
sehingga dapat disimpulkan bahwa asumsi linearitas logit
terpenuhi untuk variabel inc_q.
Catatan: p > 0,05 menunjukkan hubungan linear antara
inc_qdengan log-odds.
Sebagai langkah awal sebelum menguji kontribusi tiap variabel, perlu memperhatikan ringkasan dari model regresi logistik yang telah dibangun. Model estimasi dibangun menggunakan data training sebanyak 854 observasi.
# FITTING MODEL REGRESI LOGISTIK
findex_fit <- glm(
account_bin ~ anydigpayment + urbanicity + inc_q,
data = train_data,
family = binomial(link = "logit")
)
ringkasan_model <- data.frame(
Keterangan = c(
"Jumlah Observasi Training",
"Null Deviance",
"Residual Deviance",
"Derajat Bebas Residual",
"AIC"
),
Nilai = c(
nobs(findex_fit),
round(findex_fit$null.deviance, 3),
round(findex_fit$deviance, 3),
findex_fit$df.residual,
round(AIC(findex_fit), 3)
)
)
knitr::kable(ringkasan_model,
caption = "**Tabel 9.** Ringkasan Kecocokan Model Regresi Logistik",
align = c("l", "c"))| Keterangan | Nilai |
|---|---|
| Jumlah Observasi Training | 854.000 |
| Null Deviance | 1181.196 |
| Residual Deviance | 771.275 |
| Derajat Bebas Residual | 850.000 |
| AIC | 779.275 |
Penurunan deviance yang cukup besar (dari 1181,196 menjadi 771,275) menjadi bukti awal bahwa kombinasi variabel yang digunakan memberikan informasi yang sangat berharga dalam membantu model menebak status kepemilikan rekening bank masyarakat secara lebih akurat. Sementara itu, nilai AIC sebesar 779,275 menjadi ukuran standar kualitas model yang tergolong rendah (baik) untuk estimasi parameter berikutnya.
Uji omnibus atau uji Likelihood Ratio digunakan untuk menguji apakah setidaknya satu variabel prediktor dalam model memberikan kontribusi yang signifikan secara statistik terhadap variabel dependen. Statistik G dihitung dari selisih antara null deviance dan residual deviance model.
# UJI KELAYAKAN — Omnibus Test (Likelihood Ratio)
g_statistik <- findex_fit$null.deviance - findex_fit$deviance
df_g <- findex_fit$df.null - findex_fit$df.residual
p_value_g <- pchisq(g_statistik, df = df_g, lower.tail = FALSE)
uji_serentak <- data.frame(
`Statistik G` = round(g_statistik, 4),
Db = df_g,
`p-value` = format(p_value_g, scientific = TRUE, digits = 3),
Kesimpulan = ifelse(p_value_g < 0.05,
"Signifikan (Model Valid)",
"Tidak Signifikan"),
check.names = FALSE
)
knitr::kable(uji_serentak,
caption = "**Tabel 10.** Uji Signifikansi Serentak (Omnibus / *Likelihood Ratio Test*)",
align = c("c", "c", "c", "l"))| Statistik G | Db | p-value | Kesimpulan |
|---|---|---|---|
| 409.9212 | 3 | 1.57e-88 | Signifikan (Model Valid) |
Hasil menunjukkan nilai G = 409,9212 dengan 3 derajat bebas dan p < 0,001. Artinya, model secara keseluruhan signifikan dan variabel-variabel prediktor secara bersama-sama mampu menjelaskan variasi kepemilikan rekening bank di Indonesia.
Catatan: H0 = semua koefisien = 0. Tolak H0 jika p < 0,05.
Uji Hosmer–Lemeshow digunakan untuk mengevaluasi seberapa baik model yang diestimasi sesuai dengan data observasi (goodness of fit). Berbeda dengan uji omnibus, uji ini justru tidak menginginkan penolakan H0, di mana H0 menyatakan bahwa model cocok dengan data.
# UJI KELAYAKAN — Hosmer-Lemeshow
hl_test <- ResourceSelection::hoslem.test(
findex_fit$y,
fitted(findex_fit),
g = 10
)
uji_gof <- data.frame(
`Chi-Square` = round(hl_test$statistic, 4),
Db = hl_test$parameter,
`p-value` = round(hl_test$p.value, 4),
Kesimpulan = ifelse(hl_test$p.value > 0.05,
"Model Fit (Sesuai)",
"Model Tidak Fit"),
check.names = FALSE
)
row.names(uji_gof) <- NULL
knitr::kable(uji_gof,
caption = "**Tabel 11.** Uji Hosmer–Lemeshow (*Goodness of Fit*)",
align = c("c", "c", "c", "l"))| Chi-Square | Db | p-value | Kesimpulan |
|---|---|---|---|
| 4.1648 | 8 | 0.842 | Model Fit (Sesuai) |
Hasil pengujian menunjukkan nilai χ² = 4,1648 dengan 8 derajat bebas dan p = 0,842. Karena p > 0,05, H0 tidak ditolak, yang berarti model fit dengan data observasi. Ini mengonfirmasi bahwa model regresi logistik yang dibangun sudah memadai untuk menggambarkan pola kepemilikan rekening bank di Indonesia.
Catatan: Gagal tolak H0 (p > 0,05) menunjukkan model layak digunakan.
Model regresi logistik diestimasi menggunakan 854 data training (80%) dari total 1.068 observasi yang dipisahkan secara stratified untuk menjaga proporsi kelas. Hasil estimasi meliputi koefisien regresi (β), odds ratio (OR), interval kepercayaan 95%, serta nilai p untuk setiap variabel prediktor. Adapun persamaan logit model yang terbentuk adalah sebagai berikut:
\[\widehat{\text{logit}}(P) = -1{,}3398 + 3{,}3647 \cdot \text{anydigpayment}_1 - 0{,}1711 \cdot \text{rural}_2 + 0{,}1066 \cdot \text{inc_q}\]
# KOEFISIEN, ODDS RATIO, DAN UJI SIGNIFIKANSI
coef_table <- broom::tidy(findex_fit) %>%
mutate(
odds_ratio = exp(estimate),
ci_low = exp(estimate - 1.96 * std.error),
ci_high = exp(estimate + 1.96 * std.error)
) %>%
arrange(p.value) %>%
transmute(
`Variabel/Level` = term,
`Koefisien (β)` = round(estimate, 4),
`Odds Ratio (OR)` = round(odds_ratio, 3),
`CI 95%` = paste0(round(ci_low, 3), " – ", round(ci_high, 3)),
`p-value` = round(p.value, 4),
`Keterangan` = ifelse(p.value < 0.05, "Signifikan", "Tidak Signifikan")
)
knitr::kable(coef_table,
caption = "**Tabel 12.** Hasil Estimasi Model (OR, CI, p-value)",
align = c("l", "c", "c", "c", "c", "l"))| Variabel/Level | Koefisien (β) | Odds Ratio (OR) | CI 95% | p-value | Keterangan |
|---|---|---|---|---|---|
| anydigpaymentYa | 3.3647 | 28.925 | 19.069 – 43.873 | 0.0000 | Signifikan |
| (Intercept) | -1.3398 | 0.262 | 0.17 – 0.404 | 0.0000 | Signifikan |
| inc_q | 0.1066 | 1.113 | 0.981 – 1.262 | 0.0970 | Tidak Signifikan |
| urbanicityRural | -0.1711 | 0.843 | 0.586 – 1.213 | 0.3569 | Tidak Signifikan |
Variabel penggunaan pembayaran digital (anydigpayment)
merupakan prediktor yang paling dominan dan signifikan dalam model.
Dengan nilai koefisien β = 3,3647 dan odds ratio (OR) = 28,925, hasil
ini mengandung makna bahwa individu yang menggunakan pembayaran digital
memiliki peluang 28,92 kali lebih besar untuk memiliki rekening bank
dibandingkan individu yang tidak menggunakan pembayaran digital, dengan
mengendalikan variabel lainnya (CI 95%: 19,069–43,873; p <
0,001).
Temuan ini secara konseptual konsisten dengan teori adopsi teknologi keuangan, di mana penggunaan layanan pembayaran digital merupakan bagian dari ekosistem perbankan yang mensyaratkan kepemilikan rekening formal. Dalam konteks Indonesia, layanan seperti QRIS, GoPay, OVO, Dana, dan berbagai dompet digital lainnya pada umumnya terhubung langsung dengan rekening bank.
Variabel wilayah tempat tinggal (urbanicity) menunjukkan
nilai koefisien β = −0,1711 dengan OR = 0,843 (CI 95%: 0,586–1,213; p =
0,357). Nilai p yang berada di atas batas signifikansi 0,05
menegaskan bahwa variabel wilayah tidak terbukti berpengaruh signifikan
terhadap kepemilikan rekening bank setelah mengendalikan penggunaan
pembayaran digital dan kuintil pendapatan.
Ketidaksignifikanan variabel wilayah ini mengindikasikan bahwa disparitas urban-rural dalam kepemilikan rekening bank di Indonesia sudah tidak lagi menjadi faktor utama, yang mencerminkan dampak positif dari ekspansi jaringan agen bank (Laku Pandai) dan layanan mobile banking.
Kuintil pendapatan (inc_q) memiliki koefisien β = 0,1066
dengan OR = 1,113 (CI 95%: 0,981–1,262; p = 0,097). Berdasarkan
p-value tersebut, variabel pendapatan tidak signifikan pada
tingkat 5% (α = 0,05), namun bersifat marginal pada α = 10%. Setiap
kenaikan satu tingkat kelompok pendapatan hanya memberikan dorongan
sekitar 11,3% terhadap peluang kepemilikan rekening, yang
mengindikasikan bahwa tingkat ekonomi individu kini tidak lagi menjadi
penentu utama karena tergeser oleh peran digitalisasi keuangan yang jauh
lebih dominan.
# Confusion Matrix & Metrik Klasifikasi
safe_div <- function(num, den) ifelse(den == 0, NA_real_, num / den)
confusion_matrix <- function(actual, prob, threshold = 0.5) {
pred <- as.integer(prob >= threshold)
tp <- sum(pred == 1 & actual == 1)
tn <- sum(pred == 0 & actual == 0)
fp <- sum(pred == 1 & actual == 0)
fn <- sum(pred == 0 & actual == 1)
matrix(
c(tn, fp, fn, tp), nrow = 2,
dimnames = list(
`Aktual` = c("Tidak Punya", "Punya"),
`Prediksi` = c("Tidak Punya", "Punya")
)
)
}
classification_metrics <- function(actual, prob, threshold = 0.5) {
pred <- as.integer(prob >= threshold)
tp <- sum(pred == 1 & actual == 1)
tn <- sum(pred == 0 & actual == 0)
fp <- sum(pred == 1 & actual == 0)
fn <- sum(pred == 0 & actual == 1)
sensitivity <- safe_div(tp, tp + fn)
specificity <- safe_div(tn, tn + fp)
precision <- safe_div(tp, tp + fp)
npv <- safe_div(tn, tn + fn)
accuracy <- safe_div(tp + tn, tp + tn + fp + fn)
data.frame(
Threshold = threshold,
Accuracy = accuracy,
`Error Rate` = 1 - accuracy,
Sensitivity = sensitivity,
Specificity = specificity,
Precision = precision,
NPV = npv,
`F1-Score` = safe_div(2 * precision * sensitivity,
precision + sensitivity),
`Balanced Accuracy`= (sensitivity + specificity) / 2,
`False Pos Rate` = 1 - specificity,
`False Neg Rate` = 1 - sensitivity,
check.names = FALSE
)
}
# Prediksi probabilitas
p_train <- predict(findex_fit, newdata = train_data, type = "response")
p_test <- predict(findex_fit, newdata = test_data, type = "response")Pada threshold default 0,50, model menghasilkan 76 prediksi benar untuk kelas positif (True Positive = 76) dan 94 prediksi benar untuk kelas negatif (True Negative = 94). Terdapat 7 prediksi False Positive dan 37 prediksi False Negative. Model mencapai tingkat akurasi 79,4%, dengan sensitivitas 67,3% dan spesifisitas 93,1%.
# EVALUASI — Confusion Matrix & Metrik (threshold 0.5)
confusion_default <- confusion_matrix(
test_data$account_bin, p_test, threshold = 0.5
)
metrics_default <- classification_metrics(
test_data$account_bin, p_test, threshold = 0.5
) %>%
mutate(across(where(is.numeric), round, 3))
knitr::kable(confusion_default,
caption = "**Tabel 13.** *Confusion Matrix* Data Testing (Threshold = 0,50)")| Tidak Punya | Punya | |
|---|---|---|
| Tidak Punya | 94 | 37 |
| Punya | 7 | 76 |
knitr::kable(t(metrics_default),
caption = "**Tabel 14.** Metrik Klasifikasi pada Threshold 0,50",
col.names = "Nilai")| Nilai | |
|---|---|
| Threshold | 0.500 |
| Accuracy | 0.794 |
| Error Rate | 0.206 |
| Sensitivity | 0.673 |
| Specificity | 0.931 |
| Precision | 0.916 |
| NPV | 0.718 |
| F1-Score | 0.776 |
| Balanced Accuracy | 0.802 |
| False Pos Rate | 0.069 |
| False Neg Rate | 0.327 |
Kemampuan model dalam membedakan individu yang memiliki rekening bank dan yang tidak dievaluasi menggunakan kurva Receiver Operating Characteristic (ROC) serta nilai Area Under Curve (AUC).
# KURVA ROC DAN AUC
roc_points <- function(actual, prob) {
thresholds <- c(Inf, sort(unique(prob), decreasing = TRUE), -Inf)
out <- lapply(thresholds, function(th) {
pred <- as.integer(prob >= th)
tp <- sum(pred == 1 & actual == 1)
tn <- sum(pred == 0 & actual == 0)
fp <- sum(pred == 1 & actual == 0)
fn <- sum(pred == 0 & actual == 1)
sensitivity <- safe_div(tp, tp + fn)
specificity <- safe_div(tn, tn + fp)
data.frame(
threshold = th,
sensitivity = sensitivity,
specificity = specificity,
fpr = 1 - specificity,
youden = sensitivity + specificity - 1
)
})
bind_rows(out)
}
auc_value <- function(roc_df) {
roc_sorted <- roc_df %>% arrange(fpr, sensitivity)
sum(
diff(roc_sorted$fpr) *
(head(roc_sorted$sensitivity, -1) + tail(roc_sorted$sensitivity, -1)) / 2
)
}
roc_train <- roc_points(train_data$account_bin, p_train) %>%
mutate(data = "Training")
roc_test <- roc_points(test_data$account_bin, p_test) %>%
mutate(data = "Testing")
auc_train <- auc_value(roc_train)
auc_test <- auc_value(roc_test)
optimal_train <- roc_train %>% slice_max(youden, n = 1, with_ties = FALSE)
threshold_opt <- optimal_train$threshold
test_at_opt <- roc_test %>%
filter(threshold == threshold_opt) %>%
slice(1)# Plot kurva ROC
roc_plot <- bind_rows(roc_train, roc_test)
ggplot(roc_plot, aes(x = fpr, y = sensitivity, color = data)) +
geom_path(linewidth = 1.1) +
geom_abline(intercept = 0, slope = 1,
linetype = "dashed", color = "#6c757d") +
geom_point(
data = optimal_train,
aes(x = fpr, y = sensitivity),
inherit.aes = FALSE,
color = "#ffb703", fill = "#fb8500",
shape = 21, size = 4, stroke = 1.2
) +
geom_point(
data = test_at_opt,
aes(x = fpr, y = sensitivity),
inherit.aes = FALSE,
color = "#8338ec", fill = "#3a86ff",
shape = 24, size = 4, stroke = 1.2
) +
coord_equal() +
scale_color_manual(
values = c("Training" = "#0077b6", "Testing" = "#e76f51")
) +
labs(
title = "Kurva ROC — Regresi Logistik Kepemilikan Rekening Bank",
subtitle = paste0(
"AUC Training = ", round(auc_train, 3),
" | AUC Testing = ", round(auc_test, 3),
" | Threshold Optimal = ", round(threshold_opt, 3)
),
x = "False Positive Rate (1 − Specificity)",
y = "True Positive Rate (Sensitivity)",
color = "Data"
) +
theme_minimal(base_size = 12)Gambar 5. Kurva ROC — Regresi Logistik Kepemilikan Rekening Bank
Berdasarkan hasil pemodelan, diperoleh nilai AUC Training = 0,839 dan AUC Testing = 0,824. Merujuk pada klasifikasi Hosmer dan Lemeshow (2013), kedua nilai tersebut masuk dalam kategori baik, yang menunjukkan bahwa model memiliki kemampuan diskriminasi yang andal. Selain itu, selisih AUC yang sangat tipis (0,015) antara data training dan testing mengonfirmasi bahwa model tidak mengalami gejala overfitting.
# Threshold optimal berdasarkan Indeks Youden
threshold_table <- optimal_train %>%
transmute(
`Threshold Optimal` = round(threshold, 3),
Sensitivity = round(sensitivity, 3),
Specificity = round(specificity, 3),
`Youden Index` = round(youden, 3)
)
knitr::kable(threshold_table,
caption = "**Tabel 15.** Threshold Optimal Berdasarkan ROC *Training*",
align = c("c", "c", "c", "c"))| Threshold Optimal | Sensitivity | Specificity | Youden Index |
|---|---|---|---|
| 0.877 | 0.727 | 0.918 | 0.645 |
Penentuan titik potong peluang menggunakan indeks Youden pada data training menghasilkan nilai threshold optimal sebesar 0,877. Pada tingkat ini, diperoleh nilai sensitivitas sebesar 72,7% dan spesifisitas mencapai 91,8%.
# PERBANDINGAN THRESHOLD 0.50 vs THRESHOLD OPTIMAL
metrics_compare <- bind_rows(
classification_metrics(test_data$account_bin, p_test, threshold = 0.5) %>%
mutate(`Aturan Klasifikasi` = "Threshold 0,50"),
classification_metrics(test_data$account_bin, p_test, threshold = threshold_opt) %>%
mutate(`Aturan Klasifikasi` = paste0("Threshold Optimal (",
round(threshold_opt, 3), ")"))
) %>%
select(`Aturan Klasifikasi`, everything()) %>%
mutate(across(where(is.numeric), round, 3))
confusion_opt <- confusion_matrix(
test_data$account_bin, p_test, threshold = threshold_opt
)
knitr::kable(t(metrics_compare[, -1]),
caption = "**Tabel 16.** Perbandingan Metrik: Threshold 0,50 vs Threshold Optimal",
col.names = c("Threshold 0,50", paste0("Threshold Optimal (",
round(threshold_opt, 3), ")")))| Threshold 0,50 | Threshold Optimal (0.877) | |
|---|---|---|
| Threshold | 0.500 | 0.877 |
| Accuracy | 0.794 | 0.794 |
| Error Rate | 0.206 | 0.206 |
| Sensitivity | 0.673 | 0.673 |
| Specificity | 0.931 | 0.931 |
| Precision | 0.916 | 0.916 |
| NPV | 0.718 | 0.718 |
| F1-Score | 0.776 | 0.776 |
| Balanced Accuracy | 0.802 | 0.802 |
| False Pos Rate | 0.069 | 0.069 |
| False Neg Rate | 0.327 | 0.327 |
knitr::kable(confusion_opt,
caption = paste0("**Tabel 17.** *Confusion Matrix* pada Threshold Optimal (",
round(threshold_opt, 3), ")"))| Tidak Punya | Punya | |
|---|---|---|
| Tidak Punya | 94 | 37 |
| Punya | 7 | 76 |
Hasil evaluasi menunjukkan bahwa nilai akurasi (79,4%), sensitivitas (67,3%), spesifisitas (93,1%), hingga error rate (20,6%) menunjukkan angka yang sama persis di antara kedua threshold tersebut. Kesamaan ini mengonfirmasi bahwa nilai probabilitas prediksi yang dihasilkan oleh model pada sampel testing sudah mengelompok secara tegas pada area ekstrem dan tidak ada satu pun responden yang memiliki nilai peluang prediksi di rentang abu-abu antara 0,50 hingga 0,877. Hal ini membuktikan bahwa model memiliki tingkat kestabilan yang sangat tinggi.
# DISTRIBUSI PROBABILITAS PREDIKSI
test_prob_plot <- test_data %>%
mutate(peluang_punya = p_test)
ggplot(test_prob_plot, aes(x = peluang_punya, fill = account_fin)) +
geom_density(alpha = 0.55, color = "white", linewidth = 0.7) +
geom_vline(
xintercept = threshold_opt,
color = "#fb8500",
linewidth = 1.2,
linetype = "dashed"
) +
annotate(
"label",
x = threshold_opt, y = Inf,
label = paste0("threshold = ", round(threshold_opt, 3)),
vjust = 1.4, fill = "#fff3b0", color = "#5f370e", label.size = 0
) +
scale_fill_manual(
values = c("Tidak Punya Rekening" = "#e76f51", "Punya Rekening" = "#2a9d8f")
) +
labs(
title = "Distribusi Peluang Prediksi Kepemilikan Rekening Bank",
subtitle = "Data Testing — Findex Indonesia 2025",
x = "Peluang prediksi punya rekening bank",
y = "Kepadatan",
fill = "Status aktual"
) +
theme_minimal(base_size = 12)Gambar 6. Distribusi Peluang Prediksi Kepemilikan Rekening Bank (Data Testing)
Hasil analisis ini memberikan implikasi kebijakan yang cukup spesifik untuk agenda inklusi keuangan nasional. Karena hanya variabel penggunaan pembayaran digital yang terbukti berpengaruh signifikan, prioritas kebijakan ke depan perlu lebih difokuskan untuk memperkuat ekosistem non-tunai di masyarakat. Langkah nyata yang bisa diambil adalah mempercepat integrasi masyarakat yang belum memiliki rekening (unbanked) ke platform digital, misalnya dengan memperluas penggunaan QRIS di sektor mikro serta melanjutkan digitalisasi pada penyaluran bantuan sosial (bansos) pemerintah.
Selain itu, faktor wilayah tinggal (urban-rural) dan tingkat pendapatan menunjukkan bahwa perluasan infrastruktur keuangan digital perlahan mulai berhasil mengurangi ketimpangan akses. Oleh karena itu, fokus Otoritas Jasa Keuangan (OJK) dan Bank Indonesia sebaiknya tidak lagi sekadar mengejar kuantitas pembukaan rekening fisik, melainkan bergeser pada penguatan literasi digital, kestabilan jaringan internet di daerah, serta aspek perlindungan konsumen agar masyarakat dapat bertransaksi secara aman.
Berdasarkan analisis regresi logistik biner menggunakan data Global Findex 2025 Indonesia (N = 1.068), dapat ditarik beberapa kesimpulan berikut:
Penggunaan pembayaran digital merupakan determinan paling kuat terhadap kepemilikan rekening bank formal. Dengan nilai odds ratio (OR) mencapai 28,925, individu yang aktif menggunakan infrastruktur pembayaran digital memiliki kecenderungan 28,925 kali lebih besar untuk memiliki rekening bank dibandingkan dengan mereka yang belum mengadopsi teknologi tersebut. Hal ini menegaskan bahwa ekosistem digital dan sektor perbankan formal memiliki keterikatan yang sangat kuat.
Variabel wilayah tempat tinggal (urban/rural) tidak berpengaruh signifikan setelah mengendalikan variabel lain (p = 0,357). Ketidaksignifikanan ini mengindikasikan bahwa sekat pembatas berupa dikotomi desa-kota dalam konteks akses finansial dasar di Indonesia sudah mulai terkikis, sebagai sinyal positif keberhasilan ekspansi layanan perbankan tanpa kantor dan pemanfaatan mobile banking yang semakin merata.
Kuintil pendapatan menunjukkan kecenderungan pengaruh positif, namun tidak signifikan pada tingkat 5% (p = 0,097) dan dapat dikategorikan marginal pada α = 10%.
Evaluasi performa prediktif pada data testing menunjukkan akurasi 79,4%, sensitivitas 67,3%, dan spesifisitas 93,1% pada threshold 0,50. Threshold optimal berdasarkan data training sebesar 0,877 menghasilkan metrik yang identik pada data testing, sehingga threshold 0,50 sudah memadai untuk klasifikasi pada studi ini.
Secara kebijakan, hasil ini menegaskan pentingnya perluasan adopsi pembayaran digital yang aman dan terjangkau serta peningkatan literasi keuangan digital untuk mendorong kepemilikan rekening bank formal, khususnya bagi kelompok yang masih unbanked.
Mengingat penggunaan pembayaran digital menjadi faktor tunggal yang paling dominan dalam mendorong kepemilikan rekening bank, Bank Indonesia dan Otoritas Jasa Keuangan (OJK) sebaiknya memprioritaskan perluasan infrastruktur digital. Langkah ini bisa dilakukan dengan memperluas interkoneksi QRIS di sektor pelaku usaha mikro serta melanjutkan digitalisasi penuh pada program penyaluran bantuan sosial pemerintah.
Selain itu, karena faktor wilayah tinggal (urban-rural) sudah tidak lagi menjadi penghalang yang signifikan, alokasi anggaran sebaiknya dialihkan untuk penguatan literasi keuangan digital, kestabilan jaringan internet pedesaan, serta jaminan keamanan konsumen dalam bertransaksi online.
Penelitian ini hanya membatasi analisis pada tiga variabel prediktor. Untuk penelitian selanjutnya, diharapkan menambah karakteristik sosiodemografi lain yang tersedia di data Global Findex, seperti tingkat pendidikan, kelompok usia, kepemilikan telepon seluler, atau tingkat literasi keuangan responden agar daya penjelas model menjadi lebih tinggi.
[1] Development Research Group, Finance and Private Sector Development Unit. Indonesia - The Global Findex Database 2025: Connectivity and Financial Inclusion in the Digital Economy; World Bank: Washington, DC, USA, 2025; Ref. IDN_2024_FINDEX_v02_M. https://doi.org/10.48529/cdk5-2m94.
[2] Erlando, A.; Riyanto, F.D.; Masakazu, S. Financial inclusion, economic growth, and poverty alleviation: Evidence from eastern Indonesia. Heliyon 2020, 6(10), e05235. https://doi.org/10.1016/j.heliyon.2020.e05235.
[3] Otoritas Jasa Keuangan. Survei Nasional Literasi dan Inklusi Keuangan (SNLIK) Tahun 2024; OJK: Jakarta, Indonesia, 2024.
[4] Demirgüç-Kunt, A.; Klapper, L.; Singer, D.; Ansar, S. The Global Findex Database 2017: Measuring Financial Inclusion and the Fintech Revolution; World Bank: Washington, DC, USA, 2018.
[5] Allen, F.; Demirgüç-Kunt, A.; Klapper, L.; Martinez Peria, M.S. The foundations of financial inclusion: Understanding ownership and use of formal accounts. J. Financ. Intermediation 2016, 27, 1–30. https://doi.org/10.1016/j.jfi.2015.12.003.
[6] Ozili, P.K. Impact of digital finance on financial inclusion and stability. Borsa Istanbul Rev. 2018, 18(4), 329–340. https://doi.org/10.1016/j.bir.2017.12.003.
[7] Sahputri, R.A.M.; Sujarwoto; Sihombing, S.; Njoman, M.G. Financial inclusion in Indonesia: An analysis of determinants of bank account ownership and credit access at individual and regional levels. Econ. Finance Indones. 2024, 70(2), 1. https://doi.org/10.47291/efi.2024.06.
[8] Hosmer, D.W.; Lemeshow, S.; Sturdivant, R.X. Applied Logistic Regression, 3rd ed.; Wiley: Hoboken, NJ, USA, 2013.
[9] Chowdhury, M.A.M.; Labib, T.; Hossain, A.; Hossain, M.B.; Rengasamy, D.; Atiullah, M. Socio-economic determinants of digital financial inclusion in SAARC countries. Int. J. Sociol. Soc. Policy 2025, ahead-of-print. https://doi.org/10.1108/IJSSP-01-2025-0071.
[10] Hendrawaty, E.; Hasnawati, S.; Widodo, J.; Hadianto, B. The determinants of the financial inclusion of Indonesian female entrepreneurs. Int. J. Manag. Sustain. 2024, 13(2), 273–282.
[11] Agresti, A. Categorical Data Analysis, 3rd ed.; Wiley: Hoboken, NJ, USA, 2013.
[12] Midi, H.; Sarkar, S.K.; Rana, S. Collinearity diagnostics of binary logistic regression model. J. Interdiscip. Math. 2010, 13(3), 253–267. https://doi.org/10.1080/09720502.2010.10700699.
[13] Box, G.E.P.; Tidwell, P.W. Transformation of the independent variables. Technometrics 1962, 4(4), 531–550. https://doi.org/10.1080/00401706.1962.10490038.
[14] Akaike, H. A new look at the statistical model identification. IEEE Trans. Autom. Control 1974, 19(6), 716–723. https://doi.org/10.1109/TAC.1974.1100705.
[15] Fawcett, T. An introduction to ROC analysis. Pattern Recognit. Lett. 2006, 27(8), 861–874. https://doi.org/10.1016/j.patrec.2005.10.010.