Здравствуйте. В компании внедряется решение по взысканию. Есть потребность в А/Б тестировании стратегий, (он же Champion-Challenger).

Вопрос: имеется ли в Сreatio функционал для такого тестирования?

Для тестирования стратегий необходимо формировать выборку по тестовой и контрольной группе. При этом количество клиентов в выборке должно быть одинаково. 

Пробовал использовать дату рождения "заканчивается на 1", это позволяет выбрать клиентов по 10%. Но по условию теста нужно 15%.

Подскажите у кого какой опыт в тестировании стратегий. 

 

Нравится

0 комментариев
Показать все комментарии

Здравствуйте, коллеги. Нужно помощь в организации тестирования стратегий. В компании развернуто решение для collection. Имеется потребность тестировать стратегии на предмет эффективности согласно подходу А/Б тестирования, он же Champion-Challenger. Стратегий более 25 шт.  

    Основная проблема как сделать слепую (рандомную) выборку согласно условиям теста и при этом количество клиентов должно быть одинаковым.
    Например нужно взять 30% новых клиентов для конкретной стратегии и из них по 15 % это тестовая и контрольная группа. И на каждой группе применить разные стратегии, старую и новую, Champion-Challenger.  

     

    Для рандомизации пробовал использовать последние цифры дня рождения, "заканчивается на 1" и т.п., но такие условия дают выборку только по 10%. Как вариант ИНН клиента, но насколько знаю ИНН не совсем рандомен. Кроме того выборка дает разное количество клиентов для отработки. Например, 386 и 315 т.е. с досточно большой разницей, что "смажет" результат.

    Как вариант генерировать еще 1му полю 0 и 1 рандомно, что бы поделить на 2 группы.

     

    Вопросы:

    1. Есть ли в Сreatio функционал для автоматизированного А/Б тестирования? Есть информация, что есть функционал для решения Маркетинг, но здесь немного другая ситуация. Т.к. клиенты заходят залповой загрузкой из основной учетной системы, а не извне в рандомном порядке и нельзя предсказать количество клиентов для тестируемой стратегии.
    2. Если у кого нибудь опыт в подобном тестировании в среде creatio?
    3. Есть ли у кого опыт в рандомизации?
    4. Так же вопрос как оценить результаты теста. Т.е. как сформировать отчет по выборке. Понятно, что в Creatio должны быть id теста как минимум привязанный к клиенту. И возможно в соотношении 1н ко многим. 

     

    Из доступных параметров: дата рождения клиента, дата выхода на просрочку, ИНН, сотовый телефон.  

     

    Пример условий стратегии на скриншоте.

    По продукту вроде Financial Services.

     

    Прикрепленные файлы

    Нравится

    1 комментарий

    В версии 7.17.3 появился новый элемент [ Произвольное распределение ], который позволяет случайным образом направить участников по разным веткам кампании. Данный элемент удобно использовать для контрольных групп, сплит-тестов. 

    Показать все комментарии

    Привет. 

    При запуске процесса из элемента "Задание сценарий" следующим образом: 

    var manager    = UserConnection.ProcessSchemaManager;
    var flowEngine = new FlowEngine(UserConnection);
    var processSchema = manager.GetInstanceByName("test process");

    Dictionary<string, object> parameter = new Dictionary<string, object>();

    TestCompositeObjectList list = new TestCompositeObjectList();
    list.Add(new A { ColName= "test1" });
    list.Add(new A { ColName= "test2" });

    parameter.Add("TestCollection", list);
    parameter.Add("Name", "Test");

    flowEngine.RunProcess(processSchema, parameter);

    return true;

     

    Сам класс TestCompositeObjectList был создан по этому примеру.

     

    При запуске процесса ловим: 

    System.InvalidCastException: Unable to cast object of type 'Terrasoft.Common.CompositeObjectList`1[Terrasoft.Common.CompositeObject]' to type 'System.Collections.Generic.List`1[System.String]'.

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

    Дайте пожалуйста пример как сделать это.

     

     

    Нравится

    4 комментария
    Лучший ответ

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

    Код вызова: 
     

    var manager	= UserConnection.ProcessSchemaManager;
    var flowEngine = new FlowEngine(UserConnection);
    var processSchema = manager.GetInstanceByName("ProcessName");
     
    Dictionary&lt;string, object&gt; parameter = new Dictionary&lt;string, object&gt;();
     
    CompositeObjectList&lt;CompositeObject&gt; objList = new CompositeObjectList&lt;CompositeObject&gt;();
     
    objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue1"}}));
    objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue2"}}));
    // ....
    // Первый коллекция записей - второе примитивный 
    parameter.Add("CollectionName", objList);
    parameter.Add("PrimaryParam", "Test");
     
    flowEngine.RunProcess(processSchema, parameter);

     

    Получение в скрипте: 
     

    CompositeObjectList&lt;CompositeObject&gt; collection = Get&lt;CompositeObjectList&lt;CompositeObject&gt;&gt;("CollectionName");

     

    if (ProcessSchemaManager.GetCanUseFlowEngine(userConnection, processSchema)) {
                        var flowEngine = new FlowEngine(userConnection);
                        Dictionary<string, string> parameter = new Dictionary<string, string>();
                        parameter.Add("CaseRecordId", CaseRecordId.ToString());
                        flowEngine.RunProcess(processSchema, parameter);
                    } else {
                        var moduleProcess = processSchema.CreateProcess(userConnection);
                        if (processSchema.Parameters.ExistsByName("CaseRecordId")) {
                            moduleProcess.SetPropertyValue("CaseRecordId", CaseRecordId);
                        }
                        moduleProcess.Execute(userConnection);
                    }

    Полозюков Евгений Петрович,

    У вас в примере обычный параметр, а не лист. С обычными то все понятно. Меня интересует передача именно параметра типа коллекция записей.

    Возможно ли это вообщ? Потому что тут последний коммент говорит что "неа".

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

    Код вызова: 
     

    var manager	= UserConnection.ProcessSchemaManager;
    var flowEngine = new FlowEngine(UserConnection);
    var processSchema = manager.GetInstanceByName("ProcessName");
     
    Dictionary&lt;string, object&gt; parameter = new Dictionary&lt;string, object&gt;();
     
    CompositeObjectList&lt;CompositeObject&gt; objList = new CompositeObjectList&lt;CompositeObject&gt;();
     
    objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue1"}}));
    objList.Add(new CompositeObject (new Dictionary&lt;string, object&gt;() {{"SubParamName",  "SubParamValue2"}}));
    // ....
    // Первый коллекция записей - второе примитивный 
    parameter.Add("CollectionName", objList);
    parameter.Add("PrimaryParam", "Test");
     
    flowEngine.RunProcess(processSchema, parameter);

     

    Получение в скрипте: 
     

    CompositeObjectList&lt;CompositeObject&gt; collection = Get&lt;CompositeObjectList&lt;CompositeObject&gt;&gt;("CollectionName");

     

    Показать все комментарии

    Хорошая статья IT-консультанта Бориса Шлаина (прилагаемый файл).
    В статье рассказывается о пересмотре IT-стратегий банков в условиях кризиса.

    Нравится

    Поделиться

    0 комментариев
    Показать все комментарии