[ОТВЕТИТЬ]
06.12.2010 03:41
andrey_f
 
Коллеги,
в одной из тем зародилась идея анализа совместных продаж (комплиментарных продаж, перекрестных продаж, ассортиментной связи) в Excel.
Специально для этого я сделал утилиту, которая позволяет это анализировать в Excel.
Скорость анализа очень высокая, миллион строк за 5 секунд.
Во вложении версии для 2003 и 2007 Excel. Внимательно читаем инструкцию в файле!
Если функция будет востребована, то я могу ее включить в следующую версию надстройки Inventor.
Жду отзывов.

Ниже я выложил более новую версию утилиты от administrator 7 дек 2010
Вложения
Тип файла: rar Inventor_совместные продажи2003.rar (59.0 Кб, 1099 просмотров)
Тип файла: rar Inventor_совместные продажи2007.rar (64.9 Кб, 2797 просмотров)
06.12.2010 04:00
VVY
 
Цитата:
administrator Коллеги,
в одной из тем зародилась идея анализа совместных продаж (комплиментарных продаж, перекрестных продаж, ассортиментной связи) в Excel.
Специально для этого я сделал утилиту, которая позволяет это анализировать в Excel.
Скорость анализа очень высокая, миллион строк за 5 секунд.
Во вложении версии для 2003 и 2007 Excel. Внимательно читаем инструкцию в файле!
Если функция будет востребована, то я могу ее включить в следующую версию надстройки Inventor.
Жду отзывов.
Приветствую!
Я ЗА двумя руками и ногами!
06.12.2010 07:37
imported_mike
 
Да, эта "добавка" позволит делать анализ номенклатуры полнее и качественнее, а Inventor-у - огромный плюс!
06.12.2010 23:29
RazVal
 
Цитата:
administrator анализ совместных продаж (комплиментарных продаж, перекрестных продаж, ассортиментной связи) в Excel.
я сделал утилиту, которая позволяет это.
Скорость анализа очень высокая, миллион строк за 5 секунд.
могу ее включить в следующую версию надстройки Inventor.
Будет здорово! Особенно, если она ещё и запирающие продажи считать будет!.. ;0)
07.12.2010 03:09
andrey_f
 
Цитата:
RazVal Будет здорово! Особенно, если она ещё и запирающие продажи считать будет!.. ;0)
Валера, идея конечно супер :), но...
для этого нужно еще и остатки брать каждого товара по дням, такой массив данных в Excel уместить вряд ли получится, т.е. обращаться нужно к базе, а написать универсальный макрос для работы в разных компаниях не получится :)
С другой стороны, при отсутствии лучшего инструмента, можно проанализировать полученный результат (наиболее интересные позиции в верхней части списка) на обратную совместность. В общем, информация окажется полезной, тем более что мы говорим об Excel, т.е. об анализе, который можно сделать своими руками для того, чтобы обосновать необходимость написания более функционального отчета программистами. ;)
07.12.2010 03:14
VVY
 
Цитата:
administrator
Цитата:
RazVal Будет здорово! Особенно, если она ещё и запирающие продажи считать будет!.. ;0)
Валера, идея конечно супер :), но...
для этого нужно еще и остатки брать каждого товара по дням, такой массив данных в Excel уместить вряд ли получится, т.е. обращаться нужно к базе, а написать универсальный макрос для работы в разных компаниях не получится :)
С другой стороны, при отсутствии лучшего инструмента, можно проанализировать полученный результат (наиболее интересные позиции в верхней части списка) на обратную совместность. В общем, информация окажется полезной, тем более что мы говорим об Excel, т.е. об анализе, который можно сделать своими руками для того, чтобы обосновать необходимость написания более функционального отчета программистами. ;)
Мне нравится идея!
07.12.2010 05:26
andrey_f
 
Цитата:
administrator можно проанализировать полученный результат (наиболее интересные позиции в верхней части списка) на обратную совместность.
Валера, я доработал утилиту, теперь она показывает и обратную совместность продаж в следующей колонке. В общем получается гламурненько ) При том, что скорость обработки данных осталось приблизительно той же.
Что скажете, господа? ;)

Ниже я выложил еще более новую версию утилиты от administrator 8 дек 2010
Вложения
Тип файла: rar Inventor_совместные продажи2003_v2.rar (60.3 Кб, 301 просмотров)
Тип файла: rar Inventor_совместные продажи2007_v2.rar (66.0 Кб, 508 просмотров)
08.12.2010 02:55
andrey_f
 
Трах тибидох! :D

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

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

Важно: предполагается что все строки в исходном массиве для анализа уникальны, т.е. нет двух строк с одинаковым номером документа и номенклатурой одновременно. Для удаления дубликатов можно использовать соответствующую функцию надстройки Inventor "Вывод уникальных элементов". Анализ на дубли нужно проводить по вновь созданному столбцу, который будет сцеплять (функция сцепить или &) номер документа и номенклатуру. Если у вас в итоговом отчете имеется коэффициент совместности больше 100%, то это признак того, что в массиве есть дубли строк (на образование пар это слабо влияет при небольшом количестве дублей, но коэффициенты получаются завышенными). Поэтому наличие дублей лучше проверить до начала анализа.
Вложения
Тип файла: rar Inventor_совместные продажи2003_v3.rar.rar (70.0 Кб, 384 просмотров)
Тип файла: rar Inventor_совместные продажи2007_v3.rar.rar (77.2 Кб, 787 просмотров)
08.12.2010 03:26
VVY
 
