Vai al contenuto principale

Analisi delle catene di Markov in R

In questo tutorial imparerai cos'è una catena di Markov e la userai per analizzare i dati sulla velocità di vendita in R.
Aggiornato 29 set 2026  · 8 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Che cos'è una catena di Markov?

Una catena di Markov è un sistema matematico che subisce transizioni da uno stato a un altro secondo un insieme di regole probabilistiche. Le catene di Markov sono processi stocastici, ma si distinguono per l'assenza di "memoria". Cioè, la probabilità del prossimo stato del sistema dipende solo dallo stato attuale e non da stati precedenti. Questa è chiamata proprietà di Markov (vedi sotto):

Proprietà di Markov

Per avere un modello di catena di Markov funzionante, è essenziale definire una matrice di transizione Pt. Una matrice di transizione contiene le informazioni sulla probabilità di transizione tra i diversi stati del sistema. Affinché una matrice di transizione sia valida, ogni riga deve essere un vettore di probabilità e la somma di tutti i suoi termini deve essere 1.

Le matrici di transizione hanno la proprietà che il prodotto di matrici successive può descrivere le probabilità di transizione lungo un intervallo temporale. Pertanto, è possibile modellare quanto è probabile trovarsi in un certo stato dopo k passi calcolando quanto segue:

calcolo

Questo tutorial tratterà anche le catene di Markov assorbenti. Queste catene si verificano quando esiste almeno uno stato tale che, una volta raggiunto, la probabilità di rimanervi è 1 (non puoi uscirne).

Cosa sono le catene di Markov assorbenti?

Una catena di Markov assorbente è una catena di Markov in cui è impossibile lasciare alcuni stati una volta entrati. Tuttavia, questo è solo uno dei prerequisiti affinché una catena di Markov sia assorbente. Perché sia una catena di Markov assorbente, tutti gli altri stati transitori devono poter raggiungere lo stato assorbente con probabilità 1.

Le catene di Markov assorbenti hanno proprietà specifiche che le differenziano dalle normali catene di Markov omogenee nel tempo. Una di queste proprietà riguarda il modo in cui si può scrivere la matrice di transizione. Con una catena con t stati transitori e r stati assorbenti, la matrice di transizione P può essere scritta in forma canonica come segue:

matrice di transizione P

Dove Q è una matrice t x t, R è una matrice t x r, 0 è una matrice nulla r x t e Ir è una matrice identità r x r. In particolare, la scomposizione della matrice di transizione nella matrice fondamentale consente alcuni calcoli come il numero atteso di passi fino all'assorbimento da ciascuno stato. La matrice fondamentale N si calcola come segue:

matrice fondamentale N

Dove It è una matrice identità t x t

Il numero atteso di passi si basa sul concetto di linearità dell'aspettativa e si calcola come segue:

numero atteso di passi

Dove 1 è un vettore colonna della stessa lunghezza del numero di stati transitori con tutte le voci pari a 1

Possiamo inoltre calcolare la probabilità di essere assorbiti da uno specifico stato assorbente partendo da un qualsiasi stato transitorio dato. Questa probabilità si calcola come segue:

probabilità

Analisi della velocità di vendita

Le catene di Markov sono ampiamente utilizzate in molti campi come finanza, teoria dei giochi e genetica. Tuttavia, la base di questo tutorial è come usarle per modellare la durata del processo di vendita di un'azienda, poiché questo potrebbe essere un processo di Markov. Questo è stato infatti validato testando se le sequenze che descrivono i passaggi attraversati da un accordo prima di chiudersi con successo rispettavano la proprietà di Markov.

