Estou tentando criar um modelo de regressão que prevê a duração de uma tarefa. Os dados de treinamento que possuo consistem em aproximadamente 40 mil tarefas concluídas com estas variáveis:
- Quem executou a tarefa (~ 250 pessoas diferentes)
- Em que parte (subprojeto) do projeto a tarefa foi executada (~ 20 partes diferentes)
- O tipo de tarefa
- A data de início da tarefa (10 anos de dados)
- Quanto tempo a pessoa que precisa executar a tarefa estima que levará
- A duração real que esta tarefa levou para concluir
A duração pode variar de meia hora a algumas centenas de horas, mas é altamente inclinada para a direita (a maioria das tarefas é concluída em 10 horas). Em escala de log, a distribuição ainda está ligeiramente inclinada.
A previsão não precisa ser perfeita, mas estou tentando melhorar as estimativas das pessoas. Uma pergunta a fazer é "Que medida podemos usar o define beter ?" Penso que a melhor medida seria o erro médio quadrático (MSE), uma vez que pesa grandes erros muito piores que os pequenos.
Antes de me voltar para o aprendizado de máquina, tentei algumas abordagens simples, como ajustar a estimativa pelo erro médio ou mediano, ajustá-lo pelo erro médio / mediano agrupado por pessoa, agrupado por subprojeto, mas cada um deles teve um desempenho pior.
Com o aprendizado de máquina, um dos primeiros problemas que encontrei foi o número de variáveis categóricas, pois para a maioria dos modelos elas precisam ser codificadas de alguma forma (por exemplo, um caso quente). Enfim, tentei aplicar alguns modelos lineares, por exemplo, com a descida do gradiente estocástico, minha abordagem seria:
- Codificação one-hot os recursos categóricos
- A data foi convertida em timestamps unix
- Normalize todos os recursos que ainda não estão entre 0 e 1
- Divida os dados em conjuntos de aprendizado e teste 80/20.
- Com a validação cruzada do Grid Search e o conjunto de aprendizado, tente encontrar os melhores hiper parâmetros e ajustar-se ao modelo.
- Prever com o conjunto de testes
- Calcular o erro / pontuação
Agora, notei que os resultados variavam bastante: em uma corrida, o MSE estava quase o dobro da outra (150 e 280). Outra coisa é que o MSE da estimativa das pessoas é de cerca de 80, então meu modelo tem um desempenho um pouco pior.
Durante meus esforços para melhorar o desempenho, me deparei com essa pergunta em que alguém sugere usar modelos de sobrevivência. Agora, sou pouco familiar com esses tipos de modelos, mas parecia promissor, mas durante meus testes iniciais com isso, ficou muito lento para meus propósitos (muito grande de um conjunto de dados).
Na mesma resposta do Datascience que sugeriu o uso dos modelos de sobrevivência (e da página da Wikipedia ), eles também mencionaram a regressão de Poisson, mas não tenho certeza de como aplicaria isso ao meu caso.
Para resumir uma longa história: Eu tenho apenas duas perguntas: 1. Minha abordagem ao usar o SGD foi 'correta' e você acha que posso melhorar os resultados com isso? 2. Outros modelos são mais adequados para esse tipo de previsão? Em caso afirmativo, você pode explicar um pouco como eu os usaria?