Цитата:
administrator Трах тибидох! :D

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

Вадим сегодня ночью безжалостно тестировал данную штуковину, и надеюсь расскажет нам что-нибудь интересное по этому поводу (сколько записей было в массиве, сколько времени ушло, каков результат) ;)
Привет!
335 039 шт. записей поставил на ночь с 21:00, и в 8:00 было уже готово, но было сделано раньше... не смотрел на время, когда проснулся.
Работает все отлично, никаких нареканий.

Предлагаю скинуться всем и поставить Фишеру одноименный памятник :D !
08.12.2010 12:01
RazVal
 
Цитата:
administrator Валера, я доработал утилиту, теперь она показывает и обратную совместность продаж в следующей колонке.
Здорово! Уже опубликовал ссылку на этот замечательный инструмент в статье, где описывался поиск сопутствующих товаров и расчёт для них нормы складского остатка, а также в инструментах Microsoft Excel для автоматизации управления запасами. ;)
10.12.2010 03:21
andrey_f
 
Один умный человек навеял отличную идею :) :
Цитата:
sf13 Андрей, спасибо,
модуль работает очень хорошо. Прост, эффективен, полезен.
Не рассматривали вариант, когда позиции, проявившие себя совместными в парах, проверяются далее на множественную (тройную и более) совместность?
Валера, Вадим, что думаете по этому поводу?
Сделать то это не сложно, основной алгоритм уже есть, остается добавить дополнительные циклы. Главное, чтобы этим пользовались и был результат .

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

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

Таким образом, анализировать нужно все виды совместностей. И усилия (технология продажи, выкладка, акции и т.д.) должны быть направлены на то, чтобы как можно больше следующих совместностей:
- непоследовательные парные совместности: Т1-Т2, Т1-Т3
- последовательные парные совместности ("цепные" множественные совместности): Т1-Т2-Т3
трансформировались в "базовые" множественные совместности: Т1=Т2=Т3.

Таким образом, будет увеличен средний чек и удовлетворенность покупателя.

Логично?

Проанализировать утилитой "Inventor: анализ совместных продаж" на данный момент можно:
- непоследовательные парные совместности,
- последовательные парные совместности (пусть это и не совсем удобно)
А вот анализировать "базовые" множественные совместности утилита пока не умеет.

Кстати еще: "базовые" множественные совместности быть может проще отлавливать на уровне категорий, т.е. проводить анализ не конкретных артикулов, а заменять их категориями, к которым они относятся. Тогда список результатов будет больше и, возможно, будет над чем поразмышлять.
10.12.2010 23:14
RazVal
 
Цитата:
administrator
Цитата:
sf13 Не рассматривали вариант, когда позиции, проявившие себя совместными в парах, проверяются далее на множественную (тройную и более) совместность?
Валера, что думаете по этому поводу?
Я считаю, что это не нужно, так как работать все эти множества будут уже не одну ночь, а N сочетаний из M. ;) Для проверки же конкретных групповых коэффициентов, которые подозреваются в подобной зависимости, достаточно, просто, заменить несколько позиций названием, объединяющей их группы, и провести тот же самый анализ с помощью уже существующего макроса.

Цитата:
administrator Если товар Т3 продается одновременно с Т1 и Т2 (в одних и тех же документах), то это "базовая" множественная совместность.
Такая ситуация вылезет в парных коэффициентах совместимости после применения уже существующего макроса, поэтому опять же ничего делать бы не стал. ;)
13.12.2010 15:35
VVY
 
Цитата:
administrator Трах тибидох! :D

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

Вадим сегодня ночью безжалостно тестировал данную штуковину, и надеюсь расскажет нам что-нибудь интересное по этому поводу (сколько записей было в массиве, сколько времени ушло, каков результат) ;)
Приветствую!
Новый рекорд с участием 700 000 строк, сделалось за 18 часов на моем супер ПК. Может и раньше сделалось, но опять не смог отследить данный момент.
Увидел много связей, которые не так очевидны на 1-й взгляд!
13.12.2010 16:22
VVY
 
Цитата:
administrator Один умный человек навеял отличную идею :) :
Цитата:
sf13 Андрей, спасибо,
модуль работает очень хорошо. Прост, эффективен, полезен.
Не рассматривали вариант, когда позиции, проявившие себя совместными в парах, проверяются далее на множественную (тройную и более) совместность?
Валера, Вадим, что думаете по этому поводу?
Сделать то это не сложно, основной алгоритм уже есть, остается добавить дополнительные циклы. Главное, чтобы этим пользовались и был результат .

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

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

Таким образом, анализировать нужно все виды совместностей. И усилия (технология продажи, выкладка, акции и т.д.) должны быть направлены на то, чтобы как можно больше следующих совместностей:
- непоследовательные парные совместности: Т1-Т2, Т1-Т3
- последовательные парные совместности ("цепные" множественные совместности): Т1-Т2-Т3
трансформировались в "базовые" множественные совместности: Т1=Т2=Т3.

Таким образом, будет увеличен средний чек и удовлетворенность покупателя.

Логично?

