Како Yandex.Taxi бара автомобили кога ги нема

Како Yandex.Taxi бара автомобили кога ги нема

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

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

праисторијата

За да повика такси, корисникот прави неколку едноставни чекори, но што се случува внатре во услугата?

Корисник Фаза Backend Yandex.Taxi
Ја избира почетната точка Пин Започнуваме поедноставено пребарување на кандидати - пребарување со пинови. Врз основа на пронајдените возачи, се предвидува времето на пристигнување - ETA во пинот. Се пресметува коефициентот на зголемување во дадена точка.
Избира дестинација, билет, барања Понуда Ние градиме рута и ги пресметуваме цените за сите тарифи, земајќи го предвид зголемениот коефициент.
Притискање на копчето „Повикај такси“. Нарачка Започнуваме целосна потрага по автомобилот. Го избираме најсоодветен возач и му нудиме нарачка.

на ЕТА во пин, пресметка на цената и изборот на најсоодветен возач веќе напишавме. И ова е приказна за наоѓање возачи. Кога се креира нарачка, пребарувањето се случува двапати: на пинот и на нарачката. Пребарувањето на нарачката се одвива во две фази: регрутирање на кандидати и рангирање. Прво, се пронајдени достапни кандидати за возачи кои се најблиску покрај графикот на патот. Потоа се применуваат бонуси и филтрирање. Останатите кандидати се рангираат и победникот добива понуда за нарачка. Доколку се согласи, тој е доделен на нарачката и оди до местото за испорака. Ако одбие, тогаш понудата доаѓа до следниот. Ако нема повеќе кандидати, пребарувањето започнува повторно. Ова трае не повеќе од три минути, по што нарачката се откажува и се запали.

Пребарувањето на пин е слично на пребарувањето по нарачка, само што нарачката не се креира и самото пребарување се врши само еднаш. Се користат и поедноставени поставки за бројот на кандидати и радиусот на пребарување. Ваквите поедноставувања се неопходни бидејќи има по ред на големина повеќе пинови отколку нарачки, а пребарувањето е прилично тешка операција. Клучната точка за нашата приказна: ако за време на прелиминарното пребарување не беа пронајдени соодветни кандидати на Пинот, тогаш не ви дозволуваме да нарачате. Барем така беше порано.

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

Како Yandex.Taxi бара автомобили кога ги нема

Пребарајте автомобили без автомобили

Еден ден дојдовме до хипотеза: можеби во некои случаи нарачката сè уште може да се заврши, дури и ако немаше автомобили на иглата. На крајот на краиштата, поминува одредено време помеѓу пинот и нарачката, а пребарувањето за нарачката е поцелосно и понекогаш се повторува неколку пати: во ова време, може да се појават достапни драјвери. Го знаевме и спротивното: доколку се најдат возачи на иглата, не беше факт дека ќе се најдат при нарачката. Понекогаш исчезнуваат или сите ја одбиваат нарачката.

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

За да разбереме од каде доаѓаат извршителите на овие наредби, да ги погледнеме нивните статуси за време на пребарувањето на пин:

Како Yandex.Taxi бара автомобили кога ги нема

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

Ајде да додадеме сигурност

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

Шемата е вака:

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

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

Како Yandex.Taxi бара автомобили кога ги нема

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

Малку за прецизноста-потсетувањеЕдна од основните задачи во машинското учење е задачата за класификација: доделување на објект на една од двете класи. Во овој случај, резултатот од алгоритмот за машинско учење често станува нумеричка проценка на членството во една од класите, на пример, проценка на веројатност. Сепак, дејствата што се вршат обично се бинарни: ако автомобилот е достапен, тогаш ќе ви дозволиме да го нарачате, а ако не, тогаш нема. Да бидеме конкретни, да го наречеме алгоритам кој произведува нумеричка проценка модел, а класификаторот правило што го доделува на една од двете класи (1 или –1). За да направите класификатор врз основа на проценката на моделот, треба да изберете праг за проценка. Колку точно зависи многу од задачата.

Да претпоставиме дека правиме тест (класификатор) за некоја ретка и опасна болест. Врз основа на резултатите од тестот, или го испраќаме пациентот на подетален преглед или велиме: „Добро, оди дома“. За нас, испраќањето болен дома е многу полошо од непотребното испитување на здрава личност. Односно, сакаме тестот да работи за што е можно повеќе навистина болни луѓе. Оваа вредност се нарекува отповикување =Како Yandex.Taxi бара автомобили кога ги нема. Идеален класификатор има отповикување од 100%. Дегенерирана ситуација е да се испратат сите на преглед, тогаш и отповикувањето ќе биде 100%.

Тоа се случува и обратно. На пример, правиме систем за тестирање за студенти, а има детектор за мамење. Ако одеднаш проверката не работи за некои случаи на мамење, тогаш ова е непријатно, но не и критично. Од друга страна, крајно лошо е неправедно да се обвинуваат студентите за нешто што не го направиле. Односно, за нас е важно меѓу позитивните одговори на класификаторот да има што повеќе точни, можеби на штета на нивниот број. Ова значи дека треба да ја максимизирате прецизноста = Како Yandex.Taxi бара автомобили кога ги нема. Ако активирањето се случи на сите предмети, тогаш прецизноста ќе биде еднаква на фреквенцијата на дефинираната класа во примерокот.

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

Во нашиот проблем ситуацијата е следна. Потсетиме е бројот на нарачки што можеме да ги понудиме, прецизноста е доверливоста на овие нарачки. Вака изгледа кривата на прецизно повлекување на нашиот модел:
Како Yandex.Taxi бара автомобили кога ги нема
Има два екстремни случаи: не дозволувајте никој да нарача и дозволете секому да нарача. Ако не дозволите никого, тогаш отповикувањето ќе биде 0: ние не создаваме нарачки, но ниту еден од нив нема да пропадне. Ако дозволиме сите, тогаш отповикувањето ќе биде 100% (ќе ги добиеме сите можни нарачки), а прецизноста ќе биде 29%, односно 71% од нарачките ќе бидат лоши.

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

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

Повеќе за знаците

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

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

Еден пример за „Несреќен“ е ако има голема побарувачка во центарот во петок навечер. Има многу нарачки, многу луѓе расположени и недоволно возачи за секого. Може да испадне вака: нема соодветни драјвери во пинот. Но, буквално за неколку секунди тие се појавуваат, бидејќи во овој момент на ова место има многу возачи и нивниот статус постојано се менува.

Затоа, различни системски индикатори во близина на точката А се покажаа како добри карактеристики:

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

На крајот на краиштата, колку повеќе автомобили има, толку е поголема веројатноста дека еден од нив ќе стане достапен.
Впрочем, за нас е важно да не се лоцираат само автомобили, туку да се прават и успешни патувања. Затоа, беше можно да се предвиди веројатноста за успешно патување. Но, решивме да не го правиме ова, бидејќи оваа вредност во голема мера зависи од корисникот и возачот.

Моделот алгоритам за обука беше CatBoost. Податоците добиени од експериментот се користени за обука. По имплементацијата, мораше да се соберат податоци за обуката, понекогаш дозволувајќи им на мал број корисници да нарачаат против одлуката на моделот.

Резултатите од

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

Во моментов механизмот е пуштен во употреба во сите градови и земји и со негова помош се случуваат околу 1% од успешните патувања. Покрај тоа, во некои градови со мала густина на автомобили, уделот на таквите патувања достигнува 15%.

Други објави за Такси технологијата

Извор: www.habr.com

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