Missing Value: 6 Cara Menangani Data Kosong (dan Risikonya)
Blog/Tips & Trik/Missing Value: 6 Cara Menangani Data Kosong (dan Risikonya)

Missing Value: 6 Cara Menangani Data Kosong (dan Risikonya)

BimaBima
·13 Juni 2026·11 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Missing value adalah sel data yang gak punya nilai — bukan nol, tapi gak diketahui. Ada enam cara nanganinya: hapus baris, hapus kolom, isi pakai rata-rata, isi pakai median, isi pakai nilai sebelumnya (forward fill), atau biarkan kosong sambil dikasih penanda. Pilihan tergantung berapa persen yang kosong dan kenapa kosongnya. Yang paling bahaya: isi pakai nol tanpa mikir.

Missing value adalah sel data yang gak punya nilai. Bukan nol — gak diketahui.

Bedanya penting. Nol artinya "penjualan hari itu memang nol". Kosong artinya "kita gak tau berapa penjualannya".

Aku pernah lihat laporan rata-rata umur pelanggan yang keluarnya 23 tahun. Ternyata 340 dari 1.240 pelanggan gak isi umur, dan sel kosongnya diganti nol pas import.

Rata-rata aslinya 38 tahun. Selisih 15 tahun, dan seluruh strategi marketingnya diarahin ke segmen yang salah.

Di bawah ini enam cara nangani data kosong, lengkap sama risiko masing-masing.

Kenapa data bisa kosong?

Sebelum mutusin mau diapain, cari tau dulu kenapa kosongnya. Ada tiga sebab, dan tiap sebab butuh perlakuan berbeda.

Kosong karena gak berlaku. Kolom ongkir kosong buat transaksi yang diambil sendiri di toko. Ini bukan data hilang — memang gak ada ongkirnya. Boleh diisi nol.

Kosong karena gak diisi. Pembeli gak mau kasih umurnya. Data itu ada di dunia nyata, tapi kita gak punya.

Kosong karena hilang di jalan. Error waktu export, kolom kegeser, encoding rusak. Ini bug — dan sering bisa diperbaiki dengan ambil ulang datanya.

Yang paling berbahaya kalau kekosongannya gak acak. Contoh: pelanggan yang gak isi umur ternyata kebanyakan remaja yang malu. Hapus baris mereka, dan datamu jadi bias tanpa kamu sadar.

Gimana cara ngecek berapa banyak yang kosong?

Langkah pertama selalu ini. Hitung dulu, baru mutusin.

SELECT
  COUNT(*)                       AS total_baris,
  COUNT(*) - COUNT(kota)         AS kota_kosong,
  COUNT(*) - COUNT(ongkir)       AS ongkir_kosong,
  COUNT(*) - COUNT(umur_pembeli) AS umur_kosong,
  ROUND((COUNT(*) - COUNT(umur_pembeli)) * 100.0 / COUNT(*), 1)
    AS persen_umur_kosong
FROM transaksi;

Trik di sini: COUNT(*) ngitung semua baris, sementara COUNT(kolom) ngabaikan NULL. Selisihnya = jumlah yang kosong.

Persentase ini yang nentuin langkah berikutnya.

Apa 6 cara menangani missing value?

Cara 1: Hapus barisnya

Paling gampang. Baris yang ada kosongnya, buang.

SELECT * FROM transaksi
WHERE kota IS NOT NULL
  AND umur_pembeli IS NOT NULL;

Kapan dipakai: kalau yang kosong di bawah 5 persen dan kekosongannya acak.

Risikonya: kalau kekosongannya gak acak, kamu buang satu kelompok pelanggan secara sistematis. Dan kalau kamu punya 10 kolom yang masing-masing 3 persen kosong, hapus semua baris yang ada kosongnya bisa buang 25 persen data.

Cara 2: Hapus kolomnya

Kalau satu kolom 70 persen kosong, kolom itu gak bisa dipercaya. Buang aja.

Kapan dipakai: kolom yang lebih dari separuh isinya kosong dan gak kritis buat analisa.

Risikonya: kamu kehilangan variabel yang mungkin penting. Sebelum buang, cek apakah data yang 30 persen terisi itu punya pola menarik.

