Какой алгоритм можно использовать для прогнозирования использования расходных материалов с учетом данных прошлых покупок?

10

Размышляя о предположительно простой, но интересной проблеме, я хотел бы написать код для прогнозирования расходных материалов, которые мне понадобятся в ближайшем будущем, учитывая полную историю моих предыдущих покупок. Я уверен, что проблема такого рода имеет более общее и хорошо изученное определение (кто-то предположил, что это связано с некоторыми понятиями в системах ERP и т. П.).

У меня есть полная история предыдущих покупок. Допустим, я смотрю на расходные материалы, мои данные выглядят так (дата, листы):

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

он не «отбирается» через регулярные промежутки времени, поэтому я думаю, что он не может считаться данными временного ряда .

У меня нет данных по фактическим уровням запасов каждый раз. Я хотел бы использовать эти простые и ограниченные данные, чтобы предсказать, сколько бумаги мне понадобится (например) через 3,6,12 месяца.

До сих пор я узнал, что то, что я ищу, называется Экстраполяция и не намного больше :)

Какой алгоритм можно использовать в такой ситуации?

И какой алгоритм, если он отличается от предыдущего, может также использовать некоторые дополнительные данные, дающие текущие уровни предложения (например, если я знаю, что на дату XI оставалось Y листов бумаги)?

Пожалуйста, не стесняйтесь редактировать вопрос, заголовок и теги, если вы знаете лучшую терминологию для этого.

РЕДАКТИРОВАТЬ: для чего это стоит, я буду пытаться кодировать это в Python. Я знаю, что есть много библиотек, которые реализуют более или менее любой алгоритм. В этом вопросе я хотел бы изучить концепции и методы, которые можно было бы использовать, а реальную реализацию оставить читателю в качестве упражнения.

Luke404
источник
1
Уважаемые статистики, я просто хочу сообщить вам, что этот вопрос не был оставлен. Я вернусь к этой конкретной проблеме, как только найду время и мотивацию (читай: босс говорит мне об этом), и я изучу ваши бесценные ответы и в конечном итоге помечу один как принятый (что для меня будет означать «фактически выполнено»).
Луки404,

Ответы:

12

Вопрос касается зависимости потребления от времени. Это требует регрессии цены в зависимости от времени ( не регрессии общего количества покупок в зависимости от времени). Экстраполяция достигается путем построения пределов прогнозирования для будущих покупок.

Возможны несколько моделей. Учитывая переезд в безбумажный офис (который продолжается уже около 25 лет :-), мы можем принять экспоненциальную (уменьшающуюся) модель. Результат представлен следующей диаграммой рассеяния потребления, на которой нарисована экспоненциальная кривая (приведенная через обычные наименьшие квадраты к логарифмам потребления) и ее 95% -ые пределы прогнозирования. Ожидается, что экстраполированные значения будут лежать вблизи линии и между пределами прогнозирования с вероятностью 95%.

фигура

На вертикальной оси показаны страницы в день в линейном масштабе. Темно-синяя сплошная линия подходит: она действительно экспоненциальная, но очень близка к линейной. Эффект экспоненциальной подгонки появляется в полосах предсказания, которые в этом линейном масштабе расположены асимметрично вокруг подгонки; в логарифмическом масштабе они будут симметричными.

Более точная модель будет учитывать тот факт, что информация о потреблении является более неопределенной в течение более коротких периодов времени (или когда общее количество покупок меньше), что может быть установлено с использованием взвешенных наименьших квадратов. Учитывая изменчивость этих данных и грубое равенство размеров всех покупок, дополнительные усилия не стоят.

Этот подход учитывает промежуточные данные инвентаризации , которые можно использовать для интерполяции норм потребления в промежуточное время. В таком случае, поскольку промежуточные объемы потребления могут значительно различаться, целесообразно использовать метод взвешенных наименьших квадратов.

Какие веса использовать? Мы могли бы рассмотреть потребление бумаги, которое обязательно возрастает в целых количествах бумаги, как число, которое изменяется независимо от дня в день. Таким образом, в течение коротких периодов разница в количестве будет пропорциональна продолжительности периода. Дисперсия счета за день будет обратно пропорциональна длине периода. Следовательно, веса должны быть прямо пропорциональны периодам между запасами. Так, например, потребление 1000 листов в период между 2007-05-10 и 2007-11-11 (около 180 дней) будет почти в пять раз больше веса потребления 1000 листов в период между 2007-11-11 и 2007-12- 18, срок всего 37 дней.

Один и тот же вес может учитываться в интервалах прогнозирования. Это приведет к относительно широким интервалам для прогнозов потребления в течение одного дня по сравнению с прогнозом для потребления в течение, скажем, трех месяцев.

Обратите внимание, что эти предложения сосредоточены на простых моделях и простых предсказаниях, подходящих для предполагаемого применения и очевидной большой изменчивости данных. Если прогнозы включают, скажем, расходы на оборону для большой страны, мы бы хотели учесть гораздо больше объяснительных переменных, учесть временную корреляцию и предоставить гораздо более подробную информацию в модели.

