Визуализация статистики о том, что и так все знают
Привет, Хабр! Меня зовут Тагир, я занимаюсь аналитикой игровых механик. Недавно я наткнулся на статью, в которой визуализировали жизни тысяч людей с точностью до минуты — люди отмечали, на что они тратят свое время в течение дня, а автор агрегрировал эти данные и сделал визуализацию, разбив активности по категориям.
Я переложил эту логику на банковские транзакции, чтобы посмотреть, на что люди тратят свои деньги в определенный момент времени, и получил статистику, о которой все и так вроде бы знают: на обед люди ходят в ближайшее кафе и заправляют машину, после работы — в супермаркет, а на выходных — отдыхают в увеселительных заведениях. Но визуализировав эти данные, увидел, что выглядит это весьма залипательно.
Оригинальная статья
Вдохновением для статьи послужила визуализация Nathan Yau 2015 года. В США уже 20 лет проводится опрос об использовании времени — тысячи респондентов детально заполняют, чем они занимались в течение 24 часов. Автор использовал эти данные для симуляции суток для 1 000 людей с точностью до минуты.
Более конкретно, автор составил поминутную таблицу вероятностей перехода от одного вида деятельности к другому, например, от работы к отдыху. В результате он получил 1440 матриц переходов, которые позволили ему смоделировать день как изменяющуюся во времени цепочку Маркова.
Он классифицировал различные виды деятельности на 16 категорий — сон, образование, работа, отдых, шоппинг, звонки и так далее. На визуализации видно, как люди отправляются на работу, выполняют поручения, занимаются домашним хозяйством, ездят на работу, отдыхают и едят как по расписанию в течение дня. Особенно интересно наблюдать за началом часа — например, большая доля людей просыпается не в 6:54, а в 7:00. Визуализация получилась очень залипательной — подробнее о ней я писал в этом блог-посте.
Причем здесь банк?
Статья Nathan Yau — прекрасный пример Data-журналистики. Это когда журналист изучает данные и представляет их в виде дэшбордов, таблиц, графиков, гифок или цифр. То же самое, что делает обычный аналитик для своего бизнес-заказчика, но в этом случае конечный потребитель — это читатель.
Поэтому иногда такими журналистами становятся и аналитики. Например, год назад на Матемаркетинге я посетил доклад о дата-журналистике, и один из спикеров с бэкграундом в аналитике рассказывал, что ему наскучили обычные аналитические задачи. Хотелось творчества и работы с данными — так он и открыл для себя дата-журналистику.
Когда-то давно мы с парой коллег также заинтересовались Data-журналистикой: изучали референсы, прочитали пару-тройку статей, посмотрели несколько докладов на эту тему. Но хороших материалов для использования не нашлось, а вот статья Nathan Yau вдохновила. Захотелось посмотреть, в каких категориях банковских операций люди совершают транзакции в определенное время. Хотелось подтвердить или опровергнуть некоторые гипотезы, которые у меня имелись. В конце концов, телефон и так выдает нам подсказки, основанные на времени и локации. Например, он предлагает открыть приложение подкаста в 8:00, потому что в это время я прихожу в спортзал. Или открыть сканер QR-кода во Вкусвилле в 19:30, потому что я захожу туда после работы.
Моя работа — анализировать данные, а это — полностью факультативный проект, которым я занимаюсь в свободное от работы время: мне нравится проверять разные гипотезы, которые не касаются моего основного продукта. Пока писал статью придумал несколько задач, которые могут родиться по результатам этой работы. Одна из них заключается в том, что мы могли бы подстроить наши коммуникации или игровые события под определенное время, когда люди совершают те или иные траты. Например, когда клиенты совершают траты в категории «Транспорт». Всё это требует дальнейшего погружения и изучения, но, на первый взгляд, может получиться что-то интересное.
Какие данные использовал
В силу NDA не могу рассказать за какой период и в каком объеме я выгрузил данные. В конце концов, результат этой работы — залипательная визуализация, а статья не претендует на научность. В любом случае данных достаточно, чтобы делать какие-то выводы.
Когда выгрузил все необходимые данные, получилась таблица формата «Категория» — «Время» — «Количество транзакций». После этого я преобразовал время в количественный формат минут — от 0 до 1439.
Поскольку категории могут меняться, я решил проверить распределение транзакций по группам. Не окажется ли так, что категорий стало слишком много, а записей по ним слишком мало? Так и получилось. Передо мной встала задача сократить больше 30 категорий до 16. Самые малочисленные категории я отнес к категории «Прочие расходы». Например, люди покупают цветы гораздо реже, чем электронику.
После этого я постарался разместить категории в логическом порядке — хочется, чтобы супермаркеты были ближе к кафе и ресторанам, чем к развлечениям. Табак, алкоголь и здоровье я поставил поближе друг к другу — посмотрим, что и когда покупают чаще. Итоговый список категорий выглядит так:
супермаркеты,
фастфуд,
кафе и рестораны,
транспорт,
такси,
АЗС,
авто,
табак,
алкоголь,
здоровье,
красота,
дом и ремонт,
одежда и обувь,
техника,
прочие расходы,
развлечения.
Как строил визуализацию
Когда у меня появились данные, пришло время их визуализировать. Простых графиков в Python было недостаточно, чтобы показать динамику — нужна была анимация. Для анимации нужен был JavaScript. В последний раз я писал на JavaScript ещё лет 10 назад, поэтому знаменитый мем про JS прошел меня мимо.
Тот самый мем про джаваскрипт и яблоки
Доступ к навыкам по JavaScript остался закрыт, но у меня был доступ к ChatGPT. На тот момент OpenAI только добавили функцию анализа данных в премиум подписке — получилось довольно удобно. Из минусов — история аналитики скидывалась после каждого сеанса, а повторно загрузить файлы не было технической возможности. Приходилось каждый раз создавать новый чат и продолжить общение таким образом. Я пробовал разные плагины, но остановился на работе без них.
Я предоставил ChatGPT пример своих данных, описал задачу и начал просить сделать визуализацию, постепенно исправляя баги и дорабатывая фичи. Изменить анимацию, поправить градиент цветов, переместить плашку времени, запустить отсчёт — это и многое другое для меня написал ChatGPT. Код, который я использовал, находится на GitHub по этой ссылке.
Доработки кода заняли слишком много времени, так как мне постоянно хотелось его доработать и сделать лучше. Сначала я хотел повторить оригинальную визуализацию в виде кружочков, но не получилось. Потом хотел оставить диаграмму в рукописном стиле на базе библиотеки chart.xkcd, но там тоже возник ряд сложностей. Я решил не зацикливаться на визуальной части, поиграть с цветами и перейти к контенту.
Вот так выглядели разные версии визуализации:
Кружочки так и не заработали, как в оригинальной визуализации
Диаграммы в рукописном стиле
Финальный вид визуализации
Ключевые точки
Так же, как и автор оригинальной статьи, я провел слишком много времени, наблюдая за визуализацией. Многие из этих выводов становятся очевидными, когда рассматриваешь их в контексте собственного опыта. Мне же было интересно посмотреть на большой выборке, как себя ведут люди в целом. Вот некоторые тренды, которые я для себя отметил:
Абсолютный лидер по количеству транзакций — категория «Супермаркеты».
Дальше идет «Фастфуд».
Замыкает тройку «Транспорт».
Пиковые времена транзакций находятся на ожидаемых отметках.
Пик транзакций в супермаркетах приходится на 17:39.
Для фастфуда — на 13:14.
Для транспорта — на 18:20.
Заметно увеличение транзакций, связанных с фастфудом, кафе, ресторанами и здоровьем в обеденные часы, примерно между 12:00 и 14:00. Вероятно, люди обедают фастфудом, заходят после работы за продуктами и едут домой. Отсюда логичный вывод бытовой логики — если хотите поменьше стоять в очередях, закупайтесь днём.
Пиковые времена для других категорий тоже сходятся с обычным укладом жизни:
в 12:27 происходит максимальное количество транзакций в категории «АЗС»;
в 13:16 чаще всего совершают покупки в категории «Авто»;
алкоголь покупают после работы в 18:39;
а категория «Дом и ремонт» радует покупателей в 11:58.
Многие категории показывают значительное увеличение транзакций вечером, особенно между 17:00 и 19:00.
Интересно наблюдать за тем, как город готовится ко сну — после 20:00 доля тех или иных категорий кратно меняется. Например, транзакции из категории «Транспорт» постепенно переходят в «Такси», потому что общественный транспорт перестает ходить ночью. Ювелирные изделия, которые я отнес к категории «Прочие расходы», тоже практически не имеют транзакций в ночное время. Транзакции в развлечениях начинают увеличиваться после 20:00 и находятся в пике в первом часу ночи.
Про ночь поговорили — нельзя не упомянуть и утро. Посмотрим, как просыпается город.
Заметно сильное снижение транзакций в категориях, связанных с транспортом — люди начинают реже пользоваться АЗС, такси и общественным транспортом в целом. Скорее всего, большая часть людей уже работает в это время. Попробуем рассмотреть временной промежуток пораньше.
Я не ожидал в это время сильное падение категорий, связанных с едой. Судя по всему, после трат в категории «Развлечения» люди идут в кафе и рестораны, чтобы набраться сил. Занятно и снижение доли такси — общественный транспорт начинает открываться, и люди пересаживаются на него.
Если вам интересно самим покрутить визуализацию и отсмотреть определенный промежуток времени, можете сделать это по этой ссылке. Для тех, кто не любит переходить по разным ссылкам, ниже приложу ускоренный вариант визуализации.
Вместо выводов
В начале статьи я отметил, что цель данного исследования — посмотреть на больших данных, как ведут себя люди. Мне удалось подметить для себя некоторые паттерны потребительского поведения, подтвердить различные гипотезы и сформулировать идеи для дальнейших исследований. То, что начиналось с залипательного проекта, в дальнейшем может получить практическую пользу.
В будущих исследованиях было бы интересно сфокусироваться на анализе влияния праздников и сезонных изменений на потребительское поведение, а также изучить влияние различных социально-демографических факторов. В каком возрасте покупки в категории «Здоровье» начинают перевешивать «Развлечения»? Меняется ли этот паттерн под конец учебного года? На что семейные люди тратят больше денег — на дом и ремонт или красоту? Это и многое другое можно узнать, если продолжить развивать эту тему.
Шуточные выводы, к которым мы пришли в этой статье, можно использовать как на практике, так и в бизнесе. В случае с практической пользой мы можем рассчитать время своих трат таким образом, чтобы пересекаться с меньшим количеством людей. Если говорить про бизнес, то мы могли бы настраивать свои коммуникации более точечно, отталкиваясь от поведения клиента. Вариантов развития много. Главное — интересоваться тем, что происходит вокруг.
В комментариях предлагаю обсудить, описываются ли ваши потребительские привычки на этой визуализации. Быть может, именно вы относитесь к той категории людей, кто делает импульсивные покупки в категории «Дом и ремонт» в 4 утра?
А еще я приглашаю всех в свой телеграм канал «Тагир Анализирует», где я пишу про свою работу, датавиз, новости из индустрии, интересные факты и в целом про то, как строить карьеру в IT.