Пора в отпуск
6000 миль
за оформление карты
Подробнее
(function(w, d, promoUrl, loc) { var modal, box, closeModalBtn, isModalAnimation, body, html, scrollBarWidth, promoButton; var teaser = d.querySelector('.tinkoff-all-airlines'); if (!teaser) return false; initModal(); preloadImages(['https://leonardo.osnova.io/2755fcfd-f5aa-3496-f0b8-2066ac91e9fa/', 'https://leonardo.osnova.io/0006b8c0-6e01-4b3f-6765-45d1606a2c48/', 'https://leonardo.osnova.io/da12942b-f4f3-2560-40b3-a1c930f4b330/']).then(function() { setTimeout(function() { analyticsEvents(); teaser.classList.add('is-init'); teaser.addEventListener('click', openModal); onDestroy(); }, 100); }); function onDestroy() { var moduleAjaxify = window.Air && window.Air.get('module.ajaxify'); if (moduleAjaxify && moduleAjaxify.on) { moduleAjaxify.on('Before page changed', function() { window.removeEventListener('scroll', scrollHandler); hideModal(); if (teaser) { teaser.removeEventListener('click', openModal); } if (box) { box.removeEventListener('click', stopPropagation); } if (closeModalBtn) { closeModalBtn.removeEventListener('click', closeModalStop); } if (promoButton) { promoButton.removeEventListener('click', clickPromo); } if (modal) { modal.removeEventListener('click', closeModal); modal.remove(); } }); } }; function initModal() { body = d.querySelector('body'); html = d.documentElement; modal = d.querySelector('.tinkoff-all-airlines-promo'); box = d.querySelector('[data-tinkoff-all-airlines-box]'); closeModalBtn = d.querySelector('[data-tinkoff-all-airlines-close]'); isModalAnimation = false; scrollBarWidth = getScrollbarWidth(); box.addEventListener('click', stopPropagation); modal.addEventListener('click', closeModal); closeModalBtn.addEventListener('click', closeModalStop); promoButton = d.querySelector('.tinkoff-all-airlines-promo__button'); if (promoButton) { promoButton.setAttribute('href', promoUrl); promoButton.addEventListener('click', clickPromo); } body.appendChild(modal); }; function clickPromo() { sendEvent('Promo button'); }; function stopPropagation(e) { e.stopPropagation(); }; function closeModalStop(e) { e.preventDefault(); e.stopPropagation(); closeModal(); }; function openModal() { if (isModalAnimation) return false; isModalAnimation = true; sendEvent('Popup', 'Open'); body.style.overflow = 'hidden'; html.style.marginRight = scrollBarWidth + 'px'; modal.classList.remove('is-hidden'); setTimeout(function() { modal.classList.add('is-show'); setTimeout(function() { isModalAnimation = false; }, 300); }, 0); }; function closeModal() { if (isModalAnimation) return false; isModalAnimation = true; hideModal(); sendEvent('Popup', 'Close'); }; function hideModal() { modal.classList.remove('is-show'); setTimeout(function() { modal.classList.add('is-hidden'); body.style.overflow = 'auto'; html.style.marginRight = '0px'; isModalAnimation = false; }, 300); }; function isInViewport(elem) { var bounding = elem.getBoundingClientRect(); return ( bounding.top >= 0 && bounding.left >= 0 && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) && bounding.right <= (window.innerWidth || document.documentElement.clientWidth) ); }; function preloadImages(urls) { return Promise.all(urls.map(function(url) { return new Promise(function(resolve) { var image = new Image(); image.onload = resolve; image.src = url; }); })); }; function sendEvent(label, state) { state = state ? state : 'Click'; var value = 'Tinkoff All Airlines 650 (' + loc + ') — ' + label + ' — ' + state; console.log(value); if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } }; function getScrollbarWidth() { var outer = d.createElement('div'); outer.style.visibility = 'hidden'; outer.style.overflow = 'scroll'; outer.style.msOverflowStyle = 'scrollbar'; d.body.appendChild(outer); var inner = d.createElement('div'); outer.appendChild(inner); var scrollbarWidth = (outer.offsetWidth - inner.offsetWidth); outer.parentNode.removeChild(outer); return scrollbarWidth; }; function analyticsEvents() { sendEvent('Teaser', 'init'); window.addEventListener('scroll', scrollHandler); scrollHandler(); }; function scrollHandler() { if (isScrolledIntoView(teaser)) { sendEvent('Teaser', 'Show'); window.removeEventListener('scroll', scrollHandler); } }; function isScrolledIntoView(el) { var rect = el.getBoundingClientRect(); var elemTop = rect.top; var elemBottom = rect.bottom; var isVisible = (elemTop >= 0) && (elemBottom <= w.innerHeight); return isVisible; }; }(window, document, 'https://www.tinkoff.ru/cards/credit-cards/all-airlines/promo/form/black-friday/?utm_source=vc0920_cc&utm_medium=ntv.fix&utm_campaign=allairlines.vcbf', 'entry-head'));
Machine learning
Peter Bondarenko
43 924

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

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

