Визуализация статистики о том, что и так все знают

Привет, Хабр! Меня зовут Тагир, я занимаюсь аналитикой игровых механик. Недавно я наткнулся на статью, в которой визуализировали жизни тысяч людей с точностью до минуты — люди отмечали, на что они тратят свое время в течение дня, а автор агрегрировал эти данные и сделал визуализацию, разбив активности по категориям. 

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

9a839d75e7345147bcfe66580a37dad2.gif

Оригинальная статья

Вдохновением для статьи послужила визуализация Nathan Yau 2015 года. В США уже 20 лет проводится опрос об использовании времени — тысячи респондентов детально заполняют, чем они занимались в течение 24 часов. Автор использовал эти данные для симуляции суток для 1 000 людей с точностью до минуты.

1c2d4652b2b9a5ac38fac43d59f5aa45.gif

Более конкретно, автор составил поминутную таблицу вероятностей перехода от одного вида деятельности к другому, например, от работы к отдыху. В результате он получил 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. Вероятно, люди обедают фастфудом, заходят после работы за продуктами и едут домой. Отсюда логичный вывод бытовой логики — если хотите поменьше стоять в очередях, закупайтесь днём. 

d2a221deaee996f794cd4c5a9f0e3a0e.gif

Пиковые времена для других категорий тоже сходятся с обычным укладом жизни:

  • в 12:27 происходит максимальное количество транзакций в категории «АЗС»;

  • в 13:16 чаще всего совершают покупки в категории «Авто»;

  • алкоголь покупают после работы в 18:39;

  • а категория «Дом и ремонт» радует покупателей в 11:58.

Многие категории показывают значительное увеличение транзакций вечером, особенно между 17:00 и 19:00.

4bccaf11455154f0beaaf6cfa707af3a.gif

Интересно наблюдать за тем, как город готовится ко сну — после 20:00 доля тех или иных категорий кратно меняется. Например, транзакции из категории «Транспорт» постепенно переходят в «Такси», потому что общественный транспорт перестает ходить ночью. Ювелирные изделия, которые я отнес к категории «Прочие расходы», тоже практически не имеют транзакций в ночное время. Транзакции в развлечениях начинают увеличиваться после 20:00 и находятся в пике в первом часу ночи.

b7ef50d72d6846c09e8723a98cb0a488.gif

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

3cbde612d0b986685a6c29e6883c2161.gif

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

e9b2ae03036762be7d5970238d74154a.gif

Я не ожидал в это время сильное падение категорий, связанных с едой. Судя по всему, после трат в категории «Развлечения» люди идут в кафе и рестораны, чтобы набраться сил. Занятно и снижение доли такси — общественный транспорт начинает открываться, и люди пересаживаются на него.

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

1c6c03d6a061d832b6a1d8431817096f.gif

Вместо выводов

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

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

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

В комментариях предлагаю обсудить, описываются ли ваши потребительские привычки на этой визуализации. Быть может, именно вы относитесь к той категории людей, кто делает импульсивные покупки в категории «Дом и ремонт» в 4 утра?  

А еще я приглашаю всех в свой телеграм канал «Тагир Анализирует», где я пишу про свою работу, датавиз, новости из индустрии, интересные факты и в целом про то, как строить карьеру в IT.

© Habrahabr.ru