Нахождение сходства в многомерном массиве - PullRequest
0 голосов
/ 01 октября 2009

Рассмотрим отдел продаж, который устанавливает цель продаж на каждый день. Общая цель не важна, но избыток или несовершеннолетний. Например, если у понедельника недели 1 есть цель 50, а мы продаем 60, этот день получает +10. Во вторник наша цель - 48, и мы продаем 46 за счёт -2. В конце недели мы оцениваем неделю так:

[0,0]=10,[0,1]=-2,[0,2]=1,[0,3]=7,[0,4]=6

В этом примере как понедельник (0,0), так и четверг и пятница (0,3 и 0,4) являются «горячими»

Если мы посмотрим на результаты второй недели, мы увидим:

[1,0]=-4,[1,1]=2,[1,2]=-1,[1,3]=4,[1,4]=5

Для недели 2 конец недели жаркий, а вторник теплый.

Далее, если мы сравним первую и вторую недели, мы увидим, что конец недели лучше, чем первая часть недели. Итак, теперь давайте добавим недели 3 и 4:

[0,0]=10,[0,1]=-2,[0,2]=1,[0,3]=7,[0,4]=6
[1,0]=-4,[1,1]=2,[1,2]=-1,[1,3]=4,[1,4]=5
[2,0]=-8,[2,1]=-2,[2,2]=-1,[2,3]=2,[2,4]=3
[3,0]=2,[3,1]=3,[3,2]=4,[3,3]=7,[3,4]=9

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

Я не парень по математике или статистике, но я почти уверен, что есть алгоритмы, разработанные для такого типа задач. Поскольку у меня нет математического фона (и я не помню ни одной алгебры из моих ранних дней), где мне искать помощь? У этого типа логики «горячей точки» есть имя? Существуют ли формулы или алгоритмы, которые могут срезать, нарезать кубиками и сравнивать многомерные массивы?

Любая помощь, указатели или советы приветствуются!

Ответы [ 7 ]

2 голосов
/ 01 октября 2009

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

Я упрощаю здесь, но по сути у вас есть два движущихся вычисления:

  • 14-дневный стохастик: 100 * (сегодняшняя цена закрытия - минимум последних 14 дней) / (максимум последних 14 дней - минимум последних 14 дней)
  • 3-дневный стохастик: тот же расчет, но относительно 3-х дней.

14-дневные и 3-дневные стохастики будут иметь тенденцию следовать одной и той же кривой. Ваш стохастик упадет где-то между 1,0 и 0,0; стохастик выше 0,8 считается перекупленным или медвежьим, ниже 0,2 указывает на перепроданность или бычий. Более конкретно, когда ваш 3-дневный стохастик «пересекает» 14-дневный стохастик в одном из этих регионов, у вас есть предиктор импульса цен.

Хотя некоторые люди считают технический анализ вуду, эмпирические данные указывают на то, что он обладает некоторой предсказательной силой. При всей своей ценности стохастик - это очень простой и эффективный способ визуализации динамики цен во времени.

2 голосов
/ 01 октября 2009

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

1 голос
/ 01 октября 2009

Мне кажется, что подход OLAP (например, сводные таблицы в MS Excel) идеально подходит для этой проблемы.

1 голос
/ 01 октября 2009

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

Вот результат - ваши числа и их нормализованная автокорреляция.

10    1,000
-2    0,097
 1   -0,121
 7    0,084
 6    0,098
-4    0,154
 2   -0,082
-1   -0,550
 4   -0,341
 5   -0,027
-8   -0,165
-2   -0,212
-1   -0,555
 2   -0,426
 3   -0,279
 2    0,195
 3    0,000
 4   -0,795
 7   -1,000
 9  

Я использовал Excel, чтобы получить значения. Но последовательность в столбце A и добавить уравнение =CORREL($A$1:$A$20;$A1:$A20) в ячейку B1 и скопировать его затем до B19. Если вы добавите линейную диаграмму, вы сможете хорошо видеть структуру данных.

0 голосов
/ 02 октября 2009

Это, вероятно, выходит за рамки того, что вы ищете, но один технический подход, который дал бы вам возможность делать прогнозы, смотреть на такие вещи, как статистическая значимость и т. Д., Будет ARIMA или похожие модели Box-Jenkins.

0 голосов
/ 02 октября 2009

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

Например, когда вы взаимно коррелируете

0 0 1 2 0 0

с

0 0 0 1 1 0

результат будет

 2 0 0 1 3 0

наибольшее значение равно 3, что соответствует смещению (вправо) второго массива на 4

0 0 0 1 1 0 -->  0 0 1 1 0 0

, а затем умножить компонент

0   0   1   2   0   0
0   0   1   1   0   0
----------------------
0 + 0 + 1 + 2 + 0 + 0 = 3

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

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

 -1 -1 -1 -1  1  1

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

0 голосов
/ 01 октября 2009

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

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

...