Большие выводы на маленьких выборках

Чтобы начать двигать недвижимость, достаточно сменить систему отсчёта.
→ Вопросы пишите в Фейсбук, пока ещё можно.
→ Посты за 2018, 2017, 2016

Парсим объявления конкурентов в Директе

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

Что делает скрипт

Берет файл со списком запросов, вот такой, например:

Каждый запрос вбивает в Яндекс и записывает заголовки, тексты и отображаемые ссылки рекламных объявлений в CSV-файл.

Если брать брендовые запросы из недвижки, то ожидаемо увидим конкурентов любящих клики по 300 рублей

Ручками перебирать долго, поэтому автоматизируем. В итоге получаем вот такую табличку с данными по каждому запросу из файла:

И ещё вот такую, со сводными данными:

Как сделать

Скачайте скрипт и файл с запросами. Сохраните в отдельную папку.

Будем использовать специальный дистрибутив Питона, который называется «Анаконда». Качаем версию Питона 3.6, устанавливаем, запускаем Anaconda Navigator, в нём жмем launch Jupiter Notebook.

Там выберите папку со скачанными файлами и файл .ipynb:

В коде задайте минус-слова:

# Список минус-слов для запросов
minus_list = '-крым -море -booking -отдых -домен -отель -аренда -хостел -краснодар -сеть'

Регион:

# Задаём регион
# Список идентификаторов российских регионов https://tech.yandex.ru/xml/doc/dg/reference/regions-docpage/
# Москва и Московская область – 1
# Санкт-Петербург – 2
region = 1

Количество рекламных блоков:

# Задаём сколько позиций рекламной выдачи сохраняем.
maxPos = 6

Жмём Shift + Enter (или Run из меню) для каждой ячейки — фишка Jupiter Notebook в том, что код выполняется пошагово. Когда дойдете до шага «Основной цикл» — придется подождать. Скрипт будет писать какой запрос он сейчас обрабатывает:

Далее формируем датафрейм и записываем в CSV-файл. Как всё будет готово, появится табличка с первыми пятью строками результата и файл в папке со скриптом.

Первые пять строчек для первого запроса из файла. Все данные — в CSV-файле

Для получения сводной таблицы запустите последние ячейки

В табличке легко, например, найти конкурентов кто активно пользуется вашими бренд-запросами
2018  

Находим минус-слова с помощью API Директа

Понадобятся Renta и Google BigQuery.

В Ренте выбираем интеграцию с Директом
Выбираем логин; Report type: SEARCH_QUERY_PERFORMANCE_REPORT; Параметры: CampaignId, Query, AdGroupId, AdId; Период и время обновления отчёта

Данные отправим в BigQuery.
Создаём запрос — замените [Renta_dataset.yd_XXXXX] на название вашей таблицы в BigQuery, а в CampaignId = ’YYYYY’ укажите ваш ID кампании в Директе:

SELECT
  '!' + REGEXP_REPLACE(Word, '[^а-яА-Яa-zA-Z0-9_]', '') AS Words
FROM (
  SELECT
    SPLIT(Query, ' ') AS Word
  FROM
    [Renta_dataset.yd_XXXXX]
  WHERE
    CampaignId = 'YYYYY')
GROUP BY
  Words
ORDER BY
  Words

Получим все слова (без спецсимволов) из всех запросов за период в выбранной кампании. (По умолчанию я добавил символ точного соответствия.)

Там наверняка будет что отминусовать ;-)

P. S. Можно не разделять поисковые фразы по словам, а получить просто все поисковые фразы:


SELECT
  Query
FROM
  [Renta_dataset.yd_XXXXX]
WHERE
  CampaignId = 'YYYYY'
GROUP BY
  Query
ORDER BY
  Query
2017  

Сколько раз клиент посещает сайт застройщика перед звонком

В недвижимости часто говорят, что клиент долго выбирает: много раз заходит на сайт, всё тщательно изучает, а потом уже звонит. Я сам рассказывал про «синергический эффект» разных размещений, важность учёта мультиканальных последовательностей и спорил, какая модель атрибуции самая классная.

Чтобы оценить, как долго клиент принимает решение о звонке, предлагаю покопаться в сырых данных Метрики и найти, с какого по счёту визита клиент таки звонит. Статья будет полезна тем, кто хочет начать работать с Logs API Метрики и Google BigQuery.

Сначала достанем нужные данные из Logs API: будем использовать новый сервис Renta. Данные застройщика с обычными рекламными каналами: контекст, медийка, таргет, фб, вк.

В Ренте легко доставать данные из разных систем и отправлять в свою базу данных

Выбираете номер счётчика;
источник Visits;
поля: ym:s:visitID, ym:s:clientID, ym:s:goalsID;
период наблюдения и время обновления данных

Данные отправим в BigQuery. Исходные данные выглядят так:

Первый столбец — уникальный ID визита, второй — ID пользователя, третий — какие цели, заданные в Метрике, достиг пользователь за этот визит. (Для отслеживания звонков нужен динамический колтрекинг и интеграция с Метрикой.)

Создадим первый запрос: оставим только пользователей кто звонил (в моём случае достиг цели с ID 34341129) и пронумеруем их визиты по дате. Поскольку Метрика присваивает номера визитам по порядку, поле «Дата и время» нам не понадобится — достаточно отсортировать от возрастанию visitID.
Внимание! Дальше будет быдло-код — знатоки, не ругайтесь.

SELECT
      all.clientid AS clientid,
      all.visitid,
      goalsid,
      ROW_NUMBER() OVER (PARTITION BY all.clientid ORDER BY all.visitid) AS number_of_visit
    FROM (
      SELECT
        *
      FROM
        [Renta_dataset.ym_logs_XXXXX]) all
    INNER JOIN (
      SELECT
        clientid
      FROM
        [Renta_dataset.ym_logs_XXXXX]
      WHERE
        goalsID LIKE '%34341129%'
      GROUP BY
        clientid) clients_with_leads
    ON
      all.clientid = clients_with_leads.clientid
    ORDER BY
      all.clientid,
      number_of_visit

Замените [Renta_dataset.ym_logs_XXXXX] на название вашей таблицы в BigQuery, а в goalsID LIKE ’%34341129%’ укажите ваш ID цели в Метрике.

Получим такую таблицу:

Первый столбец — ID визита, второй — ID пользователя, кто хоть раз позвонил, третий — достигнутые цели за визит, четвёртый — порядковый номер визита пользователя

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

SELECT
    clientid,
    MIN(number_of_visit) as FirstCallVisitNumber
  FROM ( /*предыдущий запрос*/)
  WHERE
    goalsID LIKE '%34341129%'
  GROUP BY
    clientid

Получаем табличку: ID пользователя с номером визита его первого звонка:

Почти всё — считаем количество пользователей для каждого Номера визита пользователя, когда он первый раз позвонил

SELECT
  FirstCallVisitNumber,
  COUNT(clientid) AS clients
FROM (/*предыдущий запрос*/)
GROUP BY
  FirstCallVisitNumber
ORDER BY
  FirstCallVisitNumber
Результат запроса

Из BigQuery легко отправить данные в Google Data Studio, чтобы сделать простенькую визуализацию:

В моём примере — на данных московского застройщика — 70% пользователей звонит после первого визита на сайт, почти 90% — не позже второго. Я повторил упражнение для нескольких других застройщиков — результаты похожи.

Практически полезных выводов, кроме «особо не заморачивайтесь на мультиканальных последовательностях», не будет: оставляю это читателям. Пишите комментарии.

2017  

Упражняемся с формулой Пуассона в медиапланировании

В медиапланах недвижимости принято писать прогноз количества кликов, коэффициента конверсии и количества лидов. Прогноз лидов считается так: клики × конверсия. Вроде всё правильно, но нет.

Эксперимент с монеткой

