Како Иандек.Таки тражи аутомобиле када их нема

Како Иандек.Таки тражи аутомобиле када их нема

Добра такси служба треба да буде сигурна, поуздана и брза. Корисник неће улазити у детаље: важно му је да кликне на дугме „Наручи“ и што пре добије аутомобил који ће га одвести од тачке А до тачке Б. Ако нема аутомобила у близини, сервис треба да одмах обавестите о томе како клијент не би имао лажна очекивања. Али ако се знак „Без аутомобила“ појављује пречесто, онда је логично да ће особа једноставно престати да користи ову услугу и оде код конкурента.

У овом чланку желим да причам о томе како смо, користећи машинско учење, решили проблем тражења аутомобила у областима ниске густине (другим речима, где, на први поглед, нема аутомобила). И шта је из тога произашло.

praistorija

Да би позвао такси, корисник изводи неколико једноставних корака, али шта се дешава унутар услуге?

Корисник Сцена Бацкенд Иандек.Таки
Бира почетну тачку Пин Покрећемо поједностављену претрагу кандидата – пин сеарцх. На основу пронађених возача предвиђа се време доласка - ЕТА у пин. Израчунава се коефицијент повећања у датој тачки.
Бира дестинацију, цену, захтеве Понуда Градимо руту и ​​израчунавамо цене за све тарифе, узимајући у обзир повећање коефицијента.
Притисне дугме „Позови такси“. Наручите Покрећемо пуну потрагу за аутомобилом. Одаберемо најпогоднијег возача и понудимо му наруџбу.

О томе ЕТА у пин, калкулација цене и избор најпогоднијег возача већ смо писали. А ово је прича о проналажењу возача. Када се креира налог, претрага се дешава два пута: на Пин и на налог. Тражење налога се одвија у две фазе: регрутовање кандидата и рангирање. Прво, пронађу се доступни кандидати за возаче који су најближи графикону пута. Затим се примењују бонуси и филтрирање. Преостали кандидати се рангирају и победник добија понуду за наруџбу. Ако пристане, распоређен је на налог и одлази на место испоруке. Ако одбије, онда понуда долази до следећег. Ако нема више кандидата, потрага почиње поново. Ово траје не више од три минута, након чега се наруџба поништава и спаљује.

Претраживање на Пин-у ​​је слично претраживању по наруџбини, само што се налог не креира и сама претрага се врши само једном. Такође се користе поједностављена подешавања за број кандидата и радијус претраге. Таква поједностављења су неопходна јер постоји ред величине више пинова него налога, а претраживање је прилично тешка операција. Кључна ствар за нашу причу: ако током прелиминарне претраге на Пин-у ​​нису пронађени одговарајући кандидати, онда вам не дозвољавамо да наручите. Тако је бар било некада.

Ово је оно што је корисник видео у апликацији:

Како Иандек.Таки тражи аутомобиле када их нема

Тражите аутомобиле без аутомобила

Једног дана смо дошли до хипотезе: можда у неким случајевима наруџбина и даље може бити завршена, чак и ако на ивици није било аутомобила. На крају крајева, између чиоде и налога прође неко време, а потрага за наруџбом је потпунија и понекад се понавља неколико пута: током овог времена могу се појавити доступни драјвери. Знали смо и супротно: ако би се возачи нашли на пин-у, није била чињеница да ће се наћи приликом наручивања. Понекад нестану или сви одбију наређење.

Да бисмо тестирали ову хипотезу, покренули смо експеримент: престали смо да проверавамо присуство аутомобила током претраге на Пин-у ​​за тест групу корисника, односно имали су прилику да направе „поруџбину без аутомобила“. Резултат је био прилично неочекиван: ако аутомобил није био на ивици, онда је у 29% случајева пронађен касније - приликом претраге по наруџбини! Штавише, поруџбине без аутомобила нису се значајно разликовале од редовних у погледу стопе отказивања, оцена и других показатеља квалитета. Резервације без аутомобила чиниле су 5% свих резервација, али нешто више од 1% свих успешних путовања.

Да бисмо разумели одакле потичу извршиоци ових налога, погледајмо њихове статусе током претраге на пину:

Како Иандек.Таки тражи аутомобиле када их нема

  • Доступан: био доступан, али из неког разлога није био укључен у кандидате, на пример, био је предалеко;
  • По наруџби: био заузет, али је успео да се ослободи или постане доступан за ланчани ред;
  • Заузет: могућност прихватања налога је онемогућена, али се онда возач вратио на линију;
  • Није доступно: возач није био на мрежи, али се појавио.

Додајмо поузданост

Додатне поруџбине су одличне, али 29% успешних претрага значи да је 71% времена корисник дуго чекао и на крају није отишао нигде. Иако ово није лоша ствар са становишта ефикасности система, то заправо даје кориснику лажну наду и губи време, након чега се узнемири и (евентуално) престане да користи услугу. Да бисмо решили овај проблем, научили смо да предвидимо вероватноћу да ће се аутомобил по наруџби наћи.

Шема је следећа:

  • Корисник ставља пин.
  • На пин се врши претрага.
  • Ако не буде аутомобила, предвиђамо: можда ће се појавити.
  • И у зависности од вероватноће, дозвољавамо или не дозвољавамо да наручите, али вас упозоравамо да је густина аутомобила у овој области у овом тренутку мала.

У апликацији је то изгледало овако:

Како Иандек.Таки тражи аутомобиле када их нема

Коришћење модела вам омогућава да прецизније креирате нове поруџбине и да не уверавате људе узалуд. Односно, да се регулише однос поузданости и броја поруџбина без машина користећи модел прецизног опозива. Поузданост услуге утиче на жељу да се производ и даље користи, односно на крају се све своди на број путовања.

Мало о прецизности - опозивуЈедан од основних задатака у машинском учењу је задатак класификације: додељивање објекта једној од две класе. У овом случају, резултат алгоритма машинског учења често постаје нумеричка процена чланства у једној од класа, на пример, процена вероватноће. Међутим, радње које се изводе су обично бинарне: ако је аутомобил доступан, дозволићемо вам да га наручите, а ако не, онда нећемо. Да будемо прецизни, назовимо алгоритам који производи нумеричку процену моделом, а класификатор правилом које га додељује једној од две класе (1 или –1). Да бисте направили класификатор на основу процене модела, потребно је да изаберете праг процене. Како тачно зависи у великој мери од задатка.

Претпоставимо да радимо тест (класификатор) за неку ретку и опасну болест. На основу резултата теста или шаљемо пацијента на детаљнији преглед, или кажемо: „Добро, иди кући“. За нас је много горе послати болесну особу кући него беспотребно прегледати здраву особу. Односно, желимо да тест функционише за што више заиста болесних људи. Ова вредност се зове опозив =Како Иандек.Таки тражи аутомобиле када их нема. Идеалан класификатор има 100% опозив. Дегенерисана ситуација је да се сви шаљу на преглед, онда ће и опозив бити 100%.

Дешава се и обрнуто. На пример, правимо систем за тестирање ученика и он има детектор варања. Ако изненада провера не ради за неке случајеве варања, онда је то непријатно, али није критично. С друге стране, изузетно је лоше неправедно оптуживати студенте за нешто што нису урадили. Односно, важно нам је да међу позитивним одговорима класификатора буде што више тачних, можда и науштрб њиховог броја. То значи да морате максимизирати прецизност = Како Иандек.Таки тражи аутомобиле када их нема. Ако се окидање деси на свим објектима, онда ће прецизност бити једнака учесталости дефинисане класе у узорку.

Ако алгоритам произведе нумеричку вредност вероватноће, онда избором различитих прагова можете постићи различите вредности прецизности опозива.

У нашем проблему ситуација је следећа. Подсећање је број поруџбина које можемо да понудимо, прецизност је поузданост ових поруџбина. Овако изгледа крива прецизног опозива нашег модела:
Како Иандек.Таки тражи аутомобиле када их нема
Постоје два екстремна случаја: не дозволите никоме да наређује и дозволите свима да наручују. Ако никоме не дозволите, онда ће опозив бити 0: ми не креирамо наредбе, али ниједан од њих неће пропасти. Ако дозволимо свима, онда ће опозив бити 100% (примићемо све могуће наредбе), а прецизност ће бити 29%, односно 71% налога ће бити лоша.

Као знакове користили смо различите параметре полазне тачке:

  • Време/место.
  • Стање система (број заузетих машина свих тарифа и пинова у близини).
  • Параметри претраге (радијус, број кандидата, ограничења).

Више о знаковима

Концептуално, желимо да разликујемо две ситуације:

  • „Дубока шума“ - овде тренутно нема аутомобила.
  • "Несрећни" - постоје аутомобили, али при претраживању није било одговарајућих.

Један пример „Несрећника“ је ако у центру у петак увече постоји велика потражња. Наруџбина има пуно, жељних много, а возача за све нема довољно. Може се испоставити овако: у пину нема одговарајућих драјвера. Али буквално за неколико секунди се појављују, јер у овом тренутку на овом месту има много возача и њихов статус се стално мења.

Стога су се различити системски индикатори у близини тачке А показали као добре карактеристике:

  • Укупан број аутомобила.
  • Број аутомобила по наруџби.
  • Број аутомобила који нису доступни за наручивање у статусу „Заузето“.
  • Број корисника.

На крају крајева, што више аутомобила има, већа је вероватноћа да ће један од њих постати доступан.
У ствари, за нас је важно да се не само лоцирају аутомобили, већ се и праве успешна путовања. Стога је било могуће предвидети вероватноћу успешног путовања. Али одлучили смо да то не радимо, јер ова вредност у великој мери зависи од корисника и возача.

Алгоритам обуке модела је био ЦатБоост. За обуку су коришћени подаци добијени експериментом. Након имплементације, требало је прикупити податке о обуци, понекад дозвољавајући малом броју корисника да наруче против одлуке модела.

Резултати

Резултати експеримента су били очекивани: коришћење модела вам омогућава да значајно повећате број успешних путовања због поруџбина без аутомобила, али без угрожавања поузданости.

Тренутно је механизам покренут у свим градовима и државама и уз његову помоћ се дешава око 1% успешних путовања. Штавише, у неким градовима са малом густином аутомобила, удео таквих путовања достиже 15%.

Остале објаве о такси технологији

Извор: ввв.хабр.цом

Додај коментар