В закладки
Пример выдачи

Боль

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

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

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

Решение

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

Объявление на vc.ru
Личный опыт
Исследование: как топовые агентства недвижимости используют мессенджеры для увеличения продаж
Сделать из потенциального клиента реального, если у вас есть только его номер телефона, не так-то просто. С появлением…

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

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

Хэппи-энд

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

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

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

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

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

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

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

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

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

{ "author_name": "Peter Bondarenko", "author_type": "self", "tags": ["\u043a\u0432\u0430\u0440\u0442\u0438\u0440\u044b","\u0438\u0438"], "comments": 209, "likes": 434, "favorites": 1149, "is_advertisement": false, "subsite_label": "ml", "id": 138697, "is_wide": true, "is_ugc": true, "date": "Wed, 01 Jul 2020 14:50:58 +0300", "is_special": false }
Объявление на vc.ru
0
209 комментариев
Популярные
По порядку
Написать комментарий...
112

Хорошие продукты появляются когда их делают для себя

Ответить
163

© Омар Хайям

Ответить
54

Ты не прав...

Ответить
9

Именно так появились лобстеры.

Ответить
4

Ага. Бог придумал себе лучшую закуску. 

Ответить
–9

Либерасты

Ответить
0

(с) Джейсон Стейтем

Ответить
0

Подскажите, какой критерий для отбора?

Ответить
0

Хороший вопрос, Влад. Не знаю. В этом и есть специфика работы с нейросетями. Нейросетевая модель сама определяет критерии и выдаёт ответ.

Ответить
0

То есть, нет каких то фундаментальных критериев по которым мы получаем ответ?

Ответить
0

В случае с нейросетями — нет. Нельзя сказать с уверенностью какой именно критерий повлиял на ответ. В этом и есть «магия» этой технологии.

Ответить
61

Вот бы еще нейросетку, чтобы сама общалась с ублюдочными риэлторами.

Ответить
95

Теоретически можно сделать, чтобы общалась. Правда получится так же ублюдочно.

Ответить
28

Может риэлторы - и так нейросеть? Ублюдочная

Ответить
5

Тут думаю можно сразу писать по объявлениям "Комиссия есть?". Кто отвечает "Да", заносить в отдельный список куда-то в рейтинге - Квартира - Пользователь - Риелтор.

Постараться максимально может убрать из циана всех риелторов, тогда будет типо "clear-cian.ru" и выводить только те объявления, по которым нет комиссии)

Ответить
0

Ну это вполне норм. 

Ответить
9

Вот бы еще нейросетку, чтобы сама общалась с ублюдочными риэлторами

Услышал вас. На созвоне.
Как будут подвижки по вашему заказику, подскочу кабанчиком, обкашляем вопросик.

Ответить
8

Риэлтор хуже червя-пидора

Ответить
0

почему именно "ублюдочными"? 

Ответить
0

ну не нравятся человеку хорошие риэлторы, хочет экзотики, вот и обращается к соответствующим :) 

Ответить
38

во спасибо мил человек, я свою квартиру тоже нашел. послезавтра переезжаю

Ответить
2

Это цена продажи или аренды?)))

Ответить
58

Цена просмотра

Ответить
0

Так и есть! Там чуть пониже цена просмотра за метр. Можно только сортир посмотреть, всяко дешевле...

Ответить
6

