Hoe Yandex.Taxi na motors soek wanneer daar geen is nie

Hoe Yandex.Taxi na motors soek wanneer daar geen is nie

'n Goeie taxidiens moet veilig, betroubaar en vinnig wees. Die gebruiker sal nie in besonderhede ingaan nie: dit is vir hom belangrik dat hy op die "Bestel"-knoppie klik en so vinnig moontlik 'n motor ontvang wat hom van punt A na punt B sal neem. As daar geen motors naby is nie, moet die diens onmiddellik hieroor inlig sodat die kliënt nie daar was valse verwagtinge nie. Maar as die teken "Geen motors" te dikwels verskyn, is dit logies dat 'n persoon eenvoudig ophou om hierdie diens te gebruik en na 'n mededinger gaan.

In hierdie artikel wil ek praat oor hoe ons, met behulp van masjienleer, die probleem opgelos het om motors in lae-digtheid gebiede te soek (met ander woorde, waar daar met die eerste oogopslag geen motors is nie). En wat het daarvan gekom.

voorgeskiedenis

Om 'n taxi te bel, voer die gebruiker 'n paar eenvoudige stappe uit, maar wat gebeur binne die diens?

Gebruiker Verhoog Backend Yandex.Taxi
Kies die beginpunt pen Ons loods 'n vereenvoudigde soektog na kandidate - pensoektog. Gebaseer op die bestuurders wat gevind is, word die aankomstyd voorspel - ETA in die pen. Die toenemende koëffisiënt by 'n gegewe punt word bereken.
Kies bestemming, tarief, vereistes Bied aan Ons bou 'n roete en bereken pryse vir alle tariewe, met inagneming van die toenemende koëffisiënt.
Druk die "Bel 'n taxi"-knoppie Om Ons begin 'n volledige soektog na die motor. Ons kies die mees geskikte bestuurder en bied hom 'n bestelling aan.

op ETA in pen, prys berekening и die mees geskikte bestuurder te kies ons het reeds geskryf. En dit is 'n storie oor die vind van bestuurders. Wanneer 'n bestelling geskep word, vind die soektog twee keer plaas: op die pen en op die bestelling. Die soektog na 'n bestelling vind in twee fases plaas: werwing van kandidate en rangorde. Eerstens word beskikbare kandidaatbestuurders gevind wat die naaste langs die padgrafiek is. Dan word bonusse en filtering toegepas. Die oorblywende kandidate word gerangskik en die wenner ontvang 'n bestellingsaanbod. As hy instem, word hy aan die bestelling toegewys en gaan hy na die afleweringspunt. As hy weier, dan kom die aanbod na die volgende een. As daar nie meer kandidate is nie, begin die soektog weer. Dit duur nie meer as drie minute nie, waarna die bestelling gekanselleer en verbrand word.

Soek op 'n Pin is soortgelyk aan soek op 'n bestelling, net die bestelling word nie geskep nie en die soektog self word slegs een keer uitgevoer. Vereenvoudigde instellings vir die aantal kandidate en soekradius word ook gebruik. Sulke vereenvoudigings is nodig omdat daar 'n orde van grootte meer penne as bestellings is, en soek is 'n taamlik moeilike operasie. Die sleutelpunt vir ons storie: as daar tydens die voorlopige soektog geen geskikte kandidate op die Pin gevind is nie, laat ons jou nie toe om 'n bestelling te plaas nie. Ten minste is dit hoe dit was.

Dit is wat die gebruiker in die toepassing gesien het:

Hoe Yandex.Taxi na motors soek wanneer daar geen is nie

Soek vir motors sonder motors

Ons het eendag met 'n hipotese vorendag gekom: miskien kan die bestelling in sommige gevalle nog afgehandel word, al was daar geen karre op die pen nie. Daar verloop immers 'n tyd tussen die pen en die bestelling, en die soektog na die bestelling is meer volledig en word soms verskeie kere herhaal: gedurende hierdie tyd kan beskikbare bestuurders verskyn. Ons het ook die teendeel geweet: as bestuurders op die pen gevind word, was dit nie 'n feit dat hulle gevind sou word wanneer hulle bestel het nie. Soms verdwyn hulle of almal weier die bevel.

Om hierdie hipotese te toets, het ons 'n eksperiment van stapel gestuur: ons het opgehou om die teenwoordigheid van motors te kontroleer tydens 'n soektog op 'n Pin vir 'n toetsgroep gebruikers, dit wil sê, hulle het die geleentheid gehad om 'n "bestelling sonder motors" te maak. Die resultaat was nogal onverwags: as die kar nie op die pen was nie, dan is dit in 29% van die gevalle later gevind - wanneer op die bestelling gesoek is! Boonop het bestellings sonder motors nie beduidend verskil van gewone bestellings in terme van kansellasiekoerse, graderings en ander kwaliteit-aanwysers nie. Besprekings sonder motors het 5% van alle besprekings uitgemaak, maar net meer as 1% van alle suksesvolle reise.

Om te verstaan ​​waar die eksekuteurs van hierdie bevele vandaan kom, kom ons kyk na hul status tydens 'n soektog op 'n speld:

Hoe Yandex.Taxi na motors soek wanneer daar geen is nie

  • Beskikbaar: beskikbaar was, maar om een ​​of ander rede nie by die kandidate ingesluit is nie, hy was byvoorbeeld te ver weg;
  • Op bestelling: besig was, maar daarin geslaag om homself te bevry of beskikbaar te word vir ketting bestelling;
  • Besig: die vermoë om bestellings te aanvaar is gedeaktiveer, maar toe het die bestuurder teruggekeer na die lyn;
  • Nie beskikbaar nie: die bestuurder was nie aanlyn nie, maar hy het verskyn.

Kom ons voeg betroubaarheid by

Bykomende bestellings is wonderlik, maar 29% van suksesvolle soektogte beteken dat die gebruiker 71% van die tyd lank gewag het en uiteindelik nêrens heen gegaan het nie. Alhoewel dit nie 'n slegte ding is uit 'n stelseldoeltreffendheidsoogpunt nie, gee dit die gebruiker eintlik valse hoop en mors tyd, waarna hulle ontsteld raak en (moontlik) ophou om die diens te gebruik. Om hierdie probleem op te los, het ons geleer om die waarskynlikheid te voorspel dat 'n motor op bestelling gevind sal word.

Die skema is soos volg:

  • Die gebruiker sit 'n pen.
  • ’n Soektog word op die pen uitgevoer.
  • As daar geen motors is nie, voorspel ons: miskien sal hulle verskyn.
  • En afhangende van die waarskynlikheid, laat ons u toe of laat u nie toe om 'n bestelling te plaas nie, maar ons waarsku u dat die digtheid van motors in hierdie gebied op hierdie tydstip laag is.

In die aansoek het dit so gelyk:

Hoe Yandex.Taxi na motors soek wanneer daar geen is nie

Deur die model te gebruik, kan jy nuwe bestellings meer akkuraat skep en nie mense tevergeefs gerusstel nie. Dit wil sê om die verhouding van betroubaarheid en die aantal bestellings te reguleer sonder masjiene wat die presisie-herroepmodel gebruik. Die betroubaarheid van die diens beïnvloed die begeerte om voort te gaan om die produk te gebruik, dit wil sê op die ou end kom dit alles neer op die aantal reise.

'n Bietjie oor presisie-herroepingEen van die basiese take in masjienleer is die klassifikasietaak: die toewys van 'n voorwerp aan een van twee klasse. In hierdie geval word die resultaat van die masjienleeralgoritme dikwels 'n numeriese assessering van lidmaatskap in een van die klasse, byvoorbeeld 'n waarskynlikheidsbeoordeling. Die aksies wat uitgevoer word, is egter gewoonlik binêr: as die motor beskikbaar is, dan laat ons jou dit bestel, en indien nie, dan sal ons nie. Om spesifiek te wees, kom ons noem 'n algoritme wat 'n numeriese skatting produseer 'n model, en 'n klassifiseerder 'n reël wat dit toeken aan een van twee klasse (1 of -1). Om 'n klassifiseerder op grond van die modelassessering te maak, moet jy 'n assesseringsdrempel kies. Hoe presies hang baie van die taak af.

Gestel ons doen 'n toets (klassifiseerder) vir een of ander seldsame en gevaarlike siekte. Op grond van die toetsresultate stuur ons die pasiënt óf vir 'n meer gedetailleerde ondersoek, óf sê: "Goed, gaan huis toe." Vir ons is dit baie erger om 'n siek persoon huis toe te stuur as om 'n gesonde persoon onnodig te ondersoek. Dit wil sê, ons wil hê dat die toets vir soveel as moontlik werklik siek mense moet werk. Hierdie waarde word herroep = genoemHoe Yandex.Taxi na motors soek wanneer daar geen is nie. 'n Ideale klassifiseerder het 'n herroeping van 100%. ’n Ontaarde situasie is om almal vir ondersoek te stuur, dan sal die herroeping ook 100% wees.

Dit gebeur ook andersom. Ons maak byvoorbeeld 'n toetsstelsel vir studente, en dit het 'n bedrogverklikker. As die tjek skielik nie werk vir sommige gevalle van bedrog nie, dan is dit onaangenaam, maar nie krities nie. Aan die ander kant is dit uiters sleg om studente onregverdig te beskuldig van iets wat hulle nie gedoen het nie. Dit wil sê, dit is vir ons belangrik dat daar onder die positiewe antwoorde van die klassifiseerder soveel as moontlik korrektes is, miskien tot nadeel van hul getal. Dit beteken dat jy akkuraatheid moet maksimeer = Hoe Yandex.Taxi na motors soek wanneer daar geen is nie. As sneller op alle voorwerpe plaasvind, sal presisie gelyk wees aan die frekwensie van die gedefinieerde klas in die monster.

As die algoritme 'n numeriese waarskynlikheidswaarde produseer, kan u verskillende presisie-herroepingswaardes bereik deur verskillende drempels te kies.

In ons probleem is die situasie soos volg. Herroeping is die aantal bestellings wat ons kan aanbied, akkuraatheid is die betroubaarheid van hierdie bestellings. Dit is hoe die presisie-herroepkurwe van ons model lyk:
Hoe Yandex.Taxi na motors soek wanneer daar geen is nie
Daar is twee uiterste gevalle: laat niemand toe om te bestel nie en laat almal toe om te bestel. As jy niemand toelaat nie, sal herroeping 0 wees: ons skep nie bestellings nie, maar nie een van hulle sal misluk nie. As ons almal toelaat, sal herroeping 100% wees (ons sal alle moontlike bestellings ontvang), en akkuraatheid sal 29% wees, dit wil sê 71% van bestellings sal sleg wees.

Ons het verskeie parameters van die beginpunt as tekens gebruik:

  • Tyd/plek.
  • Stelseltoestand (aantal besette masjiene van alle tariewe en penne in die omgewing).
  • Soekparameters (radius, aantal kandidate, beperkings).

Meer oor die tekens

Konseptueel wil ons tussen twee situasies onderskei:

  • "Diep woud" - daar is tans geen motors hier nie.
  • "Ongelukkig" - daar is motors, maar tydens soek was daar nie enige geskikte nie.

Een voorbeeld van “Ongelukkig” is as daar Vrydagaand baie aanvraag in die sentrum is. Daar is baie bestellings, baie mense wat gewillig is, en nie genoeg bestuurders vir almal nie. Dit kan so uitdraai: daar is geen geskikte drywers in die pen nie. Maar letterlik binne sekondes verskyn hulle, want op hierdie tydstip is daar baie bestuurders in hierdie plek en hul status verander voortdurend.

Daarom het verskeie stelselaanwysers in die omgewing van punt A goeie kenmerke geblyk:

  • Totale aantal motors.
  • Aantal motors op bestelling.
  • Die aantal motors wat nie beskikbaar is vir bestelling in die "Besig"-status.
  • Aantal gebruikers.

Hoe meer motors daar is, hoe groter is die kans dat een van hulle beskikbaar sal wees.
Trouens, dit is vir ons belangrik dat nie net motors opgespoor word nie, maar ook suksesvolle reise gemaak word. Daarom was dit moontlik om die waarskynlikheid van 'n suksesvolle reis te voorspel. Maar ons het besluit om dit nie te doen nie, want hierdie waarde hang grootliks af van die gebruiker en bestuurder.

Die model opleiding algoritme was kat hupstoot. Data verkry uit die eksperiment is vir opleiding gebruik. Na implementering moes opleidingsdata ingesamel word, wat soms 'n klein aantal gebruikers toegelaat het om teen die model se besluit te bestel.

Resultate van

Die resultate van die eksperiment was soos verwag: deur die model te gebruik, kan u die aantal suksesvolle reise aansienlik verhoog as gevolg van bestellings sonder motors, maar sonder om betroubaarheid in te boet.

Op die oomblik is die meganisme in alle stede en lande bekendgestel en met die hulp daarvan vind ongeveer 1% van suksesvolle reise plaas. Boonop, in sommige stede met 'n lae digtheid van motors, bereik die aandeel van sulke reise 15%.

Ander plasings oor Taxi-tegnologie

Bron: will.com

Voeg 'n opmerking