Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav

Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav

Labam taksometra pakalpojumam jābÅ«t droÅ”am, uzticamam un ātram. Lietotājs neiedziļinās detaļās: viņam ir svarÄ«gi, lai viņŔ noklikŔķinātu uz pogas ā€œPasÅ«tÄ«tā€ un pēc iespējas ātrāk saņemtu automaŔīnu, kas nogādās no punkta A uz punktu B. Ja tuvumā nav nevienas automaŔīnas, servisam vajadzētu nekavējoties informēt par to, lai klientam nebÅ«tu nepatiesas cerÄ«bas. Bet, ja zÄ«me ā€œAutomaŔīnām aizliegtsā€ parādās pārāk bieži, tad loÄ£iski, ka cilvēks vienkārÅ”i pārtrauks lietot Å”o pakalpojumu un dosies pie konkurenta.

Å ajā rakstā es vēlos runāt par to, kā, izmantojot maŔīnmācÄ«Å”anos, mēs atrisinājām automaŔīnu meklÄ“Å”anu zema blÄ«vuma apgabalos (citiem vārdiem sakot, kur, no pirmā acu uzmetiena, nav automaŔīnu). Un kas no tā sanāca.

Aizvēsture

Lai izsauktu taksometru, lietotājs veic dažas vienkārÅ”as darbÄ«bas, bet kas notiek pakalpojuma iekÅ”ienē?

Lietotājs Posms Aizmugursistēma Yandex.Taxi
Izvēlas sākuma punktu Pin Sākam vienkārÅ”otu kandidātu meklÄ“Å”anu ā€“ piespraudes meklÄ“Å”anu. Pamatojoties uz atrastajiem vadÄ«tājiem, tiek prognozēts ieraÅ”anās laiks - ETA pin. Tiek aprēķināts pieaugoÅ”ais koeficients noteiktā punktā.
Izvēlas galamērÄ·i, tarifu, prasÄ«bas Piedāvājums IzbÅ«vējam marÅ”rutu un aprēķinām cenas visiem tarifiem, ņemot vērā pieaugoÅ”o koeficientu.
Nospiež pogu ā€œIzsaukt taksometruā€. PasÅ«tÄ«Å”ana Sākam pilnu automaŔīnas meklÄ“Å”anu. Izvēlamies piemērotāko vadÄ«tāju un piedāvājam viņam pasÅ«tÄ«jumu.

uz ETA tapā, cenas aprēķins Šø izvēloties piemērotāko vadÄ«tāju mēs jau rakstÄ«jām. Un Å”is ir stāsts par vadÄ«tāju atraÅ”anu. Kad pasÅ«tÄ«jums ir izveidots, meklÄ“Å”ana notiek divas reizes: uz Pin un uz pasÅ«tÄ«juma. PasÅ«tÄ«juma meklÄ“Å”ana notiek divos posmos: kandidātu atlase un ranžēŔana. Pirmkārt, tiek atrasti pieejamie autovadÄ«tāju kandidāti, kuri ir vistuvāk ceļa diagrammai. Pēc tam tiek piemēroti bonusi un filtrÄ“Å”ana. Pārējie kandidāti tiek sarindoti, un uzvarētājs saņem pasÅ«tÄ«juma piedāvājumu. Ja viņŔ piekrÄ«t, viņŔ tiek norÄ«kots un dodas uz piegādes punktu. Ja viņŔ atsakās, tad piedāvājums nāk nākamajam. Ja kandidātu vairs nav, meklÄ“Å”ana sākas no jauna. Tas ilgst ne vairāk kā trÄ«s minÅ«tes, pēc tam pasÅ«tÄ«jums tiek atcelts un sadedzināts.

MeklÄ“Å”ana uz pin ir lÄ«dzÄ«ga meklÄ“Å”anai pēc pasÅ«tÄ«juma, tikai pasÅ«tÄ«jums netiek izveidots un pati meklÄ“Å”ana tiek veikta tikai vienu reizi. Tiek izmantoti arÄ« vienkārÅ”oti kandidātu skaita un meklÄ“Å”anas rādiusa iestatÄ«jumi. Šādi vienkārÅ”ojumi ir nepiecieÅ”ami, jo tapas ir vairāk nekā pasÅ«tÄ«jumu, un meklÄ“Å”ana ir diezgan sarežģīta darbÄ«ba. MÅ«su stāsta galvenais punkts: ja sākotnējās meklÄ“Å”anas laikā uz Pin netika atrasti piemēroti kandidāti, tad mēs neļaujam veikt pasÅ«tÄ«jumu. Vismaz tā tas bija agrāk.

Lūk, ko lietotājs redzēja lietojumprogrammā:

Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav

Meklējiet automaŔīnas bez automaŔīnām

Kādu dienu mēs izvirzÄ«jām hipotēzi: iespējams, dažos gadÄ«jumos pasÅ«tÄ«jumu joprojām var izpildÄ«t, pat ja uz tapas nebija automaŔīnu. Galu galā starp tapu un pasÅ«tÄ«jumu paiet zināms laiks, un pasÅ«tÄ«juma meklÄ“Å”ana ir pilnÄ«gāka un dažreiz atkārtojas vairākas reizes: Å”ajā laikā var parādÄ«ties pieejamie draiveri. Mēs zinājām arÄ« pretējo: ja uz piespraudes tika atrasti vadÄ«tāji, tas nebija fakts, ka tie tiks atrasti, pasÅ«tot. Dažreiz viņi pazÅ«d vai visi atsakās no pasÅ«tÄ«juma.

Lai pārbaudÄ«tu Å”o hipotēzi, mēs uzsākām eksperimentu: mēs pārstājām pārbaudÄ«t automaŔīnu klātbÅ«tni, kad tika meklēta lietotāju testa grupa PIN, t.i., viņiem bija iespēja veikt ā€œpasÅ«tÄ«jumu bez automaŔīnāmā€. Rezultāts bija diezgan negaidÄ«ts: ja auto nebija uz tapas, tad 29% gadÄ«jumu tika atrasts vēlāk - meklējot pēc pasÅ«tÄ«juma! Turklāt pasÅ«tÄ«jumi bez automaŔīnām bÅ«tiski neatŔķīrās no parastajiem pasÅ«tÄ«jumiem atcelÅ”anas biežuma, reitingu un citu kvalitātes rādÄ«tāju ziņā. Rezervācijas bez automaŔīnām veidoja 5% no visām rezervācijām, bet nedaudz vairāk par 1% no visiem veiksmÄ«gajiem braucieniem.

Lai saprastu, no kurienes nāk Å”o rÄ«kojumu izpildÄ«tāji, apskatÄ«sim viņu statusus, veicot meklÄ“Å”anu Pin:

Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav

  • Pieejams: bija pieejams, bet nez kāpēc netika iekļauts kandidātos, piemēram, bija pārāk tālu;
  • Pēc pasÅ«tÄ«juma: bija aizņemts, bet paguva atbrÄ«voties vai kļūt pieejams ķēdes pasÅ«tÄ«jums;
  • Aizņemts: tika atslēgta iespēja pieņemt pasÅ«tÄ«jumus, bet pēc tam vadÄ«tājs atgriezās rindā;
  • Nav pieejams: Å”oferis nebija tieÅ”saistē, bet parādÄ«jās.

Pievienosim uzticamību

Papildu pasÅ«tÄ«jumi ir lieliski, taču 29% veiksmÄ«gu meklējumu nozÄ«mē, ka 71% gadÄ«jumu lietotājs ilgi gaidÄ«ja un nekur nenonāca. Lai gan no sistēmas efektivitātes viedokļa tas nav nekas slikts, patiesÄ«bā tas sniedz lietotājam nepatiesas cerÄ«bas un lieki tērē laiku, pēc kura viņŔ sadusmo un (iespējams) pārtrauc pakalpojuma lietoÅ”anu. Lai atrisinātu Å”o problēmu, mēs iemācÄ«jāmies paredzēt varbÅ«tÄ«bu, ka tiks atrasta automaŔīna pēc pasÅ«tÄ«juma.

Shēma ir Ŕāda:

  • Lietotājs ieliek spraudÄ«ti.
  • Tiek veikta piespraudes meklÄ“Å”ana.
  • Ja maŔīnu nebÅ«s, prognozējam: varbÅ«t parādÄ«sies.
  • Un atkarÄ«bā no varbÅ«tÄ«bas mēs atļaujam vai neatļaujam veikt pasÅ«tÄ«jumu, taču brÄ«dinam, ka automaŔīnu blÄ«vums Å”ajā rajonā Å”obrÄ«d ir zems.

Pieteikumā tas izskatījās Ŕādi:

Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav

Modeļa izmantoÅ”ana ļauj precÄ«zāk izveidot jaunus pasÅ«tÄ«jumus un nemierināt cilvēkus veltÄ«gi. Tas ir, lai regulētu uzticamÄ«bas attiecÄ«bu un pasÅ«tÄ«jumu skaitu bez iekārtām, izmantojot precÄ«zās atsaukÅ”anas modeli. Pakalpojuma uzticamÄ«ba ietekmē vēlmi turpināt lietot preci, t.i., galu galā viss ir atkarÄ«gs no braucienu skaita.

Mazliet par precizitāti-atgādināŔanuViens no maŔīnmācÄ«bas pamatuzdevumiem ir klasifikācijas uzdevums: objekta pieŔķirÅ”ana vienai no divām klasēm. Å ajā gadÄ«jumā maŔīnmācÄ«Å”anās algoritma rezultāts bieži kļūst par skaitlisku novērtējumu dalÄ«bai kādā no klasēm, piemēram, varbÅ«tÄ«bas novērtējumu. Tomēr darbÄ«bas, kas tiek veiktas, parasti ir bināras: ja automaŔīna ir pieejama, mēs to ļausim jums pasÅ«tÄ«t, un, ja nē, tad ne. Lai bÅ«tu precÄ«zāk, nosauksim algoritmu, kas rada skaitlisku aprēķinu, par modeli un klasifikatoru par noteikumu, kas to pieŔķir vienai no divām klasēm (1 vai ā€“1). Lai izveidotu klasifikatoru, pamatojoties uz modeļa novērtējumu, jums ir jāizvēlas novērtējuma slieksnis. Cik tieÅ”i tas ir atkarÄ«gs no uzdevuma.

Pieņemsim, ka mēs veicam testu (klasifikatoru) par kādu retu un bÄ«stamu slimÄ«bu. Pamatojoties uz testa rezultātiem, mēs vai nu nosÅ«tām pacientu uz detalizētāku izmeklÄ“Å”anu, vai arÄ« sakām: "Labi, brauciet mājās." Mums slima cilvēka sÅ«tÄ«Å”ana mājās ir daudz sliktāka nekā vesela cilvēka nevajadzÄ«ga apskate. Tas ir, mēs vēlamies, lai tests derētu pēc iespējas vairāk patieŔām slimu cilvēku. Å o vērtÄ«bu sauc par atsaukÅ”anu =Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav. Ideālam klasifikatoram ir 100% atsaukÅ”ana. DeÄ£enerēta situācija ir sÅ«tÄ«t visus uz ekspertÄ«zi, tad arÄ« atsaukÅ”ana bÅ«s 100%.

Tas notiek arÄ« otrādi. Piemēram, mēs veidojam testÄ“Å”anas sistēmu studentiem, un tai ir krāpÅ”anās detektors. Ja pēkŔņi dažos krāpÅ”anās gadÄ«jumos pārbaude nedarbojas, tas ir nepatÄ«kami, bet ne kritiski. No otras puses, ir ārkārtÄ«gi slikti negodÄ«gi apsÅ«dzēt studentus par to, ko viņi nav izdarÄ«juÅ”i. Tas ir, mums ir svarÄ«gi, lai starp klasifikatora pozitÄ«vajām atbildēm bÅ«tu pēc iespējas vairāk pareizo, iespējams, kaitējot to skaitam. Tas nozÄ«mē, ka jums ir jāpalielina precizitāte = Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav. Ja aktivizÄ“Å”ana notiek visos objektos, tad precizitāte bÅ«s vienāda ar definētās klases biežumu paraugā.

Ja algoritms rada skaitlisku varbÅ«tÄ«bas vērtÄ«bu, tad, izvēloties dažādus sliekŔņus, jÅ«s varat sasniegt dažādas precizitātes-atsauces vērtÄ«bas.

MÅ«su problēmā situācija ir Ŕāda. Atsaukt ir pasÅ«tÄ«jumu skaits, ko varam piedāvāt, precizitāte ir Å”o pasÅ«tÄ«jumu uzticamÄ«ba. Šādi izskatās mÅ«su modeļa precizitātes-atgādināŔanas lÄ«kne:
Kā Yandex.Taxi meklē automaŔīnas, ja tādu nav
Ir divi galēji gadÄ«jumi: neļauj nevienam pasÅ«tÄ«t un ļauj visiem pasÅ«tÄ«t. Ja nevienam neļaujat, tad atsaukÅ”ana bÅ«s 0: mēs neveidojam pasÅ«tÄ«jumus, bet neviens no tiem neizdosies. Ja ļausim visiem, tad atsaukÅ”ana bÅ«s 100% (saņemsim visus iespējamos pasÅ«tÄ«jumus), un precizitāte bÅ«s 29%, t.i., 71% pasÅ«tÄ«jumu bÅ«s slikti.

Kā zīmes izmantojām dažādus sākuma punkta parametrus:

  • Laiks/vieta.
  • Sistēmas stāvoklis (visu tarifu un kontaktu aizņemto maŔīnu skaits tuvumā).
  • MeklÄ“Å”anas parametri (rādiuss, kandidātu skaits, ierobežojumi).

Vairāk par zīmēm

Konceptuāli mēs vēlamies atŔķirt divas situācijas:

  • ā€œDziļŔ mežsā€ - Å”obrÄ«d Å”eit nav automaŔīnu.
  • ā€œNeveiksmÄ«gsā€ - automaŔīnas ir, bet, meklējot, nebija piemērotas.

Viens ā€œNeveiksminiekaā€ piemērs ir, ja centrā piektdienas vakarā ir liels pieprasÄ«jums. PasÅ«tÄ«jumu ir daudz, gribētāju daudz, un Å”oferu visiem nepietiek. Tas var izrādÄ«ties Ŕādi: tapā nav piemērotu draiveru. Taču burtiski dažu sekunžu laikā tie parādās, jo Å”obrÄ«d Å”ajā vietā brauc ļoti daudz braucēju un viņu statuss nemitÄ«gi mainās.

Tāpēc dažādi sistēmas indikatori punkta A tuvumā izrādÄ«jās labas Ä«paŔības:

  • Kopējais automaŔīnu skaits.
  • PasÅ«tāmo automaŔīnu skaits.
  • To automaŔīnu skaits, kuras nav pieejamas pasÅ«tÄ«Å”anai statusā ā€œAizņemtsā€.
  • Lietotāju skaits.

Galu galā, jo vairāk automaŔīnu bÅ«s, jo lielāka iespēja, ka kāda no tām kļūs pieejama.
PatiesÄ«bā mums ir svarÄ«gi, lai ne tikai atrastos automaŔīnas, bet arÄ« tiktu veikti veiksmÄ«gi braucieni. LÄ«dz ar to bija iespējams paredzēt veiksmÄ«ga brauciena iespējamÄ«bu. Bet mēs nolēmām to nedarÄ«t, jo Ŕī vērtÄ«ba lielā mērā ir atkarÄ«ga no lietotāja un draivera.

Modeļa apmācÄ«bas algoritms bija CatBoost. Eksperimentā iegÅ«tie dati tika izmantoti apmācÄ«bai. Pēc ievieÅ”anas bija jāapkopo apmācÄ«bas dati, dažkārt ļaujot nelielam lietotāju skaitam veikt pasÅ«tÄ«jumu pret modeļa lēmumu.

Rezultāti

Eksperimenta rezultāti bija tādi, kā gaidÄ«ts: modeļa izmantoÅ”ana ļauj ievērojami palielināt veiksmÄ«go braucienu skaitu, pateicoties pasÅ«tÄ«jumiem bez automaŔīnām, taču neapdraudot uzticamÄ«bu.

Å obrÄ«d mehānisms ir iedarbināts visās pilsētās un valstÄ«s un ar tā palÄ«dzÄ«bu notiek aptuveni 1% veiksmÄ«gu braucienu. Turklāt dažās pilsētās ar zemu automaŔīnu blÄ«vumu Ŕādu braucienu Ä«patsvars sasniedz 15%.

Citi ieraksti par taksometru tehnoloģiju

Avots: www.habr.com

Pievieno komentāru