Estoy intentando implantar un Modelo de Markov oculto para detectar agotamientos pasados en las ventas (una ruptura de existencias se produce cuando el minorista se queda sin un producto). Probablemente sea mejor decir un Semi - Modelo de Markov oculto déjame explicártelo. Supongamos que tengo un año de datos horarios sobre las ventas de un producto en un minorista.
VARIABLES DEL MODELO:
- $Y_t \in Z^+$ número de artículos vendidos en el momento t.
- Estados latentes $X_t \in \big\{0,1\big\}$ con $0$ que indica la indisponibilidad del producto por falta de existencias, $1$ su disponibilidad.
Así que tengo $n=2$ estados latentes y tienen $m_1 \in Z^+$ por lo que a $\infty$ número de símbolos de observación posibles para el estado 1 (todos los enteros positivos) , mientras que $m_0= 0 $ (el único símbolo observable es 0 cuando no me queda producto). En realidad podría elegir establecer los símbolos observables para el estado $1 \in \big\{sale / nosale\big\}$ para simplificar el modelo y tener un número finito de símbolos de observación para el estado $1$ .
PARÁMETROS DEL MODELO:
- la probabilidad inicial $P(X_0)$ distribución, (puedo fijar el inicio de la serie con una venta, de modo que $P(X_0=1)=1$ . )
- la matriz de probabilidad de transición de estado $P(X_{t+1}=j|X_t=i), i,j \in \big\{0,1\big\}$ ( Aquí considero un HMM de primer orden, pero no es imprescindible. )
- la emisión probabilidad $P(Y_t=m|X_t=i), m \in Z^+,i,j \in \big\{0,1\big\}$ .
Además, sé que $P(Y_t=m|X_t=0)=0 $
$\forall m \ne 0$ , ya que no puedo observar las ventas de un producto no disponible y eso podría ser una restricción útil añadida en la secuencia de estados que deseo encontrar, por ejemplo:
$Y_t=0,Y_{t+1}=3,Y_{t+2}=1,Y_{t+3}=0,\dots$ me hace imponer: $X_t \in \big\{0,1\big\}, X_{t+1}=1, X_{t+2}=1, X_{t+3} \in \big\{0,1\big\},\dots$
TENGO TAMBIÉN UN CONJUNTO DE REGRESORES (hora del día, día de la semana, promociones y precios de los otros productos,etc.) y estaba pensando en una distribución lineal/poisson dado el conjunto de regresores (piense en esto: hay una gran promoción para otro producto y obtengo 0 ventas para el producto de interés aunque esté disponible, por lo que me gustaría utilizar esta información adicional) para $P(Y_t=m|X_t=1) = Z_t*\beta $ donde $Z_t$ es el conjunto de regresores en el momento $t$ y $\beta$ son las estimaciones de los coeficientes de regresión OLS. Es una idea, también podría decir simplemente eso: $Y_t|X_t=1 \sim Poi(\lambda)$ donde $\lambda$ Deseo estimar.
Pido ayuda para seguir construyendo el modelo y algún consejo sobre cómo implementarlo en R/Python Conozco la función depmix del paquete depmixS4, pero no admite diferentes distribuciones de probabilidad de las observaciones (una forma de solucionarlo era considerar los datos diarios, no los horarios). En ese caso, dado que el minorista repone diariamente los artículos agotados, las probabilidades de emisión cuando el estado latente es $0$ (que en el caso diario representaría el evento " Se ha producido una ruptura de existencias ese día/el artículo no está disponible ese día "
$P(Y_t=m|X_t=0) >= 0 $ porque podría tener que el minorista se quedó sin un producto en algún momento durante un día después de vender algunos artículos del mismo.
En ese caso podría utilizar una Poisson para ambas probabilidades de observación, pero una será cero-inflada, mientras que la otra no.
No tengo conocimientos profundos sobre HMM, aunque ya he trabajado con Cadenas de Markov y Distribuciones Condicionales/Variables Omitidas en Estadística Bayesiana y Aplicada. Mi principal referencia era hmm_fundamentals
EDITAR :
Quiero hacer hincapié en el hecho de que me gustaría explotar la información relativa a los regresores, de modo que, cuando el Estado Oculto es $X_t=1$ = producto disponible , la distribución de la Observación Probabilidad $f(Y_t|X_t=1)$ sigue a $Poi(\lambda_t)$ donde $\lambda_t= Z_t*\beta_{OLS}$ con $Z_t$ que indica el conjunto de regresores en el momento $t$ .
EDITAR 2 :
He observado en los datos que algunos productos que suelen venderse mucho no tienen un claro agotamiento de existencias, permítanme explicarlo:
Y a continuación, la semana del 11 al 18 de octubre:
Como se puede ver hay un periodo bastante largo en el que el producto rara vez se vende y además cuando se vende es muy por debajo de su comportamiento habitual (he utilizado este periodo de 3 meses, pero su comportamiento habitual se confirma en un periodo más largo). Yo interpreté esto como: quedan pocos artículos (quizás antiguos artículos almacenados) y pasa el tiempo antes de otra reposición. En este caso el problema cambiaría, ya que:
$P(Y_t>0|X_t=0) \geq 0$ y el problema sería puramente de Modelo de Markov Oculto (sin estados latentes conocidos en la secuencia).
1 votos
Podrías ajustar los parámetros utilizando el algoritmo EM y baum-welch. Véase princeton.edu/~rvan/orf557/hmm080728.pdf .
0 votos
@Adrian buen Señor que es un heck de una referencia, gracias .. Espero poder encontrar un enfoque más directo duro..
1 votos
Eche un vistazo al Algoritmo 6.1: Concrete EM Algorithm/Proposition 6.11 y Algorithm 3.2: Baum-Welch Algorithm -- sólo necesita ligeras modificaciones para aplicarlos a su problema.
2 votos
Si es la primera vez que trabaja con HMMs, también debería repasar la sección tutorial clásico de Rabiner
0 votos
Gracias. Lo estoy leyendo ahora mismo.. Por cierto: @bdeonovic y Adrian, ¿creéis que la pregunta está suficientemente clara?
2 votos
@TommasoGuerrini el montaje era un poco confuso al principio, pero después de leerlo todo creo que la pregunta está clara. No estoy familiarizado con los paquetes de R para HMMs, pero esto parece un problema HMM relativamente sencillo, así que me sorprendería si no pudieras resolverlo con algo de la estantería. Sin embargo, esto suena como que sería una buena experiencia para programar el algoritmo de Baum-welch a ti mismo
0 votos
Algunas reflexiones: si $m_1$ y $m_0$ son el número de estados observables para $Y_t$ dado $X_t=1$ y $X_t=0$ respectivamente, entonces $m_0$ debe ser 1 ( $Y_t$ sólo puede asumir 1 estado, es decir $Y_t=0$ cuando $X_t=0$ ). He hecho las ediciones apropiadas, asegúrate de que sigue diciendo lo que quieres que diga.
0 votos
@bdeonovic ¡Gracias! He corregido tu edición, ya que antes decías que no quedaba claro: con una $m_1$ Me refería a la cardinalidad del conjunto de símbolos observables y con $m_0$ a los símbolos observables. Ahora ambos se refieren al conjunto de símbolos observables dados los estados latentes.