Whuber
источник
Если бы данные отбирались через регулярные промежутки времени, было бы целесообразно использовать подсчеты, а не показатели ?
MannyG
1
@MannyG Да, но только потому, что счет будет прямо пропорционален ставкам, а не потому, что было бы целесообразно использовать сами счетчики. Необходимость использования ставок здесь очевидна, когда мы рассмотрим, что на самом деле означает прогнозировать будущее значение: необходимо указать временной интервал прогнозируемого потребления. Таким образом, каждый предсказывает количество раз за время, чтобы получить количество, подразумевая, что количество должно быть количеством в единицу времени: нормой потребления .
whuber
@whuber Извините, но я не могу четко понять, какие модели описаны в вашем ответе и в каких пунктах один заканчивается и начинается другой. У меня похожая проблема, и часть вашего ответа кажется именно тем, что мне нужно, но мне нужно еще немного изучить этот вопрос, и я не могу сказать, прочитав ваш ответ, если вы говорите о различных моделях или об определенной модели, которая улучшается постепенно. Есть ли официальное название модели с весами, которые вы описываете? Ваша первая модель (экспоненциальное уменьшение) включает в себя веса? Заранее спасибо.
Agis
@rensokuken Я опишу одну модель и вариант, который взвешивает данные. Вторая половина этого ответа предлагает, как определить вес. Я не знаю ни одного формального имени, кроме «взвешенных наименьших квадратов».
whuber
@ Понятно. В начале вы описываете это, а затем, когда вы добавляете веса, вы описываете это , верно? Кроме того, есть ли у вас какие-либо ресурсы для поиска, связанные с конкретным решением и для начинающих в прогнозировании? Благодарю за разъяснение.
Agis
5

Это определенно проблема машинного обучения (я обновил теги в вашем посте). Скорее всего, это линейная регрессия . Короче говоря, линейная регрессия пытается восстановить связь между 1 зависимой и 1 или более независимыми переменными. Зависимой переменной здесь является использование расходных материалов . Для независимых переменных я предлагаю интервалы времени между покупками. Вы также можете добавить больше независимых переменных, например, количество людей, которые использовали расходные материалы в каждый момент, или что-либо еще, что может повлиять на количество покупок. Вы можете найти хорошее описание линейной регрессии вместе с реализацией на Python здесь .

Теоретически также возможно, что на суммы влияют не только временные интервалы между покупками, но и сами моменты времени. Например, по какой-то причине в январе люди могут захотеть больше бумаги, чем, скажем, в апреле. В этом случае вы не можете использовать номер месяца как самостоятельную переменную из-за характера самой линейной регрессии (номер месяца является просто меткой, но будет использоваться как сумма). Таким образом, у вас есть 2 способа, как это преодолеть.

Во-первых, вы можете добавить 12 дополнительных переменных , по одной на каждый месяц , и установить для каждой переменной значение 1, если оно представляет месяц покупки, и значение 0, если это не так. Затем используйте ту же линейную регрессию.

Во-вторых, вы можете использовать более сложный алгоритм, такой как M5 ' , который представляет собой смесь линейной регрессии и деревьев решений (подробное описание этого алгоритма можно найти в Data Mining: Практические инструменты и методы машинного обучения ).

ffriend
источник
Это зависит от того, сколько данных о пользователе у вас есть. Если этого вполне достаточно (скажем,> 100 транзакций за> 1 год), вы можете обучить модель для этого конкретного пользователя. В противном случае общая модель для всех пользователей может дать вам лучшие результаты. Вы можете использовать перекрестную проверку для измерения производительности обоих подходов.
друг
5

он не «отбирается» через регулярные промежутки времени, поэтому я думаю, что он не может считаться данными временного ряда.

Вот идея о том, как прогнозировать покупки: рассмотрите данные как прерывистый ряд спроса . То есть у вас есть временные ряды, сэмплированные с регулярными интервалами, но положительные значения явно нерегулярно разнесены. У Роба Хиндмана есть хорошая статья об использовании метода Кростона для прогнозирования прерывистого ряда спроса. В то время я также программировать много в Python, вы сэкономите много времени на разведку с использованием метода Croston, так же , как и другие методы прогнозирования временных рядов, легко доступны в отличном R пакет Роба прогноза .

Джош Хеманн
источник
1
+1 За предложение новой идеи. Изучение введения и выводов статьи Шенстона и Хиндмана, тем не менее, показывает, что метод Кростона, как правило, не очень хорош: в статье делается попытка оправдать и понять популярную процедуру, которая оказывается ограниченной; лучшее, что могут сказать авторы, - это то, что, несмотря на это, «прогнозы ... могут все еще быть полезными». Кроме того, похоже, что эта модель не может вместить дополнительные данные об «текущих уровнях поставок» в соответствии с запросом OP.
whuber
3

Я почти уверен, что вы пытаетесь провести некоторый регрессионный анализ, чтобы согласовать линию с вашими точками данных. Есть много инструментов , чтобы помочь вам - MS Excel является наиболее доступным. Если вы хотите найти собственное решение, лучше освежить статистику (возможно, здесь и здесь ). Как только вы подстроите линию под свои данные, вы можете экстраполировать в будущее.