Вы менеджер по подкидыванию монетки. К вам приходит начальник и говорит: «Хочу в этом месяце пять решек, готовь медиаплан».
Вы знаете конверсию (50%) и считаете сколько раз надо покинуть монетку, чтоб выполнить задачку начальника:
N = 5/50% = 10. Вписываете в медиаплан затраты на 10 бросков и вроде готово.

Но вот что получится.
Берём монетку и подкидываем её 10 000 раз по 10 Эксель и моделируем ситуацию:

С помощью генератора случайных чисел — функция СЛУЧМЕЖДУ() или RANDBETWEEN() — генерируем десять столбцов, где 0 — решка, 1 — орёл.
Повторяем для, например, 10 000 строчек. Больше строчек — точнее результат. Получаем табличку с нулями и единицами.
Добавляем столбец «Результат», где считаем для каждой строчки количество нулей-решек с помощью формулы СЧЁТЕСЛИ(Диапазон;0) или COUNTIF().

Теперь надо посчитать как часто из 10 попыток выпадало то или другое количество решек, делаем сводную таблицу из последнего столбца:

Видно, что чаще всего из 10 попыток выпало 5 решек, реже всего — ни одной или все 10.
Считаем процент от суммы по столбцу и получаем вероятность того или иного исхода.
Теперь сложим вероятности для неудовлетворяющих начальника результатов: от нуля до четырёх решек (он просил минимум пять).

38%. Почти сорок процентов, что план мы не выполним.

Давайте «подкинем» 15 раз и посмотрим результат:

6% что план не выполним, но это уже терпимо.

Кидаем 15 раз, чтобы с вероятностью 94% не профакапить план.
Теперь попробуем более реальную ситуацию.

Планируем Директ

Приходит начальник, говорит хочу 100 лидов с Директа, сколько нужно денег.
Пусть вы знаете: клики всегда стоят 50 рублей, а конверсия ровно 1%.
Бюджет = 50 ₽ × Клики = 50 ₽ × 100/1% = 500 000 ₽?
Продолжим мучать Эксель.

Делаем табличку 10 000 × 2 000, генерим случайное число от 0 до 99, считаем что получилось:

Не пытайтесь повторить дома ;-) Нужен весьма шустрый компьютер для такого извращения.
В процентах. В нашем моделировании получилось, что вероятность не выполнить план (меньше 100 лидов) = 50,2%.

Вероятность получить менее 90 лидов — 16%.

Как считать формулой

Если вероятность наступления события в каждом испытании постоянна и мала, а число независимых испытаний достаточно велико, то вероятность наступления события ровно m раз приближенно равна:

В Экселе считается с помощью формулы ПУАССОН.РАСП

Чтобы с вероятностью 95% получить при заданной конверсии 100 и более конверсий, нужно больше кликов:

Если кликов 11 700, то 100+ конверсий будет с вероятностью 95%, что весьма хорошо.

Таким образом нужен бюджет 50 ₽ × 11 700 кликов = 585 000 ₽.

Без Экселя сумму можно посчитать в WolframAlpha:

Оценка рентабельности

Пусть в прошлом месяце у вас было медийное размещение на площадке X.
Вы потратили 200 000 ₽ и получили 4000 кликов и 16 лидов. Стоимость лида 12 500 ₽. Конверсия 0,4%.
У вас есть ограничение на стоимость лида 10 000 ₽.
Что делать с площадкой — убирать или ей просто не повезло?

Найдем коэффициент конверсии при которой она давала бы конверсии по 10 000 ₽, то есть с неё было бы 20 лидов: 20 / 4000 = 0,5%.
Теперь посчитаем вероятность получить не более 16 лидов при такой конверсии:

С вероятностью 22% при «рентабельной» конверсии 0,5% можно получить результат 16 и менее лидов. Вполне вероятно! Площадку можно оставить — возможно, ей просто «не повезло».