Клика :)

Ответить
2

Это номер телефона 😄

Ответить
20

Очень актуально, но выдаёт пустые результаты по ссылкам из статей и по тем которые я собирал..

upd: Ой, кажется в моем мухосранске даже с максимальной ценой просто нет квартир которые модель бы оценила как достойные xD

Ответить
1

кибербанк, который мы заслужили

Ответить
18

Четко ! Поклон вам добрый человек . Затестим 👍

Ответить
2

Спасибо!

Ответить
1

10 из 10!

Так, а какие планы теперь?

Ответить
46

Для начала вещи перевезти в новую квартиру. Ну а потом сделать бесплатное расширение для Хрома.

Ответить
4

Лёгкого переезда Вам. И спасибо за дельную штуку!

Ответить
1

Петр, подскажите, ваш сервис только с Циан работает или можно в Авито так квартиру искать?

Ответить
0

А что если в ЦИАН обратиться? Или с работой проблем нет?

Ответить
0

Вы имеете ввиду, обратиться, чтобы поработать у них? Или продать им?

Ответить
2

Уже не знаю...

Может, проще свой ЦИАН сделать? 😉

Ответить
0

Скорее всего циану будет не интересно. Им нужны клики, просмотры, реклама.

Ответить
1

Нет такого сервиса, который сознательно отказался бы в дизайне своего UI от большой красной кнопки «Сделать мне хорошо!» 🙂

А тут автор дал возможность понажимать на кнопку, портированную специально для нас прямиком из 22-го века 😉

Ответить
1

Совсем нет. Во-первых, подобные разделения очень субъективны. Да и для качественной классификации нужно очень много данных.
Во-вторых, вопрос, кому "сделать хорошо". Точно не Циану. Любой подобный сервис получает деньги с пользователей, которые платят деньги за размещение и поднятие объявлений, их выделение в поиске. И сознательно мешать тем, кто им заплатил (вне зависимости от состояния их объекта и справедливости цены) сервису просто непозволительно.

Ответить
0

ждем Вашего переезда

Ответить
7

Просто утащу в закладки.
Спасибо огромное, наконец что то дельное сделали из нейросетей.

Ответить
6

А можно такое для Тиндер?)

Ответить
1

А лучше для Google Glass или чего-то подобного, чтобы сразу ублюдочных блюрил и мьютил

Ответить
0

на хабре есть уже статья

Ответить
4

Блин, какие же люди молодцы порой!

Ответить
2

Поднял у себя в локальном JupyterLab вместо Коллаба, - все завелось с пол-пинка. Очень круто вышло, спасибо!

Ответить
1

О! Идеально! Я как раз для начала делал локально.

Ответить
2

👍

Ответить
2

Пожалуй одно из лучших и главное полезных применений МЛ

Ответить
2

Вот бл человеческое применение нейросетям. Реальная проблема и реальное решение

Ответить
0

 Вообще в cian очень не хватает банальной опции "с ремонтом".
А лучше шкалы градации ремонта.
Банально на уровне модерации объявлений можно это сделать, чтобы люди не тратили в пустую 90% времени.

Ответить
4

Да там у всех по текстовому описанию свежий дизайнерский ремонт. 

Ответить
2

Там есть, кстати, но видимо это поле заполняют сами риэлторы, поэтому в выдачу куча мусора.

Ответить
0

 Не могу найти.
Если не слишком нагло можете скинуть скрин экрана с параметром?

Ответить
1

В разделе «прочее». Сейчас с телефона ток могу.

Ответить
1

 Наверное это только в версии для телефона есть.

Ответить
1

Смотрю с компа, есть поле.

Ответить
0

 У меня нет :(
Благодарю, что поделились.
Отпишусь в cian.

Ответить
0

На всякий случай поинтересуюсь, разворачивали кнопку "Еще фильтры"?

Ответить
0

 Понимаю, что звучит странно.
1 - Да
2 - Несколько другой интерфейс...

Ответить
0

В режимах "поиск на карте" и "поиск списком" разные настройки фильтров. Переключитесь с "карты" на "список"

Ответить
0

именно. я выбираю дизайнерский/евро плюс отсечку по цене и смотрю прям на карте

Ответить
1

Автор, ты бы сначала заселился, а потом делился радостью. А то по старой русской традиции на таких сайтах обитает куча мошенников.

Ответить
1

Так я уже заселился, все ок :)

