Curso
O que é uma cadeia de Markov?
Uma cadeia de Markov é um sistema matemático que passa de um estado a outro conforme um conjunto de regras probabilísticas. Cadeias de Markov são processos estocásticos, mas têm uma característica particular: não possuem "memória". Ou seja, a probabilidade do próximo estado depende apenas do estado atual do sistema, e não dos estados anteriores. Isso é chamado de propriedade de Markov (veja abaixo):
Para ter um modelo de cadeia de Markov funcional, é essencial definir uma matriz de transição Pt. A matriz de transição traz as probabilidades de passar entre os diferentes estados do sistema. Para ser válida, cada linha deve ser um vetor de probabilidades e a soma de todos os seus termos deve ser 1.
Matrizes de transição têm a propriedade de que o produto de matrizes subsequentes descreve as probabilidades de transição ao longo de um intervalo de tempo. Assim, podemos modelar a probabilidade de estar em um certo estado após k passos calculando o seguinte:
Este tutorial também aborda cadeias de Markov absorventes. Elas ocorrem quando existe pelo menos um estado em que, uma vez alcançado, a probabilidade de permanecer nele é 1 (não é possível sair dele).
O que são cadeias de Markov absorventes?
Uma cadeia de Markov absorvente é aquela em que é impossível sair de alguns estados após entrar neles. No entanto, esse é apenas um dos pré-requisitos para que uma cadeia de Markov seja absorvente. Para ser de fato absorvente, todos os demais estados transitórios devem conseguir alcançar o estado absorvente com probabilidade 1.
Cadeias de Markov absorventes têm propriedades específicas que as diferenciam das cadeias de Markov homogêneas no tempo. Uma delas é a forma como a matriz de transição pode ser escrita. Com uma cadeia com t estados transitórios e r estados absorventes, a matriz de transição P pode ser escrita na forma canônica assim:
Em que Q é uma matriz t x t, R é t x r, 0 é uma matriz nula r x t, e Ir é a matriz identidade r x r. Em particular, a decomposição da matriz de transição na matriz fundamental permite certos cálculos, como o número esperado de passos até a absorção a partir de cada estado. A matriz fundamental N é calculada assim:
Em que It é a matriz identidade t x t
O número esperado de passos baseia-se na linearidade da esperança e é calculado assim:
Em que 1 é um vetor coluna do mesmo tamanho do número de estados transitórios, com todas as entradas iguais a 1
Além disso, podemos calcular a probabilidade de ser absorvido por um estado absorvente específico ao partir de qualquer estado transitório. Essa probabilidade é calculada assim:
Análise da velocidade de vendas
Cadeias de Markov são amplamente usadas em áreas como finanças, teoria dos jogos e genética. Aqui, vamos ver como usá-las para modelar a duração do processo de vendas de uma empresa, já que esse processo pode ser um processo de Markov. Isso foi validado testando se as sequências que detalham as etapas pelas quais um negócio passou antes de ser fechado com sucesso obedeciam à propriedade de Markov.
Esta análise assumiu que as probabilidades de um negócio avançar no nosso processo de vendas eram constantes mês a mês para um determinado setor, permitindo o uso de cadeias de Markov homogêneas no tempo. Ou seja, uma cadeia de Markov em que as probabilidades de transição entre estados permanecem constantes ao longo do tempo (à medida que o número de passos k aumenta).
As probabilidades calculadas foram as seguintes:
- A probabilidade de um negócio passar das etapas do representante de vendas para as etapas do executivo de contas versus permanecer nelas em um determinado mês.
- A probabilidade de um negócio passar das etapas do executivo de contas para um fechamento bem-sucedido versus permanecer nelas em um determinado mês.
- A probabilidade de permanecer em um negócio fechado com sucesso, que era 1. Portanto, o estado de fechado é absorvente.
Esta análise foi conduzida usando a linguagem de programação R. O R tem um pacote prático chamado Markov Chain que lida com uma ampla variedade de tipos de cadeias de Markov.
Para começar, verificamos se nossas sequências de vendas seguiam a propriedade de Markov. Para isso, o pacote Markov Chain traz a função verifyMarkovProperty(), que testa se uma sequência de eventos segue a propriedade de Markov por meio de testes de Qui-quadrado em uma série de tabelas de contingência derivadas da sequência. Valores de p altos indicam que a hipótese nula de que a sequência segue a propriedade de Markov não deve ser rejeitada. Abaixo, um exemplo de sequência de vendas mostrando onde o negócio esteve a cada mês, do primeiro meeting até o fechamento:
library(markovchain)
library(dplyr)
# SDR Funnel são as etapas do representante de vendas, AE Funnel são as etapas do executivo de contas e CW é um negócio fechado com sucesso
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
Como o valor de p está acima de 0,05, não rejeitamos a hipótese nula de que a sequência segue a propriedade de Markov.
Verificado isso, plotamos a estrutura da cadeia de Markov junto com as probabilidades de transição derivadas dos nossos dados. O código abaixo instancia um objeto de cadeia de Markov definindo a matriz de transição e os nomes dos estados. Ele também exibe a cadeia e as probabilidades de transição.
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, # Estas são as probabilidades de transição de um setor qualquer
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

