Para Organizar los datos se realizo:
datos <- Caso.1.datos.finales
datos$Fecha.de.compra <- as.Date(paste(datos$Fecha.de.compra, "-01", sep = ""), "%Y-%m-%d")
datos$diferencia <-unlist(lapply(split(datos$Fecha.de.compra, datos$Cliente), function(x) c(NA, diff(x))))>.
Para hallar la tabla de contingencia se uso:
DatosObservados <-datos$diferencia
verifyMarkovProperty(DatosObservados).
tabla_contingencia <- table(datos$diferencia)
total <- sum(tabla_contingencia$frecuencia)
tabla_contingencia$porcentaje <- tabla_contingencia$frecuencia/total*100
Para ver el grafico correspondiente a la tabla de contingencia en cuanto a frecuencias se uso:
ggplot(data = as.data.frame(tabla_contingencia), aes(x = Var1, y = Freq, fill = Var1)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Diagrama de barras de contingencias", x = "Periodo", y = "Frecuencia", fill = "Estado"
La Grafica anterior indica el nuemero de frecuencias entre gaps dentro de la problematica, como podemos apreciar existe mayor numero de compras en los periodos de inicio del 2013. se evidencia que hay un decrecimiento exponencial debido a la desercion de los clientes a lo largo del tiempo.
Partimos definiendo que es una cadena de Markov; esta se refiere a la propiedad de ciertos procesos estocásticos, nombre que adquieren una serie de variables aleatorias {Xn, con t ∈ T}, ordenadas según el subíndice t o n que en general se suele identificar con el tiempo. Para que sea considerada esta debe “carecer de memoria”, lo que significa que la distribución de probabilidad del valor futuro de una variable aleatoria depende únicamente de su valor presente, considerándose así independiente de la historia de sus resultados anteriores como variable en el tiempo, a los procesos que satisfacen esta condición se les conoce como procesos de Márkov. Nos encontramos en un escenario en el cual se describe que se presentan problemas con su comercio electrónico, entre otras más, por lo que habían estado poniendo bastante esfuerzo en el uso de análisis de toma de decisiones. Y a partir de esto surge que se planteen que si han estado analizando sus datos para obtener información se pregunten; ¿sabemos el valor de nuestros clientes? Ya que es importante para ellos como compañía diferenciar sus clientes a través de métricas que los ayudará a gestionarlos de forma eficaz la información. Dado esta información nosotros como grupo decidimos definimos la variable Xn: Diferencia de meses entre las últimas dos compras en el periodo n.
Así mismo en cuanto a la estacionariedad, la probabilidad por lo general no será constante, en la problemática nos indican que existe un aumento en las tasas de crecimiento comercial dentro de la india generando una variación, por lo que la probabilidad de adquirir o no, hace que se convierta en un estado no constante, además dicha probabilidad de aumentar en un periodo la diferencia de compras puede variar según el año o temporada en este caso solo se está analizando las compras para dos años completos, esto ya que la probabilidad de transición para este proceso estocástico está relacionado a la frecuencia de compras, por lo que al realizar una campaña de marketing, darse a conocer más como comercio electrónico, se puede esperar que la gente con el pasar del tiempo varié la probabilidad de compra, o que dado una mala experiencia con la empresa, deje de usarla por completo, haciendo que la probabilidad de deserción también cambie con el tiempo. Otro ejemplo es la cobertura a internet creciente en el mercado, por lo que a medida del tiempo se puede regularizar un poco más las compras por internet Por su parte el principio de Homogeneidad implicaría que cada cliente realiza el mismo comportamiento trascurrido los meses, lo cual es un poco incoherente pues cada cliente sigue su propio patrón de compra dependiendo de sus necesidades, para cada persona la frecuencia de compra no sigue un patrón determinado, es normal que la percepción personal sobre la marca, compras en línea, edad o región altere el comportamiento de cada persona y por ende se esté sujeto a un contexto. Supuesto de orden: Para determinar una transición entre periodos se necesita analizar más a fondo como cliente, pues con que el cliente no le haya llegado una compra una vez, no va a volver a confiar en la marca, se requiere saber más sobre las experiencias de los clientes tanto positivas como negativas en un horizonte de tiempo amplio, por lo que se necesita más de un orden o pasado para estimar dichas predicciones Supuesto de markov: No se cuenta con una pérdida de memoria, pues la transición entre periodo a periodo si depende en gran parte del pasado, y no solo conociendo las últimas dos compras se puede determinar si para el otro mes volverá a comprar o si por el contrario seguirá aumentando el gap, esto también se ve relacionado a las experiencias que haya tenido un problema hace muchos años atrás, por esta razón no se cumple con este supuesto.
Dentro del desarollo de los datos, se utlizaron una serie de librerias y paquetes con el fin de obtener la matriz de transición.
library(dplyr) library(TraMineR) install.packages(“TraMineR”) install.packages(“markovchain”) library(markovchain) install.packages(“ggplot2”) library(ggplot2)
MatTran sale del calculo de el estimador de maxima verosimilitud para la matriz de transiciones
Secuencia <- datos$diferencia
View(Secuencia)
MatrizFreq <- createSequenceMatrix(Secuencia)
MatrizFreq
MatrizEstimada <- markovchainFit(Secuencia, method = "mle")
MatrizEstimada
MatrizEstimada$estimate
MatTran <- matrix(c(0.5134556,0.4865444,0,0,0,0,0,0,0,0,0,0,0,0.3725260,0,0.627474,0,0,0,0,0,0,0,0,0,0,0.2971032,0,0,0.7028968,0,0,0,0,0,0,0,0,0,0.2412884,0,0,0,0.7587116,0,0,0,0,0,0,0,0,0.2157032,0,0,0,0,0.7842968,0,0,0,0,0,0,0,0.1815981,0,0,0,0,0,0.8184019,0,0,0,0,0,0,0.1740859,0,0,0,0,0,0,0.8259141,0,0,0,0,0,0.1798926,0,0,0,0,0,0,0,0.8201074,0,0,0,0,0.1691897,0,0,0,0,0,0,0,0,0.8308103,0,0,0,0.1599643,0,0,0,0,0,0,0,0,0,0.8400357,0,0,0.1379310,0,0,0,0,0,0,0,0,0,0,0.862069,0,0.1264786,0,0,0,0,0,0,0,0,0,0,0,0.8735214,0,0,0,0,0,0,0,0,0,0,0,0,1),ncol=13,nrow=13,byrow = TRUE)
Estados <- c("0","1","2","3","4","5","6","7","8","9","10","11","12")
MatTran
cadmark <- new("markovchain", states=Estados, transitionMatrix=MatTran)
cadmark
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 0.5134556 0.4865444 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [2,] 0.3725260 0.0000000 0.627474 0.0000000 0.0000000 0.0000000 0.0000000
## [3,] 0.2971032 0.0000000 0.000000 0.7028968 0.0000000 0.0000000 0.0000000
## [4,] 0.2412884 0.0000000 0.000000 0.0000000 0.7587116 0.0000000 0.0000000
## [5,] 0.2157032 0.0000000 0.000000 0.0000000 0.0000000 0.7842968 0.0000000
## [6,] 0.1815981 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.8184019
## [7,] 0.1740859 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [8,] 0.1798926 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [9,] 0.1691897 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [10,] 0.1599643 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [11,] 0.1379310 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [12,] 0.1264786 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [13,] 0.0000000 0.0000000 0.000000 0.0000000 0.0000000 0.0000000 0.0000000
## [,8] [,9] [,10] [,11] [,12] [,13]
## [1,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [2,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [3,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [4,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [5,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [6,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [7,] 0.8259141 0.0000000 0.0000000 0.0000000 0.000000 0.0000000
## [8,] 0.0000000 0.8201074 0.0000000 0.0000000 0.000000 0.0000000
## [9,] 0.0000000 0.0000000 0.8308103 0.0000000 0.000000 0.0000000
## [10,] 0.0000000 0.0000000 0.0000000 0.8400357 0.000000 0.0000000
## [11,] 0.0000000 0.0000000 0.0000000 0.0000000 0.862069 0.0000000
## [12,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 0.8735214
## [13,] 0.0000000 0.0000000 0.0000000 0.0000000 0.000000 1.0000000
Del grafico anterior nos muestra el diagrama de estados,donde se puede observar que los estados del {0 al 11} estan comunicados por ende son transitorios y el estado 12 es el unico estado absorbente, por ende definimos la cadena como reducible. Ademas realizamos una prueba con codigo para determinar si la cadena es irreducible o no y uno para determinar la clasificacion de los estados:
is.irreducible(cadmark)
[1] FALSE
transientStates(cadmark)
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11"
absorbingStates(cadmark) #Muestra estados absorbentes
[1] "12"
se observo que, la cadena de markov es: reducible por que tiene dos clases finita, por que el espacio muestral es de 0,..,1
verifyMarkovProperty(datosobservados)
Segun la prueba realizada el valor de 0 en p_value indica que no se puede modelar markov
Testing markovianity property on given data sequence
Chi - square statistic is: 11774.7
Degrees of freedom are: 3
And corresponding p-value is: 0
La estacionareidad en un proceso de Markov se refiere a la propiedad de que la distribución de probabilidad de un estado dado no cambia a lo largo del tiempo. En otras palabras, si un proceso de Markov es estacionario, entonces la probabilidad de estar en un estado particular en un momento dado es la misma independientemente del tiempo transcurrido. En este caso se puede ver que si cumple la propiedad de estacionareidad ya que las probabilidades de transición entre estados varian de manera cíclica pero no depende del periodo, con patrones que se pueden observar en diferentes periodos de tiempo como en este caso (en meses). Dicha estacionalidad puede ser causada por temporadas o tendencias que hallan en el mercado, dichos patrones de compra ayudan a la empresa a crear estrategias de negocio, para aprovechar mejor las oportunidades de venta y anticipar posibles cambios en el comportamiento de los clientes, como lo puede ser la deserción por parte de ellos.Por la frecuencia de los datos, se puede observar que en el año 2013 las ventas fueron mayores, lo que también se puede entender que hay una clara diferencia entre los años y las compras, por lo que estimar esto para años posteriores puede ser variante frente a sus datos y no ser del todo fiel a lo que se espera
En el contexto de un modelo de cadena de Markov, se dice que el modelo es de orden 1 o primer orden si la probabilidad de que el sistema se mueva a un estado futuro depende únicamente del estado actual del sistema y no de los estados previos. En este caso se conocen las compras de los clientes realizados entre los meses de 2013 a 2014 en otras palabras, si fuese la propiedad de Markov de orden 1 para este caso establece que la probabilidad de transición de un estado a otro solo depende del estado actual y no de la historia completa de estados anteriores, lo que es incoherente pues cada cliente realiza compras según sus necesidades, gustos, preferencias y poder adquisitivo, lo que dificulta establecer un patrón de los datos más específico para establecer la transición debido a que el comportamiento de compra no es fijo ni predecible dándonos a entender que no podemos basarnos en un solo dato del pasado.
Las probabilidades de transición entre estados indican la posibilidad de que un cliente realice una compra en un mes y luego haga otra compra en un mes posterior, siempre y cuando haya comprado en un mes específico. La rotación de los clientes es una métrica importante para Flipkart, ya que les permite determinar cuántos clientes continúan comprando después de un período de tiempo y cuántos dejan de comprar después de varias compras. La matriz de transición muestra que es más probable que un cliente haga otra compra después de haber comprado en el pasado. Sin embargo, si un cliente no realiza una compra en enero, es menos probable que haga una compra en el futuro. En general, los clientes que compran en un mes determinado tienen una alta probabilidad de realizar al menos una compra más en el futuro cercano, lo que los convierte en clientes valiosos para el siguiente mes.
En el contexto comercial de Flikpart, la tasa de deserción puede ser más alta que en otros negocios debido a las particularidades del comercio electrónico que permiten a los consumidores cambiar fácilmente de proveedor. Sin embargo, la calidad del servicio al cliente, la oferta de productos y la competencia en el mercado son factores que pueden influir en esta situación.
La pérdida de clientes en cualquier empresa puede afectar su rentabilidad a largo plazo, especialmente en un negocio en línea como Flikpart, donde la competencia es intensa y las barreras de entrada son bajas. Los consumidores pueden abandonar un negocio en línea como Flikpart debido a diferentes razones, como un mal servicio al cliente, precios más bajos, problemas de envío o problemas de calidad.
Aunque el modelo de análisis se basa en datos de una sola empresa, es factible que la tasa de deserción en Flikpart varíe según diferentes factores, como la ubicación geográfica, el tipo de producto y la estrategia de precios.
En conclusión, la afirmación de que el estado 12 es el estado de deserción sigue siendo relevante en el modelo de negocio de Flikpart. Para retener a sus consumidores y fomentar la lealtad a largo plazo, es fundamental que la empresa implemente estrategias eficaces
A <- meanAbsorptionTime(cadmark) #Transiciones medias entre transitorios antes de caer en absorbente
La respuesta de la pregunta dos, la da el primer numero del vector inicial en este caso 72.82956
steadyStates(cadmark)# Estado estable de la cadena
Dada la matriz de transicion definida anteriormente como MatTran
B <- MatTran
Empezamos a operar
Matriz de transicion en 6 pasos
R <- B %^% 6
Distribucion inicial de las personas
v <- c(1000, rep(0,12))
v
Distribucion esperada de las personas en 6 meses
resultado <- v %*% R
resultado: se espera que la distribucion de los clientes sea de esta manera, y tiene logica ya que si todos inician desde 0, no puede haber un gap mayor a 6
Elevar la matriz a 6 pasos
H <- B %^% 6
Distribucion inicial de las personas
a <- c(1000, 1000, 1000, rep(0,10))
a
Distribucion esperada de las personas en 6 meses
distribucionfinal <- a %*% H
distribucionfinal
Obteniendo los siguiente resultados:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11][,12][,13]
[1,] 366.1941 183.5931 119.2575 88.45355 72.43297 65.56466 104.5042 0 0 0 0 0 0
Para hallar el CLV, usamos:
Prob_estable <- MatTran %^% 100
Prob_estable
recompensas <- c(1000, rep(-200,11),0)
GML <- Prob_estable[1,]*recompensas #Gross margin per lifespan desde iniciando desde el periodo 0
Retention_rate_per_month <- 0
Discount_rate_per_month <- 0.2
CLV <- sum(GML)/(1+Discount_rate_per_month-Retention_rate_per_month)#Formula sacada de internet
CLV
Obteniendo:
[1] 44.71375
El gap para karen en septiembre de 2013 es de Xn=2, Se podria analizar como el iniciar en transitorio 2 y terminar en el recurrente 12
Y<- meanAbsorptionTime(cadmark)#Por lo anterior la respuesta es 67,96 pasos
El gap para arturo en septiembre de 2013 es de xn=5 Se podria analizar como el iniciar en transitorio 5 y terminar en el recurrente 12
Y
Segun el vector anterior, las transiciones son 55,85021