Questa analisi ha assunto che le probabilità che un certo accordo avanzasse nel nostro processo di vendita fossero costanti di mese in mese per una determinata industria, così da poter usare catene di Markov omogenee nel tempo. Cioè una catena di Markov in cui le probabilità di transizione tra stati restano costanti col passare del tempo (all'aumentare del numero di passi k).

Le probabilità calcolate sono state le seguenti:

  • La probabilità che un accordo passi dalle fasi del nostro sales representative alle fasi dell'account executive vs. rimanervi per un dato mese.
  • La probabilità che un accordo passi dalle fasi dell'account executive a una chiusura positiva vs. rimanervi per un dato mese.
  • La probabilità di rimanere in una chiusura positiva, pari a 1. Pertanto, lo stato di chiusura è assorbente.

Questa analisi è stata condotta utilizzando il linguaggio di programmazione R. R dispone di un comodo pacchetto chiamato Markov Chain che può gestire un'ampia gamma di tipi di catene di Markov.

Per cominciare, la prima cosa che abbiamo fatto è stata verificare se le nostre sequenze di vendita seguissero la proprietà di Markov. A tal fine, il pacchetto Markov Chain include una comoda funzione chiamata verifyMarkovProperty() che verifica se una determinata sequenza di eventi segue la proprietà di Markov eseguendo test Chi-quadrato su una serie di tabelle di contingenza derivate dalla sequenza di eventi. Valori di p elevati indicano che l'ipotesi nulla secondo cui una sequenza segue la proprietà di Markov non deve essere respinta. Di seguito è riportata un'esempio di sequenza di vendita che mostra in quale fase si trovava un accordo ogni mese, dal primo incontro fino alla chiusura:

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

Poiché il p-value mostrato è superiore a 0,05, non respingiamo l'ipotesi nulla che la sequenza segua la proprietà di Markov.

Una volta verificato ciò, abbiamo tracciato la struttura della catena di Markov insieme alle probabilità di transizione derivate dai nostri dati. Questo codice istanzia un oggetto catena di Markov definendo la matrice di transizione e i nomi degli stati. Mostra anche la catena di Markov e le probabilità di transizione.

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
catena di Markov

Poiché abbiamo una catena di Markov assorbente, calcoliamo il tempo atteso fino all'assorbimento. La prima voce del vettore restituirà il numero atteso di passi fino alla chiusura partendo dall'imbuto SDR, mentre la seconda voce restituirà il numero atteso se partiamo dall'imbuto AE.

# 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

Tuttavia, possiamo anche visualizzare come cambiano le probabilità all'aumentare del numero di passi, per confrontarle con il numero atteso di passi. Abbiamo quindi verificato le probabilità che un accordo si trovi in una delle tre fasi per 24 passi.

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

Se combiniamo entrambi i risultati, sembra evidente che lo stato CW diventi il più probabile dopo 6-9 passi. Dato che le probabilità di transizione sono mensili, si può sostenere che la velocità di vendita tipica, dall'appuntamento iniziale alla chiusura positiva di un accordo per quel settore, può essere tra 6 e 9 mesi. È un processo di vendita piuttosto lungo.

Conclusione

L'obiettivo di questa analisi era mostrare come i principi di base delle catene di Markov e delle catene di Markov assorbenti possano essere usati per rispondere a una domanda rilevante per il business. In questo caso, i risultati della catena di Markov sono stati abbastanza accurati nonostante le assunzioni di omogeneità temporale, poiché ulteriori analisi empiriche hanno rivelato che la velocità media di vendita per il settore utilizzato in questa analisi era di 208 giorni, ovvero quasi 7 mesi. Speriamo che questo esempio ti serva per esplorare ulteriormente le catene di Markov in autonomia e applicarle alle tue domande di business.

Se ti interessa imparare di più su R, segui il corso Intermediate R di DataCamp.

Dai un'occhiata al nostro Catene di Markov in Python: Tutorial per principianti.

Argomenti
R
Data Science

Corsi R

Corso

Introduzione a R

4 ore
3.1M
Impara le basi dell'analisi dei dati in R, compresi vettori, liste e data frame, e fai pratica con R con set di dati reali.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro