Hoe Yandex.Taxi siket nei auto's as d'r gjin binne

Hoe Yandex.Taxi siket nei auto's as d'r gjin binne

In goede taksytsjinst moat feilich, betrouber en fluch wêze. De brûker sil net yn details gean: it is wichtich foar him dat hy op de knop "Bestelle" klikt en sa gau mooglik in auto krijt dy't him fan punt A nei punt B bringt. As der gjin auto's yn de buert binne, moat de tsjinst fuortendaliks ynformearje oer dit, sadat de klant net hawwe der wiene falske ferwachtings. Mar as it teken "Gjin auto" te faak ferskynt, dan is it logysk dat in persoan gewoan stopet mei it brûken fan dizze tsjinst en gean nei in konkurrint.

Yn dit artikel wol ik prate oer hoe't wy, mei help fan masine learen, it probleem hawwe oplost fan it sykjen nei auto's yn gebieten mei lege tichtheid (mei oare wurden, wêr't op it earste each gjin auto's binne). En wat kaam der fan.

prehistoarje

Om in taksy te skiljen, docht de brûker in pear ienfâldige stappen, mar wat bart der yn 'e tsjinst?

Brûker Stage Backend Yandex.Taxi
Selektearret it begjinpunt Pin Wy lansearje in ferienfâldige sykopdracht foar kandidaten - pinsykjen. Op grûn fan de fûnebestjoerders wurdt de oankomsttiid foarsein - ETA yn 'e pin. De tanimmende koeffizient op in bepaald punt wurdt berekkene.
Selektearret bestimming, fare, easken Oanbod Wy bouwe in rûte en berekkenje prizen foar alle tariven, rekken hâldend mei de tanimmende koeffizient.
Druk op de knop "Rop in taksy". Oarder Wy begjinne in folsleine syktocht nei de auto. Wy selektearje de meast geskikte sjauffeur en biede him in bestelling oan.

op ETA yn pin, priis berekkening и kieze de meast geskikte bestjoerder wy al skreaun. En dit is in ferhaal oer it finen fan bestjoerders. As in bestelling wurdt oanmakke, komt it sykjen twa kear foar: op de Pin en op de bestelling. It sykjen nei in oarder fynt plak yn twa stadia: werving fan kandidaten en ranglist. Earst wurde beskikbere kandidaatsjauffeurs fûn dy't it tichtst by de dykgrafyk binne. Dan wurde bonussen en filtering tapast. De oerbleaune kandidaten wurde ranglist en de winner krijt in bestellingsoanbod. As hy it iens is, wurdt hy oan 'e oarder tawiisd en giet nei it leveringspunt. As er wegeret, dan komt it oanbod nei de folgjende. As der gjin kandidaten mear binne, begjint it sykjen wer. Dit duorret net mear as trije minuten, wêrnei't de bestelling wurdt annulearre en ferbaarnd.

Sykje op in pin is fergelykber mei sykjen op in bestelling, allinich de folchoarder wurdt net oanmakke en it sykjen sels wurdt mar ien kear útfierd. Ienfâldige ynstellings foar it oantal kandidaten en sykradius wurde ek brûkt. Sokke ferienfâldigingen binne nedich, om't d'r in folchoarder fan grutte mear pins binne as oarders, en sykjen is in frij drege operaasje. It wichtichste punt foar ús ferhaal: as der by it foarsykjen gjin geskikte kandidaten fûn binne op de Pin, dan litte wy jo gjin bestelling pleatse. Alteast sa wie it eartiids.

Dit is wat de brûker seach yn 'e applikaasje:

Hoe Yandex.Taxi siket nei auto's as d'r gjin binne

Sykje nei auto's sûnder auto's

Op in dei kamen wy mei in hypoteze: faaks kin de bestelling yn guon gefallen noch ôfmakke wurde, ek al stiene der gjin auto's op de pin. Tussen de pin en de bestelling giet der ommers wat tiid, en it sykjen nei de oarder is kompleeter en soms ferskate kearen werhelle: yn dizze tiid kinne beskikbere bestjoerders ferskine. Wy wisten ek it tsjinoerstelde: as sjauffeurs op de pin fûn waarden, wie it gjin feit dat se by it bestellen fûn wurde. Soms ferdwine se of elkenien wegeret de bestelling.

Om dizze hypoteze te testen, lansearren wy in eksperimint: wy stopten mei it kontrolearjen fan de oanwêzigens fan auto's tidens in sykjen op in Pin foar in testgroep brûkers, dat wol sizze, se hiene de kâns om in "bestelling sûnder auto's" te meitsjen. It resultaat wie frij ûnferwachts: as de auto net op 'e pin wie, dan waard it yn 29% fan' e gefallen letter fûn - by it sykjen op 'e oarder! Boppedat wiene oarders sûnder auto's net signifikant oars fan reguliere oarders yn termen fan annuleringssifers, wurdearrings en oare kwaliteitsindikatoaren. Boekingen sûnder auto's wiene 5% fan alle boekingen, mar krekt mear as 1% fan alle suksesfolle reizen.

Om te begripen wêr't de útfierers fan dizze oarders wei komme, litte wy nei har statusen sjen by in sykjen op in pin:

Hoe Yandex.Taxi siket nei auto's as d'r gjin binne

  • Beskikber: wie beskikber, mar waard om ien of oare reden net opnommen yn 'e kandidaten, hy wie bygelyks te fier fuort;
  • Op bestelling: wie drok, mar slagge om frij himsels of wurden beskikber foar ketting oarder;
  • Drok: de mooglikheid om oarders te akseptearjen wie útskeakele, mar doe kaam de bestjoerder werom nei de line;
  • Net beskikber: de bestjoerder wie net online, mar hy ferskynde.

Litte wy betrouberens tafoegje

Oanfoljende oarders binne geweldich, mar 29% fan suksesfolle sykopdrachten betsjuttet dat 71% fan 'e tiid de brûker in lange tiid wachte en úteinlik nearne hinne gie. Hoewol't dit is net in minne ding út in systeem effisjinsje eachpunt, it eins jout de brûker falske hope en fergriemen tiid, wêrnei't se wurde oerstjoer en (mooglik) ophâlde mei it brûken fan de tsjinst. Om dit probleem op te lossen, learden wy de kâns te foarsizzen dat in auto op bestelling fûn wurdt.

It skema is as folgjend:

  • De brûker set in pin.
  • Op de pin wurdt socht.
  • As der gjin auto's binne, foarsizze wy: miskien sille se ferskine.
  • En ôfhinklik fan de kâns, wy tastean of net tastean jo te pleatsen in bestelling, mar wy warskôgje jo dat de tichtheid fan auto's yn dit gebiet op dit stuit is leech.

Yn de applikaasje seach it der sa út:

Hoe Yandex.Taxi siket nei auto's as d'r gjin binne

Mei it brûken fan it model kinne jo nije oarders krekter meitsje en minsken net om 'e nocht gerêststelle. Dat is, om de ferhâlding fan betrouberens en it oantal oarders te regeljen sûnder masines mei it precision-recall-model. De betrouberens fan 'e tsjinst beynfloedet de winsk om it produkt troch te gean, d.w.s. op it lêst komt it allegear del op it oantal reizen.

In bytsje oer precision-recallIen fan 'e basistaken yn masine learen is de klassifikaasjetaak: in objekt tawize oan ien fan twa klassen. Yn dit gefal wurdt it resultaat fan it masine-learalgoritme faak in numerike beoardieling fan lidmaatskip yn ien fan 'e klassen, bygelyks in kânsbeoardieling. De aksjes dy't wurde útfierd binne lykwols meast binêr: as de auto beskikber is, dan litte wy jo it bestelle, en sa net, dan sille wy net. Om spesifyk te wêzen, litte wy in algoritme neame dat in numerike skatting in model produsearret, en in klassifikaasje in regel dy't it tawize oan ien fan twa klassen (1 of -1). Om in klassifikaasje te meitsjen basearre op 'e modelbeoardieling, moatte jo in beoardielingsdrompel selektearje. Hoe krekt hinget sterk ôf fan de taak.

Stel dat wy in test (klassifikaasje) dogge foar wat seldsume en gefaarlike sykte. Op grûn fan de testresultaten stjoere wy de pasjint of foar in mear detaillearre ûndersyk, of sizze: "Goed, gean nei hûs." It stjoeren fan in sike thús is foar ús folle slimmer dan it needlottich ûndersykjen fan in sûn persoan. Dat is, wy wolle dat de test wurket foar safolle mooglik echt sike minsken. Dizze wearde hjit recall =Hoe Yandex.Taxi siket nei auto's as d'r gjin binne. In ideale klassifikaasje hat in recall fan 100%. In degenerearre situaasje is om elkenien foar ûndersyk te stjoeren, dan sil de weromrop ek 100% wêze.

It bart ek oarsom. Bygelyks, wy meitsje in test systeem foar studinten, en it hat in cheat detector. As de kontrôle ynienen net wurket foar guon gefallen fan cheat, dan is dit onaangenaam, mar net kritysk. Oan 'e oare kant is it ekstreem slim om studinten ûnrjochtfeardich te beskuldigjen fan wat se net diene. Dat is, it is wichtich foar ús dat ûnder de positive antwurden fan 'e klassifikaasje safolle mooglik korrekt binne, miskien yn it neidiel fan har nûmer. Dit betsjut dat jo moatte maksimalisearje presyzje = Hoe Yandex.Taxi siket nei auto's as d'r gjin binne. As triggering foarkomt op alle objekten, dan sil presyzje gelyk wêze oan de frekwinsje fan 'e definieare klasse yn' e stekproef.

As it algoritme produsearret in numerike kâns wearde, dan troch selektearjen ferskillende drompels, kinne jo berikke ferskillende precision-recall wearden.

Yn ús probleem is de situaasje as folget. Recall is it oantal oarders kinne wy ​​biede, precision is de betrouberens fan dizze oarders. Dit is hoe't de krekte-oprop-kromme fan ús model derút sjocht:
Hoe Yandex.Taxi siket nei auto's as d'r gjin binne
Der binne twa ekstreme gefallen: lit gjinien bestelle en lit elkenien bestelle. As jo ​​gjinien tastean, dan sil recall 0 wêze: wy meitsje gjin oarders, mar gjinien fan har sil mislearje. As wy tastean eltsenien, dan recall sil wêze 100% (wy sille ûntfange alle mooglike oarders), en precision sil wêze 29%, dws 71% fan oarders sille wêze min.

Wy brûkten ferskate parameters fan it begjinpunt as tekens:

  • Tiid / plak.
  • Systeem steat (oantal besette masines fan alle tariven en pins yn 'e omkriten).
  • Sykparameters (radius, oantal kandidaten, beheiningen).

Mear oer de tekens

Konseptueel wolle wy ûnderskied meitsje tusken twa situaasjes:

  • "Djippe bosk" - d'r binne gjin auto's op dit stuit.
  • "Peach" - der binne auto's, mar by it sykjen wiene d'r gjin geskikte.

In foarbyld fan "Peach" is as der freedtejûn in soad fraach is yn it sintrum. D'r binne in protte oarders, in protte minsken dy't wolle, en net genôch sjauffeurs foar elkenien. It kin sa útpakke: der sitte gjin geskikte sjauffeurs yn de pin. Mar letterlik binnen sekonden ferskine se, om't op dit stuit in protte bestjoerders op dit plak binne en har status feroaret konstant.

Dêrom, ferskate systeem yndikatoaren yn 'e buert fan punt A bliken te wêzen goede eigenskippen:

  • Totaal oantal auto's.
  • Oantal auto's op bestelling.
  • It oantal auto's dat net beskikber is foar bestellen yn 'e status "Drokke".
  • Oantal brûkers.

Ommers, hoe mear auto's der binne, hoe wierskynliker it is dat ien fan har beskikber komt.
Yn feite is it wichtich foar ús dat net allinnich auto's lizze, mar ek suksesfolle reizen wurde makke. Dêrom wie it mooglik om de kâns op in suksesfolle reis te foarsizzen. Mar wy besletten dit net te dwaan, om't dizze wearde sterk hinget fan 'e brûker en de bestjoerder.

It model training algoritme wie CatBoost. Gegevens krigen fan it eksperimint waarden brûkt foar training. Nei ymplemintaasje moasten trainingsgegevens sammele wurde, wêrby't soms in lyts oantal brûkers tsjin it beslút fan it model bestelde.

Resultaten

De resultaten fan it eksperimint wiene lykas ferwachte: mei it brûken fan it model kinne jo it oantal suksesfolle reizen signifikant ferheegje troch oarders sûnder auto's, mar sûnder betrouberens te kompromittearjen.

Op it stuit is it meganisme yn alle stêden en lannen lansearre en mei har help komme sa'n 1% fan suksesfolle reizen foar. Boppedat, yn guon stêden mei in lege tichtheid fan auto, it oandiel fan sokke reizen berikt 15%.

Oare berjochten oer Taxi technology

Boarne: www.habr.com

Add a comment