Выбор новых покупателей с использованием сет анализа

Автор Marina78, 29 января 2019, 09:03:03

« назад - далее »

Marina78

Подскажите, пожалуйста, может кто сталкивался с такой или похожей задачей
Нужно понедельно разложить новых (сделавших хотя б одну покупку в течение последних 4 недель) и потерянных покупателей (не сделавших хотя б одну покупку в течение последних 4 недель).

Добавила календарь в скрипт.
всего покупателей в неделю - count({<dateshift={'now'}>} DISTINCT [Код клиента])
всего покупателей на прошлой неделе count({<dateshift={'Неделя'}>} DISTINCT [Код клиента])

Пыталась через пересечение множеств определить количество новых покупателей на текущей неделе относительно предыдущей count({<dateshift={now}*{Неделя}>} DISTINCT [Код клиента]). Не получается


admin

#1
Добрый день.
Ваша задача относится к теме сегментации клиентов.

Методологически, как обычно, два варианта - через скрипт и в выражениях объектов визуализации.

Решение через скрипт сводится к построению таблицы с агрегатами. Полями рассчитанными по всему массиву данных по продажам.
Например, min(Дата) - первая покупка, min(Дата,2) - вторая, соответственно с max(). (если надо считать интервалы в первых и крайних продажах, мало ли )))
count() для количества и т.д.
today(1)-max(Дата) = дней с последней продажи, так сказать, на сколько дней "потеряшка".
if(today(1)-max(Дата)>7,'Более 1 недели','Менее 1 недели') As СегментДляПотеряшек
и т.д.

Ключевое поле - ИД Покупателя.

Пример:
t1:
LOAD * INLINE [
    Чек, Покупатель, Товар, Количество, Сумма
    1, А, 100101, 1, 500
    1, А, 100102, 1, 200
    2, Б, 100101, 1, 500
    3, В, 100102, 1, 200
    4, Г, 100101, 1, 500
    4, Г, 100102, 1, 200
    5, Д, 100101, 1, 500
    5, Д, 100102, 1, 200
    5, Д, 100103, 1, 300
    6, А, 100103, 1, 300
    7, Б, 100103, 1, 300
];

CalSegment:
LOAD Покупатель,
Count( DISTINCT Чек) as [Количество Чеков],
Count( DISTINCT Товар) as [Количество SKU]
Resident t1
Group by Покупатель;

[smg id=91 type=preview width=400]

admin

Через set analyse работа с множествами ведется через выражения P()
Но для расчета числа новых клиентов относительно двух календарных периодов мало информации о факте чека. Покупатель мог прийти повторно, спустя месяц, три полгода, год.
Выражение будет непростым.
Я рекомендую начать с построения контрольного примера через скрипт, сверить результат в Excel и уже затем на этом же контрольном массиве поэтапно формировать нужные выражения.
Такой подход будет эффективным и минимизирует число ошибок .

Marina78

Проблема в том, что мне нужно в динамике понедельно и помесячно. Это вообще возможно? и каким путем лучше идти через сет анализ или скрипт?

admin

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

Marina78

temp:
load Date, [Код клиента];//загрузила данные по датам покупок и кодам клиентов

//загрузила календарь
dt_range:
LOAD   
       Min(Date) as MinDate,
       Max(Date) as MaxDate
RESIDENT temp;

LET vMinDate = Num(peek('MinDate', 0, 'dt_range'));
LET vMaxDate = Num(peek('MaxDate', 0, 'dt_range'));


// Формирование последовательности дат в диапазоне
Temp1:
LOAD
       rowno()+$(vMinDate) - 1     as %date
AUTOGENERATE (round(vMaxDate-vMinDate))+356;

// Формирование календаря с иерархией периодов
Календарь:
LOAD        %date as Date,
       Day(%date) as [День],
       Week(%date) as [Неделя],
       WeekName(%date) as [НеделяГод],
       WeekDay(%date) as [День Недели],
       Month(%date) as [Месяц],
       MonthName(%date) as [МесяцГод],
       QuarterName(%date) as [КварталГод],
       Year(%date) as [Год]
Resident Temp1;

client:// нужно посчитать активных клиентов - это клиенты которые покупали товар на текущей и прошлой неделе
load [НеделяГод], [НеделяГод]-1 as O, if(Date>=[НеделяГод] and Date>=O, count(DISTINCT [Код клиента]),0) as act_cl
Resident temp;


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


Яндекс.Метрика