Рассчитать 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‑тесту |
Если нет реальных цифр — симулируем:
- Фиксированные расходы — возьми средний счёт из AWS/GCP за последний месяц для проекта Pet‑Project (например, ~$500/мес: $200 GPU‑инстанс + $100 хранилище + $200 прочее).
- Переменные на запрос — для 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). - Цена запроса для клиента — установи
$0.01(10$ за 1000 запросов) как типичную цену для AI‑ассистента. - Диапазон объёмов — от 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 минут)
Действия
-
Определи все статьи расходов, относящиеся к продукту. Раздели их на фиксированные (не зависят от объёма) и переменные (пропорциональны числу запросов).
-
Составь таблицу (можно в Excel или Pandas DataFrame)
| Категория | Статья | Тип | Сумма (USD) |
|---|---|---|---|
| Фиксированные | GPU‑инстанс (1x A100) | fixed | 1800 |
| Фиксированные | Хранилище векторной БД | fixed | 200 |
| Фиксированные | Мониторинг (Grafana Cloud) | fixed | 100 |
| Фиксированные | Зарплата SRE (доля) | fixed | 500 |
| Переменные | LLM inference (запрос) | variable | 0.0025 |
| Переменные | Embedding (запрос) | variable | 0.0001 |
| Переменные | Электроэнергия GPU (запрос) | variable | 0.0002 |
-
Рассчитай средние переменные издержки на один запрос (сумма всех variable‑статей).
-
Собери данные о цене продажи В качестве примера: price = 0.05 USD/запрос (если продаётся как API) или price = 0 USD (бесплатный продукт — тогда revenue = 0, но это тоже допустимо для осознанного обсуждения).
Ожидаемый результат этапа Таблица со всеми затратами, фиксированные и переменные издержки явно разделены. Значение variable_cost_per_query и fixed_cost_per_month.
Этап 2: Расчёт безубыточного объёма и моделирование (1 час)
Действия
-
Запиши формулу break‑even point (BEP):
BEP (запросов/месяц) = fixed_costs_per_month / (price_per_query - variable_cost_per_query) -
Проверь, что
price_per_query > variable_cost_per_query. Если нет — продукт никогда не окупится (при текущих ценах). В этом случае опиши сценарий сокращения издержек или повышения цены. -
Создай массив объёмов запросов от 0 до 1.5 × BEP (с шагом 1% от BEP).
-
Для каждого объёма рассчитай
- Общие затраты:
total_cost = fixed_costs + variable_cost_per_query * N - Общую выручку:
total_revenue = price_per_query * N - Прибыль:
profit = total_revenue - total_cost
- Общие затраты:
-
Используй 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 минут)
Действия
-
Создай график с двумя линиями
- Total Cost (синий, сплошная)
- Total Revenue (зелёный, штриховая)
-
Отметь точку безубыточности
- Вертикальная пунктирная линия в BEP
- Аннотация с подписью "Break-even: X queries"
-
Добавь подписи, легенду, сетку.
-
Пример кода (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() -
Экспортируй график в PNG/SVG для включения в отчёт.
Ожидаемый результат этапа Файл графика break_even.png, на котором наглядно видно пересечение кривых.
Этап 4: Анализ сценариев и чувствительности (30 минут)
Действия
-
Построй три дополнительных графика (или один с несколькими кривыми):
- Оптимистичный (цена +20%, переменные издержки –10%)
- Пессимистичный (цена –10%, переменные издержки +20%)
- Базовый (текущие значения)
-
Оцени, как изменение ключевых параметров влияет на BEP.
- Процентное изменение BEP при +10% переменной стоимости
- Абсолютное изменение BEP при –15% фиксированных затрат
-
Запиши выводы в текстовом виде Например: «Снижение переменной стоимости на 10% уменьшает BEP на 12%».
Ожидаемый результат этапа Таблица чувствительности (параметр → новое BEP) и короткий текстовый анализ.
Этап 5: Оформление итогового отчёта (30 минут)
Действия
-
Проверь арифметику bep = fixed / (price - variable).
-
Выложи код и результаты в 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 Revenue | 45 мин |
| 4. Анализ сценариев и чувствительности | 30 мин |
| 5. Оформление итогового отчёта | 30 мин |
| Итого | 3 ч 30 мин |
Примечание для первого раза Если вы не знакомы с unit‑экономикой AI‑систем, добавьте 1 час на изучение стоимости токенов у основных провайдеров.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| #12 | Unit‑экономика AI‑продукта |
| #45 | Как рассчитать cost per query |
| #103 | Метрики profitability для SaaS |
| #217 | Расчет ROI для ML модели |
| #389 | Total Cost of Ownership (TCO) |
| #512 | Модели ценообразования LLM |
| #678 | Оптимизация затрат на inference |
| #734 | Сравнение on‑prem vs cloud затрат |
| #801 | Break‑even анализ для AI‑стартапов |
| #890 | Анализ cost vs quality tradeoff |
10. Чек-лист самопроверки
- Я разделил все затраты на фиксированные и переменные, используя логику аллокации.
- Я корректно рассчитал BEP по формуле и убедился, что знаменатель положительный.
- Я построил график с явной точкой безубыточности и подписями осей.
- Я проверил, что график отображается корректно (шрифты, сетка, легенда).
- Я проанализировал хотя бы два сценария (оптимистичный/пессимистичный) и задокументировал выводы.
- Я сохранил все артефакты (скрипт, график, отчёт) в одном репозитории/папке.