PCA untuk Analis: Mengurangi Kolom Tanpa Kehilangan Cerita
Blog/Tips & Trik/PCA untuk Analis: Mengurangi Kolom Tanpa Kehilangan Cerita

PCA untuk Analis: Mengurangi Kolom Tanpa Kehilangan Cerita

BimaBima
·18 Oktober 2025·12 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

PCA (Principal Component Analysis) adalah teknik yang meringkas banyak kolom numerik yang saling berkaitan jadi sedikit kolom baru bernama komponen utama, sambil nahan sebanyak mungkin variasi data aslinya. Tiap komponen adalah kombinasi berbobot dari kolom asli, dan komponen pertama selalu nangkap variasi terbesar. Sebelum jalanin PCA, kolomnya wajib distandardisasi dulu supaya kolom bersatuan rupiah nggak ngedominasi kolom bersatuan persen. Hasilnya dibaca lewat explained variance ratio dan loading tiap kolom.

PCA adalah cara meringkas banyak kolom angka yang saling berkaitan jadi beberapa kolom baru yang lebih sedikit, tanpa buang terlalu banyak informasi.

Kepanjangannya Principal Component Analysis. Kolom baru hasilnya disebut komponen utama.

Kasus yang paling sering: kamu punya 28 kolom numerik per toko, dan setengahnya sebenernya ngomongin hal yang sama. Omzet, jumlah transaksi, jumlah pelanggan, dan jumlah item terjual bakal naik turun bareng. PCA ngerapihin tumpang tindih itu.

Di bawah ini cara pakainya, cara baca hasilnya, dan kapan sebaiknya kamu nggak pakai PCA sama sekali.

Apa itu PCA dan kapan analis butuh?

PCA nyari arah baru di dalam datamu yang variasinya paling besar, lalu bikin kolom baru sepanjang arah itu. Komponen pertama nangkap variasi terbesar. Komponen kedua nangkap sisa terbesar berikutnya, dan seterusnya. Tiap komponen adalah campuran berbobot dari semua kolom asli.

Tiga situasi yang bikin PCA kepakai:

  • Kolom kamu banyak dan saling berkaitan erat, jadi model regresi kamu jadi nggak stabil.
  • Kamu mau gambar data 20 dimensi ke dalam satu grafik sebar dua sumbu.
  • Kamu mau clustering, tapi jarak antar titik jadi nggak bermakna karena kolomnya kebanyakan.

Yang PCA nggak lakuin: milih kolom mana yang penting. Dia nggak buang kolom, dia nyampur semuanya. Kalau kamu butuh tau kolom mana yang boleh dihapus, itu urusan feature selection, beda barang.

Kenapa data harus distandardisasi dulu sebelum PCA?

Karena PCA ngejar variasi terbesar, dan besarnya variasi ikut satuan kolomnya. Kolom omzet dalam rupiah nilainya jutaan. Kolom margin dalam persen nilainya puluhan. Tanpa disamain dulu skalanya, komponen pertama bakal hampir seluruhnya nyerap kolom omzet, dan kolom lain nggak kebagian peran.

Cara nyamainnya pakai StandardScaler: tiap kolom diubah jadi rata-rata nol dan simpangan baku satu.

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline

pipe = make_pipeline(StandardScaler(), PCA(n_components=4))
skor = pipe.fit_transform(X)

Bungkus dalam pipeline biar penskalaannya ikut kebawa waktu kamu terapin ke data baru. Ini kesalahan yang sering kejadian: scaler dilatih ulang di data uji, lalu hasilnya bergeser.

Gimana langkah lengkap jalanin PCA di Python?

Anggap kamu punya tabel toko berisi satu baris per cabang, dengan kolom omzet bulanan, jumlah transaksi, rata-rata nilai belanja, margin, jumlah SKU, luas toko, jumlah karyawan, dan seterusnya.

  1. Sisihin kolom identitas dan kolom kategori. Nama cabang dan kota jangan ikut masuk. PCA cuma makan angka.
  2. Bereskan nilai kosong. PCA nggak bisa jalan kalau ada NaN. Isi pakai median kolom atau buang barisnya, lalu catat keputusanmu.
  3. Cek pencilan. Satu outlier ekstrem bisa narik komponen pertama ke arahnya sendiri. Lihat sebaran tiap kolom sebelum lanjut.
  4. Standardisasi lalu jalanin PCA.
  5. Lihat explained variance ratio buat nentuin jumlah komponen.
  6. Baca loading buat ngasih nama tiap komponen.

Kode lengkapnya:

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

numerik = toko.select_dtypes('number').dropna()

X = StandardScaler().fit_transform(numerik)

pca = PCA()
skor = pca.fit_transform(X)

rasio = pd.Series(
    pca.explained_variance_ratio_,
    index=[f'PC{i+1}' for i in range(pca.n_components_)]
)
print(rasio.round(3))
print(rasio.cumsum().round(3))

Atribut explained_variance_ratio_ ngasih tau porsi variasi yang ditahan tiap komponen. Jumlah semuanya selalu 1. Penjelasan resmi tiap parameter ada di dokumentasi PCA scikit-learn.

Kalau kamu mau langsung nentuin target variasi, isi n_components pakai desimal:

pca = PCA(n_components=0.90)
skor = pca.fit_transform(X)
print(pca.n_components_)  # jumlah komponen yang kepilih otomatis

Gimana cara baca hasil PCA supaya ada artinya?

Dua hal yang kamu lihat: berapa variasi yang ketahan, dan kolom apa yang nyusun tiap komponen.

Buat yang kedua, lihat matriks loading. Tiap angka nunjukin seberapa besar kolom asli nyumbang ke komponen itu.

loading = pd.DataFrame(
    pca.components_.T,
    index=numerik.columns,
    columns=[f'PC{i+1}' for i in range(pca.n_components_)]
)
print(loading['PC1'].sort_values(ascending=False).head(5))

Kalau lima loading teratas PC1 isinya omzet, jumlah transaksi, jumlah pelanggan, dan jumlah item, komponen itu wajar kamu sebut ukuran toko. Kasih nama begitu di laporan. Sebutan PC1 nggak berarti apa-apa buat orang di luar tim data.

Tanda plus minus pada loading nggak punya arti mutlak. Arah komponen bisa kebalik tanpa ngubah hasilnya. Yang penting pola relatif antar kolom.

Contoh kasus: 62 cabang toko sembako

Aku olah data 62 cabang toko sembako di Jawa Barat dengan 28 kolom numerik per cabang. Isinya angka penjualan, stok, karyawan, dan operasional selama enam bulan.

Hasil PCA setelah standardisasi:

KomponenVariasi ditahanKumulatifLoading terbesarNama yang aku pakai
PC141,3%41,3%omzet, jumlah transaksi, jumlah SKUUkuran toko
PC222,6%63,9%margin, rasio produk non panganBauran produk
PC314,1%78,0%rasio transaksi akhir pekan, jam sibuk sorePola waktu ramai
PC49,2%87,2%frekuensi kehabisan stok, jeda kirimKesehatan pasokan

Empat komponen nyimpen 87,2% variasi dari 28 kolom asli. Sisanya 24 komponen cuma nyumbang 12,8% total.

Yang menarik ada di PC2. Sepuluh cabang dengan skor PC2 tertinggi punya margin rata-rata 19,4%, sementara sepuluh cabang dengan skor terendah cuma 11,8%. Selisih 7,6 poin persen itu nggak kelihatan waktu aku lihat kolom margin sendirian, karena cabang bermargin tinggi tersebar di semua ukuran toko.

Waktu skor PC1 dan PC2 aku gambar jadi grafik sebar, muncul empat kelompok yang cukup jelas. Kelompok itu jadi dasar segmentation cabang yang dipakai buat nentuin bauran stok, gantiin pengelompokan lama yang cuma pakai omzet.

Kapan sebaiknya kamu nggak pakai PCA?

Empat situasi yang bikin PCA malah nyusahin:

Kolomnya cuma sedikit dan udah gampang dibaca. Kalau kamu punya 6 kolom yang semuanya jelas artinya, meringkasnya jadi 3 komponen cuma nambah kebingungan.

Kamu butuh jelasin pengaruh tiap kolom. Komponen adalah campuran belasan kolom. Kalau atasan nanya seberapa besar pengaruh margin, kamu nggak bisa jawab langsung dari model yang dibangun di atas komponen. Buat kasus itu, regression biasa dengan kolom aslinya lebih berguna.

Data kamu mayoritas kategori. PCA ngandelin hubungan linear antar angka. Kolom nol satu hasil one-hot bisa dipaksa masuk, tapi hasilnya susah dimaknai.

Kolom yang penting justru yang variasinya kecil. PCA milih arah berdasarkan besar variasi, bukan berdasarkan relevansi ke target. Kolom yang nilainya hampir seragam tapi menentukan bisa kebuang di komponen belakang.

