Kursus
Dalam analisis regresi, multikolinearitas terjadi ketika variabel independen saling berkorelasi. Hal ini menyulitkan untuk menentukan pengaruh unik masing-masing prediktor terhadap variabel dependen. Akibatnya, galat baku menjadi membesar, yang pada gilirannya mempengaruhi signifikansi koefisien.
Variance inflation factor (VIF) adalah alat yang sangat berguna untuk mendeteksi multikolinearitas, memberikan wawasan melampaui korelasi berpasangan sederhana. Tutorial ini menjelaskan cara kerja VIF, cara menghitung dan menafsirkannya, serta apa yang harus dilakukan jika Anda menemukan nilai VIF yang tinggi. Langkah-langkah ini akan membantu Anda sebagai profesional data dan data scientist meningkatkan stabilitas model Anda.
Meski VIF adalah alat diagnostik penting dan layak dipelajari, VIF hanya merupakan bagian kecil dari kumpulan keterampilan yang lebih luas yang akan Anda kembangkan dalam Machine Learning Scientist in Python career track kami, jadi daftarlah hari ini.
Apa itu Variance Inflation Factor (VIF)?
Dikembangkan oleh ahli statistik Cuthbert Daniel, VIF adalah alat diagnostik yang banyak digunakan dalam analisis regresi untuk mendeteksi multikolinearitas, yang diketahui memengaruhi stabilitas dan keterjelasan interpretasi koefisien regresi. Secara lebih teknis, VIF bekerja dengan mengkuantifikasi seberapa besar varians suatu koefisien regresi membesar akibat adanya korelasi antar prediktor.
Semua ini penting karena korelasi tersebut menyulitkan untuk mengisolasi efek unik setiap prediktor pada variabel target, sehingga menghasilkan estimasi model yang kurang andal. Perlu juga saya tekankan bahwa, untuk benar-benar menceritakan kisah yang tepat, VIF selalu dihitung untuk setiap prediktor dalam sebuah model.
Rumus variance inflation factor
VIF untuk suatu prediktor X dihitung sebagai:

Dengan:
- R2 adalah koefisien determinasi yang diperoleh ketika
Xdiregresikan terhadap semua prediktor lainnya.
Perhitungan langkah demi langkah
Mencari VIF adalah proses tiga langkah. Langkah pertama adalah memasang model regresi linear terpisah untuk setiap prediktor terhadap semua prediktor lainnya. Langkah kedua adalah memperoleh nilai R2 untuk tiap model. Langkah terakhir adalah menghitung VIF menggunakan rumus di atas.
Interpretasi Nilai VIF
Berikut cara menafsirkan nilai VIF untuk memahami tingkat multikolinearitas:
- VIF = 1: Ini menunjukkan tidak ada multikolinearitas. Prediktor tidak berkorelasi dengan prediktor lain, sehingga tidak membesarkan galat baku atau memengaruhi stabilitas model.
- VIF antara 1 dan 5: Ini menunjukkan multikolinearitas moderat. Ada sebagian korelasi dengan prediktor lain, namun biasanya tidak parah. Namun, tetap pantau prediktor ini untuk melihat apakah multikolinearitas menjadi masalah, terutama jika nilai VIF lainnya tinggi.
- VIF > 5: Terdapat multikolinearitas tinggi. Galat baku prediktor mungkin membesar secara nyata, sehingga koefisiennya menjadi kurang andal. Pertimbangkan langkah untuk mengurangi multikolinearitas, seperti menghapus atau menggabungkan prediktor yang berkorelasi.
- VIF > 10: Ini menandakan multikolinearitas serius. Galat baku prediktor sangat membesar, dan estimasi koefisiennya kemungkinan tidak stabil. Tindakan korektif, seperti menghapus prediktor atau menggunakan teknik regularisasi, biasanya diperlukan.
Misalnya, jika VIF suatu prediktor adalah 10, itu menunjukkan bahwa varians koefisien prediktor tersebut menjadi 10 kali lebih besar dibandingkan jika tidak ada multikolinearitas.
Bagaimana VIF Menjelaskan Multikolinearitas dalam Regresi
Multikolinearitas menyebabkan galat baku meningkat, sehingga makin sulit menilai signifikansi masing-masing prediktor. Ini terjadi karena variabel yang kolinear membawa informasi serupa, sehingga sulit memisahkan efek spesifik masing-masing variabel terhadap variabel keluaran.
Walaupun multikolinearitas tidak selalu merusak kemampuan prediksi model, hal itu memang mengurangi keandalan dan kejelasan koefisien. Ini sangat bermasalah ketika kita ingin memahami dampak individual tiap prediktor.
Variance inflation factor (VIF) berfungsi sebagai metrik diagnostik yang tepat untuk mengidentifikasi multikolinearitas. Berbeda dengan pengamatan umum tentang korelasi, VIF mengisolasi pengaruh gabungan semua prediktor pada tiap variabel, menyoroti interaksi yang mungkin tidak terlihat dari korelasi berpasangan.
Variance Inflation Factor dalam Python dan R
Agar lebih aplikatif, mari kita melalui contoh baik di Python maupun R menggunakan sebuah dataset unik. Kita akan menghitung VIF menggunakan paket otomatis dan juga dengan rumus VIF untuk membangun intuisi. Demi praktik yang baik, saya sengaja membuat dataset di mana kita akan menemukan nilai VIF tinggi untuk salah satu variabel meski tidak ada korelasi berpasangan yang sangat tinggi antara dua variabel mana pun — jadi menurut saya ini contoh yang menarik. Mari mulai dengan ikhtisar dataset yang akan kita gunakan.
Gambaran Dataset:
Dataset fiktif ini merepresentasikan hasil survei dari studi yang dilakukan di 1.000 toko milik sebuah raksasa ritel. Pelanggan di setiap toko diminta menilai berbagai aspek pengalaman berbelanja mereka pada skala dari -5 hingga +5, di mana -5 menunjukkan pengalaman yang sangat negatif, dan +5 menunjukkan pengalaman yang sangat positif. Rata-rata penilaian pelanggan di setiap toko diambil pada empat parameter kunci:
-
Ambience: Persepsi pelanggan terhadap lingkungan toko, seperti kebersihan, tata letak, pencahayaan, dan suasana keseluruhan. -
Customer_service: Penilaian terhadap layanan yang diberikan staf toko, termasuk sikap membantu, keramahan, dan daya tanggap terhadap kebutuhan pelanggan. -
Offers: Penilaian terhadap penawaran promosi, diskon, dan deal yang tersedia di toko. -
Product_range: Evaluasi terhadap variasi dan kualitas produk yang tersedia di toko.
Variabel target, Performance, mengukur kinerja keseluruhan tiap toko. Namun, variabel ini tidak relevan dari perspektif VIF. Anda dapat mengunduh dataset tersebut di sini.
Variance inflation factor di Python
Kita akan mulai dengan menghitung nilai VIF menggunakan paket Python. Langkah pertama adalah memuat dataset dan pustaka yang diperlukan.
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
datacamp_retail_data = pd.read_csv(' vif_data.csv')
datacamp_retail_data.head()
Kode di atas akan memuat data dan menampilkan lima catatan pertama.

Langkah berikutnya, kita dapat menjalankan matriks korelasi untuk memeriksa korelasi berpasangan.
Kode di bawah ini memilih empat kolom dan menyimpannya dalam DataFrame baru bernama correl_data. Lalu menghitung matriks korelasi berpasangan menggunakan fungsi .corr(). Hasilnya disimpan dalam objek corr_matrix, yang merupakan tabel yang menunjukkan koefisien korelasi antara setiap pasangan kolom yang dipilih.
Matriks tersebut kemudian divisualisasikan menggunakan fungsi heatmap() dari Seaborn, menampilkan setiap koefisien korelasi sebagai sel berwarna, di mana biru merepresentasikan korelasi negatif dan merah merepresentasikan korelasi positif, berdasarkan peta warna coolwarm.
correl_data = datacamp_retail_data[['Ambience', 'Customer_service', 'Offers', 'Product_range']]
# Compute the pairwise correlation matrix
corr_matrix = correl_data.corr()
# Visualize the correlation matrix
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Pairwise Correlation Matrix')
plt.show()
Keluaran:

Korelasi antar variabel. Gambar oleh Penulis
Plot memberikan ringkasan visual hubungan antar variabel dalam correl_data. Nilai korelasi berkisar dari -1 hingga 1, di mana nilai mendekati 1 menunjukkan korelasi positif kuat, nilai mendekati -1 menunjukkan korelasi negatif kuat, dan nilai sekitar 0 menunjukkan tidak ada korelasi. Terlihat jelas tidak ada korelasi berpasangan yang kuat di antara variabel-variabel tersebut, dengan tidak ada nilai korelasi yang bahkan melebihi 0,6.
Langkah selanjutnya adalah menghitung nilai VIF untuk variabel prediktor. Kode di bawah ini menghitung nilai untuk setiap variabel prediktor dalam dataset untuk memeriksa multikolinearitas.
Pertama, didefinisikan X dengan menghapus kolom target Performance dan menambahkan intersep. Lalu dibuat DataFrame, datacamp_vif_data, untuk menyimpan nama prediktor dan nilai VIF-nya. Menggunakan loop, kemudian dihitung VIF untuk setiap prediktor dengan fungsi variance_inflation_factor(), di mana VIF yang lebih tinggi menunjukkan adanya multikolinearitas.
# Define the predictor variables
X = datacamp_retail_data.drop(columns=['Performance'])
# Add a constant to the model (intercept)
X = add_constant(X)
# Calculate VIF for each feature
datacamp_vif_data = pd.DataFrame()
datacamp_vif_data['Feature'] = X.columns
datacamp_vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(datacamp_vif_data)
Keluaran:

Keluaran yang menampilkan nilai VIF. Gambar oleh Penulis
Keluaran ini menunjukkan nilai VIF untuk setiap variabel prediktor, yang mengindikasikan tingkat multikolinearitas dalam dataset. Baris const merepresentasikan suku intersep, dengan VIF mendekati 1, artinya tidak ada multikolinearitas. Di antara variabel prediktor, Product_range memiliki VIF tertinggi (5,94), yang menunjukkan perlu adanya tindakan korektif. Semua prediktor lainnya memiliki nilai VIF di bawah 3, menandakan multikolinearitas rendah.
Pendekatan manual untuk perhitungan VIF
Pendekatan lain adalah menghitung nilai secara terpisah dengan meregresikan setiap variabel independen terhadap variabel prediktor lainnya.
Cara kerjanya, untuk setiap fitur dalam retail_data, fitur tersebut ditetapkan sebagai variabel dependen (y) dan fitur yang tersisa sebagai variabel independen (X). Model regresi linear kemudian dipasang untuk memprediksi y menggunakan X, dan nilai R-squared model digunakan untuk menghitung VIF menggunakan rumus yang kita bahas di bagian awal.
Selanjutnya, setiap fitur dan nilai VIF terkait disimpan dalam dictionary (vif_manual), yang kemudian diubah menjadi DataFrame (vif_manual_df) untuk ditampilkan.
datacamp_retail_data = retail_data.drop(columns=['Performance'])
# Manual VIF Calculation
vif_manual = {}
for feature in retail_data.columns:
# Define the target variable (current feature) and predictors (all other features)
y = datacamp_retail_data[feature]
X = datacamp_retail_data.drop(columns=[feature])
# Fit the linear regression model
model = LinearRegression().fit(X, y)
# Calculate R-squared
r_squared = model.score(X, y)
# Calculate VIF
vif = 1 / (1 - r_squared)
vif_manual[feature] = vif
# Convert the dictionary to a DataFrame for better display
vif_manual_df = pd.DataFrame(list(vif_manual.items()), columns=['Feature', 'VIF'])
print(vif_manual_df)
Keluaran:

Keluaran yang menampilkan nilai VIF. Gambar oleh Penulis
Keluaran menunjukkan setiap fitur beserta nilai VIF-nya, sehingga membantu mengidentifikasi potensi masalah multikolinearitas. Anda dapat melihat hasilnya jelas sama seperti yang kita peroleh di atas; demikian pula interpretasinya, yakni variabel Product_range menunjukkan multikolinearitas.
Variance inflation factor di R
Pada bagian ini, kita akan mengulangi latihan variance inflation factor di bagian Python di atas, khususnya bagi pengembang yang bekerja dengan bahasa pemrograman R. Kita mulai dengan memuat dataset dan pustaka yang diperlukan.
library(tidyverse)
library(car)
library(corrplot)
data <- read.csv('vif_data.csv')
str(data)
Keluaran:

Langkah berikutnya adalah menghitung matriks korelasi berpasangan, dan memvisualisasikannya dengan heatmap. Fungsi cor() dan corrplot membantu kita menyelesaikan tugas ini.
# Remove the target column
predictors_data <- data[, !(names(data) %in% "Performance")]
# Calculate the correlation matrix
correlation_matrix <- cor(predictors_data)
# Plot the correlation heatmap
# Load necessary libraries
library(ggplot2)
library(reshape2)
melted_corr_matrix <- melt(correlation_matrix)
# Plot the heatmap with ggplot2
ggplot(data = melted_corr_matrix, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white") +
scale_fill_gradient2(low = "blue", high = "red", mid = "white",
midpoint = 0, limit = c(-1, 1), space = "Lab",
name="Correlation") +
theme_minimal() + # Minimal theme for a clean look
theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
labs(x = "", y = "") + # Remove axis labels
geom_text(aes(Var1, Var2, label = round(value, 2)), color = "black", size = 4) +
theme(axis.text=element_text(size=15))
Keluaran:

Korelasi antar variabel. Gambar oleh Penulis
Terlihat dari heatmap korelasi bahwa tidak ada korelasi berpasangan yang kuat di antara variabel-variabel tersebut, dengan tidak ada nilai korelasi yang bahkan melebihi 0,6. Kini, kita akan menghitung nilai VIF dan melihat apakah ada hal yang mengkhawatirkan. Baris kode berikut melakukan tugas tersebut.
# Fit a regression model
model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data)
# Calculate VIF
vif(model)
Keluaran:

Dari keluaran, kita dapat melihat bahwa di antara variabel prediktor, hanya variabel Product_range yang memiliki nilai VIF lebih besar dari 5, yang menunjukkan multikolinearitas tinggi yang memerlukan tindakan korektif.
Pendekatan Manual untuk Perhitungan VIF
Pendekatan lain untuk perhitungan VIF adalah menghitung nilai VIF untuk setiap variabel secara terpisah dengan meregresikan setiap variabel independen terhadap variabel prediktor lainnya.
Hal ini dilakukan pada kode di bawah, yang menggunakan fungsi sapply() pada setiap prediktor, di mana tiap prediktor ditetapkan sebagai variabel dependen dalam model regresi linear dengan prediktor lainnya sebagai variabel independen.
Nilai R-squared dari setiap model kemudian digunakan untuk menghitung nilai VIF dengan rumusnya. Terakhir, hasilnya, vif_values, menampilkan VIF untuk setiap prediktor, membantu mengidentifikasi masalah multikolinearitas.
# VIF calculation for each predictor manually
predictors <- c("Ambience", "Customer_service", "Offers", "Product_range")
vif_values <- sapply(predictors, function(pred) {
formula <- as.formula(paste(pred, "~ ."))
model <- lm(formula, data = data[, predictors])
1 / (1 - summary(model)$r.squared)
})
print(vif_values)
Keluaran:

