Назар Ниязов

Рубрикатор


Автор блога

Я интернет-маркетолог и аналитик.

Занимаюсь анализом данных, визуализацией и построением прогнозов c помощью компьютерного моделирования.

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


27 июня  

Стоит ли банку выдавать кредит?

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

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

У нас есть:

  • данные прошлых клиентов с результатами оценки (выдавать кредит или нет);
  • новые клиенты, которых нужно оценить.

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

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

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

Первый шаг, как всегда — посмотреть на данные. В таблице прошлых клиентов есть 20 показателей, по которым их оценивали: возраст, сумма кредита, баланс на банковском счете, срок работы на нынешнем месте.

Посмотрим на возраст клиентов. Кто в основном обращается за кредитом? Клиентам какого возраста банк предпочитает не выдавать кредит?

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

Запускаем алгоритм со списком новых клиентов и смотрим, что вышло. Сделаем распределение по сумме займа.

Нам осталось перебрать параметры и снизить количество ошибок алгоритма, насколько возможно. В целом, прогноз готов.

22 июня   Udacity

Прогноз продаж видеоигр

С недавнего времени нас наняли на должность аналитика в компанию, которая создает и распространяет видеоигры. Фирма хочет правильно оценить спрос, чтобы заказать нужное количество расходных материалов. Переоценка спроса приводит к простою оборудования и высоким издержкам. Из-за недооценки клиенты не получат желаемый товар.

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

Прогноз нужно сделать на 4 месяца вперед. Есть файл с доходом по за последние несколько лет. Посмотрим, как он выглядит на диаграмме.

Наблюдается явная сезонность, всплески спроса в конце года и стабильный рост спроса.

Для компьютерного моделирования выберем модель ARIMA для анализа временных рядов. Для прогноза на следующем слайде я использовала параметр dynamic=False, чтобы прогноз в каждой точке создавались с использованием полной истории. Корректнее делать прогноз с историей до определенной даты, но для краткости я его здесь не привожу, погрешность там в пределах допустимого.

Протестируем на исторических данных за последние два года

Модель верно спрогнозировала сезонные всплески и доход. Сделаем прогноз доходов за следующие четыре месяца.

Фирма заработает почти три миллиона, уже в следущем месяце ожидается значительный рост спроса.

21 июня   Udacity

Где открыть новый магазин?

Pawdacity — ведущая сеть зоомагазинов в Вайоминге с 13 магазинами по всему штату. В этом году Pawdacity планирует расширяться и открыть 14-й. Менеджер сети обратился к нам с просьбой провести анализ и предложить город для нового магазина, взяв за основу ожидаемый доход.

Новый город должен соответствовать следующим условиям:

  • население города свыше 4000 жителей (на основе переписи 2014 года).
  • у него самый высокий прогнозируемый годовой доход (не меньше 200 000$).
  • общий доход конкурентов в городе меньше 500 000$, данные из открытых источников.
  • в нем еще нет магазинов сети.

Менеджер предоставил 4 файла:

  • доходы магазинов сети за 2010 г, разбитые по месяцам.
  • годовые доходы конкурентов.
  • плохо отформатированный файл с данными переписи населения.
  • количество домохозяйств с несовершеннолетними, плотность населения, размер территории города, общее количество семей — для каждого города в Вайоминге.

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

В штате Вайоминг всем условиям соответствуют три города: Уорлэн, Ларами и Ландер. Делаем прогноз продаж с помощью линейной регрессии, пользуемся питоном.

У Ларами наибольший прогнозируемый доход. Его мы рекомендуем менеджеру.

ПРИЛОЖЕНИЕ

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

Для поиска выбросов испльзовался IQR, исключен один город.

r2 = 0.88.
p-value территории = 0.0125.
p-value семей = 0.0001.

p-value обеих переменных ниже 0.05, а r2 близок к единице.

19 июня   Udacity

Прогноз продаж от рассылки каталога

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

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

Нам нужно определить, какой доход получит фирма от этих 250 клиентов. Руководство не хочет делать рассылку по базе новых клиентов, если ожидаемый доход не составит хотя бы 10 000$.

Некоторые детали:

Стоимость печати и рассылки одного каталога 6.50$.
Средняя маржа всех товаров 50%.