Оставили ещё на два месяца и результат повторился: 600 000 ₽, 12 000 кликов, 48 лида. А надо 60, чтобы не превысить ограничение. Считаем:

6,5% шанс получить такой результат при «рентабельности». Стоит убрать из МП или договориться о скидке.

Вывод

Кэп предупреждает: чтобы точно выполнить план надо заложить дельту в медиаплане. Размер дельты можно оценить вышеуказанным способом.

Ещё по теме:

Статистическая достоверность для застройщиков

2017  

Делаем свою модель атрибуции с помощью Power Query и Logs API Яндекс.Метрики

Статья для тех, кто не умеет в ClickHouse (как, например, я), а поковыряться в сырых данных Метрики всё-таки хочется. Будем строить модель атрибуции взвешивая источники по длине сессии пользователя.

Видео: Logs API Яндекс.Метрики и ClickHouse: что полезного можно получить из сырых данных

Выгружайте сырые данные из Метрики через Logs API Блог Яндекс.Метрики

У нас в недвижке бывает так:

  • клиент пришел с РСЯ, провёл на сайте 60 секунд и ушёл,
  • вернулся через день с ремаркетинга в GDN, провёл на сайте 120 секунд и ушёл,
  • снова вернулся через брендовый Директ, провёл на сайте 20 секунд и позвонил.

Модель по ласт клику даст всю конверсию бренд-Директу, по первому — РСЯ. Мы же хотим учесть все касания пользователя с сайтом и проранжировать их по времени, проведенному на сайте — тогда каждый канал получит свой кусок конверсии:

  • РСЯ — 60/200 = 0,3,
  • GND — 120/200 = 0,6,
  • бренд — 20/200 = 0,1.

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

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

Например,

  • цепочка РСЯ — Бренд Директ станет просто РСЯ
  • Медийка — Эдвордс — Органика → Медийка — Эдводрс
  • РСЯ — Директ — Медийка — Эдвордс Бренд → РСЯ — Директ — Медийка

Любая модель атрибуции — это от слова модель, поэтому она не претендует на абсолютную точность или истину в последней инстанции.

Вытаскиваем сырые данные из Метрики

Сырые, не агрегированные данные — это записи об отдельных визитах, вот например так

Нам нужна таблица со следующими столбцами:

  • ID клиента (ym:s:clientID),
  • ID визита (ym:s:visitID),
  • время на сайте (ym:s:visitDuration),
  • дата визита (ym:s:date),
  • ID целей, достигнутых за данный визит,
  • источник трафика, метки UTM Source и Campaign (ym:s:lastTrafficSource,ym:s:UTMSource,ym:s:UTMCampaign).

Все параметры визитов в руководстве Яндекса

Я пользуюсь рецептом получения данных из Logs API Яндекс.Метрики, предложенный Алексеем Макаровым.

Статья Алексея Макарова, где подробно всё описано.

Идёте по ссылке и копируете токен для Метрики.

Скачиваете приложение Postman для Хрома и запускаете.

Выбираем тип запроса POST, а в поле ввода запроса вставляете следующий запрос:

https://api-metrika.yandex.ru/management/v1/counter/XXXXXXXX/
logrequests?date1=2017-07-01&date2=2017-09-24
&fields=ym:s:isNewUser,ym:s:clientID,ym:s:visitID,ym:s:pageViews,
ym:s:visitDuration,ym:s:date,ym:s:dateTime,ym:s:goalsID,
ym:s:lastTrafficSource,ym:s:UTMSource,ym:s:UTMCampaign&source=visits
&oauth_token=XXXXXXXXXXXXXXXXXXXXXX

counter/XXXXXXXX/ — подставляете номер счётчика Метрики

date1=2017-07-01&date2=2017-09-24 — нужные даты

oauth_token=XXXXXXXX — полученный токен

В ответ придёт такая штука:

Нам нужен request_id — это идентификатор, созданного запроса на получение данных из Logs API — копируем его номер для следующего шага.

Выбираем тип запроса GET, в поле ввода запроса вставлям следующий запрос:

https://api-metrika.yandex.ru/management/v1/counter/XXXXXXX/logrequest/248496?oauth_token=XXXXXXXXXXXXXXXXXXXXXX

counter/XXXXXXXX/ — подставляете номер счётчика Метрики

logrequest/248496 — request_id из предыдущего шага

oauth_token=XXXXXXXX — полученный токен

В ответ получим:

Ответ на GET-запрос

Нас интересует параметр status — у нас значение processed — запрос лога обработан и лог готов к скачиванию.

Параметр status может принимать несколько значений,
подробнее в помощи Яндекса

Обратите внимание на параметр parts. Может так получиться, что полученный лог окажется слишком большим и будет разбит на несколько частей, которые придется скачивать по отдельности.

Третий запрос — выбираем тип запроса GET, а в поле ввода запроса вставляете следующий запрос:

https://api-metrika.yandex.ru/management/v1/counter/XXXXXXXX/logrequest/248496/part/0/download?oauth_token=XXXXXXXXXXXXX

Только теперь нажимаем не Send, а Send and Download

Сохраняете файл как .csv
Всё, логи скачали, идём в Эксель.

Строим модель атрибуции

В Экселе (у меня Excel 2016) идёте в раздел «Данные», выбираете сохраненный csv-файл

Ждетё загрузку

Нажимаете «Изменить»

Попадаете в редактор запросов

Каждая строчка — это отдельный визит.

Для построения модели атрибуции по длине сессии, нам потребуется к этой таблице добавить ещё несколько столбцов:

  • сумма длительности всех визитов пользователя,
  • вес визита,
  • повершил ли пользователь конверсию.

Считаем сумму длительности всех визитов на каждого пользователя

Нам надо сделать сводную таблицу по ID клиента (ym:s:clientID) и просуммировать ym:s:visitDuration.
Если в модели мы не хотим учитывать прямые, органические или даже бренд-контекстные запросы — присваиваем им длительность «0». Копируем исходный запрос и делаем несколько преобразований.

Шаг 0. Копируем исходный запрос.
Шаг 1. Удаляем все столбцы кроме ym:s:clientID, ym:s:visitDuration, ym:s:lastTrafficSource, ym:s:UTMCampaign
Шаг 2. Добавляем условный столбец — если источник «лишний» ставите «0», иначе = ym:s:visitDuration; меняете тип данных полученного столбца на целое число.
Шаг 3. Удаляем лишние столбцы и делаем сводную таблицу суммируя продолжительность визитов для каждого уникального пользователя. (Комп очень тупил, поэтому скринкаст подвисает.)

Получили таблицу: ID пользователя и сколько времени за все платные визиты он провёл на сайте.

Находим пользователей, совершивших конверсию в любой из визитов

Копируем исходный запрос, затем находим нужных пользователей.

Фильтруем сессии с ID нужных конверсий, фильтруем нужные даты, удаляем все столбцы кроме ID посетителей, удаляем дубли, создаём пользовательский столбец «была конверсия».

Объединяем запросы в один

Мы нашли пользователей, совершивших конверсию и посчитали для каждого пользователя сумму длительностей сессий. Теперь надо эти данные объединить с исходными.

Нужно добавить данные из второго и третьего запроса в первый.

В Power Query есть аналог функции JOIN — в русской версии он ожидаемо называется «Слияние запросов».

Используем Слияние запросов для объединения данных.
Обнуляем длину сессии для каналов которые не хотим учитывать (органика, прямые заходы, бренд-трафик).
Фильтруем тех, у кого общее время равно 0 (клиенты с каналов, которые мы не хотим учитывать). Оставляем только тех, кто совершил конверсию, и находим вес визита — делим продолжительность сессии на общую продолжительность сессий для пользователя.
Удаляем все столбцы кроме ym:s:UTMCampaign и веса, делаем сводную таблицу, где суммируем конверсии для каждой UTMCampaign.