Kita memperoleh hasil yang sama dan terlihat jelas bahwa variabel Product_range dengan nilai VIF tinggi di atas 5 memerlukan intervensi.
VIF vs. Matriks Korelasi dan Metode Lain
Sebagai rekap, berikut metode populer untuk mendeteksi multikolinearitas:
- Nilai VIF Tinggi: Nilai VIF yang tinggi merupakan indikator jelas adanya multikolinearitas. Ketika nilai-nilai ini melebihi ambang tertentu, itu menunjukkan bahwa sebuah prediktor sangat terkait dengan prediktor lain, yang dapat memengaruhi stabilitas, keandalan, dan kinerja model.
- Matriks Korelasi: Dengan memeriksa matriks korelasi, Anda dapat melihat korelasi berpasangan antar prediktor. Korelasi berpasangan yang tinggi menyiratkan multikolinearitas antara prediktor tertentu. Namun, metode ini hanya mendeteksi hubungan linear langsung antara dua variabel dan bisa melewatkan multikolinearitas yang melibatkan interaksi lebih kompleks di antara beberapa variabel.
- Perubahan Koefisien: Jika koefisien prediktor berubah secara signifikan saat Anda menambah atau menghapus variabel lain dari model, ini bisa menjadi tanda multikolinearitas. Fluktuasi tersebut menunjukkan bahwa prediktor tertentu mungkin berbagi informasi yang sama, sehingga lebih sulit mengidentifikasi dampak unik tiap variabel terhadap keluaran.
Di antara semua metode ini, VIF sangat berguna karena dapat mendeteksi multikolinearitas bahkan ketika korelasi berpasangan rendah, seperti yang kita lihat pada contoh kita sendiri. Ini membuat VIF menjadi alat yang lebih komprehensif.
Ide Tambahan untuk Menangani Nilai VIF Tinggi
Jika nilai VIF menunjukkan multikolinearitas tinggi, dan Anda tidak serta-merta ingin menghapus variabelnya, ada beberapa strategi lanjutan untuk mengurangi multikolinearitas:
- Seleksi Fitur: Hapus salah satu prediktor yang sangat berkorelasi, lalu hitung ulang VIF untuk melihat apakah hal tersebut membantu menyederhanakan model dan meningkatkan stabilitas.
- Principal Component Analysis (PCA): Gunakan PCA untuk menggabungkan prediktor Anda menjadi set komponen yang lebih kecil dan tidak berkorelasi. Ini mentransformasikan variabel asli menjadi variabel baru yang independen dan tidak berkorelasi yang menangkap sebagian besar variasi data, membantu mengatasi multikolinearitas tanpa kehilangan informasi berharga.
- Teknik Regularisasi: Terapkan ridge atau lasso regression, yang menambahkan suku penalti pada model. Teknik-teknik ini membantu mengurangi multikolinearitas dengan mengecilkan pengaruh variabel yang berkorelasi, sehingga model menjadi lebih stabil dan andal.
Kesimpulan
Mengetahui cara menggunakan VIF penting untuk mengidentifikasi dan memperbaiki multikolinearitas, yang meningkatkan akurasi dan kejelasan model regresi. Secara rutin memeriksa nilai VIF dan menerapkan langkah korektif saat diperlukan membantu para profesional data dan analis membangun model yang dapat mereka percayai. Pendekatan ini memastikan bahwa efek masing-masing prediktor jelas, sehingga lebih mudah menarik kesimpulan yang andal dari model dan membuat keputusan yang lebih baik berdasarkan hasilnya. Ikuti Machine Learning Scientist in Python career track kami untuk benar-benar memahami cara membangun model dan menggunakannya. Plus, penyelesaian program ini terlihat bagus di resume.
Selain itu, untuk pembelajaran lebih lanjut, pertimbangkan untuk menjelajahi sumber daya berikut dari bagian blog dan tutorial DataCamp:
- Essentials of Linear Regression in Python: Pelajari apa yang membentuk masalah regresi dan bagaimana algoritme regresi linear bekerja di Python.
- How to Do Linear Regression in R: Pelajari regresi linear, model statistik yang menganalisis hubungan antar variabel menggunakan R.
- QR Decomposition in Machine Learning: A Detailed Guide: Pelajari tentang dekomposisi QR, teknik faktorisasi matriks yang menguraikan matriks A menjadi hasil kali matriks ortogonal Q dan matriks segitiga atas R.
- Lasso and Ridge Regression in Python Tutorial: Pelajari teknik regresi lasso dan ridge. Bandingkan dan analisis metodenya secara mendalam.
Profesional berpengalaman di bidang ilmu data, kecerdasan buatan, analitik, dan strategi data.
FAQ VIF
Untuk apa Variance Inflation Factor (VIF) digunakan?
VIF adalah teknik yang digunakan untuk mendeteksi multikolinearitas dalam model regresi dengan mengkuantifikasi seberapa besar varians suatu prediktor membesar akibat korelasi dengan prediktor lainnya.
Apa itu multikolinearitas dalam analisis regresi?
Multikolinearitas terjadi ketika dua atau lebih variabel prediktor dalam model regresi sangat berkorelasi, yang dapat menyulitkan untuk mengidentifikasi dampak individual masing-masing prediktor terhadap variabel target.
Apa bedanya VIF dengan korelasi berpasangan?
Korelasi berpasangan mengukur kekuatan dan arah hubungan linear antara dua atau lebih variabel, sedangkan VIF menilai bagaimana suatu prediktor berkorelasi dengan semua variabel independen lainnya, sehingga menjadi ukuran multikolinearitas yang lebih komprehensif.
Apa metode umum untuk mengurangi nilai VIF yang tinggi?
Metode umum mencakup menghapus atau menggabungkan variabel yang kolinear, menggunakan teknik reduksi dimensi seperti PCA, atau menerapkan metode regularisasi seperti regresi Ridge atau Lasso.
Seberapa sering saya harus memeriksa VIF dalam model saya?
Sebaiknya memeriksa VIF setiap kali menambahkan variabel baru ke model regresi, terutama pada analisis eksploratori atau ketika keterjelasan interpretasi model menjadi prioritas.

