Ga naar hoofdinhoud

Variance Inflation Factor (VIF): multicollineariteit aanpakken in regressieanalyse

Leer hoe je multicollineariteit in regressiemodellen opspoort met de variance inflation factor (VIF), een belangrijk diagnostisch hulpmiddel. Deze tutorial legt uit hoe VIF wordt berekend, hoe je de waarden interpreteert en technieken om hoge VIF aan te pakken voor betrouwbaardere regressiemodellen.
Bijgewerkt 2 jun 2026  · 9 min lezen

In regressieanalyse treedt multicollineariteit op wanneer onafhankelijke variabelen met elkaar gecorreleerd zijn. Hierdoor wordt het lastig om de unieke invloed van elke voorspeller op de afhankelijke variabele te bepalen. Het resultaat is opgeblazen standaardfouten, wat op zijn beurt de significantie van coëfficiënten beïnvloedt.

De variance inflation factor (VIF) is een uitstekend hulpmiddel om multicollineariteit op te sporen en biedt inzichten die verder gaan dan simpele paargewijze correlaties. Deze tutorial legt uit hoe VIF werkt, hoe je het berekent en interpreteert, en wat je kunt doen als je hoge VIF-waarden vindt. Deze stappen helpen jou als data professional of data scientist om de stabiliteit van je model te verbeteren.

Hoewel VIF een belangrijk diagnostisch instrument is en het de moeite waard is om te leren, is het slechts een klein onderdeel van de bredere skillset die je opdoet in onze Machine Learning Scientist in Python-carrièreroute. Schrijf je dus vandaag nog in.

Wat is de Variance Inflation Factor (VIF)?

VIF, ontwikkeld door statisticus Cuthbert Daniel, is een veelgebruikt diagnostisch hulpmiddel in regressieanalyse om multicollineariteit op te sporen, wat bekendstaat om het beïnvloeden van de stabiliteit en interpreteerbaarheid van regressiecoëfficiënten. Technischer gezegd kwantificeert VIF in welke mate de variantie van een regressiecoëfficiënt wordt opgeblazen door correlaties tussen voorspellers.

Dit is belangrijk omdat deze correlaties het moeilijk maken om het unieke effect van elke voorspeller op de doelvariabele te isoleren, wat leidt tot minder betrouwbare schattingen. Ook goed om te weten: VIF wordt altijd per voorspeller in een model berekend.

De formule voor de variance inflation factor

De VIF voor een voorspeller X wordt als volgt berekend:

Formule van de variance inflation factor (VIF)

Waarbij:

  • R2 de determinatiecoëfficiënt is die je krijgt wanneer X wordt geregressieerd op alle andere voorspellers.

Stapsgewijze berekening

VIF bepalen bestaat uit drie stappen. Stap één: pas voor elke voorspeller een apart lineair regressiemodel toe tegen alle andere voorspellers. Stap twee: verzamel voor elk model de R2-waarde. Stap drie: bereken de VIF met de bovenstaande formule.

Interpretatie van VIF-waarden

Zo interpreteer je VIF-waarden om het niveau van multicollineariteit te begrijpen:

  • VIF = 1: Dit duidt op geen multicollineariteit. De voorspeller is niet gecorreleerd met andere voorspellers, dus blaast hij de standaardfout niet op en beïnvloedt hij de stabiliteit van het model niet.
  • VIF tussen 1 en 5: Dit suggereert matige multicollineariteit. Er is enige correlatie met andere voorspellers, maar doorgaans niet ernstig. Houd deze voorspellers wel in de gaten, zeker als andere VIF-waarden hoog zijn.
  • VIF > 5: Er is sprake van hoge multicollineariteit. De standaardfout van de voorspeller kan merkbaar opgeblazen zijn, waardoor de coëfficiënt minder betrouwbaar wordt. Overweeg maatregelen zoals het verwijderen of combineren van gecorreleerde voorspellers.
  • VIF > 10: Dit wijst op ernstige multicollineariteit. De standaardfout van de voorspeller is sterk opgeblazen en de coëfficiënt is waarschijnlijk instabiel. Corrigerende acties, zoals het verwijderen van de voorspeller of regularisatietechnieken, zijn meestal nodig.

Als een voorspeller bijvoorbeeld een VIF van 10 heeft, betekent dit dat de variantie van de coëfficiënt 10 keer zo groot is als wanneer er geen multicollineariteit zou zijn. 

Hoe VIF multicollineariteit in regressie verklaart

Multicollineariteit zorgt voor hogere standaardfouten, waardoor het lastiger wordt om de significantie van individuele voorspellers te beoordelen. Dit komt doordat collineaire variabelen vergelijkbare informatie bevatten, waardoor hun specifieke, individuele effecten op de uitkomst moeilijk te scheiden zijn. 

