{"id":14279,"url":"\/distributions\/14279\/click?bit=1&hash=4408d97a995353c62a7353088166cda4ded361bf29df096e086ea0bbb9c1b2fc","title":"\u0427\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435: \u0432\u044b\u0435\u0445\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0437\u0430\u0435\u0445\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435?","buttonText":"","imageUuid":""}

Как я нашёл красивую квартиру с хорошим ремонтом с помощью собственной нейросети

История о том, как я искал квартиру под аренду и в итоге написал нейросеть, которая отфильтровала лучшие результаты на ЦИАН для меня.

Пример выдачи

Боль

Недавно встала задача найти новую хорошую квартирку для жилья в Москве. Диапазон цен, который меня бы устроил, — от 40 до 60 тысяч рублей.

После продолжительных поисков на всевозможных сервисах поиска жилья я обратил внимание, что 90% времени я просто тыкаю по объявлениям, листая фотографии, и принимаю решение — нравится мне квартира визуально или нет.

Все остальные мелкие параметры можно настроить в фильтрах поисковиков. В данном случае я использовал ЦИАН.

Решение

В итоге я подумал: а почему бы не сделать нейросеть, которая бы одним кликом отфильтровала бы мне квартиры, которые мне априори не понравятся.

Легким движением руки я подкрутил фильтры поиска так, чтобы в выдача получилась максимально отвратительной, а затем повторил тоже самое, только наоборот. Я просто менял ценовые диапазоны. Таким образом я собрал датасет из десятка тысяч картинок с очень красивыми и просто отвратительными квартирами.

Затем я создал нейросетевую модель, которая бы предсказывала насколько хороша так или иная квартира. Прилепил к этому парсер, который собирает фотографии из каждого объявления по ссылке выдачи, и всё вместе это запустил на сервере.

Хэппи-энд

Вот такой вид теперь у меня из окна

Я нашел просто отличный вариант двушки с видом на Москву-реку и «Москву-Сити» за 45 тысяч рублей. Завтра заселяюсь!

Где попробовать?

Прикрепляю ссылка на Google Colab:

Всё, что нужно сделать:

  • Зайти на ЦИАН и в фильтрах выставить все ваши хотелки. Нажать «Поиск».
  • У вас получится поисковая выдача с объявлениями.
  • Копировать ссылку на эту выдачу. Она будет выглядеть примерно вот так. И вставить её в Google Colab в самом самом низу в разделе MAGIC HAPPENS HERE.

Готово, можно запускать!

Нажимайте «Среда Выполнения» → «Запустить все». Модель отфильтрует для вас хорошие варианты. Уровень фильтрации можно менять параметром threshold в том же разделе. Его можно менять от 0 до 1. Чем выше значение (например, 0,7), тем сильнее будет фильтрация и меньше результатов в выдаче.

У меня в планах сделать из этого простой инструмент. Например, Chrome Extension, так чтобы любой желающий мог быстро отсеять лишнее.

0
222 комментария
Написать комментарий...
Роман Бурко

Замечательная штука! Только столкнулся с проблемой - в циане выдача разбита на страницы, и результаты работы нейросети - только по тем 20-30 квартирам, которые есть на текущей странице. Можно ли как-то обойти это ограничение и запустить её по всем объявлениям?

Ответить
Развернуть ветку
Peter Bondarenko
Автор

Да, я просто добавлю цикл с «прощелкиванием» страниц. А пока что можно просто руками на странице нажать на следующую страницу, ссылка изменится и снова вставить в алгоритм.

Ответить
Развернуть ветку
Илья Соловьёв

В случае некоторых других запросов циан разбивает объявления в выдаче на два типа: крупные и мелкие.
Вот как здесь, например: https://www.cian.ru/cat.php?currency=2&deal_type=rent&engine_version=2&foot_min=45&maxprice=25000&metro%5B0%5D=204&metro%5B1%5D=205&minprice=15000&offer_type=flat&only_foot=2&room1=1&room2=1&type=4

И вот парсер, к сожалению эти "мелкие" совершенно не видит и не анализирует.

Как думаете, в чем тут может быть дело, и что можно дописать, чтобы тулза просматривала все объявления?

P.S. Что характерно, этот "размер" - свойство самого объявления, он, например, не меняется, при смене сортировки, даже если объявления уезжают на другие страницы. На количество отображаемых на одной странице объявлений он тоже не влияет, их всегда 28.

Ответить
Развернуть ветку
Peter Bondarenko
Автор

Да я думаю дело в том, что я вообще сильно не заморачивался с парсером :) Там его можно пилить и пилить до совершенства, но я не знаю, есть ли в этом смысл.

Ответить
Развернуть ветку
Илья Соловьёв

А я как раз переборол лень и разобрался, все оказалось просто =)
Парсер вычленяет только объявления типа TopOfferCard, но есть ещё и просто OfferCard.

Вы сознательно откинули эти карточки, или они просто не попадались?

Ответить
Развернуть ветку
Peter Bondarenko
Автор

Просто не попадались :) я же делал для себя и вообще не думал, что это всё в такую историю в итоге обернётся.

Ответить
Развернуть ветку
219 комментариев
Раскрывать всегда