Cara 3: Isi pakai rata-rata

SELECT id, produk,
       COALESCE(umur_pembeli,
                (SELECT ROUND(AVG(umur_pembeli)) FROM transaksi)
       ) AS umur_terisi
FROM transaksi;

COALESCE ngambil nilai pertama yang gak NULL. Kalau umur_pembeli kosong, dia pakai rata-rata.

Kapan dipakai: data yang sebarannya simetris dan gak ada outlier ekstrem.

Risikonya: rata-rata gampang ketarik outlier. Dan mengisi banyak sel dengan angka yang sama bikin variasi datamu turun palsu — standar deviasi jadi lebih kecil dari kenyataan.

Cara 4: Isi pakai median

SELECT id, produk,
       COALESCE(umur_pembeli,
                (SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY umur_pembeli)
                 FROM transaksi)
       ) AS umur_terisi
FROM transaksi;

Kapan dipakai: hampir selalu lebih aman dari rata-rata. Terutama buat data yang miring kayak nilai transaksi atau pendapatan.

Risikonya: sama kayak rata-rata, variasi data jadi turun palsu. Tapi setidaknya nilai isiannya gak kegeser sama outlier.

Kalau kamu belum yakin data kamu miring atau nggak, bikin box plot dulu. Sekali lihat langsung ketahuan.

Cara 5: Isi pakai nilai sebelumnya (forward fill)

Buat data berurutan waktu. Kalau suhu jam 10 kosong, pakai suhu jam 9.

SELECT tanggal, kota,
       COALESCE(
         harga_beras,
         LAG(harga_beras) OVER (PARTITION BY kota ORDER BY tanggal)
       ) AS harga_terisi
FROM harga_harian;

Kapan dipakai: data time series yang nilainya berubah pelan — harga komoditas, stok gudang, suhu.

Risikonya: kalau yang kosong berturut-turut 30 hari, kamu bakal ngulang nilai lama selama 30 hari dan bikin grafik yang datar palsu.

Cara 6: Biarkan kosong, tapi kasih penanda

SELECT id, produk, umur_pembeli,
       CASE WHEN umur_pembeli IS NULL THEN 1 ELSE 0 END
         AS umur_tidak_diketahui
FROM transaksi;

Kolom penanda ini bilang ke kamu (dan ke model, kalau nanti dipakai) bahwa data ini hilang.

Kapan dipakai: kalau kekosongan itu sendiri informatif. Contoh: pelanggan yang gak mau kasih nomor HP mungkin punya pola belanja berbeda.

Risikonya: nambah kolom, dan beberapa tools visualisasi ngeluh sama NULL. Tapi ini cara paling jujur.

Contoh kasus: kolom ongkir toko_berkah

Di dataset toko_berkah, kolom ongkir kosong di 1.847 dari 4.812 transaksi — 38,4 persen.

Pertanyaan pertama: kenapa kosong?

Ternyata semua transaksi yang ongkirnya kosong itu pembelian ambil di toko. Gak ada pengiriman, jadi gak ada ongkir. Kosongnya berarti nol.

Sekarang lihat efeknya ke angka:

Cara hitungHasilArtinya
AVG(ongkir)Rp 11.700Rata-rata dari yang ada ongkirnya
SUM(ongkir) / COUNT(*)Rp 7.206Rata-rata ongkir per transaksi keseluruhan

Selisihnya 62 persen. Dua angka, dua kesimpulan bisnis yang beda total.

Kalau kamu mau tau "rata-rata ongkir yang dibayar pelanggan yang pesan antar", pakai yang atas.

Kalau kamu mau tau "berapa beban ongkir per transaksi buat hitung margin", pakai yang bawah.

AVG di SQL otomatis ngabaikan NULL. Ini jebakan yang gak pernah bunyi alarm. Query-nya jalan, angkanya keluar, dan salah.

Apa kesalahan umum waktu nangani missing value?

Isi nol tanpa mikir. Nol itu angka dan bakal ikut dihitung. Umur pelanggan 0 tahun narik rata-rata anjlok.

Hapus dulu, cek belakangan. Cek dulu apakah baris yang kosong punya pola. Kalau semuanya dari satu cabang, itu bukan kebetulan.