Проанализировать утилитой "Inventor: анализ совместных продаж" на данный момент можно:
- непоследовательные парные совместности,
- последовательные парные совместности (пусть это и не совсем удобно)
А вот анализировать "базовые" множественные совместности утилита пока не умеет.

Кстати еще: "базовые" множественные совместности быть может проще отлавливать на уровне категорий, т.е. проводить анализ не конкретных артикулов, а заменять их категориями, к которым они относятся. Тогда список результатов будет больше и, возможно, будет над чем поразмышлять.
Андрей, привет!
Идея нравится, но согласен с Валерой, что Excel может не выдержать таких изевательств.
Можно попробывать окончательно Excel сломать и мой супер ПК! :D
14.12.2010 02:33
andrey_f
 
Спасибо. Тогда не буду доделывать ничего. ;)
Надо придумать какую-нибудь другую фишку и написать под нее утилиту.
14.12.2010 02:37
VVY
 
Цитата:
administrator Коллеги,
в одной из тем зародилась идея анализа совместных продаж (комплиментарных продаж, перекрестных продаж, ассортиментной связи) в Excel.
Специально для этого я сделал утилиту, которая позволяет это анализировать в Excel.
Скорость анализа очень высокая, миллион строк за 5 секунд.
Во вложении версии для 2003 и 2007 Excel. Внимательно читаем инструкцию в файле!
Если функция будет востребована, то я могу ее включить в следующую версию надстройки Inventor.
Жду отзывов.

Ниже я выложил более новую версию утилиты от administrator 7 дек 2010
Андрей, привет!
Предлагаю описать а зачем эти все "телодвижения" по "связаным продажам" нужны компаниям:
1. Мы увеличиваем количество строк в документах продажи, соответсвенно увеличиваем товарооборот по магазину/магазинам.
2. Оптимизируем выкладку товара с точки зрения связанности продаж.
3. Оптимизируем рекламную активность направленную на напоминание о продаже связанного товара.
4. Оптимизируем закуп с точки зрения, например, нежелательного отсутствия товара "С", который продается вместе с товаром "А".
5. Можем влиять на продажи НОВИНОК, так как можем специально без истории продаж назначать связанные с НОВИНКАМИ товары и таким образом повышать продажи НОВИНОК.

В любом случае необходимо программно этот вопрос решать и продумывать мотивацию продавцов, которая должна быть заточена на продажу таки вот комплектов.
14.12.2010 03:22
VVY
 
Цитата:
VVY
Цитата:
administrator Коллеги,
в одной из тем зародилась идея анализа совместных продаж (комплиментарных продаж, перекрестных продаж, ассортиментной связи) в Excel.
Специально для этого я сделал утилиту, которая позволяет это анализировать в Excel.
Скорость анализа очень высокая, миллион строк за 5 секунд.
Во вложении версии для 2003 и 2007 Excel. Внимательно читаем инструкцию в файле!
Если функция будет востребована, то я могу ее включить в следующую версию надстройки Inventor.
Жду отзывов.

Ниже я выложил более новую версию утилиты от administrator 7 дек 2010
Андрей, привет!
Предлагаю описать а зачем эти все "телодвижения" по "связаным продажам" нужны компаниям:
1. Мы увеличиваем количество строк в документах продажи, соответсвенно увеличиваем товарооборот по магазину/магазинам.
2. Оптимизируем выкладку товара с точки зрения связанности продаж.
3. Оптимизируем рекламную активность направленную на напоминание о продаже связанного товара.
4. Оптимизируем закуп с точки зрения, например, нежелательного отсутствия товара "С", который продается вместе с товаром "А".
5. Можем влиять на продажи НОВИНОК, так как можем специально без истории продаж назначать связанные с НОВИНКАМИ товары и таким образом повышать продажи НОВИНОК.

В любом случае необходимо программно этот вопрос решать и продумывать мотивацию продавцов, которая должна быть заточена на продажу таки вот комплектов.
По НОВИНКАМ мы это делаем в максимально короткий срок.
6. Мы увеличиваем сервис для покупателей, так как предлагаем смежный ассортимент и максимально удовлетворяем потребности покупателей, что не противоречит концепции маркетинга :D .
14.12.2010 04:28
andrey_f
 
Цель - увеличить средний чек путем продажи дополнительного товара.
Все остальное средство. Ты вроде бы все написал.
Главное предложить покупателю купить, а это либо работа продавца (продавец должен быть продавцом, а не кассиром, который тупо выбивает чек и заворачивает товар), либо в супермаркетах мерчандайзинг (выкладка - молчаливый продавец).
Можно добавить еще ценообразование: на товар, который продается прицепом нет смысла устанавливать низкую наценку. Про планирование продаж и запасов Валера уже писал.
14.12.2010 13:39
VVY
 
Цитата:
administrator Главное предложить покупателю купить, а это либо работа продавца (продавец должен быть продавцом, а не кассиром, который тупо выбивает чек и заворачивает товар), либо в супермаркетах мерчандайзинг (выкладка - молчаливый продавец).
Нужно заметить, что одно другому не мешает, то есть можно все это делать одновременно и получим синергитический эффект. :D
14.12.2010 14:18
VVY
 
Цитата:
administrator Спасибо. Тогда не буду доделывать ничего. ;)
Надо придумать какую-нибудь другую фишку и написать под нее утилиту.
Придумаем, ты не переживай! :D
22.12.2010 20:22
RazVal
 
