Роман Халкечев, руководитель отдела аналитики в Яндекс.Еде и Лавке
Роман Халкечев, руководитель отдела аналитики в Яндекс.Еде и Лавке
Роман Халкечев, руководитель отдела аналитики в Яндекс.Еде и Лавке Хранение данных в дереве. Это как вообще? Бустинг — ещё один способ машинного обучения

👨‍💻 Герой: Роман Хал­ке­чев, 28 лет, Москва. Окон­чил бака­лаври­ат в РУДН и сов­мест­ную маги­стер­скую про­грам­му ВШЭ и Шко­лы ана­ли­за дан­ных Яндекса.

🛠 Рабо­та: Руко­во­ди­тель ана­ли­ти­ки в Яндекс.Еде. Рабо­та­ет в офи­се, 5/2. Обыч­но начи­на­ет в 10, закан­чи­ва­ет в 20.

🧭 Рынок: Руко­во­ди­тель отде­ла ана­ли­ти­ки в Москве: 34 вакан­сии.

Школа анализа данных. Задача про подсказки

Я учил­ся в РУДН на мате­ма­ти­че­ском факуль­те­те. На вто­ром кур­се заин­те­ре­со­вал­ся био­ло­ги­ей и поз­же узнал про направ­ле­ние био­ин­фор­ма­ти­ки в Шко­ле ана­ли­за дан­ных Яндек­са. Я заин­те­ре­со­вал­ся, начал гото­вить­ся и в 2012 году про­шёл отбор.

На одной из лек­ций раз­ра­бот­чик Яндек­са рас­ска­зы­вал нам, как устро­е­ны поис­ко­вые под­сказ­ки. В кон­це лек­ции он пред­ло­жил нам домаш­нее зада­ние (по жела­нию). Энту­зи­а­стов вызва­лось немно­го, поэто­му он под­нял став­ки и то ли в шут­ку, то ли нет пообе­щал приз — рабо­ту в Яндек­се. Я вызвался.

Поис­ко­вые под­сказ­ки — это попу­ляр­ные вари­ан­ты запро­сов, кото­рые поис­ко­вик пред­ла­га­ет поль­зо­ва­те­лю, когда тот что-то ищет. Напри­мер, заби­ва­ем в Яндек­се «про­грам­ми­ро­ва­ние» и он пред­ла­га­ет «про­грам­ми­ро­ва­ние с нуля», «про­грам­ми­ро­ва­ние на python» и так далее. Это нуж­но, что­бы сэко­но­мить поль­зо­ва­те­лю вре­мя или помочь сфор­му­ли­ро­вать запрос.


Под­сказ­ки Яндек­са фор­ми­ру­ют­ся автоматически 

Доклад­чик выдал нам логи поис­ко­вых запро­сов и пред­ло­жил сде­лать такие под­сказ­ки, но с учё­том опе­ча­ток. Напри­мер, поль­зо­ва­тель пишет «крта», а нам нуж­но понять, что это ошиб­ка, — и пред­ло­жить «кар­та метро».

Я две неде­ли зани­мал­ся этой зада­чей дня­ми и вече­ра­ми. Про­грам­ми­ро­вал я тогда сла­бо, прак­ти­ки не хва­та­ло. Но в ито­ге смог напи­сать под­сказ­ки на Java. Порой они очень мед­лен­но рабо­та­ли: вво­дишь сим­вол и ждёшь потом секунд 10–11, пока загру­зят­ся под­сказ­ки. При­хо­ди­лось мно­го оптимизировать.

Реше­ние я отпра­вил за пару дней до дед­лай­на. В ответ мне пред­ло­жи­ли подо­ждать дед­лай­на, что­бы опре­де­лить побе­ди­те­ля, но сра­зу зада­ли два вопро­са: рас­смат­ри­ваю ли я ста­жи­ров­ку в Яндек­се и умею ли про­грам­ми­ро­вать на C++ и Питоне.


Я сде­лал домаш­нее зада­ние, а в ответ полу­чил такое пись­мо — «Не инте­ре­су­ет ли вас ста­жи­ров­ка в Яндексе?» 

Пер­во­му вопро­су я обра­до­вал­ся, а вот со вто­рым было слож­нее: ни на C++, ни на Питоне я не писал.

В тот же день купил книж­ку по C++, открыл её и напи­сал, что «C++ изу­чаю, а про Питон мно­го хоро­ше­го слы­шал». Мы дого­во­ри­лись, что я досдам лет­нюю сес­сию и вый­ду с пер­во­го июля.

Вско­ре факуль­тет био­ин­фор­ма­ти­ки отде­лил­ся от ШАДа, но мне так понра­ви­лось в Яндек­се, что я решил остать­ся. К тому вре­ме­ни я выпу­стил­ся из бака­лаври­а­та и решил пой­ти на сов­мест­ную маги­стер­скую про­грам­му ВШЭ и ШАДа на направ­ле­ние computer science.

Стажировка в Яндексе до того, как это стало мейнстримом

В июле 2013 года после зада­чи с под­сказ­ка­ми я попал в Яндекс без еди­но­го собе­се­до­ва­ния. Сна­ча­ла это раз­жи­га­ло во мне син­дром само­зван­ца — вокруг очень умные люди, кан­ди­да­ты наук, и тут я с ними, мне все­го 20 лет, опы­та рабо­ты совсем нет.

Вме­сте со мной в отде­ле был ещё один ста­жёр — парень из Харь­ко­ва. Мы шути­ли, когда ухо­ди­ли на обед, что вер­нём­ся, а наших рабо­чих мест уже нет и запис­ка «Про­сти­те, мы ошиб­лись, вы уво­ле­ны». Но это были без­осно­ва­тель­ные опасения.

Сей­час в Яндекс берут мно­го ста­жё­ров, быва­ет по 800–1000 чело­век за лето. А тогда нас было все­го 30. В кон­це мы все защи­ща­ли ста­жи­ров­ки: рас­ска­зы­ва­ли, что сде­ла­ли за три меся­ца. Это вро­де про­вер­ки, после кото­рой реша­ли, кому пред­ло­жить остать­ся, а кому нет. Я полу­чил оффер от той же коман­ды, где про­хо­дил ста­жи­ров­ку, и был это­му рад: зада­чи и руко­во­ди­тель мне нравились.

Путь до руководителя

Осе­нью нача­лось обу­че­ние на сов­мест­ной про­грам­ме «Выш­ки» и ШАДа. Боль­шая часть заня­тий про­хо­ди­ла пря­мо в Яндек­се: до 6 вече­ра я рабо­тал, а потом спус­кал­ся на пары.

Пер­вое вре­мя сов­ме­щать учё­бу и рабо­ту было непро­сто, так что мы дого­во­ри­лись, что я буду рабо­тать три дня из пяти. Но уже через год — летом 2014-го — я понял, что хочу погру­зить­ся в рабо­ту цели­ком, и вышел на пол­ную рабо­чую неделю.

Я поти­хонь­ку рос. После ста­жи­ров­ки стал млад­шим раз­ра­бот­чи­ком, потом про­сто раз­ра­бот­чи­ком, вро­де мидл-1. Потом мидл-2 и через три с поло­ви­ной года — стар­шим раз­ра­бот­чи­ком. Со вре­ме­нем мне пред­ло­жи­ли стать руко­во­ди­те­лем груп­пы — той же самой, куда я приходил.

Сна­ча­ла я отка­зал­ся: я был самым послед­ним и самым моло­дым, кто при­шёл в эту коман­ду. Дру­гие ребя­та были постар­ше, учи­ли меня все­му. Так что мне было неком­форт­но пред­став­лять, что я буду их руко­во­ди­те­лем. Но вся осталь­ная коман­да под­дер­жа­ла это реше­ние, и я согла­сил­ся — стал руко­во­ди­те­лем коман­ды поис­ко­вых подсказок.

Как работают подсказки

Зада­ча под­ска­зок — сде­лать так, что­бы поль­зо­ва­тель быст­рее нахо­дил то, что ему нуж­но. Напри­мер, без под­ска­зок ему нуж­но набрать в сред­нем 19 сим­во­лов, а с под­сказ­ка­ми — в два раза мень­ше. Или мож­но выве­сти резуль­та­ты поис­ка пря­мо в поле с под­сказ­ка­ми, что­бы не нуж­но было даже запус­кать поиск.

Реша­ли раз­ные зада­чи. Напри­мер, что­бы по запро­су сфор­ми­ро­ва­лись под­сказ­ки, долж­на нако­пить­ся ста­ти­сти­ка: как часто его зада­ют, на что имен­но кли­ка­ют. Но как в таком слу­чае учи­ты­вать новост­ную повест­ку или недав­ние собы­тия? Напри­мер, запро­сы про про­шед­ший фут­боль­ный матч, запуск раке­ты или резуль­та­ты выбо­ров. По ним нет исто­ри­че­ской ста­ти­сти­ки, а через пару дней они уже будут неактуальны.

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

Мы раз­ви­ва­ли под­сказ­ки во всех сер­ви­сах, кро­ме гео: в поис­ке, кар­тин­ках, мар­ке­те, музы­ке. Напри­мер, в мар­ке­те доба­ви­ли в под­сказ­ки раз­де­лы: мож­но искать по брен­ду, по това­рам или по частым запросам.


Если искать в Яндекс.Маркете айфон, под­сказ­ки пред­ло­жат кон­крет­ные това­ры, попу­ляр­ные запро­сы и поиск по брен­ду Apple 

В изоб­ра­же­ни­ях реа­ли­зо­ва­ли свя­зан­ные запро­сы. Напри­мер, если поль­зо­ва­тель ищет «ягу­ар», то ему по умол­ча­нию пока­зы­ва­ют живот­ное. Но вдруг он ищет авто­мо­биль или напи­ток? Эти вари­ан­ты мы выво­дим в отдель­ный блок, так что поль­зо­ва­тель может сра­зу уточ­нить запрос.


Вам живот­ное или спорткар? 

Переход в «Такси»

В нача­ле 2018 года мне напи­са­ли из Яндекс.Такси. Там стро­и­ли коман­ду машин­но­го обу­че­ния и дата-сайенса, нужен был руководитель.

Кто такой дата-сайентист →

Я тогда чув­ство­вал, что подустал зани­мать­ся под­сказ­ка­ми. Почти любые рабо­чие зада­чи я решал одни­ми и теми же тех­но­ло­ги­я­ми, это наску­чи­ло. Так что я согла­сил­ся и начал­ся про­цесс рота­ции: я начал про­хо­дить собеседования.

Яндекс.Такси тогда был в про­цес­се сли­я­ния с «Убе­ром», и очень быст­ро рос, появ­ля­лись новые коман­ды. Для меня это был вызов: до это­го я руко­во­дил коман­дой в 4–5 чело­век, а здесь — сра­зу 14.

Машинное обучение в «Такси»

У служ­бы машин­но­го обу­че­ния ана­ли­за дан­ных в «Так­си» две основ­ные задачи.

Пер­вая — нахо­дить в про­дук­те зоны, кото­рые мож­но улуч­шить. Гло­баль­ная цель у это­го — сде­лать иде­аль­ное при­ло­же­ние, кото­рое при запус­ке уже зна­ет, куда поедет поль­зо­ва­тель, какая маши­на ему нуж­на и сколь­ко при­дёт­ся ждать.

Вто­рая зада­ча — улуч­шать бизнес-процессы ком­па­нии: под­держ­ку, мар­ке­тинг, кон­троль каче­ства. То есть делать так, что­бы рабо­та «Так­си» была более про­стой, быст­рой и дешёвой.

Зада­чи пре­иму­ще­ствен­но сер­вис­ные — при­ду­мать, как мож­но улуч­шить то, что есть, или гра­мот­но реа­ли­зо­вать то, что в пла­нах. Но при этом очень важ­ные для биз­не­са, так как с помо­щью машин­но­го обу­че­ния мно­го задач мож­но решать намно­го эффек­тив­нее, чем про­сты­ми алго­рит­ма­ми или сила­ми человека.

Пример: машинное обучение помогает находить новые заказы

Рань­ше было так: если в опре­де­лён­ном ради­у­се от точ­ки вызо­ва не было ни одно­го доступ­но­го так­си­ста, то при­ло­же­ние даже не начи­на­ло поиск, появ­ля­лось сооб­ще­ние: «Нет сво­бод­ных машин».

В коман­де реши­ли про­ве­сти экс­пе­ри­мент и опре­де­лён­ной части поль­зо­ва­те­лей поз­во­ли­ли вызы­вать так­си даже в такой ситу­а­ции. Ока­за­лось, что в 29% слу­ча­ев испол­ни­тель всё-таки находился.


Ситу­а­ция быст­ро меня­ет­ся: один води­тель толь­ко что вышел на линию; дру­гой — заехал на тер­ри­то­рию поис­ка; тре­тий — стал досту­пен для зака­за по цепочке. 

Но 29% удач­ных поис­ков — это 71% слу­ча­ев, когда поль­зо­ва­тель полу­чил лож­ную надеж­ду. Что­бы повы­сить надёж­ность, мы сде­ла­ли систе­му, кото­рая рас­счи­ты­ва­ет веро­ят­ность того, что маши­на будет найдена.

Мы реша­ли зада­чу клас­си­фи­ка­ции. На вхо­де есть несколь­ко пара­мет­ров: вре­мя и место, коли­че­ство машин и поль­зо­ва­те­лей, ради­ус поис­ка. И нуж­но опре­де­лить, при­ве­дёт ли такой набор к успеш­но­му поис­ку. То есть, ответ либо «да» — тогда мы запус­ка­ем под­бор води­те­ля, либо «нет» — тогда гово­рим, что сво­бод­ных машин нет. Как раз эту зада­чу реша­ет машин­ное обу­че­ние — под­счи­тать веро­ят­ность удачи.

Пример: машинное обучение помогает общаться с клиентами и водителями

В под­держ­ку посто­ян­но пишут поль­зо­ва­те­ли — с жало­ба­ми, вопро­са­ми или бла­го­дар­но­стя­ми. Сер­вис посто­ян­но под­клю­ча­ет новые горо­да, и отс­мат­ри­вать все обра­ще­ния вруч­ную невоз­мож­но. Здесь помо­га­ет ней­ро­сеть, кото­рая может опре­де­лить, нуж­но ли сроч­но реа­ги­ро­вать и, если да, под­клю­ча­ет опе­ра­то­ра. А ино­гда даже может сама отве­тить шаб­лон­ным сооб­ще­ни­ем, напри­мер, на отзыв о поездке.

В под­держ­ку обра­ща­ют­ся не толь­ко кли­ен­ты, но и сами так­си­сты. У них тоже есть пре­тен­зии и идеи, как мож­но улуч­шить сер­вис. Про­чи­тать и отсор­ти­ро­вать их все — невоз­мож­но. Поэто­му мы сде­ла­ли алго­ритм, кото­рый кла­сте­ри­зу­ет сооб­ще­ния и пока­зы­ва­ет, к каким частям систе­мы боль­ше все­го пре­тен­зий. Их берут в рабо­ту и запус­ка­ют новые функ­ции. Так в при­ло­же­нии «Так­си» появи­лась воз­мож­ность делить­ся гео­по­зи­ци­ей, что­бы води­тель видел точ­ное место, из кото­ро­го нуж­но забрать пользователя.

Пример: фотоконтроль

Води­те­лям пери­о­ди­че­ски нуж­но фото­гра­фи­ро­вать авто­мо­биль, что­бы мы убе­ди­лись, что у него нет повре­жде­ний и он может без­опас­но выпол­нять зака­зы. Здесь тоже помо­га­ет ней­ро­сеть. Она сра­зу отме­ча­ет, если на фото нет авто­мо­би­ля или он влез не пол­но­стью, не тот ракурс, дру­гой номер­ной знак или есть оче­вид­ные повре­жде­ния. Это эко­но­мит кучу вре­ме­ни води­те­лям и поддержке.

Как учат­ся нейронки →

Было ещё мно­же­ство задач, кото­рые мож­но решить с помо­щью ана­ли­за дан­ных и машин­но­го обу­че­ния. Этим мы и зани­ма­лись: при­ду­мы­ва­ли систе­мы, писа­ли алго­рит­мы, обра­ба­ты­ва­ли сырые дан­ные, обу­ча­ли модели.


Поучаст­во­ва­ли во флеш­мо­бе и при­шли с коман­дой Так­си на рабо­ту кра­сав­чи­ка­ми. Это не рабо­чая зада­ча, про­сто хвастаюсь 

Это пер­вая часть раз­го­во­ра с Рома­ном. Про­дол­же­ние — зав­тра. Под­пи­сы­вай­тесь на нас в VK и Теле­гра­ме, что­бы этсамое.