РЕДАКТИРОВАТЬ: Вот скриншот примера Excel, который я упомянул в комментариях ниже. Даты, выделенные жирным шрифтом, - это случайные даты в будущем, которые я напечатал в себе. Значения, выделенные полужирным шрифтом в столбце B, представляют собой экстраполированные значения, рассчитанные с использованием экспоненциальной регрессии Excel. введите описание изображения здесь

РЕДАКТИРОВАТЬ 2: Хорошо, чтобы ответить на вопрос: «Какие методы я могу использовать?»

  • экспоненциальная регрессия (упомянуто выше)
  • Метод Холта
  • Зимний метод
  • ARIMA

Пожалуйста, смотрите эту страницу для небольшого введения по каждому: http://www.decisioncraft.com/dmdirect/forecastingtechnique.htm


источник
Это заставило меня спросить себя: что это мои точки данных? не отдельные покупки - это не учитывало бы, сколько времени проходит между ними и, таким образом, общее потребление данного ресурса. Может быть, я должен интерполировать их, чтобы получить некоторое среднее значение через регулярные промежутки времени (например, количество в неделю), а затем использовать это как ввод данных временного ряда для экстраполяции будущих данных?
Думайте о разнице во времени как о разнице ваших значений «х» на графике. Большинство типов регрессионного анализа будут учитывать различные различия. Попробуйте свои образцы данных с помощью функции РОСТ в Excel, которая использует экспоненциальную регрессию. Если вы измените даты, ваши прогнозируемые значения будут соответственно изменены.
3

Начал как комментарий, вырос слишком долго ...

он не «отбирается» через регулярные промежутки времени, поэтому я думаю, что он не может считаться данными временного ряда

Это ошибочный вывод - это, безусловно, временные ряды. Временной ряд может быть нерегулярно выбран, он просто требует отличаться от обычных подходов, когда это так.

Эта проблема, по-видимому, связана со стохастическими проблемами, такими как уровни плотины (вода обычно используется с довольно стабильной скоростью во времени, иногда увеличиваясь или уменьшаясь более или менее быстро, в то время как в других случаях она довольно стабильна), в то время как уровни плотины имеют тенденцию только увеличиваться быстро (в основном в прыжках), так как происходит дождь. Схемы использования и пополнения бумаги могут быть несколько схожими (хотя заказанное количество может иметь тенденцию быть гораздо более стабильным и иметь гораздо большее количество чисел, чем количество осадков, и возникать всякий раз, когда уровень становится низким).

Это также относится к капиталу страховой компании (но отчасти наоборот) - помимо начального капитала, деньги от премий (чистые операционные расходы) и инвестиций поступают довольно стабильно (иногда более или менее), в то время как платежи по страховым полисам, как правило, осуществляются в относительно больших объемах. суммы.

Обе эти вещи были смоделированы, и могут дать небольшое представление об этой проблеме.

Glen_b - Восстановить Монику
источник
-1

Вы должны взглянуть на WEKA. Это инструмент и API Java с набором алгоритмов машинного обучения. В частности, вы должны искать алгоритмы классификации.

Удачи


источник
Как алгоритм классификации даст мне количественный прогноз?
@ Luke404: Weka имеет 3 типа алгоритмов (классификация, кластеризация и анализ ассоциаций), и они решили поместить регрессию в раздел классификации. Но в целом вы правы, классификация и количественный прогноз - это несколько разные вещи.
друг
-1

Я бы использовал линейные наименьшие квадраты, чтобы приспособить модель к совокупному потреблению (т. Е. Общее количество страниц по дате). Первоначальным предположением было бы использование полинома первой степени. Однако, остатки указывают, что первая степень не соответствует данным в примере, поэтому следующим логическим шагом будет увеличение их до второй степени (т.е. квадратичной). Это устраняет кривизну остатков, а слегка отрицательный коэффициент для квадрата означает, что скорость потребления уменьшается со временем, что кажется интуитивным, учитывая, что большинство людей, вероятно, склонны использовать меньше бумаги со временем. Для этих данных я не думаю, что вам нужно выходить за рамки подгонки второй степени, поскольку вы можете начать переобучение, и в результате экстраполяция может не иметь смысла.

Вы можете увидеть подгонки (включая экстраполяцию) и остатки на графиках ниже.

поместиться остаточный

Если вы можете, было бы хорошо выполнить начальную загрузку, чтобы получить лучшую оценку ошибок предсказания.

dnlbrky
источник
Поскольку остатки в совокупном потреблении будут сильно коррелированы, этот метод не представляется статистически оправданным. Использование квадратичной подгонки только статей над этой фундаментальной проблемой; это не может вылечить это.
whuber
-2

Я думаю, что вы можете получить свои данные, используя исследование операций .

Почему бы вам не попытаться найти некоторые уравнения, которые принимают в качестве переменных количество бумаги, использованной за период времени, пользователей бумаги и т. Д.?


источник