Всё. Нажимаем Закрыть и загрузить, полученная таблица — это число конверсий по метке UTM Campaign по такой модели атрибуции. Сравнивайте со стандартными моделями, принимайте решения.

2017  

Настройка счётчика top.mail.ru для сайтов с AJAX

Если вы размещаете рекламу в Таргет Мэйле и ваш сайт использует AJAX — статья для вас. Например, застройщики с сайтами от студии ART3D.

Что случилось

Если ваши счётчики Метрики, Аналитикса и Мэйла показывают глубину просмотра 1—1,5 (и у вас не одностраничник), то, скорее всего, они не понимают, что пользователь перешёл на новую страницу — он будет как бы находиться на странице приземления.

Цели, настроенные на посещения отдельных урлов, не будут корректно работать. Аудитории ремаркетинга, заданные для пользователей, посетивших определённые страницы, не будут собираться.

Что делать

Для Метрики и Аналитикса проблема давно решена, а для счётчика Мэйла фикс появился только недавно, ловите. Мэйл — классные, быстро решили проблему и сделали мануал.

Проверяем звонки с помощью «Вконтакте» и «Яндекс.Аудиторий»

Ещё один метод найти фейковые звонки в сфере недвижимости подсказал мне Боря Константинов. Я проверил двенадцать популярных сайтов и делюсь результатами.

Спойлер: не всё так плохо.

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

Как проверить номера?

«Вконтакте» позволяет собирать аудитории ремаркетинга по номерам телефонов:

Загружать можно любое количество телефонов, в ответ система показывает сколько пользователей соцсети нашлось:

Какая доля клиентов должна находиться?

Я проверил выборку из 400 мобильных номеров с «чистого» канала. Нашёл 62% абонентов. Поскольку выборка небольшая, у этого значения есть погрешность — реальная доля пользователей «Вконтакте» лежит в диапазоне 57—67% (с вероятностью 95%).

Результаты

Доля найденных пользователей «Вконтакте» со звонков с рекламных площадок

Только две площадки из двенадцати показали статистически значимые плохие результаты. Если вы там размещаетесь, прозвоните контакты или посмотрите в ЦРМ были ли с них показы и сделки. Остальные сайты — в норме.

Аналогичный способ в «Яндекс.Аудиториях»

Яндекс с чистого канала находит 45±3% пользователей. Подозрительные по результатам проверки «Вконтакте» площадки и здесь показали худшие результаты: 18±13% и 13±12%.

Ок, пара странных площадок, но обычно звонят реальные люди?

Не знаю. Я исхожу из предположения, что левые звонки делают с новых симок. Если номер новый, его нет в Яндексе, Сбербанке, Авито, Авто.ру, Фейсбуке, «Вконтакте» и других базах.

Организовать действительно большой поток звонков реальных людей (которые будут находиться) с Youdo и подобных сервисов сложно. Поэтому, предлагаю пока снизить градус подозрительности — возможно, не всё так плохо на самом деле. Я продолжаю проверять источники — как будут результаты, поделюсь.

Паранойя 2.0

Что если накручивают звонки не площадки, а те, кто эти размещения продаёт — агентства. Тогда подобные исследования дадут разные результаты в каждом конкретном случае.

Если вы сомневаетесь в своих звонках — пишите.

Ещё по теме:

Как рассчитать размер выборки
Другие способы выявления фрода от Макса Жучкова
Ещё несколько способов: HLR-запросы, Ping-SMS и слитые базы данных
Ищём среди клиентов Сбербанка
Выступление Алексея Липскерова

2017  

Тащим данные из Колтача в Эксель

Используем Power Query для быстрой визуализации данных о звонках

Будет полезно тем, кому не хватает графиков в Журнале звонков.

Включаем АПИ

Поставьте галочку
Скопируйте Идентификатор сайта (ID) и Токен

Подключаемся Экселем

Зайдите в Эксель 2016, «Данные» → «Создать запрос» → «Из других источников» → «Пустой запрос».

