Рассчитать break-even point продукта

ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Рассчитать break-even point продукта

1. Цель задачи

Научиться оценивать экономическую эффективность AI‑продукта на основе unit‑экономики. Необходимо рассчитать точку безубыточности (break‑even point) — объём ежемесячных запросов, при котором выручка от использования покрывает все операционные и cost|фиксированные затраты. Результаты оформить в виде графика «Cost vs Revenue» с явно обозначенной точкой безубыточности.

Ключевой результат График зависимости общей выручки и полных затрат от количества запросов, а также таблица с расчётной BEP (в запросах/месяц).


2. Исходные данные

Что нужноОткуда взять
Стоимость одного LLM‑запроса (вход + выход)Тарифы провайдера (OpenAI, Anthropic) или расчёт стоимости inference на своей инфраструктуре
Фиксированные расходы за месяц (серверы, аренда GPU, мониторинг, зарплаты SRE)Фактические счета или оценка по средним ценам облачных провайдеров
Переменные расходы на один запрос (электроэнергия, GPU‑время, API‑вызовы)Биллы по каждому компоненту, логи потребления
Цена продажи одного запроса (если продукт B2C/B2B)Модель ценообразования компании или рыночный аналог
Реалистичный диапазон объёмов запросов (например, от 0 до 10 млн/мес)Оценка по текущему трафику или MVP‑тесту

Если нет реальных цифр — симулируем:

  1. Фиксированные расходы — возьми средний счёт из AWS/GCP за последний месяц для проекта Pet‑Project (например, ~$500/мес: $200 GPU‑инстанс + $100 хранилище + $200 прочее).
  2. Переменные на запрос — для open‑source модели (например, Llama 3 8B) оцени cost per token по формуле (стоимость GPU‑часа) / (токенов/сек * 3600). Для OpenAI бери $0.003/1k tokens|input tokens и $0.015/1k output tokens (gpt‑4o‑mini).
  3. Цена запроса для клиента — установи $0.01 (10$ за 1000 запросов) как типичную цену для AI‑ассистента.
  4. Диапазон объёмов — от 0 до 500 000 запросов/месяц с шагом 10 000.

3. Технологический стек

КомпонентИнструментыНазначение
ЯзыкPython 3.10+Вычисления и построение графика
ВычисленияNumPy, PandasРабота с массивами и таблицами
ВизуализацияMatplotlib, SeabornПостроение графика Cost vs Revenue
Среда разработкиJupyter Notebook / VS Code + .pyНаписание и отладка скрипта
Контроль версийGit (опционально)Версионирование кода расчёта

4. Этапы выполнения

Этап 1: Сбор и структурирование данных о затратах (45 минут)

Действия

  1. Определи все статьи расходов, относящиеся к продукту. Раздели их на фиксированные (не зависят от объёма) и переменные (пропорциональны числу запросов).

  2. Составь таблицу (можно в Excel или Pandas DataFrame)

КатегорияСтатьяТипСумма (USD)
ФиксированныеGPU‑инстанс (1x A100)fixed1800
ФиксированныеХранилище векторной БДfixed200
ФиксированныеМониторинг (Grafana Cloud)fixed100
ФиксированныеЗарплата SRE (доля)fixed500
ПеременныеLLM inference (запрос)variable0.0025
ПеременныеEmbedding (запрос)variable0.0001
ПеременныеЭлектроэнергия GPU (запрос)variable0.0002
  1. Рассчитай средние переменные издержки на один запрос (сумма всех variable‑статей).

  2. Собери данные о цене продажи В качестве примера: price = 0.05 USD/запрос (если продаётся как API) или price = 0 USD (бесплатный продукт — тогда revenue = 0, но это тоже допустимо для осознанного обсуждения).

Ожидаемый результат этапа Таблица со всеми затратами, фиксированные и переменные издержки явно разделены. Значение variable_cost_per_query и fixed_cost_per_month.


Этап 2: Расчёт безубыточного объёма и моделирование (1 час)

Действия

  1. Запиши формулу break‑even point (BEP):

    BEP (запросов/месяц) = fixed_costs_per_month / (price_per_query - variable_cost_per_query)
    
  2. Проверь, что price_per_query > variable_cost_per_query. Если нет — продукт никогда не окупится (при текущих ценах). В этом случае опиши сценарий сокращения издержек или повышения цены.

  3. Создай массив объёмов запросов от 0 до 1.5 × BEP (с шагом 1% от BEP).

  4. Для каждого объёма рассчитай

    • Общие затраты: total_cost = fixed_costs + variable_cost_per_query * N
    • Общую выручку: total_revenue = price_per_query * N
    • Прибыль: profit = total_revenue - total_cost
  5. Используй Python

    import numpy as np
    
    fixed = 2000        # $/month
    var_per_q = 0.008   # $/query
    price = 0.05        # $/query
    
    bep = fixed / (price - var_per_q)
    print(f"BEP: {bep:.0f} queries/month")
    
    queries = np.linspace(0, int(bep*1.5), 200)
    total_cost = fixed + var_per_q * queries
    total_revenue = price * queries
    profit = total_revenue - total_cost
    

Ожидаемый результат этапа Численное значение BEP (в запросах/месяц) и три массива: queries, total_cost, total_revenue.


Этап 3: Построение графика Cost vs Revenue (45 минут)

Действия

  1. Создай график с двумя линиями

    • Total Cost (синий, сплошная)
    • Total Revenue (зелёный, штриховая)
  2. Отметь точку безубыточности

    • Вертикальная пунктирная линия в BEP
    • Аннотация с подписью "Break-even: X queries"
  3. Добавь подписи, легенду, сетку.

  4. Пример кода (Matplotlib):

    import matplotlib.pyplot as plt
    
    plt.figure(figsize=(10,6))
    plt.plot(queries, total_cost, label='Total Cost', color='blue')
    plt.plot(queries, total_revenue, label='Total Revenue', color='green', linestyle='--')
    plt.axvline(x=bep, color='red', linestyle=':', label=f'BEP = {bep:.0f}')
    plt.annotate(f'BEP: {bep:.0f}', xy=(bep, total_cost[ np.argmin(np.abs(queries-bep)) ]),
                xytext=(bep*1.1, max(total_cost)*0.8), arrowprops=dict(arrowstyle='->'))
    plt.xlabel('Queries per month')
    plt.ylabel('USD')
    plt.title('Cost vs Revenue — Break‑Even Analysis')
    plt.legend()
    plt.grid(alpha=0.3)
    plt.show()
    
  5. Экспортируй график в PNG/SVG для включения в отчёт.

Ожидаемый результат этапа Файл графика break_even.png, на котором наглядно видно пересечение кривых.


Этап 4: Анализ сценариев и чувствительности (30 минут)

Действия

  1. Построй три дополнительных графика (или один с несколькими кривыми):

    • Оптимистичный (цена +20%, переменные издержки –10%)
    • Пессимистичный (цена –10%, переменные издержки +20%)
    • Базовый (текущие значения)
  2. Оцени, как изменение ключевых параметров влияет на BEP.

    • Процентное изменение BEP при +10% переменной стоимости
    • Абсолютное изменение BEP при –15% фиксированных затрат
  3. Запиши выводы в текстовом виде Например: «Снижение переменной стоимости на 10% уменьшает BEP на 12%».

Ожидаемый результат этапа Таблица чувствительности (параметр → новое BEP) и короткий текстовый анализ.


Этап 5: Оформление итогового отчёта (30 минут)

Действия

  1. Подготовь PDF (или Markdown + PNG) со следующей структурой:

    • Исходные допущения (таблица затрат)
    • Формула и расчёт BEP
    • График Cost vs Revenue (базовый сценарий)
    • Анализ чувствительности (таблица + график)
    • Выводы (рекомендации по ценообразованию или оптимизации затрат)
  2. Проверь арифметику bep = fixed / (price - variable).

  3. Выложи код и результаты в Git (если требуется по курсу).

Ожидаемый результат этапа Markdown‑документ break_even_report.md с графиками и выводами.


5. Критерии приемки (Definition of Done)

  • Составлена полная таблица затрат (фиксированные + переменные) с обоснованием цифр.
  • BEP рассчитан математически верно по формуле fixed / (price - variable).
  • Построен график Cost vs Revenue с подписанной точкой безубыточности.
  • График экспортирован в PNG/SVG и включён в отчёт.
  • Выполнен анализ чувствительности как минимум для трёх сценариев.
  • Написан текстовый вывод, в котором отражена реалистичность BEP (достижим ли такой объём?).
  • Код расчёта и визуализации оформлен в виде воспроизводимого скрипта (.py или Jupyter Notebook).
  • Отчёт содержит все обязательные разделы: допущения, расчёт, график, анализ.

6. Ожидаемый результат

  • Файл: break_even_report.md — подробный отчёт, включающий:
    • Таблицу затрат и допущений
    • Численное значение BEP
    • Анализ чувствительности
    • Выводы по экономике продукта
  • Файл: break_even_plot.png — график Cost vs Revenue с точкой безубыточности.
  • Дополнительно (опционально): Код на Python, оформленный как скрипт break_even.py, который генерирует все графики и таблицы.

7. Возможные сложности и их решение

СложностьРешение
Нет реальных данных о стоимости GPU‑часаИспользовать среднюю цену из публичных калькуляторов (AWS p3.2xlarge — ~$3.06/ч, GCP L4 — ~$1.50/ч)
Цена продажи не определенаВзять рыночные аналоги: OpenAI API — $0.01–0.05 за запрос; средние AI SaaS — $0.005–0.02 за запрос
Переменные издержки зависят от длины запросаОценить среднее число токенов input/output (например, 200 input + 500 output). Умножить на цену за токен
Фиксированные затраты трудно выделить на один продуктИспользовать метод аллокации: доля от общего cluster (по времени GPU или памяти)
BEP получается слишком большим (миллионы запросов)Честно признать, что экономика не сходится при текущих ценах; предложить меры (оптимизация модели, batch inference)
Matplotlib не отображает кириллицуЗадать шрифт, поддерживающий русский: plt.rcParams['font.family'] = 'DejaVu Sans'

8. Бюджет времени (оценка)

ЭтапВремя
1. Сбор и структурирование данных о затратах45 мин
2. Расчёт BEP и моделирование1 ч
3. Построение графика Cost vs Revenue45 мин
4. Анализ сценариев и чувствительности30 мин
5. Оформление итогового отчёта30 мин
Итого3 ч 30 мин

Примечание для первого раза Если вы не знакомы с unit‑экономикой AI‑систем, добавьте 1 час на изучение стоимости токенов у основных провайдеров.


9. Связанные вопросы из базы знаний

ВопросТема
#12Unit‑экономика AI‑продукта
#45Как рассчитать cost per query
#103Метрики profitability для SaaS
#217Расчет ROI для ML модели
#389Total Cost of Ownership (TCO)
#512Модели ценообразования LLM
#678Оптимизация затрат на inference
#734Сравнение on‑prem vs cloud затрат
#801Break‑even анализ для AI‑стартапов
#890Анализ cost vs quality tradeoff

10. Чек-лист самопроверки

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