Ga naar hoofdinhoud

Markovketen-analyse in R

In deze tutorial leer je wat een Markovketen is en gebruik je die om gegevens over verkooptempo in R te analyseren.
Bijgewerkt 2 okt 2026  · 8 min lezen

Verken met AI

ChatGPTClaudePerplexity

Wat is een Markovketen?

Een Markovketen is een wiskundig systeem dat overgaat van de ene toestand naar de andere volgens een vastgelegde set probabilistische regels. Markovketens zijn stochastische processen, maar onderscheiden zich doordat ze geen "geheugen" hebben. Met andere woorden: de kans op de volgende toestand hangt alleen af van de huidige toestand van het systeem en niet van eerdere toestanden. Dit heet de Markov-eigenschap (hieronder weergegeven):

Markov-eigenschap

Om een werkend Markovketenmodel te hebben, is het essentieel om een transitatiematrix Pt te definiëren. Een transitatiematrix bevat informatie over de kans op overgang tussen de verschillende toestanden in het systeem. Voor een geldige transitatiematrix moet elke rij een waarschijnlijkheidsvector zijn en moet de som van alle elementen 1 zijn.

Transitatiematrices hebben de eigenschap dat het product van opeenvolgende matrices de overgangskansen over een tijdsinterval kan beschrijven. Je kunt dus modelleren hoe waarschijnlijk het is om na k stappen in een bepaalde toestand te zijn door het volgende te berekenen:

berekening

Deze tutorial behandelt ook absorberende Markovketens. Deze treden op wanneer er ten minste één toestand is waarvoor, zodra die is bereikt, de kans om erin te blijven 1 is (je kunt die niet verlaten).

Wat zijn absorberende Markovketens?

Een absorberende Markovketen is een Markovketen waarbij het onmogelijk is om sommige toestanden te verlaten zodra je ze bent binnengegaan. Dit is echter slechts één van de voorwaarden om een absorberende Markovketen te zijn. Alle andere transiënte toestanden moeten de absorberende toestand met kans 1 kunnen bereiken.

Absorberende Markovketens hebben specifieke, unieke eigenschappen die ze onderscheiden van normale, tijdshomogene Markovketens. Een van deze eigenschappen is de manier waarop de transitatiematrix kan worden geschreven. Voor een keten met t transiënte toestanden en r absorberende toestanden kan de transitatiematrix P in canonieke vorm als volgt worden geschreven:

transitatiematrix P

Waarbij Q een t x t-matrix is, R een t x r-matrix, 0 een r x t-nulmatrix en Ir een r x r-identiteitsmatrix. Met name de ontbinding van de transitatiematrix in de fundamentele matrix maakt bepaalde berekeningen mogelijk, zoals het verwachte aantal stappen tot absorptie vanuit elke toestand. De fundamentele matrix N wordt als volgt berekend:

fundamentele matrix N

Waarbij It een t x t-identiteitsmatrix is

Het verwachte aantal stappen is gebaseerd op het principe van lineariteit van de verwachting en wordt als volgt berekend:

verwacht aantal stappen

Waarbij 1 een kolomvector is met dezelfde lengte als het aantal transiënte toestanden en met alle entries gelijk aan 1

Verder kunnen we de kans berekenen om door een specifieke absorberende toestand geabsorbeerd te worden wanneer we starten vanuit een willekeurige transiënte toestand. Deze kans wordt als volgt berekend:

kans

Analyse van verkooptempo

Markovketens worden veel gebruikt in uiteenlopende vakgebieden zoals financiën, speltheorie en genetica. De insteek van deze tutorial is echter hoe je ze kunt gebruiken om de lengte van het verkoopproces van een bedrijf te modelleren, aangezien dit een Markovproces kan zijn. Dit is ook gevalideerd door te testen of reeksen die de stappen beschrijven die een deal doorliep voordat deze succesvol werd gesloten, voldeden aan de Markov-eigenschap.

Bij deze analyse namen we aan dat de kansen waarmee een deal in ons verkoopproces doorstroomt, van maand tot maand constant waren voor een bepaalde sector, zodat we tijdshomogene Markovketens konden gebruiken. Dat is een Markovketen waarbij de overgangskansen tussen toestanden constant blijven naarmate de tijd verstrijkt (het aantal stappen k toeneemt).

De kansen die werden berekend, waren als volgt:

  • De kans dat een deal in een bepaalde maand van de fasen van onze salesrepresentatives naar de fasen van onze account executives gaat, versus de kans om erin te blijven.
  • De kans dat een deal in een bepaalde maand van de account-executivefasen naar een succesvol gesloten deal gaat, versus de kans om erin te blijven.
  • De kans om in een succesvol gesloten deal te blijven, die 1 was. Daardoor is "closed" een absorberende toestand.

Deze analyse is uitgevoerd met de programmeertaal R. R heeft een handige package genaamd Markov Chain die een groot aantal typen Markovketens aankan.

Om te beginnen hebben we eerst gecontroleerd of onze verkoopreeksen de Markov-eigenschap volgden. Daartoe bevat de package Markov Chain een handige functie genaamd verifyMarkovProperty() die test of een gegeven reeks gebeurtenissen de Markov-eigenschap volgt door Chi-kwadraattoetsen uit te voeren op een reeks kruistabellen die uit de gebeurtenissenreeks zijn afgeleid. Grote p-waarden duiden erop dat de nulhypothese dat een reeks de Markov-eigenschap volgt, niet verworpen moet worden. Hieronder staat een voorbeeld van een verkoopreeks waarin te zien is waar een deal zich elke maand bevond, vanaf de eerste meeting tot aan het sluiten:

library(markovchain)
library(dplyr)
# SDR Funnel is our sales representative stages, AE Funnel is our account executive stages, and CW is a successfully closed deal
seq <- c('SDR Funnel','SDR Funnel','AE Funnel','AE Funnel','AE Funnel','AE Funnel','AE Funnel','AE Funnel','CW')
verifyMarkovProperty(seq)
## Testing markovianity property on given data sequence
## Chi - square statistic is: 0.5733333  degrees of freedom are: 27  and corresponding p-value is: 1

Aangezien de getoonde p-waarde boven 0,05 ligt, verwerpen we de nulhypothese dat de reeks de Markov-eigenschap volgt niet.

Nadat dat was geverifieerd, hebben we de structuur van de Markovketen gevisualiseerd samen met de overgangskansen die uit onze data waren afgeleid. Deze code maakt een Markovketenobject aan door de transitatiematrix en de namen van de toestanden te definiëren. Ook worden de Markovketen en de overgangskansen weergegeven.

source('TransProb.R')
source('MatDataBase.R')
source('GatherTransMat.R')
transElec <- GatherTransMat('Manufacturing','Between 100M and 500M', 'Between 500 and 1k')
print(transElec)

markov2 <- new('markovchain',
              transitionMatrix = transElec, # These are the transition probabilities of a random industry
              states = c('SDR','AE','CW'))

layout <- matrix(c(0,0,0,1,1,0), ncol = 2, byrow = TRUE)
plot(markov2, node.size = 10, layout = layout)
##           [,1]      [,2]      [,3]
## [1,] 0.5573215 0.4426785 0.0000000
## [2,] 0.0000000 0.8678118 0.1321882
## [3,] 0.0000000 0.0000000 1.0000000
markovketen

Omdat we een absorberende Markovketen hebben, berekenen we de verwachte tijd tot absorptie. De eerste entry van de vector geeft het verwachte aantal stappen tot sluiten vanuit de SDR-funnel; de tweede entry geeft het verwachte aantal als we vanuit de AE-funnel starten.

# Extract Q from the transition matrix
Q <- transElec[1:2,1:2]
# Generate It
It <- diag(2)
#Calculate fundamental matrix
N <- solve(It-Q)
#Generate column vector of 1s
one <- t(t(c(1,1)))

# Calculate the expected steps by matrix multiplication
expected <- N%*%one
print(expected)
##          [,1]
## [1,] 9.823945
## [2,] 7.564969

We kunnen echter ook visualiseren hoe de kansen veranderen naarmate het aantal stappen toeneemt, om het verwachte aantal stappen te contrasteren. Daarom hebben we ook de kansen bekeken dat een deal zich in een van de drie fasen bevindt voor 24 stappen.

library(ggplot2)

initState <- c(1,0,0) # The initial state will be SDR Funnel (mimicking setting an initial discovery appointment)

# Initiate probability vectors
SDRProb <- c()
AEProb <- c()
CW <- c()

# Calculate probabilities for 24 steps.
for(k in 1:24){
  nsteps <- initState*markov2^k
  SDRProb[k] <- nsteps[1,1]
  AEProb[k] <- nsteps[1,2]
  CW[k] <- nsteps[1,3]
}

# Make dataframes and merge them
SDRProb <- as.data.frame(SDRProb)
SDRProb$Group <- 'SDR'
SDRProb$Iter <- 1:24
names(SDRProb)[1] <- 'Value'

AEProb <- as.data.frame(AEProb)
AEProb$Group <- 'AE'
AEProb$Iter <- 1:24
names(AEProb)[1] <- 'Value'

CW <- as.data.frame(CW)
CW$Group <- 'CW'
CW$Iter <- 1:24
names(CW)[1] <- 'Value'

steps <- rbind(SDRProb,AEProb,CW)

# Plot the probabilities using ggplot
ggplot(steps, aes(x = Iter, y = Value, col = Group))+
  geom_line() +
  xlab('Chain Step') +
  ylab('Probability') +
  ggtitle('24 Step Chain Probability Prediction')+
  theme(plot.title = element_text(hjust = 0.5))
grafiek

Als we beide resultaten combineren, lijkt het duidelijk dat de CW-toestand na 6–9 stappen de meest waarschijnlijke toestand wordt. Aangezien de overgangskansen maandelijkse overgangskansen zijn, kun je stellen dat het typische verkooptempo vanaf het inplannen van de eerste afspraak tot het succesvol sluiten van een deal voor die sector tussen de 6 en 9 maanden ligt. Dat is een vrij lang verkoopproces.

Conclusie

Het doel van deze analyse was om te laten zien hoe de basisprincipes van Markovketens en absorberende Markovketens kunnen worden gebruikt om een voor het bedrijfsleven relevante vraag te beantwoorden. In dit geval waren de resultaten van de Markovketen behoorlijk accuraat ondanks de tijdshomogene aannames, aangezien verder empirisch onderzoek uitwees dat het gemiddelde verkooptempo voor de in deze analyse gebruikte sector 208 dagen bedroeg, bijna 7 maanden. Hopelijk nodigt dit voorbeeld je uit om Markovketens verder zelf te verkennen en ze toe te passen op jouw businessvragen.

Als je meer wilt leren over R, volg dan de cursus Intermediate R van DataCamp.

Bekijk ook onze Markovketens in Python: beginnerstutorial.

Onderwerpen
R
Data Science

R-cursussen

Cursus

Introductie tot R

4 uur
3.1M
Beheers de basis van data-analyse in R, inclusief vectors, lists en data frames, en oefen met echte datasets.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight 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 BekijkenMeer Bekijken