Hoewel multicollineariteit niet per se het voorspellend vermogen van het model schaadt, vermindert het wel de betrouwbaarheid en duidelijkheid van de coëfficiënten. Dat is vooral problematisch wanneer we de individuele impact van elke voorspeller willen begrijpen.

De variance inflation factor (VIF) fungeert als een nauwkeurige diagnostische maat om multicollineariteit te identificeren. In tegenstelling tot algemene observaties over correlatie, isoleert VIF het gecombineerde effect van alle voorspellers op elke variabele en legt het interacties bloot die mogelijk niet zichtbaar zijn met paargewijze correlaties.

Variance Inflation Factor in Python en R

Om dit praktisch te maken, lopen we een voorbeeld door in zowel Python als R met een uniek dataset. We berekenen VIF met geautomatiseerde pakketten en ook met de VIF-formule om gevoel te krijgen voor de berekening. Om goede oefening te hebben, heb ik bewust een dataset gecreëerd waarin we een hoge VIF-waarde voor een van onze variabelen ontdekken, zelfs als er geen zeer hoge paargewijze correlatie is tussen twee variabelen. Het is dus een aansprekend voorbeeld. Laten we beginnen met een overzicht van de dataset die we gebruiken.

Datasetoverzicht:

Deze fictieve dataset vertegenwoordigt enquête-resultaten van een onderzoek bij 1.000 filialen van een retailgigant. Klanten in elk filiaal is gevraagd om verschillende aspecten van hun winkelervaring te beoordelen op een schaal van -5 tot +5, waarbij -5 een zeer negatieve ervaring aangeeft en +5 een zeer positieve. Het gemiddelde van de klantbeoordelingen per filiaal is genomen over vier kernparameters:

  • Ambience: Klantperceptie van de winkelomgeving, zoals netheid, indeling, verlichting en algemene sfeer. 

  • Customer_service: Beoordeling van de service van het winkelpersoneel, inclusief behulpzaamheid, vriendelijkheid en respons op klantbehoeften.

  • Offers: Beoordeling van de promoties, kortingen en deals die in de winkel beschikbaar zijn.

  • Product_range: Beoordeling van de variëteit en kwaliteit van de producten in de winkel.

De doelvariabele, Performance, meet de algehele prestaties van elk filiaal. Dit is echter niet relevant vanuit VIF-perspectief. Je kunt de dataset hier downloaden. 

Variance inflation factor in Python

We beginnen met het berekenen van VIF-waarden met Python-pakketten. De eerste stap is het laden van de dataset en de benodigde libraries. 

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()

De bovenstaande code laadt de data en toont de eerste vijf records. 

Vervolgens kunnen we een correlatiematrix draaien om paargewijze correlatie te controleren.

De onderstaande code selecteert vier kolommen en slaat die op in een nieuwe DataFrame met de naam correl_data. Vervolgens wordt de paargewijze correlatiematrix berekend met de functie .corr(). Het resultaat wordt opgeslagen in het object corr_matrix, een tabel met de correlatiecoëfficiënten tussen elk paar van de geselecteerde kolommen. 

De matrix wordt gevisualiseerd met de functie heatmap() van Seaborn, waarbij elke correlatiecoëfficiënt als een kleurgecodeerde cel wordt weergegeven. Blauw staat voor negatieve correlaties en rood voor positieve correlaties, op basis van de coolwarm-kleurenkaart. 

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()

Output:

Correlatie tussen de variabelen. Afbeelding door de auteur

  Correlatie tussen de variabelen. Afbeelding door de auteur

De grafiek geeft een visuele samenvatting van de relaties tussen variabelen in correl_data. De correlatiewaarden variëren van -1 tot 1: dichter bij 1 betekent een sterke positieve correlatie, dichter bij -1 een sterke negatieve correlatie en rond 0 geen correlatie. Het is duidelijk dat er geen sterke paargewijze correlatie is tussen de variabelen; geen enkele correlatie is zelfs maar groter dan 0,6. 

De volgende stap is het berekenen van de VIF-waarden voor de voorspellers. De onderstaande code berekent de waarden voor elke voorspeller in de dataset om te controleren op multicollineariteit. 

Eerst definiëren we X door de doelkolom Performance te verwijderen en een intercept toe te voegen. Vervolgens maken we een DataFrame, datacamp_vif_data, om de namen van de voorspellers en hun VIF-waarden op te slaan. Met een lus berekenen we daarna de VIF voor elke voorspeller met de variance_inflation_factor()-functie; hogere VIF-waarden wijzen op multicollineariteit. 

# 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)

