
Мне нужна была рекомендация хорошего ресторана, поэтому я поступила как любой нормальный человек: выполнила скрейпинг всех ресторанов в Большом Лондоне и собрала модель машинного обучения.
Всё началось со вполне логичной задачи: меня утомило блуждание по Google Картам в попытках отделить места с действительно хорошей едой от тех, которые мне сегодня решил всучить алгоритм. Где-то в процессе проект вышел за пределы простого поиска перекуса и превратился во что-то чуть более сумасшедшее, став исследованием того, как цифровые платформы незаметно перераспределяют возможность экономического выживания.
Как только начинаешь смотреть на ресторанный бизнес Лондона через призму данных, перестаёшь видеть все эти милые новые местечки и громкие анонсы об открытии, и начинаешь видеть алгоритмический рынок, на котором узнаваемость подпитывает сама себя, спрос создаёт эффект лавины, а жизнью и смертью заведений всё больше управляет код.
Google Карты — не каталог, а создатель рынка
Google Карты создают образ сервиса, пассивно отражающего того, «что любят люди». Больше звёзд, больше отзывов, качественнее еда. Но такой имидж скрывает то, как на самом деле работает платформа. Google Карты не просто индексируют спрос, а активно организуют его при помощи системы ранжирования на основе ограниченного количества базовых сигналов, публично признанных самой Google: это релевантность, расстояние и известность.
«Релевантность» рассчитывается на основе сопоставления текста между поисковым запросом пользователя и метаданными бизнеса. «Расстояние» вычисляется исключительно пространственно. Политэкономия начинается тогда, когда дело касается «известности». Google рассчитывает известность при помощи таких сигналов, как количество отзывов, скорость добавления отзывов, средний рейтинг, узнаваемость бренда и популярность в вебе в целом. Иными словами, это не только то, что люди думают о заведении, но и то, насколько часто люди с ним взаимодействуют, говорят о нём и насколько оно на слуху.
Известность в этих ранжированных списках определяет количество посетителей. Количество посетителей определяет скорость добавления отзывов. Добавление отзывов, в свою очередь, непосредственно усиливает сигнал известности. В системе возникает накопительный эффект. Чем раньше люди узнают о заведении, тем больше спрос. Спрос генерирует данные. Данные генерируют популярность в будущем. Это создаёт динамику кумулятивных преимуществ, очень похожую на накопление капитала на финансовых рынках. По сути, это сформулированный Робертом Мертоном эффект Матфея, применённый к лавкам с шаурмой: «…ибо всякому имеющему дастся и приумножится».
Такая система непропорционально вознаграждает сетевые заведения и уже популярные места. Сети получают преимущество благодаря узнаваемости бренда. Районы с высокой популярностью быстрее генерируют отзывы, благодаря чему известность точек в этих зонах растёт быстрее, чем в других даже при одинаковом качестве. И наоборот: новые независимые заведения сталкиваются с классической проблемой «холодного» запуска: без отзывов их сложно найти, а если их не находят, то им сложно получать отзывы. Следовательно, то, что выглядит как нейтральный выбор потребителей, можно глубже понять, взглянув с точки зрения архитектуры рынка с посредничеством алгоритма.
В экономике эта динамика сильно похожа на логику маркетмейкера: посредника, который не просто отражает подлинное соотношение спроса и предложения, а активно формирует ликвидность, согласование и определение цен. Платформы наподобие Google Карт выполняют аналогичную функцию для местных услуг, контролируя не цены напрямую, а известность заведений. В терминологии цифровой экономики алгоритмы ранжирования служат распределителями внимания, направляя спрос в сторону одних компаний в ущерб другим.
Создаём контрфактический город при помощи машинного обучения
Если Google Карты действуют в качестве своеобразного формирователя рынка в условиях городского спроса, то логично будет задать такой вопрос: как бы выглядел город без этого слоя усиления? Иными словами, как отделить собственные показатели ресторана от влияния на его популярность самой платформы?
Чтобы найти ответ, я создала модель машинного обучения — решающее дерево с градиентным бустингом (HistGradientBoostingRegressor из scikit-learn) — для прогнозирования того, каким должен быть рейтинг ресторана Google на основе только его структурных характеристик. Этот класс моделей предназначен для больших множеств разрозненных табличных данных смешанного типа и он особенно хорош в выявлении эффектов взаимодействий без необходимости указания их вручную. В список признаков включены количество отзывов (после логарифмического преобразования, чтобы учесть эффект убывающей отдачи от внимания пользователей), тип кухни, принадлежность к сети или независимый статус заведения, ценовая категория, общая категория заведения (ресторан, кафе, заведение навынос, бар), а также его расположение в городе, представленное с помощью пространственной сетки.
Небольшое отступление: у подмножества заведений я также скрейпила тексты отзывов, языки и фотографии, но для этого первого прогона статистики всего города ограничивалась бесплатным тарифом Google Maps API, частично ради воспроизводимости, частично из-за того, что мои предыдущие приключения со скрейпингом научили меня, что счета за облачные сервисы растут быстрее, чем количество отзывов. В будущих версиях дополнительные фичи улучшат картину. В частности, важны авторы отзывов. Пятизвёздочный отзыв на индийский ресторан, написанный на хинди, вероятно, несёт иной сигнал, чем написанный тем, кто не привык к такой кухне.
Почти сразу я столкнулась с одной практической проблемой: Google Карты на удивление плохо справляются с разбиением видов кухни на категории. Огромная доля заведений имеет расплывчатые отметки («ресторан», «кафе», «еда навынос»), часто они не согласованы или просто ошибочны. В итоге я создала отдельную модель классификации видов кухни, прогнозирующую тип кухни на основании названия заведения, языка меню и текста отзывов. Иными словами, фильтры кухни в моём дэшборде — это не тэги Google, они получены при помощи машинного обучения. Это важнее, чем может показаться: если ошибочно классифицировать кухни, то можно ошибиться с разнообразием, кластеризацией и конкуренцией.
Перед созданием модели все признаки пропускались через стандартный конвейер препроцессинга — заполнение пропущенных значений, кодирование и другие привычные процедуры. Критически важно то, что модель обучается находить сопоставления между наблюдаемыми признаками на платформе и рейтингами. Это позволит мне сгенерировать контрфактический ожидаемый рейтинг каждого ресторана, который обычно присваивает платформа в конкретных структурных условиях. Разность между реальным и спрогнозированным рейтингом ресторана я называю невязкой рейтинга. Положительная невязка означает, что показатели ресторана лучше, чем определённые платформой. Отрицательная невязка означает, что заведение хуже, чем его оценка алгоритмом. Это не идеальный способ оценки качества еды, но мощный показатель несправедливости оценки алгоритма, при котором социальная или гастрономическая ценность расходится с тем, что структурно усиливает платформа.
Здесь есть один тонкий момент: некоторые рестораны платят за рекомендации или за рекламу при локальном поиске. Так как платформа не раскрывает особенности оплачиваемого повышения видимости, я не могу оценить его эффект; это тоже наглядно показывает непрозрачность влияния платформы. Полученные мной невязки частично могут быть вызваны затратами на рекламу, о которых мне ничего не известно.
Представляю вашему вниманию дэшборд лондонского общепита
На данный момент дэшборд позволяет пользователям выполнять поиск по названию и включать фильтр недооценённых заведений (обнаруженных при помощи алгоритма машинного обучения), кухни, района, уровня цен, минимального рейтинга и количества отзывов. Пока ещё это прототип, но его уже можно использовать в качестве микроскопа для изучения алгоритмической экономики общепита Лондона.
Вы можете самостоятельно изучить дэшборд на моём личном веб-сайте: laurenleek.eu/food-map.

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

И вот так я нашла, где сегодня поужинать. Можете попробовать сами.
Прототип всё ещё находится в состоянии бета-версии, поэтому возможны баги и слепые пятна. Если что-то покажется вам странным или неправильным, то мысли и рекомендации признаков можете оставлять в комментариях к оригиналу поста или на моём веб-сайте. В отличие от 13,8 тысяч открытых issue в GitHub-трекере VS Code, я их на самом деле читаю.
От ресторанов к алгоритмическим районам
Здесь нужно добавить, что заведения испытывают проблемы не в одиночестве, а целыми экосистемами. Мне хотелось понять, что происходит, когда динамика платформы масштабируется от ресторанов до целых районных экосистем общепита, поэтому я реализовала второй слой моделирования.
Сначала я агрегирую рестораны в небольшие пространственные ячейки (шестиугольники, которые показаны на карте; я использовала их, потому что квадратами пользуются те, кто недостаточно хорошо обдумал пограничные эффекты) и вычисляю итоговые признаки для каждой области: плотность ресторанов, средний рейтинг, среднюю невязку, общее количество обзоров, долю сетей, энтропию видов кухни и уровень цен. Затем я стандартизирую их и при помощи метода главных компонент (principal component analysis, PCA) сжимаю их в оценку единого сплошного хаба, передающую общую «силу экосистемы ресторанов» в одной размерности. Затем я применяю к тому же пространству признаков кластеризацию K-средних, чтобы классифицировать области на четыре структурных типа: элитные, сильные, повседневные и слабые хабы.

На первый взгляд, паттерны выглядят вполне привычными. Центральный Лондон доминирует. Но здесь важно не то, где находятся хабы, а к каким типам они относятся. При помощи оценки хабов целиком вместо использования сырых рейтингов я выявила пять наиболее структурно мощных ресторанных хабов в Лондоне. Это места, где одновременно высоки плотность, внимание алгоритма, выживаемость независимых заведений и покупательная способность потребителей. Все они отмечены на карте. Я намеренно отказываюсь ранжировать их, чтобы не начинать масштабных войн между районами, но визуально всё и так крайне понятно.
Если наложить на эти данные плотность распределения видов кухни, то обнаружится нечто ещё более поразительное: гастрономическое разнообразие Лондона распределено по экономике платформы неравномерно. Кухни мигрантов сильно сгруппированы в тех частях города, где алгоритмы обеспечивают заведениям структурно более низкую видимость. Итальянская, индийская, турецкая, китайская, тайская, британская, японская, французская, американская кухни и фиш-энд-сипс рассказывают истории отдельных поселений, трудовых сетей, форматов розницы, взаимоотношений капитала и ренты. Некоторые виды кухни образуют длинные соединённые коридоры, другие проявляются в виде кластерных пятен, привязанных к конкретным крупным улицам или уровням доходов.
Иными словами, разнообразие видов кухни связано не только со вкусами. Оно отражает оседлость, доступность аренды, позволяющую открывать заведения вторым поколениям мигрантов, и районы из которых мигранты были вытеснены до того, как сформировались гастрономические экосистемы.

Выводы
Этот проект изначально был исследовательской задачей, но потом превратился в нечто большее. Самым важным результатом стало не знание о том, какой район выше всего в списке, а осознание того, что платформы сегодня втихомолку управляют выживаемостью повседневных городских рынков. Ресторанный мир Лондона больше не зависит лишь от вкуса блюд, им управляет видимость, рост арендной платы и алгоритмы, распределяющие внимание ещё задолго до того, как придут первые посетители. То, что выглядит как «выбор», всё больше становится влиянием систем ранжирования.
Автор: interpres


