Zillow Offers: ошибка модели, которую оплачивали домами
Почему прогноз цены жилья у Zillow превратился в убыток на каждой сделке: разница между точностью на истории и поведением при смене рынка, отбор принятых офферов, лаг обратной связи и границы для модели, которая тратит деньги.
Содержание статьи
У большинства моделей в продукте ошибка стоит дёшево: рекомендация оказалась неудачной, письмо ушло не тому сегменту, прогноз спроса разошёлся с фактом — и всё это видно только на дашборде. Zillow Offers был устроен иначе. Компания покупала реальные дома по цене, которую называл алгоритм, ремонтировала их и перепродавала. Каждая оценка была не числом в отчёте, а переводом денег и домом на балансе. В ноябре 2021 года Zillow объявила о закрытии программы, и её руководство публично объяснило это тем, что предсказать цены жилья оказалось заметно труднее, чем компания рассчитывала. Дальше — о том, где именно ломается такая конструкция, и что аналитику проверять, когда модель получает право распоряжаться деньгами.
Коротко
Кейс интересен не масштабом убытка, а переходом: прогноз перестал быть оценкой и стал необратимым обязательством. Всё, что в этом случае идёт не так, идёт не так тихо и с задержкой.
- Маржа перепродажи измеряется единицами процентов, поэтому ошибка оценки тех же единиц процентов съедает её целиком.
- Модель валидируют на всех объектах, а покупает она только те, где продавец согласился, — это другая выборка.
- Точность на истории описывает рынок, на котором модель училась, а не тот, где она действует.
- Факт о сделке возвращается через месяцы, а покупки идут каждый день: позиции копятся быстрее, чем приходит обратная связь.
- Автоматизация убирает не ручную работу, а человека, который раньше останавливался на странном объекте.
- Перед запуском считается не точность, а цена одной ошибки и объём, который успеет набраться до первого факта.
Zillow продавал не оценку, а готовность купить дом по этой оценке
Zillow известна как сайт объявлений о жилье в США и как автор Zestimate — автоматической оценки стоимости дома, которая годами висела почти на каждой карточке объекта. Сама по себе такая оценка ни к чему не обязывает: она помогает владельцу сориентироваться, а компании — удерживать трафик. Цена ошибки здесь равна недовольству пользователя.
Zillow Offers работал как iBuyer: владелец дома запрашивал предложение, компания делала оффер, и при согласии покупала объект напрямую — без поиска покупателя, просмотров и торга. Продавец получал скорость и предсказуемость и платил за это сервисным сбором и скидкой к рыночной цене. Zillow получала дом, расходы на подготовку и задачу перепродать его дороже, чем купила.
Та же модель цены в этих двух конструкциях стоит совершенно разного. В первой она информирует, во второй — открывает позицию. Между ними нет технической разницы: тот же признак, тот же скор, та же метрика на валидации. Разница только в том, что происходит после числа.
Ошибка в три процента против маржи в три процента
Разберём арифметику перепродажи без привязки к цифрам Zillow — построчно компания их не раскрывала. Возьмём дом, купленный за 100 условных единиц.
Ремонт, комиссия при продаже, владение и финансирование за месяцы простоя — всё это вычитается из цены выхода. Чтобы сделка была прибыльной, оффер должен быть ниже будущей цены продажи ровно на сумму этих расходов плюс целевая прибыль. Отсюда и «скидка к рынку» в предложении.
Дальше ключевое свойство конструкции. Если модель переоценила цену выхода на три процента, она не ухудшила метрику на три процента — она забрала всю целевую маржу. На пяти процентах сделка уходит в минус. А поскольку оффер делается тысячам продавцов одним правилом, смещение не усредняется: оно повторяется в одну сторону.
| Статья | Доля от цены покупки | Что с ней делает ошибка оценки |
|---|---|---|
| Цена покупки по офферу | 100 | задана моделью |
| Подготовка и ремонт | −3…6 | сама плохо прогнозируется |
| Комиссия и расходы при продаже | −5…7 | фиксированная, от неё не уйти |
| Владение и финансирование | −1…3 | растёт, пока объект не продан |
| Целевая прибыль сделки | +2…5 | полностью исчезает при смещении в 3% |
Подели ожидаемую маржу одной операции на среднюю абсолютную ошибку модели в тех же единицах. Если получается меньше двух, точность модели перестала быть технической характеристикой и стала главным риском бизнеса.
Модель оценивала все дома, а покупала только те, где продавец согласился
Оффер — это не решение компании, а предложение, на которое отвечает другая сторона. Владелец дома сравнивает оффер со своим представлением о цене: с мнением агента, с ценами соседних продаж, с тем, сколько он сам готов ждать. Согласие чаще приходит там, где предложение щедрое относительно реальной стоимости объекта или где с объектом что-то не так, и продавец это знает, а модель — нет.
Это стандартное объяснение, а не установленный факт по Zillow: экономисты называют такой эффект проклятием победителя, и он возникает в любом аукционе, где одна сторона знает о товаре больше. Но проверяемое следствие у него конкретное. Качество модели, измеренное на всех оценённых объектах, систематически лучше качества на принятых офферах. Валидация считается по первой выборке, деньги теряются на второй.
Причём дыра в данных тут честная. По объектам, где оффер отклонили, факта обычно нет: дом не продан компании и часто вообще не продан. Оценить отбор можно только косвенно — по той части отказов, где объект позже всплыл в открытых сделках, и по разнице между распределением признаков у принятых и отклонённых офферов.
Точность на истории описывает рынок, который уже прошёл
Любой бэктест прогноза цены отвечает на вопрос «как хорошо мы объяснили бы вчерашние сделки». На спокойном или равномерно растущем рынке это почти то же, что вопрос о завтрашних. Как только рынок меняет режим, совпадение заканчивается: модель продолжает считать верно в своей системе координат, а система координат поехала.
2021 год в американском жилье был именно таким периодом — быстрый рост цен, а затем остывание, плюс очереди на стройматериалы и подрядчиков, про которые говорила не только Zillow. Для модели, обученной на росте, охлаждение выглядит не как новая закономерность, а как серия неудачных сделок: признаки те же, предсказания прежние, ошибка растёт.
Важная деталь для аналитика: в такой ситуации метрика качества модели может почти не сдвинуться. Средняя абсолютная ошибка останется в прежнем коридоре, а смещение уйдёт в одну сторону — и именно смещение превращается в деньги. Поэтому для решений с капиталом отдельно следят не за величиной ошибки, а за её знаком и за тем, сколько недель подряд он держится.
Прогноз проверяется через месяцы, а покупки идут каждый день
Между покупкой дома и фактом о перепродаже проходит длинный срок: подготовка, выставление, поиск покупателя, оформление. В это время покупки не останавливаются — алгоритм продолжает делать офферы по тому же правилу. Получается контур управления, в котором реакция приходит позже, чем накапливается экспозиция.
Нарисуйте это на одной оси, и природа риска становится видимой. Куплено за восемь недель — растущая линия. Объектов с известным результатом перепродажи — линия, которая поднимается только к середине периода. Разрыв между ними команда держит на балансе без обратной связи.
Отсюда правило, полезное не только в закупке недвижимости: лимит на объём автоматических решений выставляется по длине лага, а не по аппетиту. Сколько решений вы готов принять до возврата первого достоверного факта — столько и разрешено на первом этапе.
Синтетические числа, не данные Zillow. Смысл в форме: к восьмой неделе решений принято вдвое больше, чем проверено результатом, и любая системная ошибка к этому моменту уже зафиксирована в позициях.
Человек в цикле ловил не ошибку модели, а абсурд
Когда оффер готовит оператор с моделью под рукой, часть объектов отсеивается по причинам, которых в признаках нет: странная планировка, спорные документы, сосед-промзона, ремонт после пожара, дом в районе, где за год было три сделки. Формально модель выдаёт по такому объекту аккуратное число с узким интервалом — у неё просто нет повода сомневаться.
Автоматизация масштаба убирает этот фильтр первым, потому что он самый дорогой в пересчёте на объект и самый трудный для формализации. Выигрыш очевиден и измерим: больше офферов на того же человека. Потеря не измеряется вообще — никто не ведёт метрику «сколько абсурдных покупок не случилось».
Пресса объясняла проблемы Zillow и тем, что компания настраивала офферы агрессивно ради потока сделок. Это версия, а не документированный факт. Но механизм, о котором она говорит, проверяем в любой команде: если рост объёма автоматических решений не сопровождается ростом числа отказов по неуверенности, отсекающий контур просто выключили.
- Доля объектов, отправленных на ручную проверку, — метрика, а не накладные расходы.
- У системы должен быть ответ «не берусь», и он должен встречаться регулярно.
- Если за квартал ни одно решение не остановлено человеком, контроль существует только на схеме.
Что известно публично, а что остаётся объяснением
В кейсе, который пересказывают тысячу раз, факты и трактовки перемешиваются быстро. Для аналитика разделить их полезно не из аккуратности, а потому что переносить на свои данные можно только механизм, а не чужой вывод.
Из публично объявленного: программа закрыта в конце 2021 года, компания сократила значительную часть штата — по её собственному сообщению около четверти, — отразила списания по портфелю домов и предупреждала о дальнейших убытках по направлению. Суммы в отчётах измерялись сотнями миллионов долларов; точные значения смотрите в самих отчётах, а не в пересказах. При этом другие игроки — прежде всего Opendoor — направление не закрыли, то есть iBuying невозможен не в принципе.
| Что произошло | Как это объясняют | Статус объяснения |
|---|---|---|
| программа закрыта в ноябре 2021 | прогноз цен оказался труднее ожидаемого | публичная позиция компании |
| списания по портфелю домов | офферы были выше будущих цен выхода | согласуется с отчётностью, деталей нет |
| быстрый рост числа покупок до закрытия | настройки оффера сместили в сторону объёма | версия прессы, не подтверждена |
| конкуренты продолжили работу | дело в параметрах риска, а не в идее | рабочая гипотеза |
| узкая маржа сделки | любая системная ошибка становится убытком | следует из структуры сделки |
Сколько стоит одна ошибка — это вопрос до запуска, а не после
Когда модель получает право тратить деньги, первый артефакт — не метрика качества, а расчёт ущерба. Он короткий и делается на салфетке: сколько решений в день, какая доля из них ошибочна по порогу, который для бизнеса уже болезненный, и сколько стоит одна такая ошибка в деньгах.
Считать нужно в двух режимах. Ожидаемый — по средней, он отвечает на вопрос об экономике в обычном месяце. Стрессовый — по хвосту распределения и по максимальному объёму, который успеет набраться до возврата обратной связи: он отвечает на вопрос, выживет ли бизнес, если смещение держится весь квартал. Именно второй расчёт определяет лимит, а не первый.
Полезное следствие: требование к точности становится выводимым. Не «хотим MAPE пониже», а «при текущей марже и лимите нужна ошибка не хуже такой-то». Если она недостижима, решение — менять конструкцию: брать меньшую долю объектов, уходить в сегменты с узким распределением цены, оставлять человека в цикле.
ожидаемый урон = объём решений × доля ошибок × средний урон одной ошибкиОтдельно считается стрессовый вариант: урон по p95 ошибки × объём, который успеет накопиться до первого достоверного факта. Лимит ставится по второму числу.
Три границы, без которых модель не должна распоряжаться деньгами
Границы дешевле точности и работают раньше неё. Их три, и отвечают они на разные вопросы: сколько, насколько уверенно и что делать с непохожим.
Лимит объёма отвечает за масштаб ущерба: доля решений, сумма на объект, на сегмент и на период. Он нужен не потому, что модель плохая, а потому что интервал незнания до возврата фактов нужно пережить с ограниченной экспозицией.
Порог неопределённости отвечает за право отказаться. Модель должна возвращать не точечную оценку, а интервал, и решение зависит от его ширины: широкий означает «не берусь», объект уходит оператору. Без этого система обязана выдать число на любую строку, включая те, где данных нет.
Ручная проверка выбросов отвечает за незнакомое. Правило формулируется заранее простыми признаками: объект дороже такого-то процентиля, район с числом сделок ниже порога, редкий тип, расхождение с альтернативной оценкой больше чем на столько-то процентов. Это список условий, а не намерение посматривать.
| Граница | Чем задаётся | Поведение системы |
|---|---|---|
| объём | доля решений, сумма на объект и на период | новые решения не принимаются до разбора |
| неопределённость | ширина интервала прогноза | объект уходит на ручную оценку |
| выброс | процентиль цены, редкость сегмента, расхождение с альтернативой | автоматическое решение запрещено |
| смещение | знак ошибки N недель подряд | пересчёт правила оффера, пауза на сегменте |
| ликвидность | срок до продажи выше плана | приостановка закупки в этом сегменте |
Как проверить похожее у себя: пять разрезов и один честный разрыв
Прямого аналога покупки домов в локальном продукте обычно нет, но конструкция «модель открывает позицию» встречается часто: закупка товара под resale, выкуп техники и автомобилей, выдача кредита или лимита, закупка рекламного инвентаря по прогнозу конверсии. Всюду, где после числа уходят деньги, проверки одинаковые.
Первый разрез — смещение и хвост по сегментам, и считать их нужно там, где модель действовала, а не на всём датасете. Второй — фактическая маржа против запланированной на той же группе сделок: эти два числа расходятся раньше, чем портится метрика качества. Третий — сравнение принятых и отклонённых предложений: если у принятых систематически другой профиль признаков, отбор уже работает против вас.
Четвёртый разрез — скорость выхода из позиции: товар продан, кредит обслуживается, объект перепродан. Модель цены и модель ликвидности лучше держать раздельно: ошибиться в скорости часто дороже, чем в цене. Пятый — доля решений без человека в динамике.
И про честный разрыв. По отклонённым предложениям факта у вас нет и не будет, если объект ушёл в другое место. Это не повод считать, что отбора нет: распределения признаков сравниваются и без целевой переменной.
-- 1. Сегменты принятых сделок: знак ошибки важнее её величины
select
region,
property_type,
count(*) as deals,
avg((fact_price - predicted_price) / predicted_price) as bias_share,
percentile_cont(0.9) within group (
order by abs(fact_price - predicted_price) / predicted_price
) as p90_error,
avg(margin_fact) - avg(margin_plan) as margin_gap,
avg(days_to_exit) as days_to_exit
from deals
where decided_at >= date '2026-01-01'
and fact_price is not null -- только закрытые сделки
group by region, property_type
having count(*) >= 30
order by bias_share;
-- 2. Профиль принятых и отклонённых предложений: ищем отбор без целевой переменной
select
case when d.offer_id is null then 'отклонён' else 'принят' end as bucket,
count(*) as offers,
avg(o.predicted_price) as avg_predicted,
avg(o.interval_width / o.predicted_price) as avg_rel_interval,
avg(o.area_sqm) as avg_area,
avg(o.region_deals_90d) as avg_region_liquidity
from offers as o
left join deals as d on d.offer_id = o.offer_id
where o.created_at >= date '2026-01-01'
group by 1;Режим наблюдателя стоит дешевле, чем кажется
До того как модель получит право покупать, она может несколько месяцев просто записывать, что сделала бы. Для этого нужны три таблицы: предсказания с версией модели и временем, решения оператора по тем же объектам и факты, которые приходят позже. Дальше считается не точность, а то, сколько денег разошлось между двумя политиками и на каких объектах.
Такой период даёт две вещи, которых не даёт офлайн-валидация. Во-первых, список объектов, где человек отказался, а модель уверенно называла число: это готовое правило для списка исключений. Во-вторых, реальное распределение лага: через сколько дней в среднем становится известен результат — и, значит, какой лимит объёма безопасен на первом этапе.
Переход к деньгам после этого делается не рубильником, а долей. Сначала небольшой процент потока и один-два сегмента с плотным рынком, где сделок много, а разброс цены узкий. Потом разбор хвоста: не средней ошибки, а конкретных худших сделок по одной. Расширение — только когда фактическая маржа на пилоте совпала с планом дважды подряд.
Чего у локальной команды нет, и какие выводы не переносятся
Масштаб здесь меняет не только суммы. У Zillow были миллионы объектов в базе, десятки лет истории сделок, отдельные команды под оценку и собственная платформа для проверки изменений. У команды из пяти человек в локальном маркетплейсе нет ни выборки такого размера, ни возможности надёжно измерить разницу в полпроцента маржи на сотне сделок в месяц.
Поэтому часть выводов не переносится. Сегментная статистика на тридцати сделках — это не оценка качества, а шум: там, где у большой компании виден сдвиг, у вас разброс перекрывает всё. Сложная модель неопределённости на таких объёмах тоже не оправдана — порог по ширине интервала можно задать грубее и жёстче, и это будет честнее.
Зато часть переносится лучше, чем в большой компании. Человек в цикле на сотне решений в месяц стоит копейки, и его не нужно обосновывать перед комитетом. Список исключений пишется на одну страницу. Лимит на объём вводится одним параметром, без согласования. Маленький масштаб — это не только слабость выборки, но и доступ к самому дешёвому контролю, который у большой автоматизации уже не работает.
Итог: не точнее, а с границами
Главный урок Zillow Offers не про то, что прогнозировать цены трудно — это и так было известно. Он про то, что между «модель ошибается на несколько процентов» и «бизнес теряет деньги на каждой сделке» лежит не качество модели, а конструкция решения: узкая маржа, выборка принятых предложений против выборки валидации, длинный лаг и снятый человеческий фильтр.
Практический вывод для аналитика укладывается в один абзац. Если ваша модель влияет на деньги, посчитайте цену одной ошибки до запуска, выставьте лимит по длине лага, дай системе право сказать «не берусь» и выпишите условия, при которых решение уходит человеку. Точность после этого останется важной — но перестанет быть единственным, что стоит между моделью и расходами.
Материалы по теме
Airbnb и смещения в экспериментах: почему группы не независимы
Интерференция между вариантами в маркетплейсе: как перетекание спроса, длинный цикл решения и реакция предложения искажают A/B-тест, и какими проверками это видно на своих данных.
Эксперименты Booking.com: дисциплина решений вместо значимости
Как устроена культура A/B-тестов Booking.com и какая у масштаба обратная сторона: множественные сравнения, эффект новизны, пересечение тестов и локальная оптимизация одного экрана. Что из этого переносится в команду на 3–10 тестов в квартал.
Spotify: почему хороший эксперимент не обязан выиграть
Spotify публично считает learning rate 64% при win rate 12%: как устроен их критерий «эксперимент с обучением», почему нейтральный тест без мощности не считается знанием и что записать в карточку до старта, чтобы отрицательный результат стал решением.