Ответить
0

Тогда логично удалить «завтра заселяюсь».

Ответить
0

В чем их профит?

Ответить
0

Гугли: мошенничество при аренде квартиры.

Ответить
3

Нет не буду

Ответить
0

Работает с выдачей от циана для других регионов?

Ответить
0

Конечно!

Ответить
0

А на покупку работает? Или только съем?

Ответить
44

В принципе можно дописать чутка код, чтобы на и на покупки работало. Сделать?

Ответить
3

Только если это не займёт у тебя много времени! А так, очень интересно)

Ответить
2

Присоединяюсь, если не сложно - будет круто)

Ответить
0

Было бы очень полезно! Заранее спасибо огромное!!!

Ответить
9

Готово, поправил код. По той же ссылке. Не уверен, правда, что модель будет так же хорошо отрабатывать, так как специфика объявлений на продажу чуть другая: гораздо больше фотографий района и дома с улицы.

Ответить
2

Это же попахивает каким-то нейрориелтором😄 спасибо, сейчас будем обкатывать👍

Ответить
1

Спасибо большое! будем тестить :) Подкину идею для нового поста: "Как научиться писать коды как Бог?"

Ответить
1

Код, кстати, не очень классный. Думаю, какие-нибудь матёры кодеры меня бы засрали.

Ответить
2

Можно засрать проще.
Нищеброд, нищеброд! Нет свой квартиры в Москве!

Ответить
5

Блин, обидно конечно стало................

Ответить
1

Пусть засирают, они все равно ничего даже близко полезного не сделали. Как говорится, специалист специалиста всегда засрет, а пользователю насрать, что под капотом, работает, полезно, великолепно!

Ответить
2

А смысл? Если при съёме жилья это ещё важно, то покупают не ремонт, а место для жизни — район, дом и другие факторы. А ремонт - это дело наживное.
Пусть хоть супер ремонт будет, но я, например, не готов брать квартиру в Химках, Новой Москве, на юго-востоке Москвы, в Некрасовке и т.п.

Да и за ремонт идёт бешеная доплата. Например, недавно смотрел - голые стены - 10.5 млн, та же самая планировка в том же самом доме, но уже с ремонтом (при чём хоть и хороший с виду, но при детальном изучении много нехотелок выявилось) - 14 млн. Вы готовы отдать 3-4 миллиона в Москве за выше среднего ремонт, который не подойдёт вам в 80-99% случаев, т.к. ремонт не для себя делается спустя рукава и очень дёшево, ничего не продумывается и т.п.? Вы же не загляните под пол, не увидите, как трубы пустили, как проводку сделали.

Скажу так, знакомые сделали за 3 млн офигительный ремонт под себя с заделом на будущее (ребенок). Полностью сделали так, как они хотели и вышло дешевле.

Я хотел сперва брать квартиру с ремонтом, но поездил, изучил рынок и понял, что лучше коробки не сыскать.

Обобщу мысль свою. Съем квартиры - ремонт играет значение, т.к. как минимум приятно жить. Не понравилось? Съехал в другую и всё. Покупка квартиры - если для жизни, то это надолго. Не понравилось? Мирись или переделывай, но сперва сломай весь ремонт, за который заплатил немало денег.

Ответить
2

Если ремонт дело наживное, то спешу тебя расстроить, потому что если ты не запланировал его точное начало и конец, тебе Биздец

Ответить
2

Ну тогда ок, куплю квартиру где-нибудь в Выхино, зато с офигенным ремонтом. А ездить буду на работу куда-нибудь в центр.

А на самом деле это понятно. Только вот если нет денег на ремонт и не предвидится, то купить квартиру с хорошим ремонтом так же будет проблематично. Повторюсь, ценник в Москве на 2-5 млн выше за простенький-средненький ремонт. Даже в ипотеку это ад. А если есть деньги - то за 2 млн нанимается бригада и делается отличный ремонт с дизайном и перепланировкой за 3-4 месяца.
Своими силами дешевле, но тут надо их рассчитать, как вы и сказали.