Откроется Редактор запросов, там жмёте «Расширенный редактор» и вставляете следующий текст, заменив {ID Вашего сайта} и {Токен АПИ} на Идентификатор сайта (ID) и Токен из личного кабинета Колтача, и вставив нужные даты:

Ссылка на файл с кодом → http://d.pr/f/sVaz

Нажимаете «Закрыть и загрузить» — получаете табличку с уникальными звонками — строите сводные таблицы и графики какие душе угодно.
Достаточно потом менять в запросе даты — всё пересчитается, а графики перестроятся.

Пример полей сводной таблицы — звонки по источникам и кампаниям по дням

Работает когда звонков в периоде меньше 500, если звонков больше — напишите, надо кое-что поправить.
Если нужны не уникальные звонки, а все — уберите из кода запроса &uniqueOnly=true

2017  

Как определить фейковые звонки с помощью Сбербанк Онлайна?

Метод для терпеливых

Продолжаем бороться с ненастоящими звонками в сфере недвижимости. По некоторым оценкам 70% звонков на рынке — фейк. Поскольку застройщики упорно измеряют эффективность рекламы звонками, нашлись люди которые их подделывают.

Ладно, а причем тут Сбербанк?

Как сообщает сайт Сбера, 70% жителей России пользуется их услугами. Логично ожидать от репрезентативной выборки похожую долю клиентов. Другими словами, если среди позвонивших доля клиентов банка сильно меньше, или их нет вообще — с источником что-то не так.

Как проверить номера?

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

Если к номеру привязана карта — банк её находит и показывает имя абонента (чтобы клиенты случайно не перевели деньги не туда), если нет — пишет «Ошибка при получении карты по номеру мобильного телефона».
Сбербанк не хочет, чтобы их базой пользовались не по назначению, поэтому в день даёт проверить только 8 номеров. Поэтому это метод для терпеливых — потребуется много дней на проверку.

Какая доля клиентов должна находиться?

Я проверил выборку из 52 номеров с «чистого» канала. Нашлось 79% абонентов. Поскольку выборка небольшая, у этого значения есть погрешность — реальная доля клиентов Сбербанка лежит в диапазоне 68—90% (с вероятностью 95%).

Сколько номеров надо чтобы проверить рекламный источник?

Зависит от того, какая доля абонентов будет находиться. Если вы проверили 10 номеров и не нашли ни одного — возможно, всё нормально, но это примерно один шанс из 10 000, и к источнику лучше присмотреться. Если вы проверили 30 звонков и нашлось лишь 50% — не спешите записывать источник в жулики, для достоверного прогноза вам нужно больше данных. Ссылка как рассчитать размер выборки — в конце статьи.

В чём недостатки метода?

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

Теория — хорошо, а кто конкретно накручивает звонки?

Я проверяю этим и другими способами около 20 источников. Кое-какие любопытные результаты уже есть, но работы ещё много. Если вы сомневаетесь в том или ином источнике и готовы поделиться данными — пишите, больше данных — точнее результаты.

Ещё по теме:

Как рассчитать размер выборки
Другие способы выявления фрода от Макса Жучкова
Ещё несколько способов: HLR-запросы, Ping-SMS и слитые базы данных
Выступление Алексея Липскерова

2017  

Как победить фейковые звонки в недвижимости

В статье «Фейковые звонки с медийки» мой коллега Максим Жучков рассказал, как застройщику выявить накрученные звонки с рекламных площадок: прозванивать, искать номера в Яндексе, пинговать специальными запросами, считать конверсию в сделки и др.

Методы с прозвоном и пингом эффективны, но чтобы с уверенностью сказать, что канал не «прозванивается» — нужна большая разница с контрольной группой или много данных. Много данных → это много звонков → много денег на проверку. Не каждый застройщик может позволить себе потратить условные полмиллиона ₽ на проверку канала.

Для метода с конверсией в сделки помимо объема данных, нужна ещё црм-система, которой у многих застройщиков попросту нет.