Цитата:
administrator Надо придумать какую-нибудь другую фишку и написать под нее утилиту.
Иногда возникает потребность в кластерном анализе. Суть на примере тех же чеков. У нас есть клиенты которые покупают пельмени и майонез, а есть которые покупают омаров и коллекционное вино. Если мы посмотрим по чекам, то увидим, что эти корзины товаров практически не пересекаются, - и это можно понять чисто математически. Вот было бы здорово, чтобы можно было выделять такие кластеры, не вникая в их суть, а, просто, по самим чекам. То есть понимать результаты технического кластерного анализа, а не подбирать факты под наши гипотезы.
23.12.2010 02:23
VVY
 
Цитата:
RazVal
Цитата:
administrator Надо придумать какую-нибудь другую фишку и написать под нее утилиту.
Иногда возникает потребность в кластерном анализе. Суть на примере тех же чеков. У нас есть клиенты которые покупают пельмени и майонез, а есть которые покупают омаров и коллекционное вино. Если мы посмотрим по чекам, то увидим, что эти корзины товаров практически не пересекаются, - и это можно понять чисто математически. Вот было бы здорово, чтобы можно было выделять такие кластеры, не вникая в их суть, а, просто, по самим чекам. То есть понимать результаты технического кластерного анализа, а не подбирать факты под наши гипотезы.
Валера, привет!
1. А как ты видишь методику (алгоритм) выделения кластеров?
2. Что даст выделение этих кластеров? Классификацию?
23.12.2010 03:42
andrey_f
 
Цитата:
RazVal
Цитата:
administrator Надо придумать какую-нибудь другую фишку и написать под нее утилиту.
Иногда возникает потребность в кластерном анализе. Суть на примере тех же чеков. У нас есть клиенты которые покупают пельмени и майонез, а есть которые покупают омаров и коллекционное вино. Если мы посмотрим по чекам, то увидим, что эти корзины товаров практически не пересекаются, - и это можно понять чисто математически. Вот было бы здорово, чтобы можно было выделять такие кластеры, не вникая в их суть, а, просто, по самим чекам. То есть понимать результаты технического кластерного анализа, а не подбирать факты под наши гипотезы.
Так... Валера, наливай! :D
Я так понимаю речь идет о иерархическом кластерном анализе агломеративным методом (последовательное объединение исходных элементов и соответствующее уменьшение числа кластеров). Я говорю терминами вот этой статьи. Т.е изначально имеем пары, полученные при помощи анализа совместных продаж, а потом, анализируя связь в этих парах, выделяем кластеры более высокого уровня.



Я приблизительно понимаю, что должно получиться, но не могу понять как это алгоритмизировать.
Быть может нам нужно перебором найти такую пару товаров, которая имеет наибольший коэффициент совместности с анализируемой парой... А вдруг с этой парой другая пара имеет больший коэффициент... Короче нужно просчитывать всю матрицу, если я в том направлении думаю. А потом в этой матрице анализировать неким образом какие пары с какими имеют наибольшую совместность. Пока мои рассуждения меня не особо радуют.
Этот метод анализа реализован в SPSS. Я не пользуюсь этой программой и прокомментировать этого не могу. Вопрос еще вот в чем: сколько времени займет такой анализ, если проводить его в Excel на обычном компьютере? Стоит ли изобретать велосипед, если это уже есть в другой общедоступной программе в базовой комплектации?
23.12.2010 03:47
VVY
 
Цитата:
administrator
Цитата:
RazVal
Цитата:
administrator Надо придумать какую-нибудь другую фишку и написать под нее утилиту.
Иногда возникает потребность в кластерном анализе. Суть на примере тех же чеков. У нас есть клиенты которые покупают пельмени и майонез, а есть которые покупают омаров и коллекционное вино. Если мы посмотрим по чекам, то увидим, что эти корзины товаров практически не пересекаются, - и это можно понять чисто математически. Вот было бы здорово, чтобы можно было выделять такие кластеры, не вникая в их суть, а, просто, по самим чекам. То есть понимать результаты технического кластерного анализа, а не подбирать факты под наши гипотезы.
Так... Валера, наливай! :D
Я так понимаю речь идет о иерархическом кластерном анализе агломеративным методом (последовательное объединение исходных элементов и соответствующее уменьшение числа кластеров). Я говорю терминами вот этой статьи. Т.е изначально имеем пары, полученные при помощи анализа совместных продаж, а потом, анализируя связь в этих парах, выделяем кластеры более высокого уровня.



Я приблизительно понимаю, что должно получиться, но не могу понять как это алгоритмизировать.
Быть может нам нужно перебором найти такую пару товаров, которая имеет наибольший коэффициент совместности с анализируемой парой... А вдруг с этой парой другая пара имеет больший коэффициент... Короче нужно просчитывать всю матрицу, если я в том направлении думаю. А потом в этой матрице анализировать неким образом какие пары с какими имеют наибольшую совместность. Пока мои рассуждения меня не особо радуют.
Этот метод анализа реализован в SPSS. Я не пользуюсь этой программой и прокомментировать этого не могу. Вопрос еще вот в чем: сколько времени займет такой анализ, если проводить его в Excel на обычном компьютере? Стоит ли изобретать велосипед, если это уже есть в другой общедоступной программе в базовой комплектации?
Готов пожертвовать свой ПК на благо науки! :D
23.12.2010 14:58
RazVal
 