Kesalahan umum waktu pakai PCA

  • Lupa standardisasi. Ini kesalahan nomor satu. Hasilnya komponen pertama cuma cerminan kolom dengan angka terbesar.
  • Ngepasin scaler dan PCA di seluruh data sebelum dipisah jadi latih dan uji. Informasi dari data uji bocor ke proses pelatihan. Pakai pipeline dan pas-in cuma di data latih.
  • Ambil dua komponen cuma karena bisa digambar. Kalau dua komponen itu cuma nahan 48% variasi, sebutin angkanya di laporan. Grafiknya tetap berguna, tapi orang harus tau setengah ceritanya nggak kelihatan.
  • Nafsirin tanda loading sebagai arah sebab akibat. PCA nggak tau apa-apa soal sebab akibat. Dia cuma muter sumbu.
  • Ngebiarin nilai kosong diisi nol. Nol itu nilai bermakna di kolom omzet. Isi pakai median, atau buang barisnya sekalian. Ini bagian dari urusan data quality yang harus beres duluan.

FAQ

PCA itu apa sih dalam bahasa sederhana?

PCA adalah cara meringkas banyak kolom angka yang saling berkaitan jadi beberapa kolom baru yang lebih sedikit. Kolom baru itu namanya komponen utama, isinya campuran berbobot dari kolom aslimu. Komponen pertama dipilih supaya nangkap variasi paling besar, komponen kedua nangkap sisa variasi terbesar berikutnya, dan seterusnya. Tujuannya bikin data lebih ringkas tanpa buang terlalu banyak informasi.

Kenapa data harus distandardisasi sebelum PCA?

Karena PCA ngejar variasi terbesar, dan variasi itu ikut satuan kolomnya. Kolom omzet dalam rupiah punya angka jutaan, kolom margin dalam persen cuma puluhan. Tanpa standardisasi, komponen pertama bakal hampir seluruhnya nyerap kolom omzet doang dan kolom lain nggak kebagian. StandardScaler dari scikit-learn nyamain skalanya jadi rata-rata nol dan simpangan baku satu.

Berapa komponen yang sebaiknya aku ambil?

Ambil komponen secukupnya sampai explained variance kumulatifnya mencapai target kamu, biasanya antara 80% dan 95%. Cara lain, lihat scree plot dan berhenti di titik tempat garisnya mulai landai. Kalau tujuannya cuma buat divisualisasikan, ambil dua atau tiga aja supaya bisa digambar. Nggak ada angka baku, jadi sebutin alasan pilihanmu waktu lapor.

Apakah PCA cocok buat kolom kategori kayak nama kota?

Nggak cocok langsung. PCA kerjanya di data numerik dan ngandelin hubungan linear antar kolom. Kolom kategori yang di-one-hot jadi nol dan satu bisa dipaksa masuk, tapi hasilnya sering susah dibaca. Buat data kategori murni, cari teknik yang emang dirancang buat itu, misalnya multiple correspondence analysis. Atau ubah kategorinya jadi angka yang bermakna dulu, kayak rata-rata belanja per kota.

Setelah PCA, gimana cara jelasin hasilnya ke tim non teknis?

Jangan sebut nama komponennya. Kasih nama sesuai isi loading terbesarnya, misalnya komponen pertama yang didominasi omzet dan jumlah transaksi bisa kamu sebut ukuran toko. Tunjukkan satu grafik sebar dua komponen pertama dengan titik yang diwarnai per kelompok. Orang bisnis butuh nama dan gambar, bukan tabel loading berisi angka desimal.

Penutup

Tiga hal yang perlu kamu inget.

Standardisasi dulu, selalu. Tanpa itu hasilnya cuma nyeritain kolom dengan angka terbesar.

Baca loading dan kasih nama tiap komponen sebelum dilaporkan. Komponen tanpa nama nggak dipakai siapa-siapa.

Sebutin berapa persen variasi yang ketahan. Angka itu yang bikin orang tau seberapa banyak yang hilang.

Mau bagian visualnya rapi juga? Ada cheat sheet memilih grafik yang bisa nemenin waktu nyusun grafik sebar hasil PCA. Buat kamu yang lagi nyusun prioritas kerja di tim data baru, cek rencana 90 hari pertama sebagai analis data.

Punya tabel dengan lebih dari 15 kolom numerik? Coba jalanin PCA-nya minggu ini, lalu lihat berapa komponen yang cukup buat nahan 85% variasinya.

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

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

Pandas groupby: Agregasi Data ala Pivot di Python (2026)

groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

Pandas to_excel: Ekspor DataFrame ke Excel (2026)

to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

Pandas read_excel: Baca File Excel di Python

pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.

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.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore