- PVSM.RU - https://www.pvsm.ru -
Предсказуемая, но такая долгожданная мной смена времен года происходит прямо сейчас. Многие из знакомых предвкушают начало дачного сезона и активно обновляют свой инвентарь. Список очень нужных вещей, которые необходимо купить превышает все мыслимые бюджеты на десять лет вперед(ведь еще надо предусмотреть аренду товарного поезда для доставки всего необходимого) и на помощь приходят онлайн доски размещения объявлений. В надежде сэкономить, вы определяете список вещей, которые вам уже не пригодятся, размещаете их на продажу, и в предвкушении выгодной сделки начинаете ждать звонков и… Их нет. В чем дело? Оказывается, разборчивого покупателя интересует не только тот факт, что «газонокосилка находится в отличном состоянии», но и мощность двигателя, направление выброса травы, положение вала, время наработки и т.д. Не являясь спецом в садовом оборудовании, как вы могли все это предусмотреть? И вот вы начинаете просматривать другие объявления на схожую тему, а время идет и ваш человек по дачной логистике уже заказал для перевозок баржу и два грузовых самолета. На примере одной из рубрик доски объявлений мы рассмотрим построение прогнозной модели, которая помогла бы выяснить, что именно хотели бы узнать люди из описания вашего предложения, а так же дать очень примерную оценку числа переходов на ваше объявление.
Здесь я старался описать всю картину целиком, big picture, детали же доступны по ссылкам на код и данные в конце поста. В статье делаются следующие предположения:
С помощью python библиотеки urllib было получено 3879 записей с одного популярного сайта. Рубрика — собаки, город Москва. При отборе объявлений я старался оставить только некоммерческие предложения о передаче в добрые руки, поэтому порода конкретно не указывалась. Описание полей выборки:
Первые 5 записей:
Разработать модель для прогнозирования зависимости числа просмотров в сутки от описания объявления и определить наиболее значимые слова для данной рубрики.
Поле num_counts содержит число кликов с начала публикации start_date . Поскольку у каждой записи разное время публикации, необходимо число посещений разделить на число дней, прошедших с момента публикации до момента получения данных, таким образом получим грубую оценку числа посещений в сутки, ее и будем прогнозировать. Для анализа текста используется модель bag of words. Итак, план:
После всех преобразований на выходе получится document-term matrix и целевая переменная mean_count, разбитая на квартили(я выбрал число квартилей равным 5).
Число просмотров в сутки имеет степенное распределение, возможно эта рубрика в принципе не популярна:
Интересно посмотреть на диаграмму рассеяния между числом слов и числом просмотров:
Видно, что более короткие объявления имеют большее число посещений. Здесь я бы предложил такое объяснение — в длинных объявлениях потенциальному хозяину часто описывается модель общения между ним и питомцем, например:
Если Вы любите домашний покой, то Ромуш тихо ляжет у Ваших ног и с удовольствием посмотрит с Вами фильм, который Вы потом непременно вместе обсудите за чашкой горячего шоколада с ватрушками. И с ним Вам будет очень уютно и тепло холодными вечерами. Если у Вас дети и Ваш дом похож на «детский дримлэнд», то Ромуш будет впереди всех бежать с криком «Банзай», тем самым забавляя детвору, которая будет просто пищать от восторга от их нового друга!
Поскольку все люди разные, такое объявление сразу может отсеять людей, представляющих свою коммуникацию по-другому. Не уверен, что это хорошо, поскольку модель общения это крайне субъективный взгляд волонтера и человек теряет интерес к объявлению не потому ему не подходит собака, а по необъективным причинам — примерил себе не ту модель. Вторая возможная причина — описание тяжелой жизни в приюте. Нет никаких сомнений, что жизнь там не сахар, но средний человек, прочитав такой текст может пережить сильный стресс и несознательно постарается забыть об этом, как о травмирующем воспоминании(это моя субъективная гипотеза).
Целевая переменная была разбита на 5 интервалов(читай — классов):
(13.599, 324] 454
[0.0888, 1.184] 454
(5.334, 13.599] 453
(2.436, 5.334] 453
(1.184, 2.436] 453
Т.е. есть 454 записей, где целевая переменная принимает значения из интервала (13.599, 324] и т.д. Если все время предсказывать каким-нибудь конкретным интервалом, то число правильных ответов будет примерно 0.2, выберем это значение как базовый уровень, качество которого мы хотели бы улучшить.
После нескольких экспериментов я выбрал в качестве классификатора случайный лес. Различные параметры настраивались через grid search на кросс-валидации с числом фолдов равным пяти. Обучение занимает приблизительно 15-20 минут на intel i7. Среднее качество на кросс-валидации по метрике accuracy составило 0.386, что почти в два раза больше предсказания константным значением. На отложенной выборке, которая ранее нигде не участвовала accuracy = 0.384 В таблицах ниже видно, что классификатор лучше различает крайние значения(интервалы [0.0888, 1.184] и (13.599, 324] ) и хуже смежные:
Возможно, качество модели может быть улучшено, если к тексту добавить фотографии. Для извлечения признаков из фото можно попробовать использовать сверточные нейронные сети, например, AlexNet.
Посмотрим топ-50 слов, которые оказываются важными при классификации:
График не противоречит интуиции: людей интересует сколько животному лет и какой пол, ходит ли собака на поводке, подходит ли больше для семьи или одиноких людей, как ладит с другими питомцами. Можно заключить, что это тот минимум информации, который должен быть включен в объявление.
Набор данных [1] и ipython ноутбук [2]
Мы уже видели, что число просмотров для рубрики «животные в дар» не высоко, причем для приютов еще меньше, чем для частных лиц. Возможно это связанно с недостаточным информированием людей и различными предрассудками. Приведу некоторые факты:
Если когда-нибудь вы захотите завести себе животное, то обязательно проверьте, вдруг кто-то смотрит на вас с фотографии здесь:
Данный анализ проводился в рамках финального проекта курса «Машинное обучение и майнинг данных» [7] ДПО ВШЭ, поэтому огромное спасибо нашим преподавателям за их терпение и труд, а так же моему научному руководителю.
P.S. Обо всех неточностях и опечатках пишите в личку!
Автор: 9851754
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/machine-learning/116570
Ссылки в тексте:
[1] Набор данных: https://goo.gl/SgZjP2
[2] ipython ноутбук: https://goo.gl/r5dLVv
[3] claws.ru: http://claws.ru/
[4] pesikot.org: http://pesikot.org/
[5] www.sobaki-eko.ru/#: http://www.sobaki-eko.ru/#/
[6] www.moscowbim.ru: http://www.moscowbim.ru/
[7] «Машинное обучение и майнинг данных» : https://cs.hse.ru/dpo/datamining
[8] Источник: https://habrahabr.ru/post/280500/
Нажмите здесь для печати.