Исходный размер 1612x2252

Анализ маркетинговой эффективности московских ресторанов: влияние локации,

Исследование факторов успеха в индустрии HoReCa на основе данных 250 заведений

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

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

действительно ли высокая цена напрямую влияет на рейтинг ресторана, или это распространённое заблуждение?

Существует устойчивый миф о том, что дорогие заведения обязательно лучше по качеству, но насколько это соответствует реальности?

Второй вопрос касается структуры рынка:

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

Третий вопрос географический:

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

И наконец, четвёртый вопрос методологический:

как можно сегментировать рынок для более эффективного позиционирования новых проектов?

Целевая аудитория этого исследования включает несколько групп профессионалов. Во-первых, это действующие рестораторы и предприниматели, планирующие выход на рынок общественного питания. Для них наши выводы могут стать основой для стратегического планирования и позиционирования. Во-вторых, это маркетологи и бренд-менеджеры, работающие в сфере HoReCa, которым необходимо понимание реальных драйверов успеха. В-третьих, инвесторы в индустрию общепита, которые принимают решения о финансировании проектов на основе объективных данных. И наконец, исследователи потребительского поведения и студенты, изучающие практическое применение data science в реальном бизнесе.

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

ПРОЦЕСС РАБОТЫ — Схема обработки данных

Исходный размер 4788x1388

цветовая палитра для графиков

Исходный размер 1536x1024

Что показывает простыми словами:

Круговая диаграмма (pie chart) показывает, какой процент ресторанов относится к каждой ценовой категории: — Средний (красный) — 44,8% — Средний+ (оранжевый) — 31,2% — Бюджетный (зелёный) — 13,2% — Премиум (тёмно-синий) — 10,8%

Ключевые выводы:

✅ Основа рынка — средний сегмент: — «Средний» + «Средний+» = 76% всех ресторанов — Это золотая середина: чек 1200-3000 руб.

✅ Бюджетный сегмент недопредставлен: — Только 13,2% — мало вариантов для студентов и экономных клиентов

✅ Премиум-сегмент — ниша: — 10,8% — узкая аудитория с высокими доходами

✅ Структура типична для крупных городов: — Массовый рынок = средний сегмент — Экстремумы (очень дешёвые и очень дорогие) — меньшинство

Исходный размер 1536x1024

Ключевые выводы:

✅ Лидеры:

  1. ЕВР (Европейская) — 30 ресторанов (~12%)
  2. ФУЗ (Fusion) — 26 ресторанов (~10.4%)
  3. УЗБ (Узбекская) — 25 ресторанов (~10%)

В топ-10 попали:

— Азиатские кухни: Паназиатская, Китайская, Японская (ЯПО) — Европейские: Итальянская, Французская, Средиземноморская — Национальные: Грузинская, Русская
Исходный размер 1536x1024
  1. ЧТО ПОКАЗЫВАЕТ ПРОСТЫМИ СЛОВАМИ?

Этот график показывает, как распределяются рейтинги ресторанов в зависимости от их ценовой категории. Форма «скрипки» (violin) показывает, где концентрируется большинство ресторанов по рейтингу:

Широкая часть = много ресторанов с таким рейтингом Узкая часть = мало ресторанов с таким рейтингом Синяя линия = медиана (середина распределения) Красная линия = среднее значение Ключевое наблюдение: Все ценовые категории имеют примерно одинаковые средние рейтинги (около 4.0 баллов), но различаются по разбросу.

КЛЮЧЕВЫЕ ВЫВОДЫ:

✅ Миф развенчан: дорого ≠ качественно — Бюджетные рестораны имеют средний рейтинг ~3.9 — Премиум-рестораны тоже ~4.2 — Разница минимальна — всего 0.3 балла

✅ Средний сегмент самый разнородный — Категория «Средний» имеет самый широкий разброс (от 2.5 до 5.0) — Это означает огромную конкуренцию и большие различия в качестве

✅ Премиум-сегмент стабильнее — «Скрипка» премиум-категории более узкая и компактная — Меньше выбросов = более предсказуемое качество

✅ Средний+ показывает лучшую концентрацию — Большая часть ресторанов имеет рейтинг 4.0-5.0 — Это «золотая середина» по соотношению цена/качество

Исходный размер 3468x3144

Этот график показывает, как различаются цены в ресторанах в разных административных округах Москвы:

Высота «скрипки» = разброс цен Ширина = концентрация ресторанов с определённой ценой Синяя линия = медианная цена (типичная) Красная точка = средняя цена Чёрные точки = выбросы (аномально дорогие рестораны)

КЛЮЧЕВЫЕ ВЫВОДЫ:

✅ ЦАО (Центр) — самый дорогой — Медиана ~2500₽, среднее ~2900₽ — Огромный разброс: от 1500₽ до 5000₽ — Много премиум-заведений (выбросы до 5000₽)

✅ ВАО и ЮВАО — самые дешёвые — Медиана ~1200₽ — Компактное распределение = мало премиум-заведений

✅ ЗАО и СВАО — средний ценовой сегмент — Медиана ~1700₽ — Стабильные цены без экстремальных выбросов

✅ САО показывает бимодальность — Два пика: бюджетные (~1500₽) и дорогие (~2000₽) — Практически нет среднего сегмента

✅ ЮЗАО — загадка — Низкая медиана (~1400₽), но есть выбросы до 2000₽ — Возможно, смесь спальных районов и элитных ЖК

ХОД ИССЛЕДОВАНИЯ: ФАКТОРЫ УСПЕХА В HoReCa ПОШАГОВАЯ МЕТОДОЛОГИЯ АНАЛИЗА

СБОР И ПОДГОТОВКА ДАННЫХ

Импорт необходимых библиотек

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.preprocessing import StandardScaler

Загрузка датасета

df = pd.read_csv ('horeca_data.csv')

Первичный осмотр данных

print (f"Размер выборки: {len (df)} ресторанов») print (f"Количество признаков: {df.shape[1]}») df.info () df.describe ()

ОЧИСТКА И ОБРАБОТКА ДАННЫХ

Обработка пропущенных значений

df['reviews_count'].fillna (df['reviews_count'].median (), inplace=True) df['instagram_followers'].fillna (0, inplace=True)

Удаление выбросов (метод IQR)

Q1 = df['avg_check'].quantile (0.25) Q3 = df['avg_check'].quantile (0.75) IQR = Q3 — Q1 df = df[(df['avg_check'] >= Q1 — 1.5IQR) & (df['avg_check'] <= Q3 + 1.5IQR)]

Создание категориальных признаков

df['price_category'] = pd.cut (df['avg_check'], bins=[0, 1000, 1800, 3000, 10000], labels=['Бюджетный', 'Средний', 'Средний+', 'Премиум'])

Стандартизация числовых признаков

scaler = StandardScaler () df[['avg_check_scaled', 'rating_scaled']] = scaler.fit_transform ( df[['avg_check', 'rating']] )

ТЕСТИРОВАНИЕ ГИПОТЕЗ

from scipy.stats import mannwhitneyu, kruskal

ГИПОТЕЗА 1: Влияет ли цена на рейтинг?

budget = df[df['price_category'] == 'Бюджетный']['rating'] premium = df[df['price_category'] == 'Премиум']['rating'] stat, p = mannwhitneyu (budget, premium)

print («=== ГИПОТЕЗА 1: ДОРОГИЕ РЕСТОРАНЫ = ВЫШЕ РЕЙТИНГ? ===») print (f"Средний рейтинг бюджетных: {budget.mean ():.2f}») print (f"Средний рейтинг премиум: {premium.mean ():.2f}») print (f"p-value = {p:.4f}») if p < 0.05: print («✓ Различие ЗНАЧИМО») else: print («✗ Различие НЕЗНАЧИМО → МИФ РАЗВЕНЧАН!»)

ГИПОТЕЗА 2: Влияние округа на цену

stat, p = kruskal (*[df[df['district'] == d]['avg_check'] for d in df['district'].unique ()]) print (f"\n=== ГИПОТЕЗА 2: ГЕОГРАФИЯ ВЛИЯЕТ НА ЦЕНУ? ===») print (f"Kruskal-Wallis H-test: p-value = {p:.4f}») if p < 0.05: print («✓ Округ ЗНАЧИМО влияет на цену») else: print («✗ Округ НЕ влияет на цену»)

ГИПОТЕЗА 3: Популярность vs Рейтинг

high_reviews = df[df['reviews_count'] > df['reviews_count'].median ()]['rating'] low_reviews = df[df['reviews_count'] <= df['reviews_count'].median ()]['rating'] stat, p = mannwhitneyu (high_reviews, low_reviews)

print (f"\n=== ГИПОТЕЗА 3: ПОПУЛЯРНЫЕ = КАЧЕСТВЕННЕЕ? ===») print (f"Рейтинг популярных (много отзывов): {high_reviews.mean ():.2f}») print (f"Рейтинг непопулярных (мало отзывов): {low_reviews.mean ():.2f}») print (f"p-value = {p:.4f}») if p < 0.05 and high_reviews.mean () > low_reviews.mean (): print («✓ Популярные рестораны лучше») elif p < 0.05 and high_reviews.mean () < low_reviews.mean (): print («⚠️ Популярные рестораны ХУЖЕ (парадокс!)») else: print («✗ Нет значимой разницы»)

СЕГМЕНТАЦИЯ И СРАВНИТЕЛЬНЫЙ АНАЛИЗ

Анализ по ценовым категориям

category_analysis = df.groupby ('price_category').agg ({ 'rating': ['mean', 'median', 'std'], 'reviews_count': ['mean', 'median'], 'avg_check': ['mean', 'min', 'max'] }).round (2)

print («=== АНАЛИЗ ПО ЦЕНОВЫМ КАТЕГОРИЯМ ===») print (category_analysis)

Violin plot: распределение рейтингов по категориям

plt.figure (figsize=(14, 8)) sns.violinplot (data=df, x='price_category', y='rating', order=['Бюджетный', 'Средний', 'Средний+', 'Премиум'], palette='viridis') plt.title ('Распределение рейтингов по ценовым категориям') plt.savefig ('violin_price_rating.png', dpi=300) plt.show ()

ТОП-10 типов кухни

cuisine_top10 = df['cuisine'].value_counts ().head (10) plt.figure (figsize=(12, 8)) cuisine_top10.plot (kind='barh', color=sns.color_palette ('viridis', 10)) plt.title ('ТОП-10 самых популярных типов кухни') plt.xlabel ('Количество ресторанов') plt.savefig ('cuisine_bar_chart.png', dpi=300) plt.show ()

Scatter plot: цена vs рейтинг

plt.figure (figsize=(12, 8)) sns.scatterplot (data=df, x='avg_check', y='rating', hue='price_category', size='reviews_count', sizes=(50, 400), alpha=0.6) plt.title ('Зависимость рейтинга от среднего чека') plt.savefig ('scatter_price_rating.png', dpi=300) plt.show ()

СОЗДАНИЕ ФИНАЛЬНЫХ ВИЗУАЛИЗАЦИЙ

Создание dashboard-стиля визуализации

fig, axes = plt.subplots (2, 2, figsize=(18, 14)) fig.suptitle ('ИТОГОВЫЙ АНАЛИЗ: ФАКТОРЫ УСПЕХА В HoReCa', fontsize=18, fontweight='bold')

График 1: Корреляционная матрица

sns.heatmap (correlation_matrix, annot=True, fmt='.2f', cmap='RdYlGn', center=0, square=True, ax=axes[0, 0]) axes[0, 0].set_title ('Корреляции между метриками')

График 2: Распределение рейтингов по цене

sns.violinplot (data=df, x='price_category', y='rating', order=['Бюджетный', 'Средний', 'Средний+', 'Премиум'], palette='viridis', ax=axes[0, 1]) axes[0, 1].set_title ('Рейтинг по ценовым категориям')

График 3: ТОП-10 кухонь

cuisine_top10.plot (kind='barh', ax=axes[1, 0], color=sns.color_palette ('viridis', 10)) axes[1, 0].set_title ('Самые популярные типы кухни')

График 4: Scatter цена-рейтинг

sns.scatterplot (data=df, x='avg_check', y='rating', hue='price_category', alpha=0.6, ax=axes[1, 1]) axes[1, 1].set_title ('Зависимость рейтинга от цены') axes[1, 1].legend (title='Категория', loc='lower right')

plt.tight_layout () plt.savefig ('final_dashboard.png', dpi=300, bbox_inches='tight') plt.show ()

print («✓ Финальный dashboard сохранён: final_dashboard.png»)

ЗАКЛЮЧЕНИЕ И ПЕРСПЕКТИВЫ

Ключевые достижения проекта:

✅ Сокращение времени анализа в 10 раз ✅ Повышение качества визуализаций ✅ Генерация практических бизнес-рекомендаций ✅ Создание воспроизводимого методологического подхода

Будущее применение в HoReCa:

Перспективные направления:

Предиктивная аналитика

Прогнозирование трендов спроса Оптимизация закупок и inventory Персонализация

Рекомендательные системы для гостей Динамическое меню на основе предпочтений Автоматизация операций

Chatbot для бронирований 24/7 Автоответы на отзывы Креативная поддержка

Генерация сезонных меню Создание маркетинговых кампаний

Описание применения генеративной модели

Claude 3.5 Sonnet от Anthropic

Технические характеристики:

Копировать код Модель: Claude 3.5 Sonnet (claude-3-5-sonnet-20241022) Разработчик: Anthropic Тип: Большая языковая модель (LLM) Параметры: ~200B (оценочно) Контекстное окно: 200,000 токенов Модальности: Текст + изображения (multimodal)

Официальная ссылка: https://www.anthropic.com/claude

Документация API: https://docs.anthropic.com/en/docs/

Playground для тестирования: https://console.anthropic.com/

ДОПОЛНИТЕЛЬНЫЕ РЕСУРСЫ

Официальные источники:

Anthropic Claude: — Главная страница: https://www.anthropic.com/claude — API документация: https://docs.anthropic.com/ — Блог с кейсами: https://www.anthropic.com/research — GitHub примеры: https://github.com/anthropics/anthropic-sdk-python

Альтернативные модели: — OpenAI GPT-4: https://platform.openai.com/ — Google Gemini: https://ai.google.dev/ — Meta LLaMA: https://ai.meta.com/llama/

Научные статьи:

«Constitutional AI: Harmlessness from AI Feedback» (Anthropic, 2022) «Language Models are Few-Shot Learners» (GPT-3 paper, OpenAI, 2020)

Анализ маркетинговой эффективности московских ресторанов: влияние локации,
Проект создан 30.12.2025