Цитата:
VVY Валера, Что даст выделение этих кластеров? Классификацию?
Ну, в данном примере мы получим сегментирование клиентов. И сможем соответственно анализировать динамику этих сегментов, и понимать, что нужно что-то делать в проблемном сегменте. Или понять, что у нас сейчас совсем не то позиционирование - например мы себя подаём, как VIP, а у нас нет товаров для этих VIP в некоторых категориях.

Цитата:
administrator Я так понимаю речь идет о иерархическом кластерном анализе агломеративным методом (последовательное объединение исходных элементов и соответствующее уменьшение числа кластеров). Т.е изначально имеем пары, полученные при помощи анализа совместных продаж, а потом, анализируя связь в этих парах, выделяем кластеры более высокого уровня.
Да, ты понял всё совершенно точно, и даже навёл меня на мысль, как должен выглядеть алгоритм! - До этого представлял его себе очень смутно.

Цитата:
administrator Я приблизительно понимаю, что должно получиться, но не могу понять как это алгоритмизировать.
Быть может нам нужно перебором найти такую пару товаров, которая имеет наибольший коэффициент совместности с анализируемой парой... А вдруг с этой парой другая пара имеет больший коэффициент... Короче нужно просчитывать всю матрицу, если я в том направлении думаю. А потом в этой матрице анализировать неким образом какие пары с какими имеют наибольшую совместность. Пока мои рассуждения меня не особо радуют.
Смотри, ты считаешь за 5 секунд все пары, потом выбираешь одну с наибольшим значением, и обзываешь это дело первым кластером: заменяешь обе позиции на "1", и где-то запоминаешь, что в первый кластер входят эти две позиции. Дальше повторяешь расчёт, где эти позиции уже являются одной - "1". Соответственно, у тебя возможны две ситуации: либо две других позиции уже образуют кластер - его именуем по аналогии "2", и продолжаем расчёт; либо сильней всего какая-то позиция связана с кластером "1" - тогда ты эту позицию добавляешь в этот кластер - переименовываешь в "1" и "запоминаешь", что она туда входит. Если на каком-то из шагов, окажется, что сильнее всего связаны кластер "24" и кластер "96", то мы все позиции из них объединяем в новый кластер "514" - и далее рассматриваем как единый кластер, при этом в конце расчёта, если нам понадобится опуститься на уровень детализации тех кластеров, мы сможем посмотреть, какие позиции кластера "514" из кластера "24", а какие из "96" - либо будем рассматривать их как нечто единое, в любом случае - это уже делает человек смотря на итоговый результат. Заканчивать работу по кластеризации можно по достижению какого-то коэффициента связности - например, если максимальный коэффициент пары позиций или кластеров меньше 0,7, то заканчиваем расчёт.

Цитата:
administrator Вопрос еще вот в чем: сколько времени займет такой анализ, если проводить его в Excel на обычном компьютере?
По времени, вроде, должно не так долго считаться - конечно всё зависит от заданного критического уровня, когда прервётся расчёт, и количества позиций, но оно во время расчёта будет всё время уменьшаться за счёт их объединения в кластера. Ещё можно попробовать ускорить расчёт за счёт того, что объединять в кластера быстрее - не по одной паре, а сразу все, удовлетворяющие условию "больше 0,7" - тогда ряд количества проверяемых связей будет сходится значительно быстрее и общее время расчёта ощутимо уменьшится...

Цитата:
administrator Стоит ли изобретать велосипед, если это уже есть в другой общедоступной программе в базовой комплектации?
Ну это решать тебе! Просто, у тебя ядро расчёта уже реализовано, - по сути осталось только его запустить в определённой последовательности N раз... ;)
24.12.2010 05:40
andrey_f
 
