ТРУ.МАРКЕТИНГ — Наш канал в телеграме
Ежедневные обзоры статей, новости рынка, кейсы.Подписаться

Отключение площадок КМС по условиям: коэф. конверсии и количество кликов

functionmain() {

    //пороговое значение кликов для первого критерияvar MAX_CLICKS =50;
    //пороговое значение конверсий для первого критерия в процентахvar MIN_CONVERSIONS =2;

    // Критическое значение конверсии в % , // ниже которого площадка должна быть исключена, для второго критерияvar Ccr =1.0;

    //название списка исключенных площадок (должен быть создан заранее)var EXCLUDE_LIST_NAME ="Общий";

    // По таблицам нормального распределения находим соответствующие квантили K// такие значения нормальной функции, при которых вероятности будут соответствовать допустимым ошибкам B// B - это Погрешность - вероятность блокировки хорошей площадки//для B = 0.05 K = -1.6448536269514729//для B = 0.01 K = -2.3263478740408408//для B = 0.1 K = -1.28155156554var K =-1.6448536269514729;

    //берем список исключений по имени, то есть ОБЩИЙ, чтобы в него добавлять исключаемые площадкиvar excludeGroup = AdWordsApp.excludedPlacementLists()
        .withCondition("Name CONTAINS '"+ EXCLUDE_LIST_NAME +"'")
        .withLimit(1).get();

    Ccr = parseFloat(Ccr) /100;
    MIN_CONVERSIONS = parseFloat(MIN_CONVERSIONS) /100;

    //если ОБЩИЙ список имеется, далее выполняем скриптif (excludeGroup.hasNext()) {

        excludeGroup = excludeGroup.next();

        //берём все активные НЕ КМС кампанииvar campaignIterator = AdWordsApp.campaigns()
            .withCondition('Status = ENABLED')
            .withCondition("Name CONTAINS_IGNORE_CASE 'КМС'")
            .get();

        while (campaignIterator.hasNext()) {

            var campaign = campaignIterator.next();

            Logger.log('Кампания: '+ campaign.getName());

            //берём у кампании список площадок у которых было кликов > MAX_CLICKS за посл 30 днейvar placements = campaign.display().placements()
                .withCondition("Clicks > "+ MAX_CLICKS)
                .forDateRange("LAST_30_DAYS").get();
            Logger.log('Количество площадок: '+ placements.totalNumEntities() +' обрабатываю...');
            while (placements.hasNext()) {
                var placement = placements.next();

                //берем стату за 30 дней и смотрим клики и конверсииvar stats = placement.getStatsFor('LAST_30_DAYS');
                var clicks = stats.getClicks(), conversions = stats.getConvertedClicks();
                var conversion_proc = clicks ? conversions / clicks :0;

                //отключаем площадки, у которых число кликов больше MAX_CLICKS, // а процент конверсий меньше MIN_CONVERSIONSif ((clicks > MAX_CLICKS && conversion_proc < MIN_CONVERSIONS)) {
                    excludeGroup.addExcludedPlacement(placement.getUrl());
                    Logger.log('Исключаем площадку "'+ placement.getUrl() 
                    +'" по критерию 1, кликов: '+ clicks 
                    +', конверсий: '+ conversions 
                    +', процент конверсий: '+ conversion_proc);
                }

                //считаем Cx по формуле Cx = Ccr + K * math.sqrt(Ccr * (1 - Ccr) / clicks)var Cx =0;
                if (clicks) Cx = Ccr + K * Math.sqrt(Ccr * (1- Ccr) / clicks);
                Cx = parseFloat(Cx *100);

                //или площадки те у которых процент конверсий ниже пороговой Cx и где Cx > 0                if ((Cx > 0&& conversion_proc < Cx)) {
                    excludeGroup.addExcludedPlacement(placement.getUrl());
                    Logger.log('Исключаем площадку "'+ placement.getUrl() 
                    +'" по критерию 2, кликов: '+ clicks 
                    +', конверсий: '+ conversions 
                    +', процент конверсий: '+ conversion_proc);
                }
            }

        }
    }
    else Logger.log('Создайте список исключенных площадок с названием '+ EXCLUDE_LIST_NAME);
}