В клиентской базе фирмы есть имя покупателя, уникальный идентификатор, адрес, город, штат, почтовый индекс, количество заказов и средняя сумма покупки. На основе этих параметров нам нужно спрогнозировать среднюю сумму покупки новых 250 клиентов. Насколько я понял из условия, эти клиенты уже что-то купили, но на их среднюю сумму покупки фирма опираться не хочет — слишком мало заказов. В любом случае, менеджер нам эти данные не предоставил.

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

Линейная регрессия — используемая в статистике регрессионная модель зависимости одной переменной y от другой или нескольких других переменных x с линейной функцией зависимости.
Википедия

Поясню на примере. Устав от всех этих цифр, мы выпили чашку кофе, а потом обошли всех новых коллег и узнали длину их ладони, ступни и рост. Вот, что мы увидели — как правило, чем длиннее у человека ладонь и ступня, тем больше его рост. При длине ладони 15 см рост равен 175 см, при 16 см — 180 см.

Ладонь и ступня — независимые переменные, на основе которых мы можем предсказать рост — зависимую переменную. Мы еще не видели финансового директора, но знаем, что длина его ладони — 13 см. На основе наших данных можем предположить, что его рост — 165 см.

То же самое мы сделаем с новыми клиентами — на основе адреса, количества покупок и времени с первого заказа.

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

Большинство заказов приходит из столицы штата Колорадо, следом идет пригород Денвера и Калифорния. Часть заказов поступает с северо-востока страны.

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

Наши рекомендация — рассылать.

Новые клиенты принесут 22 348$ чистой прибыли с учетом маржи и расходов на рекламные материалы. Большая часть клиентов сделает покупки на 150$.

18 июня   Udacity

Топ-5 стриптиз-клубов в Google Adwords

Представим, что к нам обратился знакомый менеджер московского стриптиз-клуба. Понаблюдав за конкурентами, он заметил, что многие размещают рекламу в Гугле. Клуб готов попробовать новый канал рекламы, руководство прежде всего хочет узнать необходимый бюджет и ожидаемое количество посетителей на сайте. Менеджера интересуют ставки конкурентов и слова, по которым они показываются. Он составил список 9 стриптиз-клубов, чьи объявления появляются на первой странице поиска.

Для анализа нам понадобится сервис Semrush. Покажу на примере, как он работает.

Если нужно провести конкурентную разведку, мы набираем в Гугле «стриптиз», «стриптиз в Москве», собираем все объявления и записываем их позицию на поиске — наверху или внизу страницы. У Гугла есть инструмент медиапланирования, с его помощью мы смотрим ставки по этим запросам и количество пользователей, которые интересуются этой темой. Далее сводим все данные в Excel и примерно представляем, сколько тратит и получает каждый клуб.

Semrush делает всю работу за нас, только собирает результаты поиска по миллионам запросов.

Итак, у нас на руках 9 отчетов, по одному на клуб. Чтобы увидеть рынок в целом, сводим их в диаграмму.

Та же информация в виде таблицы (в правом столбце количество посетителей в месяц):

flirteaseclub.ru 4897
playhouse 2976
egostrip.ru 1398
russtriptease 1289
burclub.info 768
club-virg.ru 636
rasputinclub.ru 314
provokatorclub.ru 149
russian-cabaret.ru 147

За месяц 9 стриптиз-клубов потратили 3447$, привлекли 12 575 посетилей и показывали объявления по 897 ключевым словам.

Средний бюджет: 383$.
Средняя стоимость посетителя (cpc): 0.34$.
Среднее количество ключевых слов: 152.

Список самых дорогих слов возглавляют брендовые — «клуб динамо москва», «бмв клуб москва», «клуб пентхаус москва».

Насколько достоверны данные Semrush?
Отчеты сервиса почти всегда неполные. По моему опыту, фирма может тратить 10 000$, а сервис покажет 200$. Но мы все равно можем вычислить пропорции и положение компаний относительно друг друга: кто получает больше трафика, у кого бюджет меньше. Всегда полезно посмотреть на их ставки и объявления.

Клуб «GoldenGirls» (flirteaseclub.ru) занимает первое место по количеству посетителей. На него приходится почти 40% от общего трафика. Его объявления показываются на втором месте, уступая остальным участникам аукциона.

Варшавский стрип-клуб «Playhouse» активно рекламируется на российских пользователей. Он находится на втором месте по трафику и на первом по расходам на рекламу — 1394$ за месяц. У него самая низкая цена за посетителя (average cpc) — 0.2$.

На третьем месте клуб «Эгоист» (egostrip.ru). Он платит за посетителя больше остальных клубов (cpc — 0.5$), его объявления почти всегда на первом месте. Интересно, что у него такое же количество ключевых слов, как у лидера — около сорока фраз. Однако он получает почти в четыре раза меньше трафика, его рекламные расходы чуть ли не в два раза больше.

Клуб «Zажигалка» занимает четвертое место. У него самое большое семантическое ядро — 412 ключевых слов.

Клуб «Бурлеск» Артема Овечкина закрывает пятерку с самым маленьким рекламным бюджетом. На него приходится 6% от общего трафика.

Стратегия на поиске

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

Клуб «GoldenGirls» 90% бюджета тратит на ключевые слова «проститутки москвы», «шлюхи москвы».

Варшавский «Playhouse» четверть бюджета тратит на «стриптиз видео» и «go go».

«Эгоист» не боится показываться по общему слову «стриптиз», который забирает половину его бюджета. Далее идут «порно стриптиз» и «домашний стриптиз».

Клуб «Zажигалка» предпочитает не конкурировать по дорогим запросам. Он показывается по своему бренду, локальным словам «куда сходить в казани», «клубы москвы».

Стратегия Бурлеска сильно выделяется среди остальных. 70% бюджета он расходует на околотематическую фразу «рестораны москвы».

Наши рекомендации:
В тестовой кампании показывать объявления по 6 категориям запросов: «бренды конкурентов», «клубы», «проституция», «стриптиз», а также околотематические «go go» и  «рестораны». Стратегическая задача на первое время — оказаться в Топ-5.

Acquisition, ROAS и LTV

Предположим, мы запустили 7 тестовых групп объявлений на один день.

Исходные данные:

  • Платформа для рекламы: Facebook.
  • Платформа аналитики: Tune.
  • Дата: 04.01.2016.
  • Таргетинг по устройствам: iOS.
  • Тестовые таргетинги: новые регионы или интересы, один на группу объявлений.

Через две недели выгружаем три отчета (модельные данные).
Отчет по расходам из Facebook (здесь и далее первые 5 строк):

Логи установок из Tune:

Логи событий из Tune.

Здесь отчеты в формате csv.

Нам нужно решить, продолжать ли рекламу, то есть спрогнозировать LTV, рассчитать окупаемость и скорректировать ставки.

Я буду пользоваться библиотекой Pandas для python, а корректировать ставки через API.

Приводим отчеты к единому виду. В отчете по установкам меняем название столбца «Datetime» на «Install datetime».

В отчете по событиям оставляем только покупки.

В отчете Facebook переименовываем столбец «Date» на «Datetime», «Adset» на «Partner adgroup». Facebook показывает ставки в копейках, переводим в рубли и округляем.

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

Рассчитываем LTV для каждого клиента. Допустим, наш аналитик уже это сделал с помощью бесконечно убывающей геометрической прогрессии и построил такую кривую. (Скриншот из лекции А. Аникина.)

Мы знаем, что за две недели клиент приносит 6% от своего LTV. Рассчитываем LTV для каждого клиента:

  • делим доход на 6%,
  • добавляем значение в таблицу.

Суммируем доход по группам объявлений. Рассчитываем прибыль и ROAS (прогнозируемый доход / расходы). Его удобнее использовать для корректировки ставок: в отличие от ROI, он неотрицательный.

Мы видим, что две группы не окупаются.

Но предположим, что у нас не 7 групп, а 60. Нам поможет такой отчет.

Из него ясно, что 28% наших рекламных кампаний (2 из 7) не окупаются.

А сколько мы всего вложили и получим обратно?

Вложенный капитал окупится на 26%.

Мы увидели картину в целом и рассчитали окупаемость каждой группы объявлений. Наш целевой ROAS — 200% или 2. Максимальная ставка = (прибыль за конверсию / целевой ROAS) * (коэффициент конверсии). Корректируем ставки:

Обновляем через API.

И давайте посмотрим на воронку. Создаем новый агрегированный отчет из трех.

Смотрим на изменения в процентах.

Самые узкие места — между показами и переходами, а также переходами и установками. На этих данных они и так заметны, но в других воронках узкие места иногда расположены внизу. Именно изменения в процента позволяют их заметить.

В дальнейшем не нужно каждый раз это делать руками, особенно если у вас 1000 кампаний. Приложение может само пересчитывать LTV и корректировать ставки ежедневно или ежечасно. Подправьте код и поручите роботу:

  • собирать логи в базу данных на компьютере,
  • пересчитывать LTV на основе формулы, а не фиксированного значения,
  • корректировать ставки.
31 мая   Acquisition   API   Facebook

Яндекс.Директ. Часть 2: медиапланирование.

Допустим, мы уже собрали семантическое ядро, нам нужно решить, какие объявления расположить в спецразмещении, а какие в гарантии.

Я взял 5 слов и с помощью «Прогноза бюджета» собрал статистику по каждой позиции.

1-е спецразмещение.

2-ое спецразмещение.

Спецразмещение.

1-ое место.

Гарантированные показы.

Анар Бабаев в учебнике «Контекстная реклама» приводит такой пример.

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

Сделаем все руками.

Собираем все таблицы в единую панель. Вывел первые две позиции.

Оставляем только ставки по каждому слову для всех позиций.

Делаем все возможные комбинации ставок.

Вот здесь действительно нужен мощный сервер, hadoop или Apache Storm. Только для наших 5 слов вышло 3125 комбинаций. Это 3125 таблиц Excel, среди которых нужно выбрать лучшую!

Чуть больше слов — количество таблиц вырастает до нескольких миллиардов.
И уже при 130 словах получается новемвигинтиллион — число с 90 нулями.

Давайте пока закончим расчеты. Предположим, 3 процента из посетителей сайта приходят на пробный урок и остаются в школе. Средний срок жизни клиента — 6 месяцев, LTV — 21 000 р.

Сводим все комбинации с панелью, добавляем колонки с доходом и прибылью, сортируем по убыванию.

Низ колонки.

Как видно, варианты бюджета и прибыли могут отличаться в 20 раз. Мы можем потратить 1056 р. и заработать 39 894 р. за следующие 6 месяцев, а можем вложить 19 022 р. и получить 364 000 р. прибыли.

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

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

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

2017   Yandex

Яндекс.Директ. Часть 1: кластеризация.

Начну с интересной методики, которая позволит работать с очень большим семантическим ядром, хоть с 500 000 слов.

Предположим, что мы делаем рекламу для школы танго в Москве.

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

  • Много запросов по фильмам — «Последнее танго», «фильм», «Танго в Париже», «Четыре танго».
  • Есть одноименные магазины — «иркутск», «каталог», «сайт», «магазин».
  • Много запросов про музыку, оркестры — «ноты», «скачать», «слушать», «слова», «лунное танго».
  • Запросы про одноименное белье, брелоки, духи, мебель.
  • Локальные запросы — спб, новгород.

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

Мы не уверены, что любители оркестров танго также любят танцевать. Но не проходим мимо запросов про аргентинского музыканта Пьяццола и «Кумпарситы»: ими часто интересуются те, кто уже пробует танцевать либо давно танцует.

Мы нашли три интересных запроса:

  • школа танго;
  • танго для начинающих;
  • танго в Москве.

Я собрал 233 запроса по этим фразам, возьмем их пока за основу.

Дальше нам нужно разбить их на близкие по смыслу группы. В таблице первые 9 слов из списка. Второй столбец повторяет первый, пока не обращайте внимания.

Импортируем нужные библиотеки — sklearn, nltk, стеммер, стоп-слова, модуль для кластеризации по методу k-средних.

Готовим фразы к кластеризации. Разбиваем на отдельные слова, превращаем прописные в строчные.

Удаляем все предлоги и союзы — «для», «и», «в», «на».

Оставляем только корни слов.

Переводим обратно в строки.

Векторизуем.

Разбиваем все слова на 9 кластеров.

Смотрим результат.

Слова разбиты на кластеры, теперь мы можем использовать методы анализа данных. Например, как здесь.

Мы можем узнать:

  • Сколько слов в каждом кластере?
  • Какой кластер самый большой?
  • В каком кластере самые дорогие слова?
  • Где самый большой спрос?

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

2017   Acquisition   Yandex
Ctrl + ↓ Ранее