Цитата:
RazVal Смотри, ты считаешь за 5 секунд все пары, потом выбираешь одну с наибольшим значением, и обзываешь это дело первым кластером: заменяешь обе позиции на "1", и где-то запоминаешь, что в первый кластер входят эти две позиции. Дальше повторяешь расчёт, где эти позиции уже являются одной - "1". Соответственно, у тебя возможны две ситуации: либо две других позиции уже образуют кластер - его именуем по аналогии "2", и продолжаем расчёт; либо сильней всего какая-то позиция связана с кластером "1" - тогда ты эту позицию добавляешь в этот кластер - переименовываешь в "1" и "запоминаешь", что она туда входит. Если на каком-то из шагов, окажется, что сильнее всего связаны кластер "24" и кластер "96", то мы все позиции из них объединяем в новый кластер "514" - и далее рассматриваем как единый кластер, при этом в конце расчёта, если нам понадобится опуститься на уровень детализации тех кластеров, мы сможем посмотреть, какие позиции кластера "514" из кластера "24", а какие из "96" - либо будем рассматривать их как нечто единое, в любом случае - это уже делает человек смотря на итоговый результат. Заканчивать работу по кластеризации можно по достижению какого-то коэффициента связности - например, если максимальный коэффициент пары позиций или кластеров меньше 0,7, то заканчиваем расчёт.
Так, Валера, давай по порядку :)
- за 5 секунд делается анализ по отдельной позиции, а нам нужно провести тотальный анализ массива, это занимает по тестам Вадима часы. Я правильно думаю, что производиться должен анализ именно всего массива а не одной позиции? Все дальнейшие рассуждение построены на этой основе.
- сделав тотальный анализ массива на предмет совместных продаж мы получаем список пар товаров, продающихся вместе с заданными параметрами. Затем, мы заменяем в этом списке пары товара на номера кластеров. Каждая пара товаров - отдельный кластер, но если какая-то позиция из пары уже входит в другой кластер, то вторую позицию этой пары тоже включаем в этот кластер (если список будет изначально отсортирован в порядке убывания коэффициента совместности, то, думаю, ошибки в этом нет).
- запоминаем какие позиции в какие кластера входят (запоминаем в массив из трех полей: товар, уровень кластеризации, номер кластера) и после этого меняем в исходном массиве (изначальном массиве с номерами документов) наименование номенклатуры на номера полученных кластеров. Запускаем тотальный анализ массива повторно.
- получаем новый результат в виде списка пар товаров, продающихся вместе с заданными параметрами. Можно ли утверждать, что в этом списке будут все номера кластеров, полученные на предыдущем этапе (кажется, что это так, но есть сомнения)? Анализируем полученный список пар по строкам: 1ый цикл по всему списку: если с номером кластера встречается позиция номенклатуры, то мы включаем ее в этот кластер (при этом уровень кластеризации = 1), если в одной из следующих строк встречаем эту же позицию, но в паре с другим кластером, то игнорируем эту строку (вроде бы так...); 2ой цикл по всему списку: анализируем только те строки где встречаются разные кластеры и переименовываем эти кластеры в кластеры второго уровня (если один кластер из пары уже входит в другой кластер второго уровня, то второй кластер из пары включаем в этот же кластер второго уровня), и запоминаем это с уровнем кластеризации = 2.
- после этого меняем в исходном массиве (массиве с номерами документов, откорректированном на 1ом этапе) наименование номенклатуры на номера полученных кластеров и номера кластеров на номера кластеров высшего уровня. Вот тут вопрос: нужно ли делать исправления кластеров на кластера второго уровня, ведь мы включили в имеющиеся кластеры новые позиции и при повторном тотальном анализе массива к этим кластерам могут присоединиться новые позиции номенклатуры? При таком раскладе позиции будут прикрепляться к более большим кластерам верхнего уровня, что лишает нас информации о том, в какой кластер более низкого уровня входит данная позиция.
- так делаем до тех пор, пока выполняется заданный коэффициент совместности между кластерами. По идее в итого получим один кластер самого высокого уровня - весь наш ассортимент.
- в итоге, массив (в который мы запоминали какой товар соответствует какому кластеру, и какому кластеру более высокого уровня какие кластеры соответствуют более низкого уровня) можно представить в виде сводной таблицы, приблизительно такого вида:



Цитата:
По времени, вроде, должно не так долго считаться - конечно всё зависит от заданного критического уровня, когда прервётся расчёт, и количества позиций, но оно во время расчёта будет всё время уменьшаться за счёт их объединения в кластера. Ещё можно попробовать ускорить расчёт за счёт того, что объединять в кластера быстрее - не по одной паре, а сразу все, удовлетворяющие условию "больше 0,7" - тогда ряд количества проверяемых связей будет сходится значительно быстрее и общее время расчёта ощутимо уменьшится...
По идее весь этот анализ в зависимости от количества уровней кластеризации будет проходить во сколько-то раз дольше обычного тотального анализа совместных продаж. Вот во сколько, пока не знаю =) Расскажи подробнее, что ты имел ввиду тут: "объединять в кластера быстрее - не по одной паре, а сразу все, удовлетворяющие условию"? Это соответствует моим рассуждениям выше?

Цитата:
у тебя ядро расчёта уже реализовано, - по сути осталось только его запустить в определённой последовательности N раз... ;)
Вот как раз вопрос как это сделать и не слишком ли большое значение у N ;)

Вообще, идея сильная. Если это все реализовать, то ... круто, короче, это все )
24.12.2010 14:18
RazVal
 
Цитата:
administrator за 5 секунд делается анализ по отдельной позиции, а нам нужно провести тотальный анализ массива, это занимает по тестам Вадима часы.
Я правильно думаю, что производиться должен анализ именно всего массива? Все дальнейшие рассуждение построены на этой основе.
Да, тогда придётся тратить много времени...

Цитата:
administrator сделав тотальный анализ массива на предмет совместных продаж мы получаем список пар товаров, продающихся вместе с заданными параметрами. Затем, мы заменяем в этом списке пары товара на номера кластеров. Каждая пара товаров - отдельный кластер, но если какая-то позиция из пары уже входит в другой кластер, то вторую позицию этой пары тоже включаем в этот кластер (если список будет изначально отсортирован в порядке убывания коэффициента совместности, то, думаю, ошибки в этом нет).
Никаких ошибок. Только я бы ещё сортировал по второму параметру - количеству документов из которых получено значение. То есть, для пар с одинаковыми коэффициентами мы будем сначала объединять те, которые чаще в абсолютных цифрах продавались друг с другом.

