Pensando em um problema supostamente simples, mas interessante, eu gostaria de escrever um código para prever consumíveis necessários em um futuro próximo, considerando o histórico completo de minhas compras anteriores. Tenho certeza de que esse tipo de problema tem uma definição mais genérica e bem estudada (alguém sugeriu que isso está relacionado a alguns conceitos nos sistemas ERP e similares).
Os dados que tenho são o histórico completo de compras anteriores. Digamos que estou procurando suprimentos de papel, meus dados se parecem com (data, folhas):
2007-05-10 500
2007-11-11 1000
2007-12-18 1000
2008-03-25 500
2008-05-28 2000
2008-10-31 1500
2009-03-20 1500
2009-06-30 1000
2009-09-29 500
2009-12-16 1500
2010-05-31 500
2010-06-30 500
2010-09-30 1500
2011-05-31 1000
não é 'amostrado' em intervalos regulares, então acho que não se qualifica como dados de séries temporais .
Não tenho dados sobre os níveis de estoque reais todas as vezes. Gostaria de usar esses dados simples e limitados para prever a quantidade de papel necessária em (por exemplo) 3,6,12 meses.
Até agora cheguei a saber que o que estou procurando se chama Extrapolação e não muito mais :)
Qual algoritmo poderia ser usado em tal situação?
E que algoritmo, se diferente do anterior, também poderia tirar proveito de mais alguns pontos de dados que fornecem os níveis atuais de suprimento (por exemplo, se eu souber que na data XI havia Y folhas de papel sobrando)?
Sinta-se à vontade para editar a pergunta, o título e as tags, se souber uma terminologia melhor para isso.
EDIT: pelo que vale a pena, vou tentar codificar isso em python. Eu sei que existem muitas bibliotecas que implementam mais ou menos qualquer algoritmo por aí. Nesta pergunta, eu gostaria de explorar os conceitos e as técnicas que poderiam ser usadas, com a implementação real a ser deixada como um exercício para o leitor.
fonte
Respostas:
A questão diz respeito à taxa de consumo versus tempo. Isso exige regressão da taxa contra o tempo ( não regressão do total de compras contra o tempo). A extrapolação é realizada através da construção de limites de previsão para compras futuras.
Vários modelos são possíveis. Dada a mudança para um escritório sem papel (que está em andamento há cerca de 25 anos :-), podemos adotar um modelo exponencial (diminuição). O resultado é retratado pelo gráfico de dispersão a seguir do consumo, no qual é traçada a curva exponencial (ajustada por mínimos quadrados comuns aos logaritmos do consumo) e seus limites de previsão de 95%. Espera-se que valores extrapolados fiquem próximos à linha e entre os limites de previsão com 95% de confiança.
O eixo vertical mostra as páginas por dia em uma escala linear. A linha sólida azul escura é a mais adequada: é realmente exponencial, mas chega notavelmente próxima de ser linear. O efeito do ajuste exponencial aparece nas bandas de previsão, que nessa escala linear são colocadas assimetricamente ao redor do ajuste; em uma escala de log, eles seriam simétricos.
Um modelo mais preciso explicaria o fato de que as informações de consumo são mais incertas em períodos mais curtos (ou quando o total de compras são menores), que poderiam ser ajustadas usando mínimos quadrados ponderados. Dada a variabilidade desses dados e a igualdade aproximada do tamanho de todas as compras, não vale a pena o esforço extra.
Essa abordagem acomoda dados de estoque intermediários , que podem ser usados para interpolar as taxas de consumo em momentos intermediários. Nesse caso, como as quantidades intermediárias de consumo podem variar consideravelmente, seria recomendável a abordagem de mínimos quadrados ponderados.
Quais pesos usar? Podemos considerar o consumo de papel, que necessariamente se acumula em quantidades integrais de papel, como uma contagem que varia independentemente de dia para dia. Em períodos curtos, a variação da contagem seria proporcional à duração do período. A variação da contagem por dia seria inversamente proporcional à duração do período. Consequentemente, os pesos devem ser diretamente proporcionais proporcionais aos períodos decorridos entre os estoques. Assim, por exemplo, o consumo de 1000 folhas entre 10/05/2007 e 11/11/2007 (cerca de 180 dias) teria quase cinco vezes o peso do consumo de 1000 folhas entre 11-11-2007 e 2007-12- 18, um período de apenas 37 dias.
A mesma ponderação pode ser acomodada nos intervalos de previsão. Isso resultaria em intervalos relativamente amplos para previsões de consumo durante um dia em comparação com a previsão de consumo em, digamos, três meses.
Observe que essas sugestões se concentram em modelos simples e previsões simples, apropriadas para a aplicação pretendida e a grande variabilidade óbvia nos dados. Se as projeções envolverem, digamos, gastos com defesa para um país grande, gostaríamos de acomodar muito mais variáveis explicativas, explicar a correlação temporal e fornecer informações muito mais detalhadas no modelo.
fonte
Esse é definitivamente o problema de aprendizado de máquina (atualizei as tags em sua postagem). Muito provavelmente, isso é regressão linear . Em resumo, a regressão linear tenta recuperar a relação entre 1 variável dependente e 1 ou mais variáveis independentes. A variável dependente aqui é o uso de consumíveis . Para variáveis independentes, sugiro intervalos de tempo entre as compras. Você também pode adicionar mais variáveis independentes, por exemplo, número de pessoas que usaram consumíveis a cada momento ou qualquer outra coisa que possa afetar uma quantidade de compras. Você pode encontrar uma boa descrição da regressão linear junto com a implementação em Python aqui .
Em teoria, também é possível que não apenas os intervalos de tempo entre as compras, mas também os momentos no tempo influenciem os valores. Por exemplo, por alguma razão, em janeiro, as pessoas podem querer mais papel do que, por exemplo, em abril. Nesse caso, você não pode usar o número do mês como variável independente em si, devido à natureza da própria regressão linear (o número do mês é apenas um rótulo, mas será usado como quantidade). Então você tem duas maneiras de superar isso.
Primeiro, você pode adicionar 12 variáveis adicionais , uma para cada mês e definir cada variável como 1, se representa o mês da compra, e 0, se não. Em seguida, use a mesma regressão linear.
Segundo, você pode usar o algoritmo mais sofisticado, como o M5 ' , que é uma mistura de regressão linear e árvores de decisão (você pode encontrar uma descrição detalhada desse algoritmo em Mineração de Dados: Ferramentas e Técnicas Práticas de Aprendizado de Máquina ).
fonte
Aqui está uma idéia sobre como prever as compras: considere os dados como uma série de demanda intermitente . Ou seja, você tem uma série temporal amostrada em intervalos regulares, mas os valores positivos são obviamente espaçados irregularmente. Rob Hyndman tem um bom artigo sobre o uso do método de Croston para prever séries de demanda intermitentes. Embora eu também programa muito em Python, você economizará muito tempo de exploração usando o método de Croston, bem como outros métodos de previsão de séries temporais, disponíveis na excelente previsão de pacotes R. de Rob .
fonte
Tenho certeza de que você está tentando fazer uma análise de regressão para ajustar uma linha aos seus pontos de dados. Existem muitas ferramentas disponíveis para ajudá-lo - o MS Excel é o mais acessível. Se você deseja apresentar sua própria solução, é melhor revisar suas estatísticas ( aqui e aqui , talvez). Depois de ajustar uma linha aos seus dados, você pode extrapolar para o futuro.
EDIT: Aqui está uma captura de tela do exemplo do Excel que mencionei nos comentários abaixo. As datas em negrito são datas aleatórias no futuro que eu digitei em mim mesmo. Os valores em negrito na coluna B são valores extrapolados calculados pelo sabor da regressão exponencial do Excel.
EDIT2: OK, então, para responder à pergunta de "Que técnicas posso usar?"
Consulte esta página para uma pequena introdução em cada um: http://www.decisioncraft.com/dmdirect/forecastingtechnique.htm
fonte
Começou como um comentário, cresceu muito ...
Esta é uma conclusão errônea - certamente é uma série temporal. Uma série temporal pode ser amostrada irregularmente, mas tende a exigir diferentes das abordagens usuais quando é.
Esse problema parece estar relacionado a problemas estocásticos, como os níveis das barragens (a água geralmente é usada a uma taxa bastante estável ao longo do tempo, às vezes aumentando ou diminuindo mais ou menos rapidamente, enquanto outras vezes é bastante estável), enquanto os níveis das barragens tendem a aumentar apenas rapidamente (essencialmente em saltos), à medida que a chuva ocorre. Os padrões de uso e reposição de papel podem ser um pouco semelhantes (embora a quantidade solicitada possa tender a ser muito mais estável e em números muito redondos do que a quantidade de chuva, e a ocorrer sempre que o nível ficar baixo).
Também está relacionado ao capital da companhia de seguros (mas meio revertido) - além do capital inicial, o dinheiro proveniente dos prêmios (custos operacionais líquidos) e os investimentos são bastante constantes (às vezes mais ou menos), enquanto os pagamentos da apólice de seguro tendem a ser feitos em relativamente grandes quantidades.
Ambas as coisas foram modeladas e podem fornecer um pouco de insight para esse problema.
fonte
você deve dar uma olhada no WEKA. É uma ferramenta e uma API Java com um conjunto de algoritmos de aprendizado de máquina. Em particular, você deve procurar algoritmos de classificação.
Boa sorte
fonte
Eu usaria mínimos quadrados lineares para ajustar um modelo ao consumo cumulativo (ou seja, executando o total de páginas por data). Uma suposição inicial seria usar um polinômio de primeiro grau. No entanto, os resíduos indicam que o primeiro grau está desajustando os dados no exemplo; portanto, o próximo passo lógico seria aumentá-los para um ajuste de segundo grau (isto é, quadrático). Isso remove a curvatura dos resíduos, e o coeficiente levemente negativo para o termo ao quadrado significa que a taxa de consumo está diminuindo ao longo do tempo, o que parece intuitivo, pois a maioria das pessoas provavelmente tende a usar menos papel ao longo do tempo. Para esses dados, acho que você não precisa ir além de um ajuste de segundo grau, pois pode começar a se ajustar demais e a extrapolação resultante pode não fazer sentido.
Você pode ver os ajustes (incluindo extrapolação) e os resíduos nas plotagens abaixo.
Se você puder, pode ser bom executar o bootstrap para obter uma estimativa melhor dos erros de previsão.
fonte
Eu acho que você pode obter seus dados usando pesquisa operacional .
Por que você não tenta encontrar algumas equações que tomam como variáveis a quantidade de papel usada por período, usuários do papel, etc?
fonte