Ответить
1

Выдает вот такую ошибку :( 

FilterAllShitPlease(CIAN_URL, threshold=THRESHOLD)

Ответить
0

Какую? Не вижу самой ошибки.

Ответить
1

Нужно запустить не только последнюю ячейку, а всё с самого начала.

Ответить
0

Спасибо!

Ответить
0

Такая же проблема!

Ответить
–8

Достойный ответ от нейросети vc — это значит, что я не могу её прочитать. В итоге, он в своём сообщении не сказал ничего про ключ. Он говорил о том, что не видел никого применения в его действиях.

Ответить
0

ты говоришь об этом так, как будто бы это что то плохое

Ответить
Нейротекст
–7

Спасибо за статью! Подскажите, пожалуйста, если есть вопросы по товарам и услуге - пишите в лс? Вопросы о размещении товаров в каталоге: ФИО и дату рождения, указанные в профиле.

Ответить

Комментарий удален

0

Зашёл на ваш сайт. Нет кнопки подписаться. Жду)

Ответить
0

Как это связано?

Ответить
1

Молодец! Отличная идея!

Ответить
1

Попробовал, результат впечатляющий :) круто

Ответить
1

Вас приятно читать. Даже вредному критику...

Ответить
0

Спасибо!

Ответить
1

Вспомнился рассказ, где ученый обучал ИИ для поиска себе идеальной девушки... В итоге ИИ сдал ученого полиции, а сам стал встречаться с "девушкой своей мечты")

Ответить
1

Как раз скоро надо хату в Москве искать, попытаюсь поюзать)

Ответить
1

Удивляюсь я Петру, талантище! И снимает круто, и сейчас еще и программистом стал. Может стоит посмотреть в сторону полетов на Марс? :)

Ответить
0

Хах, спасибо! Думаю запустить беспилотники для начала 😉

Ответить
1

Автор красава, если все будет работать то ты просто народный герой - завтра буду тестить на Сочи)

Ответить
0

Спасибо! Не забудьте проверить, чтобы в ссылке на выдачу был region

Ответить
1

Здравствуйте!
Спасибо за отличный инструмент! Подруга искала квартиру в общей сложности примерно часов 16. С вашей "штукой" точно такой же результат получился за 1 минуту!
Можно ли сделать тоже самое для других баз с квартирами на съём / покупку?
Яндекс недвижимость?

Ответить
0

Здравствуйте! Вау, результат поражает и меня!
Да, это вполне возможно.
Напишите мне в личные сообщения пожалуйста или может быть, кто-то здесь захочет вам в этом помочь.

Ответить
0

Инструмент замечательный, скопировал к себе :)
Единственный вопросик: каковы критерии отбора квартиры?

Ответить
0

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

Ответить
1

решил проблему для себя так 
добавил переменную 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

Ответить
0

Идеально! Ну вот я примерно так же решил бы. Просто это ещё можно закинуть в for и получится на входе такой большой набор данных.

Ответить
4

Добила немного, чтобы проверка шла по всем найденным результатам, с итерацией по страницам :) Здесь: https://colab.research.google.com/drive/1yhbOcA4JA9d6NP42Rx68KCp_u8c9wkRj?usp=sharing

Ответить
1

И добавила сортировку выдачи по max(scores), если я правильно поняла критерий :) 

Ответить
0

Супер! Спасибо!

Ответить
0

а вот это у вас учтено?
"TopOfferCard, но есть ещё и просто OfferCard."

Ответить
0

Да, я про это ниже тоже коммент писала. В коде учтено. 

Ответить
0

Спасибо. Через вашу ссылку классно работает.

А к wordpress через плагины можно прикрутить? Вроде как не должно быть сложно... Только я не умею совсем ))
И выдавать просто списком.
+Яндекс недвижимость так же парсить.

Ответить
0

С вордпрессом не работала, я больше по питону :) Теоретически на основе обученной уважаемым автором статьи нейросети можно на любом проекте картинки квартир оценивать, надо только распарсить и скормить нейросети найденные картинки. Но лично я дорабатывала этот код чисто из интереса - даже квартиру сейчас не ищу. И на превращение всего этого в полноценный проект, увы, нет времени.