Сегодняшняя статья — о том, как проверить качество звонков с помощью смс-сервисов и как найти фрод используя утёкшие в сеть базы данных.

Метод

  1. Выбираем контрольную группу — телефонные номера с канала, в котором вы уверены. Часть телефонов, даже с «чистого» канала не будут «прозваниваться».
  2. Считаем долю «неабонентов» тремя способами: HLR-запросами; Ping-SMS; поиском телефонов в утёкших базах данных.
  3. Аналогично проверяем выборку с тестируемого (подозрительного) рекламного канала.
  4. Считаем доверительные интервалы, сравниваем источники и проверяем гипотезу.

Для примера я сравню два канала одного из застройщиков.

HLR-запросы

HLR-запросы — запросы к базе данных, в которой хранится полная информация об абонентах сетей GSM-операторов. С их помощью можно определить доступен абонент или нет.
Сервисов, которые отправляют такие запросы, много — например smsc.ru.

Контрольная выборка
Тестируемая

Нас интересует доля телефонов оказавшихся «не в сети» и тех, которых «не существует»:

У этих вычислений есть погрешность из-за того, что звонков мало. С учётом 95%-доверительного интервала, результат будет такой:

Доли «неабонентов» различаются, но погрешность выборки не даёт сделать выводов.

Ping-SMS

Специальное смс-сообщение, которое не отображается в телефоне получателя. С его помощью определяют доступен сейчас абонент или нет.
Считаем для каждого канала:

Контрольная выборка
Тестируемая выборка

Доля «неабонентов» для двух проверок:

Снова результатов никаких.

Слитые базы данных

Есть такие сервисы, где пользователи узнают телефон владельца машины по номеру и наоборот. Плюс, сервисы показывают количество объявлений на популярных сайтах (auto.ru, avito.ru, am.ru, irr.ru, bibika.ru, drom.ru, e1.ru, car.ru, cars.ru) для нужного номера телефона.
Думаю, вы их легко нагуглите.

Сравниваем долю отсутствующих номеров в базе для разных каналов.

Бонус этого метода — можно понять кто из звонивших риэлтор:

Выдача базы данных для одного из номеров — явно риэлтор

Доля «неабонентов» для трёх проверок:

Тут казалось бы тестируемый источник сильно хуже (54% не нашлось у «чистого» канала; 70,4% — у подозрительного), но и тут выборки мало, чтобы сказать с должной уверенностью — нужны ещё данные.

Плюс этого метода — его почти невозможно подделать: задним числом в базу не попадешь.
Минусы: базы неофициальные и могут пропасть в любое время; нельзя сразу загрузить много телефонов (хотя я пока плохо искал).

Проблемы метода

Первая проблема — жулики не дремлют — если раньше номера действительно можно было отсортировать в Экселе, а симки были выключены почти на 100%; теперь номера прозваниваются, а трубки берут. (Говорят даже на объекты приезжают.) Поэтому смс-запросы скоро станут бесполезными.
Вторая — одному застройщику вряд ли хватит данных для статистически значимых результатов.

Что делать

Застройщики тратят 2—5% выручки на рекламу.
По некоторым оценкам 70% звонков — фейк.
Если, мы найдем «накрученные» каналы, застройщики будут экономить на рекламе, а квартиры станут немного дешевле (размечтался).

Мы хотим собрать такие данные с большого числа объектов:

Только взять их негде.

Почему ничего не получится

Рекламные агентства не дадут данные, так как сами продают такие размещения (зная о фроде или нет — другой вопрос).
Маркетологи застройщиков чаще всего имеют кипиай в звонках и не поделятся — зачем лишаться звонков, ведь их требует руководство.
Колтрекеры, у которых вообще вся информация, дружат с агентствами и застройщиками и чувствуют себя хорошо и без расследований.
Руководству строительных компаний разбираться во всём этом нет времени.
Так и живём.

2016  
Ctrl + ↓ Ранее