Kako Yandex.Taxi traži automobile kada ih nema

Kako Yandex.Taxi traži automobile kada ih nema

Dobra taksi služba treba biti sigurna, pouzdana i brza. Korisnik neće ulaziti u detalje: važno mu je da klikne na gumb "Naruči" i što je brže moguće dobije automobil koji će ga odvesti od točke A do točke B. Ako u blizini nema automobila, servis bi trebao odmah obavijestiti o tome kako klijent ne bi imao lažna očekivanja. Ali ako se znak "Zabranjeno automobile" pojavljuje prečesto, onda je logično da će osoba jednostavno prestati koristiti ovu uslugu i otići kod konkurencije.

U ovom članku želim govoriti o tome kako smo pomoću strojnog učenja riješili problem traženja automobila u područjima niske gustoće (drugim riječima, tamo gdje, na prvi pogled, nema automobila). I što je iz toga proizašlo.

prapovijest

Za pozivanje taksija korisnik mora napraviti nekoliko jednostavnih koraka, no što se događa unutar usluge?

Korisnik faza Pozadinski Yandex.Taxi
Odabire početnu točku Prikvači Pokrećemo pojednostavljenu pretragu kandidata - pin search. Na temelju pronađenih vozača predviđa se vrijeme dolaska - ETA u pinu. Izračunava se rastući koeficijent u danoj točki.
Odabire odredište, cijenu karte, zahtjeve Ponuda Izrađujemo rutu i izračunavamo cijene za sve tarife, uzimajući u obzir rastući koeficijent.
Pritisne tipku "Pozovi taksi". red Pokrećemo potpunu potragu za automobilom. Odaberemo najprikladnijeg vozača i ponudimo mu narudžbu.

na ETA u iglici, kalkulacija cijene и izbor najprikladnijeg vozača već smo napisali. A ovo je priča o pronalaženju vozača. Kada se kreira narudžba, pretraga se odvija dva puta: na Pin-u i na narudžbi. Traženje naloga odvija se u dvije faze: regrutacija kandidata i rangiranje. Prvo se pronalaze dostupni kandidati za vozače koji su najbliži duž grafikona ceste. Zatim se primjenjuju bonusi i filtriranje. Preostali kandidati se rangiraju, a pobjednik dobiva ponudu za narudžbu. Ako pristane, dodjeljuje se narudžbi i odlazi na mjesto dostave. Ako on odbije, onda ponuda dolazi sljedećem. Ako više nema kandidata, potraga kreće iznova. To ne traje dulje od tri minute, nakon čega se narudžba poništava i spaljuje.

Pretraživanje po Pin-u je slično traženju po nalogu, samo što se nalog ne kreira i samo pretraživanje se izvodi samo jednom. Također se koriste pojednostavljene postavke za broj kandidata i radijus pretraživanja. Takva su pojednostavljenja neophodna jer postoji red veličine više pinova nego redova, a pretraživanje je prilično teška operacija. Ključna stvar za našu priču: ako tijekom preliminarne pretrage na Pin-u nisu pronađeni odgovarajući kandidati, tada vam ne dopuštamo naručivanje. Tako je barem nekada bilo.

Ovo je ono što je korisnik vidio u aplikaciji:

Kako Yandex.Taxi traži automobile kada ih nema

Traži automobile bez automobila

Jednog smo dana došli do hipoteze: možda se u nekim slučajevima narudžba još uvijek može izvršiti, čak i ako na iglici nema automobila. Uostalom, između pina i narudžbe prođe neko vrijeme, a potraga za narudžbom je potpunija i ponekad se ponavlja nekoliko puta: tijekom tog vremena mogu se pojaviti dostupni upravljački programi. Znali smo i suprotno: ako se na pinu nađu drajveri, nije činjenica da će se naći prilikom naručivanja. Ponekad nestanu ili svi odbiju narudžbu.

Kako bismo testirali ovu hipotezu, pokrenuli smo eksperiment: prestali smo provjeravati prisutnost automobila tijekom pretraživanja na Pin-u za testnu grupu korisnika, tj. imali su priliku napraviti "narudžbu bez automobila". Rezultat je bio prilično neočekivan: ako auto nije bio na pinu, onda je u 29% slučajeva pronađen naknadno - prilikom pretraživanja po nalogu! Štoviše, narudžbe bez automobila nisu se značajno razlikovale od uobičajenih narudžbi u smislu stope otkazivanja, ocjena i drugih pokazatelja kvalitete. Rezervacije bez automobila činile su 5% svih rezervacija, ali nešto više od 1% svih uspješnih putovanja.

Da bismo razumjeli odakle dolaze izvršitelji ovih naloga, pogledajmo njihove statuse tijekom pretraživanja na Pin-u:

Kako Yandex.Taxi traži automobile kada ih nema

  • Dostupno: bio je dostupan, ali iz nekog razloga nije bio uključen u kandidate, na primjer, bio je predaleko;
  • Po narudžbi: bio zauzet, ali se uspio osloboditi ili postati dostupan za lančani poredak;
  • Zaposlen: mogućnost prihvaćanja narudžbi bila je onemogućena, ali onda se vozač vratio na liniju;
  • Nije dostupno: vozač nije bio online, ali se pojavio.

Dodajmo pouzdanost

Dodatne narudžbe su sjajne, ali 29% uspješnih pretraga znači da je 71% vremena korisnik dugo čekao i na kraju nije otišao nikamo. Iako to nije loša stvar sa stajališta učinkovitosti sustava, zapravo korisniku daje lažnu nadu i gubi vrijeme, nakon čega se uzruja i (eventualno) prestane koristiti uslugu. Kako bismo riješili ovaj problem, naučili smo predvidjeti vjerojatnost da će se pronaći naručeni automobil.

Shema je sljedeća:

  • Korisnik stavlja pribadaču.
  • Na pinu se vrši pretraga.
  • Ako nema automobila, predviđamo: možda će se pojaviti.
  • I ovisno o vjerojatnosti, dopuštamo ili ne dopuštamo narudžbu, ali upozoravamo da je gustoća automobila na ovom području u ovom trenutku mala.

U prijavi je to izgledalo ovako:

Kako Yandex.Taxi traži automobile kada ih nema

Korištenje modela omogućuje vam točnije stvaranje novih narudžbi i ne uvjeravanje ljudi uzalud. Odnosno, regulirati omjer pouzdanosti i broja narudžbi bez strojeva pomoću modela preciznog opoziva. Pouzdanost usluge utječe na želju za nastavkom korištenja proizvoda, odnosno na kraju se sve svodi na broj putovanja.

Malo o preciznosti-pozivJedan od osnovnih zadataka u strojnom učenju je zadatak klasifikacije: dodjeljivanje objekta jednoj od dvije klase. U tom slučaju rezultat algoritma strojnog učenja često postaje numerička procjena pripadnosti nekoj od klasa, na primjer, procjena vjerojatnosti. Međutim, radnje koje se izvode obično su binarne: ako je automobil dostupan, dopustit ćemo vam da ga naručite, a ako nije, nećemo. Da budemo precizni, nazovimo algoritam koji proizvodi numeričku procjenu modelom, a klasifikator pravilom koje ga dodjeljuje jednoj od dvije klase (1 ili –1). Za izradu klasifikatora na temelju procjene modela potrebno je odabrati prag procjene. Kako točno ovisi o zadatku.

Pretpostavimo da radimo test (klasifikator) za neku rijetku i opasnu bolest. Na temelju nalaza ili šaljemo pacijenta na detaljniji pregled ili kažemo: “Dobro, idi kući”. Za nas je slanje bolesne osobe kući puno gore od bespotrebnog pregleda zdrave osobe. Odnosno, želimo da test djeluje na što više stvarno bolesnih ljudi. Ova se vrijednost naziva recall =Kako Yandex.Taxi traži automobile kada ih nema. Idealan klasifikator ima opoziv od 100%. Degenerirana situacija je poslati sve na pregled, onda će i opoziv biti 100%.