Ответить
0

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

Ответить
1

В случае некоторых других запросов циан разбивает объявления в выдаче на два типа: крупные и мелкие.
Вот как здесь, например: 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.

Ответить
0

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

Ответить
1

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

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

Ответить
1

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

Ответить
0

Спасибо за клёвый скрипт! Почему-то со ссылкой на Спб не работает:
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
показывает просто пустую выдачу. Наверное, там есть небольшие отличия в вёрстке.

Ответить
1

Вот пример первых трех строчек выдачи:
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.

Ответить
1

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

Ответить
0

У Вас выборка идет по Московской области. Как пониманию, вопрос был насчет именно СПб. При treshold'е и в 0.3 выводит пустой список

Ответить
0

Ответил под другим вопросом, дублирую еще раз сюда: нужно добавить в ссылку & region=N – где N регион. Это поле из линка переодически убирает сам ЦИАН (видимо в куки), но его можно вернуть, если в на странице с выдачей снова выбрать регион.

Ответить
1

Супер, таким образом сработало)

Ответить
0

Какой отвратный ремонт

Ответить
0

Протестил у себя с этой ссылкой, всё вроде как завелось. Попробуйте поставить threshold поменьше, например 0.4-0.5

Ответить
0

Хм, почему-то проверяет только несколько первых объявлений, которые крупные, а ниже на той же странице в более мелком варианте оформления - нет. Наверное, там другие элементы DOM.

Ответить
1

Починила так: flats = soup.find_all('div', {'data-name': re.compile('OfferCard')})

Ответить
1

Круто! Проект начинает походить на опен-сорс 😁

Ответить
0

Да, берет только `TopOfferCard`, а обычные `OfferCard` игнорирует.

Ответить
0

Самое интересное не написали и не показали: как обучали веса cian_model_01_B0.h5?
Где взять код для этого? Я бы хотел обучить на своих примерах "плохих" и "хороших" квартир :)

Ответить
1

Можно воспользоваться библиотекой PyTorch, взять предобученную модель (типа ResNet или VGG) и дообучить (выполнить fine-tuning) для классификации на два класса (нужна будет папка, в которой находятся две папки: с "плохими" и "хорошими" квартирами). Примеры кода и статьи легко гуглятся по запросам вроде "image classification pytorch".

Ответить
0

Нужно как-то препроцессить изображения предварительно? Делать их одним размером или что-то такое?

Ответить
1

Да, приводить к одному размеру нужно для подачи на вход в нейронную сеть, но весь пропроцессинг есть во фреймворках, вручную делать ничего не нужно (в большинстве случаев). Просто разложить изображения по папкам внутри какой-нибудь общей папки. Прикрепляю ссылки на примеры.

Ответить
0

Не думал продать ЦИАНу или Яндексу?

Ответить
1

Жду их тут в комментах 😏
На самом деле, уверен, у них у самих есть ребята, которые могут влёгкую такое повторить.
Если задуматься, кажется эта штука скорее понижает конверсию, так что с точки зрения бизнес-модели использовать такие приблуды не совсем логично.
Но, возможно, я ошибаюсь и это можно обернуть в плюс.

Ответить
0

Можете посоветовать книги/ресурсы для обучения по использованию Гугл Колаба? 

Ответить
0

Если бизнес-модель построена на максимальном нахождении пользователя на сайте, то, да, автор эту модель изящно снес👍

Ответить
0

К сожалению, несмотря на качественный результат, решение технически просто копируется, покупать им его смысла нет (ну если бы еще у расширения накопилась база пользователей на десятки тысяч, то может могли бы за аудиторию поторговаться). Максимум какой-то стартапчик на арендную тему постучится с коллаборацией.

Ответить
0

Класс

Ответить
0

У вас ссылка не совсем верная. Должна быть: 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&region=4743

У вас не был указан регион, а именно region=4743

Ответить
0

Не подскажешь, какой регион у Питера? По строчке 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 в выдаче Москва или я криворукий? 

Ответить
2

Добавьте в конце "region=2" после type=4&
Вообще, это косяк(или фича) ЦИАНА, что регион нужно выбрать всего один раз и видимо хранится в куках.

Ответить
0

Всё равно не работает

Ответить