Qual algoritmo poderia ser usado para prever o uso de consumíveis, dados de compras anteriores?

10

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.

Luke404
fonte
11
queridos estatísticos, só quero que você saiba que essa pergunta não foi abandonada. Voltarei a esse problema específico assim que encontrar tempo e motivação (leia-se: o chefe me diz para fazer isso) e investigarei suas preciosas respostas e, eventualmente, marcarei uma como aceita (o que para mim significa "realmente implementado").
Luke404

Respostas:

12

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.

Figura

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.

whuber
fonte
se os dados tivessem sido amostrados em intervalos regulares, seria apropriado o uso de contagens em oposição às taxas ?
precisa
11
@MannyG Sim, mas apenas porque as contagens seriam diretamente proporcionais às taxas, não porque seria apropriado usá-las. A necessidade de usar taxas aqui é clara quando consideramos o que realmente significa prever um valor futuro: você precisa especificar o intervalo de tempo do consumo previsto. Deste modo, prevê-se uma quantidade de vezes por vez para obter uma quantidade, implicando que a quantidade deve ser uma quantidade por unidade de tempo: uma taxa de consumo .
whuber
@whuber Com licença, mas não consigo entender claramente quais modelos estão descritos em sua resposta e em quais pontos um termina e inicia outro. Eu tenho um problema semelhante e partes da sua resposta parecem exatamente o que eu preciso, mas tenho que fazer mais alguns estudos sobre esse assunto e não posso dizer lendo sua resposta se você estiver falando de modelos distintos ou de um certo que é melhorado gradualmente. Existe um nome formal para o modelo com os pesos que você está descrevendo? O seu primeiro modelo (diminuição exponencial) envolve pesos? Desde já, obrigado.
Agis
@rensokuken Descrevo um modelo e uma variação que pesa os dados. A segunda metade desta resposta sugere como determinar os pesos. Não conheço nenhum nome formal além de "mínimos quadrados ponderados".
whuber
@whuber eu vejo. No começo, você está descrevendo isso e, quando você adiciona pesos, está descrevendo isso , certo? Além disso, você tem algum recurso para analisar relacionado à solução específica e para um iniciante em previsão? Obrigado pelo esclarecimento.
Agis
5

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 ).

amiga
fonte
Depende da quantidade de dados sobre o usuário que você possui. Se o suficiente (digamos,> 100 transações ao longo de> 1 ano), você pode treinar um modelo para esse usuário específico. Caso contrário, o modelo geral de todos os usuários poderá fornecer melhores resultados. Você pode usar a validação cruzada para medir o desempenho de ambas as abordagens.
ffriend
5

não é 'amostrado' em intervalos regulares, então acho que não se qualifica como dados de séries temporais.

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 .

Josh Hemann
fonte
11
+1 por oferecer uma nova ideia. Examinar a introdução e as conclusões do artigo de Shenstone & Hyndman, no entanto, sugere que o método de Croston geralmente não é muito bom: o artigo se concentra em tentar justificar e entender um procedimento popular que acaba sendo limitado; o melhor que os autores podem dizer é que, apesar disso, "previsões ... ainda podem ser úteis". Além disso, parece que este modelo não pôde acomodar os dados adicionais sobre os "níveis atuais de suprimento", conforme solicitado pelo OP.
whuber
3

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. insira a descrição da imagem aqui

EDIT2: OK, então, para responder à pergunta de "Que técnicas posso usar?"

  • regressão exponencial (mencionada acima)
  • Método de Holt
  • Método de inverno
  • ARIMA

Consulte esta página para uma pequena introdução em cada um: http://www.decisioncraft.com/dmdirect/forecastingtechnique.htm


fonte
Isso me levou a me perguntar: quais são meus pontos de dados? não as compras únicas - isso não levaria em conta quanto tempo passa entre elas e, portanto, o consumo total de um determinado recurso. Talvez eu deva interpolar para obter uma média em intervalos regulares (por exemplo, quantidade por semana) e depois usá-la como entrada de dados de séries temporais para extrapolar dados futuros?
Pense na diferença de tempo como a diferença nos valores de 'x' em um gráfico. A maioria dos tipos de análise de regressão levará em consideração as diferenças variadas. Tente seus dados de exemplo usando a função CRESCIMENTO no Excel, que usa regressão exponencial. Se você alterar as datas, seus valores projetados serão alterados de acordo.
3

Começou como um comentário, cresceu muito ...

não é 'amostrado' em intervalos regulares, então acho que não se qualifica como um dado de série temporal

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.

Glen_b -Reinstate Monica
fonte
-1

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
Como um algoritmo de classificação me daria uma previsão quantitativa?
@ Luke404: Weka tem 3 tipos de algoritmos (classificação, clustering e associação de mineração), e eles decidiram colocar a regressão na seção de classificação. Mas, em geral, você está certo, classificação e previsão quantitativa são coisas um pouco diferentes.
ffriend
-1

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.

em forma residual

Se você puder, pode ser bom executar o bootstrap para obter uma estimativa melhor dos erros de previsão.

dnlbrky
fonte
Como os resíduos no consumo acumulado seriam fortemente correlacionados, esse método não parece estatisticamente justificado. Usando um ajuste quadrático, apenas papéis sobre esse problema fundamental; não pode curá-lo.
whuber
-2

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