Preciso de ajuda sobre qual deve ser meu próximo passo em um algoritmo que estou projetando.
Devido aos NDAs, não posso divulgar muito, mas tentarei ser genérico e compreensível.
Basicamente, após várias etapas nos algoritmos, tenho o seguinte:
Para cada cliente que eu tenho e eventos que eles fazem durante um mês, durante as primeiras etapas, agrupei os eventos em várias categorias (cada cliente terá os eventos separados em categorias que variam de 1 a x, sendo x entre 1 e 25, geralmente as primeiras categorias têm mais densidade de eventos que as outras).
Para cada categoria e cliente, criei uma série temporal agregando os eventos do mês por hora (obtendo padrões de quando esses eventos estão sendo realizados). Também estou usando algumas variáveis de normalização com base no número de dias em um mês (30 dias) em que o indivíduo realiza pelo menos um evento e no número de dias com pelo menos um evento no total de dias com pelo menos um evento (agregando todos os clusters). O primeiro fornece uma proporção de quão ativo o cliente está durante o mês e o segundo avalia a categoria em relação aos outros.
A mesa final fica assim
|*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 ...
As variáveis de séries temporais são a porcentagem sobre o total de eventos por dia em cada categoria específica (isso significa que, para cada linha que soma todas as variáveis, deve ser 1). O motivo de fazer isso dessa maneira é porque, por exemplo, uma série temporal com eventos 0 0 0 1 0
e 1 1 1 2 1
é completamente diferente, e a padronização para o normal daria resultados semelhantes. E devido ao alto desvio entre diferentes categorias, verifico os valores nas séries temporais independentemente dos demais.
O que preciso fazer agora é identificar essas categorias (lembre-se, elas podem ser de 1 a x, sendo x qualquer número de 1 a 25) em três tags: tag A, tag B e None Deles. Observando essas variáveis, posso identificar manualmente a qual tag elas pertencem, e a idéia é identificar manualmente o máximo possível e usar qualquer algoritmo classificador para aprender com isso e identificar todas elas.
Minha ideia era usar várias regressões logísticas na tabela, mas todas as variáveis das séries temporais são correlacionadas (uma vez que são uma combinação linear entre si), então achei melhor usar um algoritmo de agrupamento apenas durante as séries temporais usando euclidianos. distância para categorizar os diferentes padrões e usar o resultado e as outras duas variáveis normalizadoras na regressão logística.
A outra preocupação que tenho é que essa abordagem leva cada linha independentemente das outras e, em teoria, para cada cliente deve haver apenas 0 ou 1 tag A, 0 ou 1 tag B e o restante deles deve ser None (outro A dica é que normalmente as tags A e B estão entre as primeiras categorias, porque é altamente dependente dos recursos de normalização (se o total de dias no total for Alto, há uma grande possibilidade de a linha ser A ou B, dependendo do padrão de série temporal) .
Editar: Isso não é mais uma preocupação, apenas executarei duas regressões logísticas diferentes, uma para a Tag A ou Outra e outra para a Tag B ou outra, com as probabilidades de resultado que posso selecionar apenas o melhor de cada uma.
O conjunto de dados é enorme e o algoritmo final precisa ser aplicado usando SQL (no Teradata), mas para obter os coeficientes da regressão logística ou os centros do cluster, pego uma amostra e uso R.
fonte
Respostas:
Sei que já faz um tempo desde que a pergunta foi publicada, mas para futuros leitores proponho aqui outra solução para o problema de classificação de séries temporais de dados proporcionais, isto é, vetores de proporções.
Modelos de Markov ocultos (HMMs) são amplamente utilizados para classificação de séries temporais. As implementações originais foram desenvolvidas para dados discretos e gaussianos, mas desde então elas foram estendidas para mais distribuições de probabilidade.
Entre elas, as distribuições Dirichlet, Dirichlet generalizada e Beta-Liouville, perfeitamente adequadas para trabalhar com dados proporcionais.
Geralmente, um modelo é treinado para cada categoria ("Tag" nesta pergunta) a partir de séries temporais pelas quais a categoria é conhecida. Quando uma nova série temporal precisa ser classificada, é calculada sua probabilidade em relação a cada modelo. A nova série temporal é geralmente atribuída à categoria que leva à maior probabilidade.
Aqui estão os documentos de referência para esses modelos, apresentando-os mais profundamente e fornecendo todas as equações necessárias para a implementação:
Para os dois recursos adicionais mencionados na pergunta, os HMMs para dados mistos também foram desenvolvidos no seguinte trabalho de pesquisa: Modelo híbrido de Markov oculto para modelagem mista contínua / contínua e discreta / contínua de dados, E. Epaillard, N. Bouguila, MMSP, 1-6, 2015.
Esses modelos são mais pesados de implantar do que os modelos de regressão, mas têm a vantagem de serem modelos discriminativos e generativos e de serem capazes de generalizar bem quando houver alguma variabilidade nos dados processados.
fonte