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.