Справедливая цена — это ведомость, а не догадка
Мы не берём число из объявления и не спрашиваем нейросеть «сколько стоит машина». Каждая оценка — это восемь последовательных проверок: рынок очищается от мусора, спорные случаи проверяются на смысл, а финансовый риск считается отдельно от цены. Ниже — вся цепочка на одном реальном примере.
Сбор аналогов
Прежде чем что-то отсекать, нужно правильно собрать — иначе отсев будет чистить неправильный набор.
Марка и модель ищутся не по точному совпадению строки, а по всем написаниям, которые встречаются на площадках. Год выпуска расширяется в «окно»: чем старше автомобиль, тем шире допустимый разброс лет — свежую машину сравнивать с прошлогодней бессмысленно, десятилетнюю — можно и с соседними годами, поколение почти не менялось.
Спортивные и заряженные версии (M-серия BMW, RS Audi, AMG Mercedes-Benz) не смешиваются с обычной линейкой ни в одну, ни в другую сторону — это отдельный рынок с отдельной ценой.
Окно по году выпуска
до 5 лет — ±0
5–10 лет — ±1 год
старше 10 лет — ±2 года
Что попадает в выборку
только активные объявления с ценой выше нуля — снятые с продажи и черновики не участвуют
Заряженные версии
M / RS / AMG считаются отдельно от базовой модели в обе стороны
Очистка выборки
128 объявлений — это ещё не рынок. Часть из них рынок искажает, а не описывает.
Из выборки вручную заданными правилами убираются явно нерыночные записи, а затем статистика убирает то, что правила не поймали. Каждое исключённое объявление помечается машинным кодом причины — это не «чёрный ящик», удаление можно проверить построчно.
Межквартильный размах (IQR) считается только на записях, прошедших ручные правила — иначе сами выбросы искажают границу, по которой их же ищут. Порог рассчитывается один раз для каждой выборки, а не подгоняется под ожидаемый ответ.
Отказ, а не догадка
Если после очистки в выборке осталось меньше трёх объявлений — оценка не выдаётся вообще. Три и меньше аналогов — не рынок, а совпадение, и выдавать по ним число опаснее, чем не выдавать его.
Уточнение по комплектации
Одна и та же модель может стоить по-разному из-за двигателя и комплектации — если данных хватает, это учитывается отдельно.
Из очищенной выборки строятся два вложенных уровня: сначала сужение по типу топлива и объёму двигателя («аналоги»), затем — по конкретной комплектации, если она распознана. Итоговым берётся более точный уровень — «комплектация» — но только если после сужения в нём осталось не меньше трёх записей и фильтр действительно сработал. Если данных мало, система тихо откатывается на уровень «аналоги», не подменяя точность видимостью точности.
Поправка на пробег. Цена каждого аналога приводится к пробегу оцениваемой машины: объявление с 60 тыс. км при оценке машины со 180 тыс. км дешевеет, объявление с пробегом больше нашего — дорожает. Сколько рынок теряет на каждые 50 тыс. км, считается по самой выборке, внутри одного года выпуска, чтобы разница в годах не выдавала себя за пробег. Если объявлений мало или пробеги почти одинаковые, берётся норматив — 8% на 50 тыс. км. Потеря ограничена диапазоном 3–15% на 50 тыс. км, а поправка одного объявления — от −25% до +33%. Без пробега в заявке цены остаются как есть.
Пробег меньше тысячи километров на год возраста у машины старше двух лет считается опечаткой или заглушкой формы, а не пробегом: «1 000 км» у машины 2019 года подняли бы цену почти до новой. Такой пробег в расчёт не идёт, и в отчёте об этом есть строка.
Двигатель из заявки. Объём и мощность берутся из модификации, выбранной в форме. Если она противоречит ПТС, решает рынок: когда такого двигателя у модели в этом году выпуска на рынке почти нет, а двигатель по ПТС встречается, считаем по ПТС. Пример — Renault Kaptur 2019 года с модификацией «1.3 CVT (150 л.с.)»: этот мотор появился у модели только в 2020 году, а по ПТС у машины 1.6 и 114 л.с.
Поправка на пробег
цена × eb·(пробег заявки − пробег аналога)
b — по выборке, норматив 8% на 50 тыс. км
Где применяется
медиана, диапазон P25–P75, салоны и частники, отобранные на синтез кандидаты. Показанная в отчёте цена объявления остаётся исходной
Смысловая проверка
SQL умеет сравнивать числа. Он не умеет читать «полный привод, кожа, требует ремонта ходовой» и понимать, что это меняет цену.
На этом этапе языковая модель построчно проверяет каждого кандидата по семи признакам — двигатель, комплектация, привод, коробка передач, цвет, состояние, город — и выставляет оценку релевантности от 0 до 100. Это не пересчёт цены и не свободное творчество: модель заполняет строго заданную структуру, отдельно по каждому кандидату, и не может обойти жёсткие правила схемы.
Одно правило зафиксировано жёстко: если тип двигателя не совпадает — оценка не может быть выше 40 из 100, даже если остальные семь признаков совпали идеально. Дизель 3.0 и бензин 2.0 — разные рынки, и никакое совпадение цвета это не компенсирует.
Синтез справедливой цены
Из прошедших смысловую проверку кандидатов собирается итоговое число — и здесь в дело вступает второй, вспомогательный сигнал.
Из отобранных кандидатов (обычно 5–10 с наивысшей релевантностью) считается медиана цены, уже приведённой к пробегу. Если модель отобрала меньше трёх, добираются следующие по релевантности: на одном-двух объявлениях медиана и диапазон — это цены одного-двух объявлений, и повторная оценка той же машины может отличаться на 15%. Она смешивается с внешним сигналом — оценкой калькуляторов Авито и Авто.ру именно для этой машины, по её поколению, двигателю и пробегу, — в один рыночный центр. Калькуляторы опрашиваются при каждой оценке. Модификацию и поколение из заявки калькулятору передаём как есть; если по ним в каталоге площадки остаётся несколько вариантов, выбор делает языковая модель по строгой схеме ответа — только номер варианта, без свободного текста. Если оба калькулятора дали оценку, берётся их среднее. Оценка, которая отличается от медианы аналогов больше чем на 20%, в расчёт не идёт: так выглядит калькулятор, оценивший другую машину, и отчёт об этом сообщает. Если ни одной оценки не осталось, рыночный центр равен медиане аналогов. После этого к рыночному центру применяется дисконт покупателя — по умолчанию 5% — и получается справедливая цена.
Формула (по умолчанию)
market_center = median × (1−w) + якорь × wfair_price = market_center × 0.95
Вес внешнего сигнала
0.5 — если калькулятор Авито или Авто.ру дал оценку этой машины и она в пределах 20% от медианы аналогов; 0 — если не дал или оценка отброшена. Никогда не единственный источник числа.
Финансирование
максимальная сумма финансирования — тот же рыночный центр с дисконтом 10% (по умолчанию), а не от уже сниженной справедливой цены
Чем это отличается от оценки на самих площадках
Оценка калькуляторов Авито и Авто.ру у нас — одно из двух слагаемых рыночного центра, с половинным весом, а не готовое число вместо расчёта. Наш расчёт всегда идёт от медианы реального рынка аналогов и применяет собственный дисконт к результату. Якорем служит только оценка самой оцениваемой машины. Отметки площадки на карточках других объявлений («хорошая цена», «оценка рынка») и оценка похожей машины из нашей базы в цену не входят: это оценки других машин, и стоят они на уровне цен в самих объявлениях. Рекомендованная цена Drom показывается в отчёте справочно.
Перевод в финансовый риск
Справедливая цена — это ориентир для покупки. Дальше нужно понять, что стоит держать машину на балансе, пока она не продана.
От максимальной суммы финансирования считается стоимость удержания на 30, 60 и 90 дней: проценты по ключевой ставке ЦБ с фиксированной наценкой, комиссия, растущая с горизонтом, и фиксированные расходы. Разница между справедливой ценой, суммой финансирования и этой стоимостью — «возможный дисконт», запас на случай, если машину придётся уступить дешевле.
| Горизонт | Проценты | Комиссия | Фикс. расходы | Итого держание | Возможный дисконт |
|---|---|---|---|---|---|
| 30 дней | 33 888 ₽ | 21 700 ₽ | 40 000 ₽ | 95 588 ₽ | 79 412 ₽ |
| 60 дней | 67 775 ₽ | 32 550 ₽ | 40 000 ₽ | 140 325 ₽ | 34 675 ₽ |
| 90 дней | 101 663 ₽ | 43 400 ₽ | 40 000 ₽ | 185 063 ₽ | −10 063 ₽ |
Расчёт для нашего примера при сумме финансирования 2 170 000 ₽ и ключевой ставке 14,5%. К 90-му дню держание съедает весь запас — точка безубытка уходит выше справедливой цены. Это и есть сигнал «продавать раньше», а не последствие ошибки в расчёте.
Срок продажи
Цена без срока — половина ответа. Вторая половина — сколько машина в среднем реально стоит на площадке до продажи.
Срок считается только по объявлениям, которые площадка сама отметила как проданные — записи «снято с продажи» не используются: слишком часто это дубликат или забытое объявление, а не реальная продажа. Внутри сегмента «марка × модель × год ±2» ищутся такие записи, и если их меньше пяти — результат явно помечается как недостаточный, а не выдаётся приблизительным числом.
Для нашего примера в сегменте нашлось 312 подтверждённых продаж, общая медиана — 34 дня. В ценовом диапазоне до 2,5 млн ₽, куда попадает и наш автомобиль, медиана короче — 28 дней: более доступные машины уходят быстрее.
Неизменяемый след
Рынок за сутки может измениться. Отчёт, на основании которого принято решение, — нет.
Каждый расчёт получает свой идентификатор и сохраняется целиком: заявка, все промежуточные цифры, отобранные аналоги и итоговый отчёт. Ссылка на страницу расчёта открывается без пароля по неугадываемому адресу — её можно приложить к заявке или переслать коллеге, и она покажет ровно то, что видел расчёт в момент выдачи, а не текущий рынок.
Если расчёт вызывает вопросы, к нему можно оставить предметный отзыв — не «цена неверна», а «вот эти три аналога нерелевантны, справедливая цена должна быть такой-то» — привязанный к конкретному идентификатору расчёта, а не к автомобилю в целом.