Цитата:
administrator запоминаем какие позиции в какие кластера входят (запоминаем в массив из трех полей: товар, уровень кластеризации, номер кластера) и после этого меняем в исходном массиве (изначальном массиве с номерами документов) наименование номенклатуры на номера полученных кластеров. Запускаем тотальный анализ массива повторно.
- получаем новый результат в виде списка пар товаров, продающихся вместе с заданными параметрами.
Да, только для ускорения работы, нужно убрать лишние записи - ведь почти в каждом документе теперь будут по две "одинаковых" позиции (из одного кластера).

Цитата:
administrator Можно ли утверждать, что в этом списке будут все номера кластеров, полученные на предыдущем этапе (кажется, что это так, но есть сомнения)?
У меня сомнений не возникает - им, просто, некуда деваться... :) "Ты в ритме танца, тебе некуда деваться!" (с) "Дискотека Авария"

Цитата:
administrator Анализируем полученный список пар по строкам: 1ый цикл по всему списку: если с номером кластера встречается позиция номенклатуры, то мы включаем ее в этот кластер (при этом уровень кластеризации = 1), если в одной из следующих строк встречаем эту же позицию, но в паре с другим кластером, то игнорируем эту строку (вроде бы так...); 2ой цикл по всему списку: анализируем только те строки где встречаются разные кластеры и переименовываем эти кластеры в кластеры второго уровня (если один кластер из пары уже входит в другой кластер второго уровня, то второй кластер из пары включаем в этот же кластер второго уровня), и запоминаем это с уровнем кластеризации = 2.
По-хорошему, при каждом анализе у тебя не должно быть кластеров из разных уровней кластеризации, так как ты каждый раз заменяешь их более старшим, воспринимая кластера меньшего уровня, как обычные позиции.

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

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

Цитата:
administrator так делаем до тех пор, пока выполняется заданный коэффициент совместности между кластерами. По идее в итого получим один кластер самого высокого уровня - весь наш ассортимент.
Совершенно верно, ну и может ещё останутся позиции, которые не покупают ни с чем - тоже интересный результат.

Цитата:
administrator в итоге, массив (в который мы запоминали какой товар соответствует какому кластеру, и какому кластеру более высокого уровня какие кластеры соответствуют более низкого уровня) можно представить в виде сводной таблицы, приблизительно такого вида:
Да, это было бы - супер!

Цитата:
administrator По идее весь этот анализ в зависимости от количества уровней кластеризации будет проходить во сколько-то раз дольше обычного тотального анализа совместных продаж. Вот во сколько, пока не знаю =) Расскажи подробнее, что ты имел ввиду тут: "объединять в кластера быстрее - не по одной паре, а сразу все, удовлетворяющие условию"? Это соответствует моим рассуждениям выше?
Ага.

Цитата:
administrator вопрос как это сделать и не слишком ли большое значение у N
Вообще, идея сильная. Если это все реализовать, то ... круто, короче, это все
Ну, да - в конце концов, будет народ на выходные оставлять считаться. Или на новогодние праздники - особо часто проводить такой анализ всё равно не надо. ;)
24.12.2010 17:11
andrey_f
 
Цитата:
RazVal
Цитата:
administrator запоминаем какие позиции в какие кластера входят (запоминаем в массив из трех полей: товар, уровень кластеризации, номер кластера) и после этого меняем в исходном массиве (изначальном массиве с номерами документов) наименование номенклатуры на номера полученных кластеров. Запускаем тотальный анализ массива повторно.
- получаем новый результат в виде списка пар товаров, продающихся вместе с заданными параметрами.
Да, только для ускорения работы, нужно убрать лишние записи - ведь почти в каждом документе теперь будут по две "одинаковых" позиции (из одного кластера).
Согласен, но это тоже время займет. Ведь для этого нужно создать новый массив, перелопатив имеющийся. Но я знаю, как сделать это почти мгновенно ) В Inventorе эта фишка у меня использована в функции "Вывод уникальных элементов".

Цитата:
RazVal
Цитата:
administrator Анализируем полученный список пар по строкам: 1ый цикл по всему списку: если с номером кластера встречается позиция номенклатуры, то мы включаем ее в этот кластер (при этом уровень кластеризации = 1), если в одной из следующих строк встречаем эту же позицию, но в паре с другим кластером, то игнорируем эту строку (вроде бы так...); 2ой цикл по всему списку: анализируем только те строки где встречаются разные кластеры и переименовываем эти кластеры в кластеры второго уровня (если один кластер из пары уже входит в другой кластер второго уровня, то второй кластер из пары включаем в этот же кластер второго уровня), и запоминаем это с уровнем кластеризации = 2.
По-хорошему, при каждом анализе у тебя не должно быть кластеров из разных уровней кластеризации, так как ты каждый раз заменяешь их более старшим, воспринимая кластера меньшего уровня, как обычные позиции.
Ааа, т.е. каждый новый цикл тотального анализа это новый уровень кластеризации? Я просто думал, что при повторном тотальном анализе отдельные позиции (не кластеры), которые будут попадаться в паре к кластерами, мы будем включать в тот же номер кластера. А оказалось что мы на каждом новом этапе создаем новый уровень кластеризации. Эта деталь отразилась на предложенном мною алгоритме (те вопросы, которые я задавал ниже этой точки отпадают сами собой). Но хорошо, что каждый раз уровень новый, это намного проще автоматизируется. Цикл будет один, без премудростей, которые я предполагал )

