Как я нашёл красивую квартиру с хорошим ремонтом с помощью собственной нейросети
История о том, как я искал квартиру под аренду и в итоге написал нейросеть, которая отфильтровала лучшие результаты на ЦИАН для меня.
Боль
Недавно встала задача найти новую хорошую квартирку для жилья в Москве. Диапазон цен, который меня бы устроил, — от 40 до 60 тысяч рублей.
После продолжительных поисков на всевозможных сервисах поиска жилья я обратил внимание, что 90% времени я просто тыкаю по объявлениям, листая фотографии, и принимаю решение — нравится мне квартира визуально или нет.
Все остальные мелкие параметры можно настроить в фильтрах поисковиков. В данном случае я использовал ЦИАН.
Решение
В итоге я подумал: а почему бы не сделать нейросеть, которая бы одним кликом отфильтровала бы мне квартиры, которые мне априори не понравятся.
Легким движением руки я подкрутил фильтры поиска так, чтобы в выдача получилась максимально отвратительной, а затем повторил тоже самое, только наоборот. Я просто менял ценовые диапазоны. Таким образом я собрал датасет из десятка тысяч картинок с очень красивыми и просто отвратительными квартирами.
Затем я создал нейросетевую модель, которая бы предсказывала насколько хороша так или иная квартира. Прилепил к этому парсер, который собирает фотографии из каждого объявления по ссылке выдачи, и всё вместе это запустил на сервере.
Хэппи-энд
Я нашел просто отличный вариант двушки с видом на Москву-реку и «Москву-Сити» за 45 тысяч рублей. Завтра заселяюсь!
Где попробовать?
Прикрепляю ссылка на Google Colab:
Всё, что нужно сделать:
- Зайти на ЦИАН и в фильтрах выставить все ваши хотелки. Нажать «Поиск».
- У вас получится поисковая выдача с объявлениями.
- Копировать ссылку на эту выдачу. Она будет выглядеть примерно вот так. И вставить её в Google Colab в самом самом низу в разделе MAGIC HAPPENS HERE.
Готово, можно запускать!
Нажимайте «Среда Выполнения» → «Запустить все». Модель отфильтрует для вас хорошие варианты. Уровень фильтрации можно менять параметром threshold в том же разделе. Его можно менять от 0 до 1. Чем выше значение (например, 0,7), тем сильнее будет фильтрация и меньше результатов в выдаче.
У меня в планах сделать из этого простой инструмент. Например, Chrome Extension, так чтобы любой желающий мог быстро отсеять лишнее.
Хорошие продукты появляются когда их делают для себя
© Омар Хайям
Вот бы еще нейросетку, чтобы сама общалась с ублюдочными риэлторами.
Теоретически можно сделать, чтобы общалась. Правда получится так же ублюдочно.
Услышал вас. На созвоне.
Как будут подвижки по вашему заказику, подскочу кабанчиком, обкашляем вопросик.
Риэлтор хуже червя-пидора
Комментарий недоступен
сделали уже.
показывали корпоративную звонилку Яндекса вчера
во спасибо мил человек, я свою квартиру тоже нашел. послезавтра переезжаю
Комментарий недоступен
Комментарий удален модератором
Очень актуально, но выдаёт пустые результаты по ссылкам из статей и по тем которые я собирал..
upd: Ой, кажется в моем мухосранске даже с максимальной ценой просто нет квартир которые модель бы оценила как достойные xD
кибербанк, который мы заслужили
Четко ! Поклон вам добрый человек . Затестим 👍
Спасибо!
10 из 10!
Так, а какие планы теперь?
Для начала вещи перевезти в новую квартиру. Ну а потом сделать бесплатное расширение для Хрома.
А можно такое для Тиндер?)
А лучше для Google Glass или чего-то подобного, чтобы сразу ублюдочных блюрил и мьютил
на хабре есть уже статья
Просто утащу в закладки.
Спасибо огромное, наконец что то дельное сделали из нейросетей.
Блин, какие же люди молодцы порой!
За опенсорс крутого решения, которое и мне помогло снять классную квартиру :)
Поднял у себя в локальном JupyterLab вместо Коллаба, - все завелось с пол-пинка. Очень круто вышло, спасибо!
О! Идеально! Я как раз для начала делал локально.
👍
Пожалуй одно из лучших и главное полезных применений МЛ
Вот бл человеческое применение нейросетям. Реальная проблема и реальное решение
Вообще в cian очень не хватает банальной опции "с ремонтом".
А лучше шкалы градации ремонта.
Банально на уровне модерации объявлений можно это сделать, чтобы люди не тратили в пустую 90% времени.
Да там у всех по текстовому описанию свежий дизайнерский ремонт.
Там есть, кстати, но видимо это поле заполняют сами риэлторы, поэтому в выдачу куча мусора.
Автор, ты бы сначала заселился, а потом делился радостью. А то по старой русской традиции на таких сайтах обитает куча мошенников.
Так я уже заселился, все ок :)
В чем их профит?
Работает с выдачей от циана для других регионов?
Конечно!
Запустил локально, но как не менял линки и трешхолд, всегда выдает пустую выборку. Ошибка была только с установкой efficientnet в начале ноутбука, но я решил сделать это через командную строку в окружении заранее. В чем может быть проблема? возможно у кого-то есть список с версиями библиотек при котором все пашет?
Ну как решилось в итоге?
А то сейчас с тем же мучаюсь
Достойный ответ от нейросети vc — это значит, что я не могу её прочитать. В итоге, он в своём сообщении не сказал ничего про ключ. Он говорил о том, что не видел никого применения в его действиях.
ты говоришь об этом так, как будто бы это что то плохое
Выдает вот такую ошибку :(
FilterAllShitPlease(CIAN_URL, threshold=THRESHOLD)
Какую? Не вижу самой ошибки.
Такая же проблема!
Комментарий удален модератором
Зашёл на ваш сайт. Нет кнопки подписаться. Жду)
Как это связано?
Молодец! Отличная идея!
Попробовал, результат впечатляющий :) круто
Вас приятно читать. Даже вредному критику...
Спасибо!
Вспомнился рассказ, где ученый обучал ИИ для поиска себе идеальной девушки... В итоге ИИ сдал ученого полиции, а сам стал встречаться с "девушкой своей мечты")
Как раз скоро надо хату в Москве искать, попытаюсь поюзать)
Удивляюсь я Петру, талантище! И снимает круто, и сейчас еще и программистом стал. Может стоит посмотреть в сторону полетов на Марс? :)
Хах, спасибо! Думаю запустить беспилотники для начала 😉
Автор красава, если все будет работать то ты просто народный герой - завтра буду тестить на Сочи)
Спасибо! Не забудьте проверить, чтобы в ссылке на выдачу был region
Здравствуйте!
Спасибо за отличный инструмент! Подруга искала квартиру в общей сложности примерно часов 16. С вашей "штукой" точно такой же результат получился за 1 минуту!
Можно ли сделать тоже самое для других баз с квартирами на съём / покупку?
Яндекс недвижимость?
Здравствуйте! Вау, результат поражает и меня!
Да, это вполне возможно.
Напишите мне в личные сообщения пожалуйста или может быть, кто-то здесь захочет вам в этом помочь.
Не думал продать ЦИАНу или Яндексу?
Жду их тут в комментах 😏
На самом деле, уверен, у них у самих есть ребята, которые могут влёгкую такое повторить.
Если задуматься, кажется эта штука скорее понижает конверсию, так что с точки зрения бизнес-модели использовать такие приблуды не совсем логично.
Но, возможно, я ошибаюсь и это можно обернуть в плюс.
Комментарий недоступен
Инструмент замечательный, скопировал к себе :)
Единственный вопросик: каковы критерии отбора квартиры?
Замечательная штука! Только столкнулся с проблемой - в циане выдача разбита на страницы, и результаты работы нейросети - только по тем 20-30 квартирам, которые есть на текущей странице. Можно ли как-то обойти это ограничение и запустить её по всем объявлениям?
решил проблему для себя так
добавил переменную page = 1
и занес ее в строку с ссылкой циан
в ручную меняю только Page
Page = 2
CIAN_URL = f 'https://www.cian.ru/cat.php?currency=2&deal_type=rent&engine_version=2&maxprice=55000&minprice=40000&offer_type=flat&room1=1&room2=1&room3=1&type=4&p={Page}'
THRESHOLD = 0.66
Да, я просто добавлю цикл с «прощелкиванием» страниц. А пока что можно просто руками на странице нажать на следующую страницу, ссылка изменится и снова вставить в алгоритм.
Спасибо за клёвый скрипт! Почему-то со ссылкой на Спб не работает:
https://spb.cian.ru/cat.php?currency=2&deal_type=rent&engine_version=2&maxprice=60000&minprice=30000&offer_type=flat®ion=2&room1=1&room2=1&room9=1&type=4
показывает просто пустую выдачу. Наверное, там есть небольшие отличия в вёрстке.
Вот пример первых трех строчек выдачи:
Score for https://www.cian.ru/rent/flat/235204277/ -> [0.07298347788552444, 0.927016536394755]: This is a good flat.
Score for https://www.cian.ru/rent/flat/235619356/ -> [0.37351334777971107, 0.6264866789182028]: This is a good flat.
Score for https://www.cian.ru/rent/flat/235617086/ -> [0.2044434861842698, 0.7955564906199774]: This is a good flat.
Протестил у себя с этой ссылкой, всё вроде как завелось. Попробуйте поставить threshold поменьше, например 0.4-0.5
Хм, почему-то проверяет только несколько первых объявлений, которые крупные, а ниже на той же странице в более мелком варианте оформления - нет. Наверное, там другие элементы DOM.
Починила так: flats = soup.find_all('div', {'data-name': re.compile('OfferCard')})
Да, берет только `TopOfferCard`, а обычные `OfferCard` игнорирует.
наебалово, ничего не работает
ЦИАН забанил гугловские IP с которых велся парсинг. Видимо кто-то начал запускать скрипт на полную катушку. Можете скачать себе на комп и запустить локально, будет работать.
Самое интересное не написали и не показали: как обучали веса cian_model_01_B0.h5?
Где взять код для этого? Я бы хотел обучить на своих примерах "плохих" и "хороших" квартир :)
Можно воспользоваться библиотекой PyTorch, взять предобученную модель (типа ResNet или VGG) и дообучить (выполнить fine-tuning) для классификации на два класса (нужна будет папка, в которой находятся две папки: с "плохими" и "хорошими" квартирами). Примеры кода и статьи легко гуглятся по запросам вроде "image classification pytorch".
Класс
У вас ссылка не совсем верная. Должна быть: https://ekb.cian.ru/cat.php?currency=2&deal_type=rent&engine_version=2&maxprice=30000&minprice=15000&offer_type=flat&room1=1&room2=1&room9=1&type=4®ion=4743
У вас не был указан регион, а именно region=4743
Ребят я не разу не прогер,но сьем квартиры очень актуален, подскажите где на google collab нужно искать MAGIC HAPPENS HERE? Понимаю что в коде, но у меня ничего подобного нет, пытался через ctrl+f, не находит. Подскажите пожалуйста по кнопкам куда нажимать.
Да в самом низу можно пролистать, там будет раздел, который прямо так и называется.
Интересное решение)
Урыл :D
Маст хэв!
Спасибо!
Господи, это же отлично!
👍
Ну что же, ждём ответ от риэлтеров. Нейросеть, которая будет обманывать эту нейросеть.
Комментарий недоступен
Крутой кейс, но за рынок обидно.
В прекрасной России будущего все города будут прекрасными для работы и жизни, а рынок будет конкурентным и удобным
Вот сейчас и посмотрим сколько на vc живых пользователей ))
Очень круто! Где же вы были раньше?)
Затестим
А можно адаптировать под другой сайт, но тоже поиск недвижимости?
Да можно конечно, там парсер из 3-х строчек :)
Здорово! А нельзя никак сделать эту штуку универсальной для разных площадок?
Ответил выше :)
[email protected]
Офигенно! Реально, сделайте плагин для хрома и если возможно ещё на другие платформы, допустим Яндекс Недвижимость и Авито (почему-то многие предпочитают там выставлять объявления).
В формате расширения - очень классная идея
Как запустить фильтрацию всех результатов поиска (сейчас показывается только первая страничка)? Есть ли такая функция?)
А где код, где модель? Народ требует свиней!
все, вижу, пошел в первый класс учиться читать :)
Добрый день! Круто👍 А есть ли возможность как-то использовать ваши скрипты не для аренды, а для покупки?
Нашёл:)
А она по любому городу по сути сработает?
Хорошо, когда есть фильтры на сайтах, при чем, чем больше, тем лучше, сортируется куча не нужных вариантов, экономишь время на поиск.
Очень крутая идея! Будет круто допилить, чтобы можно было сразу с нескольких страниц собирать. Например чтобы сразу с 1 по 5 страницу собирались объявления и оценивались.
Спасибо! Выше в комментах есть такое решение. Ребята дописали.
Любопытно
Сделайте для планировки квартиры такую. Озолотитесь)
С удовольствием воспользуюсь!
"Легким движением руки я подкрутил фильтры поиска так, чтобы в выдача получилась максимально отвратительной, а затем повторил тоже самое, только наоборот. Я просто ***менял ценовые диапазоны***."
Я правильно понимаю, что вы таким образом "показали" красивые квартиры (дорогие обычно красивые) и некрасивые, соответственно, из недорогих, а потом просто просите показать из недорогих то, что больше всего похоже на дорогие?
Вид из окна был в объявлении или случайно так получилось, что с хорошим видом нашли?
Ну и про риелторов - были?
1) совершенно верно вы поняли
2) случайно так получилось :)
3) не было, хозяева сдавали
Ссылка открывается в таком виде. Это так и надо? Но раздела MAGIC HAPPENS HERE я не нашел. :-)
Да, открывается верно! Но нужно пролистать вниз и там увидите нужный раздел.
из этого нужно делать стартап-поисковик квартир) Чтобы можно было закинуть несколько фоток красивых квартир и найти похожие варианты. Получится быстро и удобно
Во-первых, у меня странно отображается сам сайт Циан, без форматирования, искать там что-либо сложно (см. скриншот). Во-вторых, в моем городе большинство объявлений на Авито, циан не так популярен. Поэтому было бы здорово наладить работу с Авито.
403 ошибка (
По ссылке Colab?
Не работает.... жаль.
А есть ли версия ноутбука, которую можно скачать и запустить в юпитере на Win без доп. настроек (только ссыль на ЦИАН добавить)? То я скачал, но у меня куча ошибок вылетает и не работает в итоге...
Боюсь, что так сразу и не выйдет. Вам нужно собрать окружение (virtual environment) с tensorflow, cv2, pillow, effecientnet, pandas.
Что-то не получается. Меняю строчку. запускаю. Результат ноль. Хотя поиск банальный и на самом циане много результатов выдает.
https://www.cian.ru/cat.php?currency=2&deal_type=rent&engine_version=2&foot_min=10&maxprice=70000&minarea=52&minprice=55000&offer_type=flat&only_foot=2®ion=1&room2=1&type=4
Так, ведь, уже месяца три как забанили ip и не даёт из google colab запускаться. Можно запустить локально :)
да уж, вид из окна действительно "красивый" )))
Хотел воспользоваться и оценить, жалко не работает, вроде все делаю верно, но просто ничего не появляется
Почему-то перестало все работать...
Точечное освещение — сразу понижать в рейтинге
Определенно, это сделано красиво.