Događa se i obrnuto. Na primjer, radimo sustav za testiranje učenika, a ima detektor varanja. Ako iznenada provjera ne radi za neke slučajeve varanja, onda je to neugodno, ali nije kritično. S druge strane, izuzetno je loše nepravedno optuživati ​​studente za nešto što nisu učinili. Odnosno, važno nam je da među pozitivnim odgovorima klasifikatora bude što više točnih, možda i nauštrb njihova broja. To znači da trebate maksimalno povećati preciznost = Kako Yandex.Taxi traži automobile kada ih nema. Ako se okidanje dogodi na svim objektima, tada će preciznost biti jednaka učestalosti definirane klase u uzorku.

Ako algoritam proizvede numeričku vrijednost vjerojatnosti, tada odabirom različitih pragova možete postići različite vrijednosti preciznosti prisjećanja.

U našem problemu situacija je sljedeća. Opoziv je broj narudžbi koje možemo ponuditi, preciznost je pouzdanost ovih narudžbi. Ovako izgleda krivulja preciznosti prisjećanja našeg modela:
Kako Yandex.Taxi traži automobile kada ih nema
Postoje dva krajnja slučaja: ne dopustiti nikome da naređuje i dopustiti svima da naređuje. Ako nikome ne dopustite, opoziv će biti 0: mi ne stvaramo narudžbe, ali niti jedna neće uspjeti. Ako dopustimo svima, tada će opoziv biti 100% (primit ćemo sve moguće narudžbe), a preciznost će biti 29%, tj. 71% narudžbi će biti loše.

Kao znakove koristili smo različite parametre polazne točke:

  • Vrijeme/mjesto.
  • Stanje sustava (broj zauzetih strojeva svih tarifa i pinova u blizini).
  • Parametri pretraživanja (radijus, broj kandidata, ograničenja).

Više o znakovima

Konceptualno, želimo razlikovati dvije situacije:

  • “Duboka šuma” - u ovom trenutku ovdje nema automobila.
  • "Nesretni" - postoje automobili, ali prilikom pretraživanja nije bilo odgovarajućih.

Jedan primjer "Nesretnog" je ako je velika potražnja u centru u petak navečer. Puno je narudžbi, puno voljnih, a premalo vozača za sve. Može se pokazati ovako: u pinu nema odgovarajućih upravljačkih programa. Ali pojavljuju se doslovno za nekoliko sekundi, jer u ovom trenutku na ovom mjestu ima puno vozača i njihov se status stalno mijenja.

Stoga su se različiti indikatori sustava u blizini točke A pokazali dobrim karakteristikama:

  • Ukupan broj automobila.
  • Broj automobila po narudžbi.
  • Broj automobila nedostupnih za naručivanje u statusu "Zauzeto".
  • Broj korisnika.

Uostalom, što je više automobila, veća je vjerojatnost da će jedan od njih postati dostupan.
Zapravo, važno nam je da se ne samo lociraju automobili, već i da se ostvare uspješna putovanja. Stoga je bilo moguće predvidjeti vjerojatnost uspješnog putovanja. Ali odlučili smo to ne učiniti jer ta vrijednost uvelike ovisi o korisniku i vozaču.

Algoritam obuke modela bio je CatBoost. Podaci dobiveni eksperimentom korišteni su za obuku. Nakon implementacije morali su se prikupiti podaci o obuci, što je ponekad dopuštalo malom broju korisnika da naruče suprotno odluci modela.

Rezultati

Rezultati eksperimenta bili su očekivani: korištenje modela omogućuje vam značajno povećanje broja uspješnih putovanja zbog narudžbi bez automobila, ali bez ugrožavanja pouzdanosti.

Trenutačno je mehanizam pokrenut u svim gradovima i državama i uz njegovu pomoć ostvaruje se oko 1% uspješnih putovanja. Štoviše, u nekim gradovima s malom gustoćom automobila udio takvih putovanja doseže 15%.

Ostali postovi o Taxi tehnologiji

Izvor: www.habr.com

Dodajte komentar