Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole

Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole

Hyvän taksipalvelun tulee olla turvallinen, luotettava ja nopea. Käyttäjä ei mene yksityiskohtiin: hänelle on tärkeää, että hän klikkaa ”Tilaa”-painiketta ja saa mahdollisimman nopeasti auton, joka vie hänet paikasta A paikkaan B. Jos lähistöllä ei ole autoja, palvelun tulee Ilmoita tästä välittömästi, jotta asiakkaalla ei ole vääriä odotuksia. Mutta jos "Ei autoja" -merkki ilmestyy liian usein, on loogista, että henkilö yksinkertaisesti lopettaa tämän palvelun käytön ja menee kilpailijan luo.

Tässä artikkelissa haluan puhua siitä, kuinka koneoppimisen avulla ratkaisimme ongelman etsiä autoja harvaan asutuilta alueilta (toisin sanoen, missä ensi silmäyksellä ei ole autoja). Ja mitä siitä tuli.

esihistoria

Soittaakseen taksin käyttäjä suorittaa muutaman yksinkertaisen vaiheen, mutta mitä palvelun sisällä tapahtuu?

Käyttäjä vaihe Taustajärjestelmä Yandex.Taxi
Valitsee aloituspisteen tappi Aloitamme yksinkertaistetun ehdokkaiden haun - pin-haku. Löydettyjen kuljettajien perusteella ennustetaan saapumisaika - ETA pinnoissa. Lasketaan kasvava kerroin tietyssä pisteessä.
Valitsee määränpään, hinnan ja vaatimukset Tarjous Rakennamme reitin ja laskemme hinnat kaikille tariffeille nouseva kerroin huomioon ottaen.
Paina "Soita taksi" -painiketta järjestys Aloitamme auton täydellisen haun. Valitsemme sopivimman kuljettajan ja tarjoamme hänelle tilauksen.

Про ETA pinnoissa, hinnan laskelma и valita sopivin kuljettaja kirjoitimme jo. Ja tämä on tarina kuljettajien löytämisestä. Kun tilaus luodaan, haku suoritetaan kahdesti: Pin-koodissa ja tilauksessa. Tilauksen haku tapahtuu kahdessa vaiheessa: ehdokkaiden rekrytointi ja ranking. Ensin löydetään käytettävissä olevat kuljettajaehdokkaat, jotka ovat lähimpänä tiekaaviota. Sitten käytetään bonuksia ja suodatusta. Loput ehdokkaat asetetaan paremmuusjärjestykseen ja voittaja saa tilaustarjouksen. Jos hän suostuu, hänet määrätään tilaukseen ja hän menee toimituspisteeseen. Jos hän kieltäytyy, tarjous tulee seuraavalle. Jos ehdokkaita ei ole enempää, haku alkaa uudelleen. Tämä kestää enintään kolme minuuttia, jonka jälkeen tilaus peruutetaan ja poltetaan.

Pin-haku on samanlainen kuin tilaushaku, vain tilausta ei luoda ja itse haku suoritetaan vain kerran. Myös ehdokkaiden lukumäärän ja hakusäteen yksinkertaistettuja asetuksia käytetään. Sellaiset yksinkertaistukset ovat välttämättömiä, koska nastoja on suuruusluokkaa enemmän kuin käskyjä, ja haku on melko vaikea operaatio. Tarinamme avainkohta: jos alustavan haun aikana ei löytynyt sopivia ehdokkaita Pinistä, emme salli sinun tehdä tilausta. Näin se ainakin oli ennen.

Tämän käyttäjä näki sovelluksessa:

Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole

Etsi autoja ilman autoja

Eräänä päivänä keksimme hypoteesin: ehkä joissain tapauksissa tilaus voidaan silti suorittaa, vaikka nastalla ei olisi autoja. Loppujen lopuksi nastan ja tilauksen välillä kuluu jonkin aikaa, ja tilauksen haku on täydellisempää ja joskus toistuu useita kertoja: tänä aikana käytettävissä olevia ohjaimia saattaa ilmestyä. Tiesimme myös päinvastaisen: jos neulasta löytyi kuljettajia, ei ollut tosiasia, että ne löytyisivät tilattaessa. Joskus ne katoavat tai kaikki kieltäytyvät tilauksesta.

Tämän hypoteesin testaamiseksi käynnistimme kokeen: lopetimme autojen olemassaolon tarkistamisen Pin-haun aikana testiryhmälle käyttäjille, eli heillä oli mahdollisuus tehdä "tilaus ilman autoja". Tulos oli melko odottamaton: jos auto ei ollut tapilla, niin 29% tapauksista se löydettiin myöhemmin - tilauksesta haettaessa! Lisäksi tilaukset ilman autoja eivät eronneet merkittävästi tavallisista tilauksista peruutusasteiden, luokituksen ja muiden laatuindikaattorien suhteen. Ilman autoa tehtyjen varausten osuus kaikista varauksista oli 5 %, mutta onnistuneista matkoista hieman yli 1 %.

Ymmärtääksemme, mistä näiden määräysten toteuttajat tulevat, katsotaanpa heidän tilojaan Pin-haun aikana:

Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole

  • Saatavilla: oli saatavilla, mutta jostain syystä ei ollut mukana ehdokkaissa, esimerkiksi hän oli liian kaukana;
  • Tilauksesta: oli kiireinen, mutta onnistui vapauttamaan itsensä tai olemaan käytettävissä ketjun järjestys;
  • Kiireinen: tilausten vastaanottaminen poistettiin käytöstä, mutta sitten kuljettaja palasi linjalle;
  • Ei saatavilla: kuljettaja ei ollut verkossa, mutta hän ilmestyi.

Lisätään vielä luotettavuus

Lisätilaukset ovat mahtavia, mutta 29 % onnistuneista hauista tarkoittaa, että 71 % ajasta käyttäjä odotti pitkään ja päätyi mihinkään. Vaikka tämä ei ole huono asia järjestelmän tehokkuuden kannalta, se antaa käyttäjälle itse asiassa väärää toivoa ja hukkaa aikaa, jonka jälkeen hän suuttuu ja (mahdollisesti) lopettaa palvelun käytön. Tämän ongelman ratkaisemiseksi opimme ennustamaan tilatun auton löytymisen todennäköisyyttä.

Kaava on seuraava:

  • Käyttäjä laittaa pin.
  • Neulasta suoritetaan haku.
  • Jos autoja ei ole, ennustamme: ehkä ne ilmestyvät.
  • Ja todennäköisyydestä riippuen sallimme tai emme salli tilauksen tekemistä, mutta varoitamme, että autojen tiheys tällä alueella on tällä hetkellä alhainen.

Sovelluksessa se näytti tältä:

Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole

Mallin avulla voit luoda uusia tilauksia tarkemmin etkä rauhoita ihmisiä turhaan. Eli säädellä luotettavuuden suhdetta ja tilausten määrää ilman koneita käyttämällä tarkkuuskutsumallia. Palvelun luotettavuus vaikuttaa haluun jatkaa tuotteen käyttöä, eli loppujen lopuksi kaikki riippuu matkojen määrästä.

Hieman tarkkuudesta-muistamistaYksi koneoppimisen perustehtävistä on luokittelutehtävä: objektin määrittäminen johonkin kahdesta luokasta. Tällöin koneoppimisalgoritmin tuloksesta tulee usein numeerinen arvio johonkin luokkaan kuulumisesta, esimerkiksi todennäköisyysarviointi. Suoritettavat toiminnot ovat kuitenkin yleensä binaarisia: jos auto on saatavilla, annamme sinun tilata sen, ja jos ei, emme. Tarkemmin sanottuna kutsutaan numeerisen estimaatin tuottavaa algoritmia malliksi ja luokittelijaa säännöksi, joka määrittää sen jompaankumpaan kahdesta luokasta (1 tai –1). Luokituksen tekemiseksi mallin arvioinnin perusteella sinun on valittava arviointikynnys. Kuinka tarkalleen, riippuu suuresti tehtävästä.

Oletetaan, että teemme testiä (luokittajaa) jollekin harvinaiselle ja vaaralliselle sairaudelle. Testitulosten perusteella joko lähetämme potilaan tarkempaan tutkimukseen tai sanomme: "Hyvä, mene kotiin." Meille sairaan kotiin lähettäminen on paljon pahempaa kuin terveen ihmisen turha tutkiminen. Toisin sanoen haluamme testin toimivan mahdollisimman monelle todella sairaalle ihmiselle. Tätä arvoa kutsutaan muistiksi =Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole. Ihanteellisella luokittelijalla on 100 %:n palautus. Degeneroitunut tilanne on lähettää kaikki tutkimuksiin, silloin myös takaisinkutsu on 100%.

Se tapahtuu myös toisinpäin. Teemme esimerkiksi opiskelijoille testausjärjestelmän, jossa on huijausilmaisin. Jos yhtäkkiä tarkistus ei toimi joissakin huijaustapauksissa, tämä on epämiellyttävää, mutta ei kriittinen. Toisaalta on äärimmäisen huonoa syyttää opiskelijoita epäreilusta asiasta, jota he eivät ole tehneet. Toisin sanoen meille on tärkeää, että luokittelijan positiivisten vastausten joukossa on mahdollisimman paljon oikeita, ehkä niiden lukumäärän kustannuksella. Tämä tarkoittaa, että sinun on maksimoitava tarkkuus = Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole. Jos liipaisu tapahtuu kaikissa objekteissa, tarkkuus on yhtä suuri kuin määritetyn luokan taajuus näytteessä.

Jos algoritmi tuottaa numeerisen todennäköisyysarvon, niin valitsemalla eri kynnysarvot voit saavuttaa erilaisia ​​tarkkuus-palautusarvoja.

Ongelmamme kohdalla tilanne on seuraava. Recall on tilausten määrä, jonka voimme tarjota, tarkkuus on näiden tilausten luotettavuus. Tältä mallimme tarkkuus-palautuskäyrä näyttää:
Kuinka Yandex.Taxi etsii autoja, kun niitä ei ole
On olemassa kaksi ääritapausta: älä anna kenenkään tilata ja anna kaikkien tilata. Jos et salli ketään, palautus on 0: emme luo tilauksia, mutta mikään niistä ei epäonnistu. Jos sallimme kaikki, takaisinveto on 100% (saamme kaikki mahdolliset tilaukset) ja tarkkuus on 29%, eli 71% tilauksista on huonoja.

Käytimme erilaisia ​​lähtöpisteen parametreja merkkeinä:

  • Aika/paikka.
  • Järjestelmän tila (kaikkien tariffien käytössä olevien koneiden määrä ja nastat lähistöllä).
  • Hakuparametrit (säde, ehdokkaiden määrä, rajoitukset).

Lisää merkeistä

Käsitteellisesti haluamme erottaa kaksi tilannetta:

  • "Syvä metsä" - täällä ei ole tällä hetkellä autoja.
  • "Epäonninen" - autoja on, mutta etsiessä ei löytynyt sopivia.

Yksi esimerkki "Unluckysta" on, jos keskustassa on paljon kysyntää perjantai-iltana. Tilauksia on paljon, halukkaita ihmisiä, eikä kuljettajia riitä kaikille. Se voi käydä näin: nastassa ei ole sopivia ohjaimia. Mutta kirjaimellisesti sekunneissa ne ilmestyvät, koska tällä hetkellä tässä paikassa on paljon kuljettajia ja heidän tilansa muuttuu jatkuvasti.

Siksi erilaiset järjestelmäindikaattorit pisteen A läheisyydessä osoittautuivat hyviksi ominaisuuksiksi:

  • Autojen kokonaismäärä.
  • Tilattujen autojen määrä.
  • Autojen määrä, jotka eivät ole tilattavissa "Varattu"-tilassa.
  • Käyttäjien lukumäärä.

Loppujen lopuksi, mitä enemmän autoja on, sitä todennäköisemmin yksi niistä tulee saataville.
Itse asiassa meille on tärkeää, että autojen paikantamisen lisäksi tehdään myös onnistuneita matkoja. Tästä syystä oli mahdollista ennustaa onnistuneen matkan todennäköisyys. Mutta päätimme olla tekemättä tätä, koska tämä arvo riippuu suuresti käyttäjästä ja kuljettajasta.

Mallin harjoitusalgoritmi oli CatBoost. Kokeesta saatuja tietoja käytettiin koulutukseen. Toteutuksen jälkeen jouduttiin keräämään koulutusdataa, jolloin joskus pieni määrä käyttäjiä sai tilata mallin päätöstä vastaan.

Tulokset

Kokeen tulokset olivat odotetusti: mallin avulla voit merkittävästi lisätä onnistuneiden matkojen määrää ilman autoja tehtyjen tilausten vuoksi, mutta luotettavuudesta tinkimättä.

Tällä hetkellä mekanismi on käynnistetty kaikissa kaupungeissa ja maissa ja sen avulla onnistuneista matkoista tapahtuu noin 1 %. Lisäksi joissakin kaupungeissa, joissa autotiheys on alhainen, tällaisten matkojen osuus on 15%.

Muita viestejä taksiteknologiasta

Lähde: will.com

Lisää kommentti