Output:

Output met de VIF-waarden. Afbeelding door de auteur

Output met de VIF-waarden. Afbeelding door de auteur

Deze output toont de VIF-waarde voor elke voorspeller en geeft het niveau van multicollineariteit in de dataset aan. De rij const staat voor de interceptterm, met een VIF dicht bij 1, wat betekent dat er geen multicollineariteit is. Van de voorspellers heeft Product_range de hoogste VIF (5,94), wat suggereert dat corrigerende maatregelen nodig zijn. Alle andere voorspellers hebben VIF-waarden onder 3, wat duidt op lage multicollineariteit. 

Handmatige aanpak voor VIF-berekening

Een andere aanpak is om de waarden afzonderlijk te berekenen door elke onafhankelijke variabele te regressiëren tegen de andere voorspellers.  

Concreet werkt dit zo: voor elke feature in retail_data wordt die feature ingesteld als afhankelijke variabele (y) en de overige features als onafhankelijke variabelen (X). Vervolgens wordt een lineair regressiemodel gefit om y te voorspellen met X, en de R-kwadraatwaarde van het model wordt gebruikt om de VIF te berekenen met de formule die we in het eerste deel bespraken.

Daarna worden elke feature en de bijbehorende VIF-waarde opgeslagen in een dictionary (vif_manual), die vervolgens wordt omgezet naar een DataFrame (vif_manual_df) voor weergave. 

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)

 Output:

Output met de VIF-waarden. Afbeelding door de auteur

Output met de VIF-waarden. Afbeelding door de auteur

De output toont elke feature met zijn VIF-waarde en helpt om mogelijke multicollineariteitsproblemen te identificeren. Je ziet dat het resultaat hetzelfde is als hierboven; en de interpretatie ook, namelijk dat de variabele Product_range multicollineariteit vertoont.

Variance inflation factor in R

In dit deel herhalen we de oefening uit de Python-sectie, speciaal voor ontwikkelaars die met R werken. We beginnen met het laden van de dataset en de benodigde libraries.

library(tidyverse)
library(car)
library(corrplot)

data <- read.csv('vif_data.csv')
str(data)

Output:

De volgende stap is het berekenen van de paargewijze correlatiematrix en deze te visualiseren met een heatmap. De functies cor() en corrplot helpen ons hierbij.

# 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))

Output:

Correlatie tussen de variabelen. Afbeelding door de auteur

Correlatie tussen de variabelen. Afbeelding door de auteur

Uit de heatmap blijkt duidelijk dat er geen sterke paargewijze correlaties zijn tussen de variabelen; geen van de waarden is groter dan 0,6. We berekenen nu de VIF-waarden om te zien of er iets zorgwekkends is. De volgende regel code doet dat. 

# Fit a regression model
model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data)

# Calculate VIF
vif(model)

Output:

Uit de output blijkt dat onder de voorspellers alleen de variabele Product_range een VIF-waarde boven 5 heeft, wat wijst op hoge multicollineariteit die om corrigerende maatregelen vraagt. 

Handmatige aanpak voor VIF-berekening

Een andere aanpak voor VIF-berekening is om de VIF-waarden per variabele afzonderlijk te berekenen door elke onafhankelijke variabele te regressiëren tegen de andere voorspellers.  

Dit gebeurt in de code hieronder, die de functie sapply() gebruikt over elke voorspeller. Elke voorspeller wordt ingesteld als afhankelijke variabele in een lineair regressiemodel met de andere voorspellers als onafhankelijke variabelen. 

De R-kwadraatwaarde uit elk model wordt vervolgens gebruikt om de VIF te berekenen met de formule. Ten slotte toont vif_values de VIF voor elke voorspeller, wat helpt om multicollineariteit te identificeren.

# 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)

Output:

We krijgen hetzelfde resultaat en het is duidelijk dat de variabele Product_range met een hoge VIF-waarde boven 5 om ingrijpen vraagt. 

VIF vs. correlatiematrix en andere methoden

Ter recapitulatie de populairste methoden om multicollineariteit op te sporen:

  • Hoge VIF-waarden: Een hoge VIF-waarde is een duidelijke indicator van multicollineariteit. Wanneer deze waarden bepaalde drempels overschrijden, duidt dat erop dat een voorspeller sterk samenhangt met andere voorspellers, wat de stabiliteit, betrouwbaarheid en prestaties van het model kan beïnvloeden.
  • Correlatiematrices: Door een correlatiematrix te bekijken, zie je de paargewijze correlaties tussen voorspellers. Hoge paargewijze correlaties suggereren multicollineariteit tussen die specifieke voorspellers. Deze methode detecteert echter alleen directe lineaire relaties tussen twee variabelen en kan multicollineariteit missen die voortkomt uit complexere interacties tussen meerdere variabelen.
  • Veranderingen in coëfficiënten: Als de coëfficiënten van voorspellers sterk veranderen wanneer je andere variabelen toevoegt of verwijdert, kan dit wijzen op multicollineariteit. Zulke schommelingen suggereren dat bepaalde voorspellers informatie delen, waardoor het lastiger wordt om de unieke impact van elke variabele op de uitkomst te bepalen.

Van al deze methoden is VIF bijzonder nuttig omdat het multicollineariteit kan detecteren zelfs wanneer paargewijze correlaties laag zijn, zoals we in ons voorbeeld zagen. Dit maakt VIF een completer hulpmiddel.

Aanvullende ideeën om hoge VIF-waarden aan te pakken

Als VIF-waarden op hoge multicollineariteit wijzen en je het betreffende kenmerk niet zomaar wilt verwijderen, zijn er enkele meer geavanceerde strategieën om multicollineariteit te beperken:

  1. Featureselectie: Verwijder een van de sterk gecorreleerde voorspellers en bereken de VIF opnieuw om te zien of dit het model vereenvoudigt en de stabiliteit verbetert.
  2. Principal Component Analysis (PCA): Gebruik PCA om je voorspellers te combineren tot een kleinere set ongecorreleerde componenten. Dit transformeert de oorspronkelijke variabelen in nieuwe, onafhankelijke en ongecorreleerde variabelen die het grootste deel van de variatie in de data vastleggen, zodat je multicollineariteit aanpakt zonder waardevolle informatie te verliezen.
  3. Regularisatietechnieken: Pas ridge- of lasso-regressie toe, die straftermen aan het model toevoegen. Deze technieken beperken multicollineariteit door de invloed van gecorreleerde variabelen te verkleinen, waardoor het model stabieler en betrouwbaarder wordt.

Conclusie

Weten hoe je VIF gebruikt is cruciaal om multicollineariteit te identificeren en te verhelpen, wat de nauwkeurigheid en duidelijkheid van regressiemodellen verbetert. Het regelmatig controleren van VIF-waarden en het toepassen van corrigerende maatregelen wanneer nodig helpt data professionals en analisten om modellen te bouwen waarop ze kunnen vertrouwen. Zo blijft het effect van elke voorspeller helder, kun je betrouwbaarder conclusies trekken uit het model en betere beslissingen nemen op basis van de resultaten. Volg onze Machine Learning Scientist in Python-carrièreroute om echt te begrijpen hoe je modellen bouwt en gebruikt. Bovendien staat het afronden van het programma goed op je cv.

Bekijk voor verder leren ook deze resources uit de DataCamp-blog en -tutoriasecties:


Vikash Singh's photo
Author
Vikash Singh
LinkedIn

Ervaren professional in data science, kunstmatige intelligentie, analytics en datastrategie.

VIF Veelgestelde vragen

Waarvoor wordt de Variance Inflation Factor (VIF) gebruikt?

VIF is een techniek om multicollineariteit in regressiemodellen op te sporen door te kwantificeren in welke mate de variantie van een voorspeller wordt opgeblazen door correlaties met andere voorspellers.

Wat is multicollineariteit in regressieanalyse?

Multicollineariteit treedt op wanneer twee of meer voorspellers in een regressiemodel sterk gecorreleerd zijn, waardoor het moeilijk is om de individuele impact van elke voorspeller op de doelvariabele te identificeren.

Hoe verschilt VIF van paargewijze correlatie?

Paargewijze correlatie meet de sterkte en richting van de lineaire relatie tussen twee of meer variabelen, terwijl VIF beoordeelt hoe een voorspeller correleert met alle andere onafhankelijke variabelen. Daardoor is VIF een completere maat voor multicollineariteit.

Wat zijn gangbare methoden om hoge VIF-waarden te verlagen?

Veelgebruikte methoden zijn het verwijderen of combineren van collineaire variabelen, het toepassen van dimensionaliteitsreductie zoals PCA, of regularisatie zoals Ridge- of Lasso-regressie.

Hoe vaak moet ik VIF in mijn modellen controleren?

Het is goed om VIF te controleren wanneer je nieuwe variabelen toevoegt aan een regressiemodel, zeker in exploratieve analyses of wanneer modelinterpreteerbaarheid prioriteit heeft.

Onderwerpen

Leer met DataCamp

Cursus

Intermediary Regression in R

4 Hr
34.9K
Leer lineaire en logistische regressie doen met meerdere verklarende variabelen.
Bekijk detailsRight Arrow
Begin met de cursus
Meer zienRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer zienMeer zien