Isi rata-rata di data yang miring. Nilai transaksi hampir selalu miring ke kanan. Median lebih jujur.

Lupa NULL gak sama dengan NULL. Di SQL, NULL = NULL hasilnya bukan true — hasilnya NULL. Makanya pakai IS NULL, bukan = NULL. Ini bikin banyak query diem-diem gak balikin apa-apa.

Gak nyatet apa yang diisi. Tiga bulan lagi kamu lupa 340 baris itu hasil imputasi. Kasih kolom penanda atau tulis di dokumentasi.

FAQ

Missing value itu apa?

Missing value adalah sel data yang gak punya nilai. Di SQL ditulis NULL, di spreadsheet berupa sel kosong, di Python biasanya NaN. Bedanya sama nol penting: nol artinya ada nilainya dan nilainya nol. Kosong artinya kita gak tau nilainya berapa.

Kapan boleh hapus baris yang ada missing value-nya?

Kalau yang kosong kurang dari 5 persen dari total baris dan kekosongannya acak, hapus itu aman. Kalau di atas 10 persen, kamu buang informasi yang cukup banyak. Dan kalau kekosongannya gak acak, hapus baris bakal bikin datamu bias.

Lebih baik isi pakai rata-rata atau median?

Median lebih aman buat kebanyakan kasus. Rata-rata gampang ketarik outlier: satu transaksi Rp 8 juta di data warung bisa naikin rata-rata sampai dua kali lipat. Kalau sebaran datamu miring, dan data transaksi hampir selalu miring, pakai median.

Kenapa gak boleh isi missing value pakai nol?

Soalnya nol itu angka, dan dia bakal ikut dihitung. Kalau 200 dari 1.000 pelanggan gak ngasih umur dan kamu isi nol, rata-rata umur pelanggan anjlok. Isi nol cuma boleh kalau kamu yakin kekosongan itu memang berarti nol.

Gimana cara tau kenapa data kosong?

Balik ke sumbernya. Tanya orang yang input datanya atau cek sistemnya. Kekosongan biasanya ada tiga sebab: lupa diisi, gak berlaku, atau hilang waktu import. Yang gak berlaku sering bisa diisi nol; yang lupa atau hilang, jangan diisi asal.

Langkah berikutnya

Urutan yang aku pakai tiap kali: hitung persentase kosong per kolom, cari tau kenapa kosongnya, baru pilih caranya.

Kalau ragu, pilih cara 6 — biarkan kosong dan kasih penanda. Itu paling jujur dan paling gampang diperbaiki nanti.

Buat referensi fungsi penanganan NULL di SQL, cek COALESCE dan konsep NULL.

Langkah pembersihan yang lain ada di Checklist Data Cleaning 12 Langkah. Dokumentasi lengkap soal penanganan data hilang di Python ada di panduan resmi pandas.

Buka data kamu. Jalanin query hitung kosong. Angkanya mungkin ngagetin.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel Terkait

Cara Baca Laporan Data dengan Kritis: 7 Pertanyaan Wajib
Tips & Trik
10 Juli 2026•8 menit baca

Cara Baca Laporan Data dengan Kritis: 7 Pertanyaan Wajib

Angka di laporan bisa bener semua tapi tetap nyesatin. Ini 7 pertanyaan yang aku pakai tiap kali dapat laporan dari orang lain.

BimaBima
Produktivitas Data Analyst: Sistem Kerja biar Gak Kebanjiran Request
Tips & Trik
7 Juli 2026•10 menit baca

Produktivitas Data Analyst: Sistem Kerja biar Gak Kebanjiran Request

Sistem 5 langkah buat data analyst yang tiap hari kebanjiran request dadakan — dari intake form, matriks prioritas, sampai cara nolak tanpa bikin stakeholder ngambek.

BimaBima
Bias dalam Analisis Data: 8 Jebakan yang Sering Gak Kerasa
Tips & Trik
4 Juli 2026•8 menit baca

Bias dalam Analisis Data: 8 Jebakan yang Sering Gak Kerasa

Delapan bias analisis data yang paling sering nyelip di kerjaan analyst — dari survivorship bias sampai Simpson's paradox — plus cara ngecek dan ngebenerinnya.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore