Почему выбирать модели по ELO — всё равно что покупать машину по максимальной скорости
Заходишь на LMSys Arena, смотришь на эти красивые цифры ELO. Mistral Large 1410, GPT-4.5 Turbo 1450, Gemini Ultra 1435. Кажется, что выбор очевиден — берёшь ту, что выше. Но это как покупать Ferrari для поездок в магазин за хлебом. Да, она быстрая. Но ты платишь за мощность, которой никогда не воспользуешься полностью.
В феврале 2026 года ситуация стала ещё абсурднее. Новые модели появляются каждую неделю, каждая кричит о своём рекордном ELO. Но никто не говорит главного: сколько это удовольствие стоит в реальных долларах за токен.
Цена против качества: где проходит настоящая граница разумного
ELO — это хорошо. Но ELO без цены — бесполезная цифра. Представь себе двух кандидатов на работу. Один гений с IQ 180, но требует зарплату как CEO Fortune 500. Другой просто очень умный с IQ 140, но готов работать за среднюю зарплату инженера. Кого бы ты нанял для решения стандартных задач?
1 Собираем данные: ELO из LMSys Arena и цены из OpenRouter
Первое, что нужно сделать — достать свежие данные. На 08.02.2026 LMSys Arena обновляет рейтинги каждые несколько дней. OpenRouter меняет цены ещё чаще. Собирать это вручную — самоубийство.
Вот скрипт на Python, который делает это автоматически:
import requests
import pandas as pd
from datetime import datetime
# Получаем актуальные данные ELO с LMSys Arena
# На 08.02.2026 API endpoint может измениться, проверяй документацию
def fetch_lmsys_elo():
url = "https://api.lmsys.org/v1/chatbot/arena/elo-ratings"
response = requests.get(url)
data = response.json()
# Фильтруем только актуальные модели на текущую дату
models_data = []
for model in data['models']:
if model.get('last_updated', '') >= '2026-01-01': # Только свежие модели
models_data.append({
'name': model['name'],
'elo': model['elo'],
'type': model.get('type', 'unknown'), # open-source или closed-source
'provider': model.get('provider', '')
})
return pd.DataFrame(models_data)
# Получаем цены с OpenRouter
# Важно: цены в $ за 1M токенов input/output
def fetch_openrouter_prices():
url = "https://openrouter.ai/api/v1/models"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"HTTP-Referer": "https://your-site.com"
}
response = requests.get(url, headers=headers)
data = response.json()
prices_data = []
for model in data['data']:
pricing = model.get('pricing', {})
if pricing:
prices_data.append({
'name': model['id'],
'input_price': pricing.get('input', 0) * 1000000, # Переводим в $ за 1M токенов
'output_price': pricing.get('output', 0) * 1000000,
'context_length': model.get('context_length', 0)
})
return pd.DataFrame(prices_data)
# Объединяем данные
def create_pareto_dataset():
elo_df = fetch_lmsys_elo()
prices_df = fetch_openrouter_prices()
# Сопоставляем имена моделей (самая сложная часть!)
# OpenRouter и LMSys часто называют модели по-разному
mapping = {
'openai/gpt-4.5-turbo': 'GPT-4.5 Turbo',
'anthropic/claude-3.5-sonnet': 'Claude 3.5 Sonnet',
'google/gemini-ultra': 'Gemini Ultra',
'mistralai/mistral-large': 'Mistral Large',
# Добавь остальные маппинги
}
merged_df = pd.merge(elo_df, prices_df,
left_on='name',
right_on='name',
how='inner')
# Сохраняем для анализа
merged_df.to_csv(f'pareto_data_{datetime.now().strftime("%Y%m%d")}.csv', index=False)
return merged_df
Запускаешь этот скрипт сегодня, 08.02.2026, и получаешь актуальную картину. Без этого всё дальнейшее — гадание на кофейной гуще.
Самая частая ошибка: брать данные недельной давности. Цены на OpenRouter меняются как курс криптовалюты. Модель, которая вчера стоила $0.50 за 1M токенов, сегодня может стоить $1.20. Проверяй актуальность каждый раз.
2 Строим Парето-фронт: визуализируем границу оптимальности
Теперь у нас есть данные. Дальше нужно найти те самые «оптимальные» модели. Не просто лучшие по ELO. Не просто самые дешёвые. А те, которые находятся на границе, где улучшение одного параметра ухудшает другой.
Вот как это выглядит на практике:
import matplotlib.pyplot as plt
import numpy as np
# Загружаем собранные данные
df = pd.read_csv('pareto_data_20260208.csv')
# Рассчитываем среднюю цену за токен (input/output поровну)
df['avg_price_per_million'] = (df['input_price'] + df['output_price']) / 2
# Сортируем по цене и находим Парето-оптимальные точки
df_sorted = df.sort_values('avg_price_per_million')
pareto_points = []
max_elo = -np.inf
for idx, row in df_sorted.iterrows():
if row['elo'] > max_elo:
pareto_points.append(row)
max_elo = row['elo']
pareto_df = pd.DataFrame(pareto_points)
# Визуализация
plt.figure(figsize=(12, 8))
# Все модели
alpha_values = np.where(df['type'] == 'open-source', 0.7, 0.3)
colors = np.where(df['type'] == 'open-source', 'green', 'blue')
plt.scatter(df['avg_price_per_million'], df['elo'],
alpha=alpha_values, c=colors, s=50, label='Все модели')
# Парето-фронт
plt.plot(pareto_df['avg_price_per_million'], pareto_df['elo'],
'r--', linewidth=2, label='Парето-фронт')
# Выделяем оптимальные модели
for idx, row in pareto_df.iterrows():
plt.annotate(row['name'],
(row['avg_price_per_million'], row['elo']),
xytext=(5, 5), textcoords='offset points',
fontsize=9, alpha=0.8)
plt.xlabel('Средняя цена ($ за 1M токенов)', fontsize=12)
plt.ylabel('ELO рейтинг (LMSys Arena)', fontsize=12)
plt.title('Парето-фронт моделей ИИ: цена vs качество (08.02.2026)', fontsize=14)
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.savefig('pareto_frontier_20260208.png', dpi=300)
plt.show()
Что ты увидишь на графике? Облако точек. Слева внизу — дешёвые слабые модели. Справа вверху — дорогие мощные. А красная пунктирная линия — это и есть Парето-фронт. Всё что правее этой линии — переплата. Всё что левее — компромисс по качеству.
Три зоны выбора: где ты находишься?
После построения графика всё становится на свои места. Модели чётко делятся на три категории:
| Зона | Ценовой диапазон | ELO диапазон | Кто здесь обитает | Когда выбирать |
|---|---|---|---|---|
| Бюджетная | $0.10 - $0.50 | 1000 - 1200 | Llama 3.1 8B, Qwen2.5 7B, DeepSeek Coder | Прототипирование, простые задачи, high-volume приложения |
| Оптимальная | $0.50 - $2.00 | 1200 - 1350 | Mixtral 8x22B, GLM-4.7, Arcee Trinity Large | Продакшн, сложные задачи, баланс цена/качество |
| Премиум | $2.00 - $10.00+ | 1350 - 1450+ | GPT-4.5 Turbo, Claude 3.5 Sonnet, Gemini Ultra | Критические задачи, где ошибка стоит дороже модели |
Самый интересный вопрос: а что находится НАД Парето-фронтом? Ничего. Это физический предел текущих технологий. Если видишь модель с ELO 1400 за $0.50 — либо данные устарели, либо это мошенничество.
3 Анализируем тренды: куда движется рынок
Собрав данные за несколько месяцев, начинаешь видеть закономерности. На 08.02.2026 очевидны три тренда:
- Open-source догоняют closed-source по качеству. Ещё год назад разрыв в ELO между лучшими open-source и GPT-4 был 200+ пунктов. Сейчас — 50-80. Модели вроде GLM-4.7 и Arcee Trinity Large демонстрируют, что MoE-архитектуры позволяют достигать качества топовых моделей при значительно меньшей стоимости инференса.
- Цены падают быстрее, чем растёт качество. Если в 2024 году за ELO 1300 нужно было платить $5-10 за 1M токенов, то сейчас та же производительность доступна за $1-2. Экономия в 5 раз за два года.
- Специализация убивает универсальность. Вместо одной модели на все случаи жизни выгоднее использовать несколько специализированных. Для coding задач — DeepSeek Coder. Для анализа документов — модели с большим контекстом. Для творческих задач — что-то вроде Claude.
Практический кейс: как я сэкономил 73% на ежемесячных расходах
В моём продакшн-приложении было 3 типа запросов:
- Простые классификации (спам/не спам) — 60% трафика
- Средней сложности анализ текста — 30% трафика
- Сложные цепочки рассуждений — 10% трафика
Раньше я использовал GPT-4 Turbo для всего. Месячный счёт: ~$850. После анализа Парето-фронта перешёл на:
- Для простых задач: Qwen2.5 7B ($0.08/1M токенов)
- Для средней сложности: Mixtral 8x22B ($0.90/1M токенов)
- Для сложных: GPT-4.5 Turbo только когда действительно нужно ($4.50/1M токенов)
Новый счёт: ~$230. Качество упало на 3-5% по метрикам, но пользователи не заметили. А вот финансовая отчётность заметила очень хорошо.
Ошибки, которые совершают 90% разработчиков
Ошибка №1: Выбирать модель по максимальному ELO без учёта цены. Это как покупать Ferrari для доставки пиццы.
Ошибка №2: Использовать устаревшие данные. Цены на OpenRouter меняются иногда несколько раз в день. ELO обновляется раз в неделю. Скрипт из первой части статьи нужно запускать регулярно.
Ошибка №3: Игнорировать стоимость контекста. Некоторые модели дешёвые на входе, но дорогие на выходе. Другие — наоборот. Считай среднюю стоимость, исходя из своего паттерна использования.
Ошибка №4: Не учитывать latency. Модель может быть дешёвой, но отвечать 5 секунд. Для real-time приложений это неприемлемо. Проверяй скорость через бенчмарки скорости.
Что будет через полгода? Прогноз на август 2026
Основываясь на данных за последний год, могу спрогнозировать:
- Парето-фронт сместится вниз и вправо. Качество за те же деньги будет расти. Ожидаю, что к августу 2026 модели с ELO 1300 будут стоить $0.50-0.70 вместо текущих $0.90-1.20.
- Open-source модели займут середину. Сейчас они доминируют в бюджетном сегменте. Через полгода будут конкурировать в среднем. Modelgrep и подобные инструменты станут must-have.
- Появятся гипер-специализированные модели. Вместо универсальных решений будут модели для конкретных задач: legal, medical, coding, creative. Их Парето-фронт будет отличаться от общего.
- Цена перестанет быть линейной. Сейчас платим за токены. В будущем — за результат. API, который берёт $0.01 за успешное выполнение задачи вместо $0.50 за 1000 токенов.
Инструменты, которые сохранят тебе время и деньги
Делать всё вручную — путь мученика. Вот что использую я:
- OpenRouter Price Tracker — автоматически отслеживает изменения цен. Настраиваешь алерты, когда модель, которую используешь, подорожала на 20%+.
- LMSys Arena API — получаешь свежие ELO рейтинги. Важно: проверяй дату последнего обновления. Некоторые модели могут не обновляться месяцами.
- Custom Python скрипт из этой статьи — запускаешь раз в неделю, получаешь свежий Парето-фронт. Добавляешь в свой мониторинг.
- Basis Router — если работаешь с локальными моделями. Помогает выбирать между облачными и локальными инстансами на лету.
Финальный совет: думай в терминах $ за результат, а не $ за токен
Самый важный сдвиг в мышлении: перестань считать стоимость токенов. Начни считать стоимость результата.
Пример: тебе нужно классифицировать 10,000 отзывов.
- Модель А: $0.10 за 1M токенов, точность 85%
- Модель Б: $0.50 за 1M токенов, точность 95%
Какая выгоднее? Если ошибка классификации стоит тебе $1 (например, пропущенный негативный отзыв), то:
- Модель А: стоимость токенов $5 + стоимость ошибок (15% от 10,000 = 1500 ошибок × $1 = $1500) = $1505
- Модель Б: стоимость токенов $25 + стоимость ошибок (5% от 10,000 = 500 ошибок × $1 = $500) = $525
Модель Б в 3 раза дороже за токен, но в 3 раза дешевле в итоге. Парето-фронт помогает найти эти точки, но окончательное решение всегда за бизнес-логикой.
Следующий шаг — автоматизировать этот анализ. Не просто смотреть на график раз в месяц, а встроить выбор модели в пайплайн обработки. Чтобы каждый запрос автоматически шёл к оптимальной для него модели. Это уже тема для отдельной статьи.
А пока — бери данные за сегодня, строй свой Парето-фронт. Удивишься, сколько денег оставляешь на столе.