Necesito ayuda sobre cuál debería ser mi próximo paso en un algoritmo que estoy diseñando.
Debido a los NDA, no puedo revelar mucho, pero intentaré ser genérico y comprensible.
Básicamente, después de varios pasos en los algoritmos, tengo esto:
Para cada cliente que tengo y los eventos que realizan durante un mes, durante los primeros pasos he agrupado los eventos en varias categorías (cada cliente tendrá los eventos separados en categorías que van de 1 a x, siendo x entre 1 a 25, generalmente las primeras categorías tienen más densidad de eventos que las otras).
Para cada categoría y cliente, he creado una serie temporal que agrega los eventos del mes por hora (obteniendo patrones de cuándo se realizan estos eventos). También estoy usando un par de variables de normalización basadas en el número de días durante un mes (30 días) que el chico realiza al menos un evento, y el número de días con al menos un evento sobre el total de días con al menos uno evento (agregando todos los clústeres). El primero me da una relación de cuán activo es el cliente durante el mes, y el segundo compara la categoría con los demás.
La mesa final se ve así
|*Identifier*| *firstCat* | *feature1* | *feature2* | { *(TIME SERIES)* }
CustomerID | ClusterID | DaysOver30 | DaysOverTotal | Events9AM Events10AM ...
xx | 1 | 0,69 | 0,72 | 0,2 0,13 ...
xx | 2 | 0,11 | 0,28 | 0,1 0,45 ...
xy | 1 | 0,23 | 0,88 | 0,00 0,60 ...
xy | 2 | 0,11 | 0,08 | 1,00 0,00 ...
xy | 3 | 0,10 | 0,04 | 0,40 0,60 ...
Las variables de series de tiempo son el porcentaje sobre el total de eventos por día en cada categoría específica (esto significa que por cada fila que suma todas las variables debe ser 1). La razón para hacerlo así es porque, por ejemplo, una serie temporal con eventos 0 0 0 1 0
y 1 1 1 2 1
son completamente diferentes, y la normalización a la normalidad daría resultados similares. Y debido al alto sesgo entre las diferentes categorías, verifico los valores en las series de tiempo independientemente con los demás.
Lo que tengo que hacer ahora es identificar estas categorías (recuerde, pueden ser de 1 a x siendo x cualquier número de 1 a 25) en 3 etiquetas: etiqueta A, etiqueta B y Ninguna de ellas. Al observar estas variables, puedo identificar manualmente a qué etiqueta pertenecen, y la idea es identificarlo manualmente tanto como pueda y usar cualquier algoritmo clasificador para aprender de eso e identificarlos a todos.
Mi idea era usar múltiples regresiones logísticas en la tabla, pero todas las variables de las series de tiempo están correlacionadas (ya que son una combinación lineal entre sí), por lo que pensé que sería mejor usar un algoritmo de agrupación solo en las series de tiempo usando euclidiana. distancia para clasificar los diferentes patrones y usar el resultado y las otras dos variables de normalización en la regresión logística.
La otra preocupación que tengo es que este enfoque toma cada fila independientemente de las demás, y en teoría, para cada cliente debe haber solo 0 o 1 etiqueta A, 0 o 1 etiqueta B y el resto de ellos debe ser Ninguno (otro El consejo es que normalmente las etiquetas A y B se encuentran entre las primeras categorías, ya que depende en gran medida de las características de normalización (si los días sobre el total son altos, existe una alta posibilidad de que la fila sea A o B, dependiendo del patrón de serie temporal) .
Editar: Esto ya no es una preocupación, solo realizaré dos regresiones logísticas diferentes, una para la Etiqueta A u Otra y otra para la Etiqueta B u otra, con las probabilidades de resultado que puedo seleccionar solo lo mejor de cada una.
El conjunto de datos es enorme y el algoritmo final debe aplicarse usando SQL (en Teradata), pero para obtener los coeficientes de la regresión logística, o los centros de agrupamiento, obtengo una muestra y uso R.
fuente
Respuestas:
Sé que ha pasado un tiempo desde que se publicó la pregunta, pero para futuros lectores propongo aquí otra solución para el problema de clasificar series temporales de datos proporcionales, es decir, vectores de proporciones.
Los modelos ocultos de Markov (HMM) se utilizan ampliamente para la clasificación de series temporales. Las implementaciones originales se desarrollaron para datos discretos y gaussianos, pero desde entonces, se han extendido a más distribuciones de probabilidad.
Entre ellos, las distribuciones Dirichlet, Dirichlet generalizada y Beta-Liouville, que son perfectamente adecuadas para trabajar con datos proporcionales.
Por lo general, se entrena un modelo para cada categoría ("Etiqueta" en esta pregunta) de series de tiempo para las que se conoce la categoría. Cuando se debe clasificar una nueva serie temporal, se calcula su probabilidad con respecto a cada modelo. La nueva serie temporal generalmente se asigna a la categoría que conduce a la mayor probabilidad.
Aquí están los documentos de referencia para estos modelos que los presentan más profundamente y proporcionan todas las ecuaciones necesarias para la implementación:
Para las dos características adicionales mencionadas en la pregunta, también se han desarrollado HMM para datos mixtos en el siguiente documento de investigación: Modelo híbrido oculto de Markov para modelado de datos mixto continuo / continuo y discreto / continuo, E. Epaillard, N. Bouguila, MMSP, pp. 1-6, 2015.
Estos modelos son más pesados de implementar que los modelos de regresión, pero tienen la ventaja de ser modelos discriminativos y generativos y de poder generalizar bien cuando hay alguna variabilidad en los datos procesados.
fuente