Como temos uma cadeia de Markov absorvente, calculamos o tempo esperado até a absorção. A primeira entrada do vetor retorna o número esperado de passos até o fechamento partindo do funil de SDR, enquanto a segunda entrada retorna o esperado se começarmos pelo funil de AE.
# Extrair Q da matriz de transição
Q <- transElec[1:2,1:2]
# Gerar It
It <- diag(2)
# Calcular a matriz fundamental
N <- solve(It-Q)
# Gerar vetor coluna de 1s
one <- t(t(c(1,1)))
# Calcular os passos esperados por multiplicação de matrizes
expected <- N%*%one
print(expected)
## [,1]
## [1,] 9.823945
## [2,] 7.564969
Também podemos visualizar como as probabilidades mudam à medida que o número de passos aumenta, para comparar com o número esperado de passos. Por isso, verificamos as probabilidades de um negócio estar em qualquer um dos três estágios ao longo de 24 passos.
library(ggplot2)
initState <- c(1,0,0) # O estado inicial será o funil de SDR (imitando o agendamento de uma reunião de descoberta)
# Iniciar vetores de probabilidade
SDRProb <- c()
AEProb <- c()
CW <- c()
# Calcular as probabilidades para 24 passos.
for(k in 1:24){
nsteps <- initState*markov2^k
SDRProb[k] <- nsteps[1,1]
AEProb[k] <- nsteps[1,2]
CW[k] <- nsteps[1,3]
}
# Criar data frames e uni-los
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)
# Plotar as probabilidades com ggplot
ggplot(steps, aes(x = Iter, y = Value, col = Group))+
geom_line() +
xlab('Passo da cadeia') +
ylab('Probabilidade') +
ggtitle('Previsão de probabilidade para 24 passos da cadeia')+
theme(plot.title = element_text(hjust = 0.5))

Combinando os dois resultados, fica claro que o estado CW se torna o mais provável após 6 a 9 passos. Como as probabilidades de transição são mensais, dá para dizer que a velocidade típica de vendas, do primeiro agendamento até o fechamento bem-sucedido para esse setor, fica entre 6 e 9 meses. É um ciclo de vendas bem longo.
Conclusão
O objetivo desta análise foi mostrar como os princípios básicos de cadeias de Markov e cadeias de Markov absorventes podem ser aplicados para responder a uma pergunta de negócios. Neste caso, os resultados foram bastante fiéis mesmo com a suposição de homogeneidade no tempo, já que análises empíricas adicionais mostraram que a velocidade média de vendas para o setor usado aqui foi de 208 dias, ou quase 7 meses. Esperamos que este exemplo inspire você a explorar cadeias de Markov por conta própria e aplicá-las às suas perguntas de negócio.
Se quiser aprender mais sobre R, faça o curso Intermediate R da DataCamp.
Confira também o nosso Markov Chains in Python: Beginner Tutorial.