Цитата:
RazVal
Цитата:
administrator так делаем до тех пор, пока выполняется заданный коэффициент совместности между кластерами. По идее в итого получим один кластер самого высокого уровня - весь наш ассортимент.
Совершенно верно, ну и может ещё останутся позиции, которые не покупают ни с чем - тоже интересный результат.
Этим позиция можно присвоить нулевой кластер на всех уровнях кластеризации (а еще лучше наибольший, а не нулевой, так как сортировка в итоговой таблице удобнее по возрастанию, т.к. первые кластеры для нас по идее наиболее интересны в связи с исходной раздачей номеров кластеров), тогда в итоговой сводной таблице они буду красивенько в уголочке лежать =)

Скорость будет напрямую зависеть от скорости уменьшения количества уникальных строк (в связи с удалением дубликатов) в исходном массиве. Вот чисто с потолка интуитивно, думаю что будет раз в 5 дольше идти анализ, чем простой тотальный (заметьте, тотальный анализ охрененного массива на совместные продажи мы уже называем простым!) анализ совместных продаж. Т.е. в случае Вадима это займет на 700 тыс. строк 2-3 суток. Пусть Excel работает за вас, а вы покурите :D
24.12.2010 17:22
VVY
 
Цитата:
administrator
Цитата:
RazVal
Цитата:
administrator запоминаем какие позиции в какие кластера входят (запоминаем в массив из трех полей: товар, уровень кластеризации, номер кластера) и после этого меняем в исходном массиве (изначальном массиве с номерами документов) наименование номенклатуры на номера полученных кластеров. Запускаем тотальный анализ массива повторно.
- получаем новый результат в виде списка пар товаров, продающихся вместе с заданными параметрами.
Да, только для ускорения работы, нужно убрать лишние записи - ведь почти в каждом документе теперь будут по две "одинаковых" позиции (из одного кластера).
Согласен, но это тоже время займет. Ведь для этого нужно создать новый массив, перелопатив имеющийся. Но я знаю, как сделать это почти мгновенно ) В Inventorе эта фишка у меня использована в функции "Вывод уникальных элементов".

Цитата:
RazVal
Цитата:
administrator Анализируем полученный список пар по строкам: 1ый цикл по всему списку: если с номером кластера встречается позиция номенклатуры, то мы включаем ее в этот кластер (при этом уровень кластеризации = 1), если в одной из следующих строк встречаем эту же позицию, но в паре с другим кластером, то игнорируем эту строку (вроде бы так...); 2ой цикл по всему списку: анализируем только те строки где встречаются разные кластеры и переименовываем эти кластеры в кластеры второго уровня (если один кластер из пары уже входит в другой кластер второго уровня, то второй кластер из пары включаем в этот же кластер второго уровня), и запоминаем это с уровнем кластеризации = 2.
По-хорошему, при каждом анализе у тебя не должно быть кластеров из разных уровней кластеризации, так как ты каждый раз заменяешь их более старшим, воспринимая кластера меньшего уровня, как обычные позиции.
Ааа, т.е. каждый новый цикл тотального анализа это новый уровень кластеризации? Я просто думал, что при повторном тотальном анализе отдельные позиции (не кластеры), которые будут попадаться в паре к кластерами, мы будем включать в тот же номер кластера. А оказалось что мы на каждом новом этапе создаем новый уровень кластеризации. Эта деталь отразилась на предложенном мною алгоритме (те вопросы, которые я задавал ниже этой точки отпадают сами собой). Но хорошо, что каждый раз уровень новый, это намного проще автоматизируется. Цикл будет один, без премудростей, которые я предполагал )

Цитата:
RazVal
Цитата:
administrator так делаем до тех пор, пока выполняется заданный коэффициент совместности между кластерами. По идее в итого получим один кластер самого высокого уровня - весь наш ассортимент.
Совершенно верно, ну и может ещё останутся позиции, которые не покупают ни с чем - тоже интересный результат.
Этим позиция можно присвоить нулевой кластер на всех уровнях кластеризации (а еще лучше наибольший, а не нулевой, так как сортировка в итоговой таблице удобнее по возрастанию, т.к. первые кластеры для нас по идее наиболее интересны в связи с исходной раздачей номеров кластеров), тогда в итоговой сводной таблице они буду красивенько в уголочке лежать =)

Скорость будет напрямую зависеть от скорости уменьшения количества уникальных строк (в связи с удалением дубликатов) в исходном массиве. Вот чисто с потолка интуитивно, думаю что будет раз в 5 дольше идти анализ, чем простой тотальный (заметьте, тотальный анализ охрененного массива на совместные продажи мы уже называем простым!) анализ совместных продаж. Т.е. в случае Вадима это займет на 700 тыс. строк 2-3 суток. Пусть Excel работает за вас, а вы покурите :D
Мое предложение в силе - готов пожертвовать ПК :D
27.12.2010 12:13
andrey_f
 
Начал писать код для кластерного анализа, столкнулся с интересными подзадачами.
Но в общем, все решаемо, думаю завтра доделаю и выложу на тест. :)
Поддержки 2003 Excel не будет, т.к. он не имеет всех функций, которые для этого анализа необходимы.
Надеюсь, все, кому интересен Excel, уже установили себе версию посвежее.


Опции темы


Часовой пояс GMT +3, время: 20:39.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.