Si kërkon Yandex.Taxi për makina kur nuk ka

Si kërkon Yandex.Taxi për makina kur nuk ka

Një shërbim i mirë taksi duhet të jetë i sigurt, i besueshëm dhe i shpejtë. Përdoruesi nuk do të hyjë në detaje: është e rëndësishme për të që të klikojë butonin "Porosit" dhe të marrë një makinë sa më shpejt të jetë e mundur që do ta çojë atë nga pika A në pikën B. Nëse nuk ka makina afër, shërbimi duhet informoni menjëherë për këtë në mënyrë që klienti të mos ketë pritshmëri të rreme. Por nëse shenja "Jo makina" shfaqet shumë shpesh, atëherë është logjike që një person thjesht të ndalojë përdorimin e këtij shërbimi dhe të shkojë te një konkurrent.

Në këtë artikull dua të flas se si, duke përdorur mësimin e makinerive, zgjidhëm problemin e kërkimit të makinave në zona me densitet të ulët (me fjalë të tjera, ku, në shikim të parë, nuk ka makina). Dhe çfarë erdhi prej saj.

parahistorinë

Për të thirrur një taksi, përdoruesi kryen disa hapa të thjeshtë, por çfarë ndodh brenda shërbimit?

përdorues Fazë Backend Yandex.Taxi
Zgjedh pikën e fillimit gjilpërë Ne po nisim një kërkim të thjeshtuar për kandidatët - kërkimi me pin. Në bazë të drejtuesve të gjetur, parashikohet koha e mbërritjes - ETA në pin. Llogaritet koeficienti i rritjes në një pikë të caktuar.
Zgjedh destinacionin, tarifën, kërkesat Oferta Ne ndërtojmë një rrugë dhe llogarisim çmimet për të gjitha tarifat, duke marrë parasysh koeficientin në rritje.
Shtyp butonin "Thirrni një taksi". Заказ Ne fillojmë një kërkim të plotë për makinën. Ne zgjedhim shoferin më të përshtatshëm dhe i ofrojmë një porosi.

ETA në pin, llogaritja e çmimit и duke zgjedhur shoferin më të përshtatshëm kemi shkruar tashmë. Dhe kjo është një histori për gjetjen e shoferëve. Kur krijohet një porosi, kërkimi ndodh dy herë: në Pin dhe në porosi. Kërkimi për një urdhër zhvillohet në dy faza: rekrutimi i kandidatëve dhe renditja. Së pari, gjenden drejtuesit kandidatë të disponueshëm që janë më afër përgjatë grafikut rrugor. Pastaj aplikohen bonuset dhe filtrimi. Kandidatët e mbetur renditen dhe fituesi merr një ofertë porosie. Nëse është dakord, caktohet në porosi dhe shkon në pikën e dorëzimit. Nëse ai refuzon, atëherë oferta vjen te tjetra. Nëse nuk ka më kandidatë, kërkimi fillon përsëri. Kjo zgjat jo më shumë se tre minuta, pas së cilës porosia anulohet dhe digjet.

Kërkimi në një pin është i ngjashëm me kërkimin në një porosi, vetëm që porosia nuk krijohet dhe vetë kërkimi kryhet vetëm një herë. Përdoren gjithashtu cilësime të thjeshtuara për numrin e kandidatëve dhe rrezen e kërkimit. Thjeshtëzime të tilla janë të nevojshme sepse ka një rend të madhësisë më shumë kunja se urdhra, dhe kërkimi është një operacion mjaft i vështirë. Pika kryesore për historinë tonë: nëse gjatë kërkimit paraprak nuk u gjetën kandidatë të përshtatshëm në Pin, atëherë ne nuk ju lejojmë të bëni një porosi. Të paktën kështu ka qenë dikur.

Kjo është ajo që përdoruesi pa në aplikacion:

Si kërkon Yandex.Taxi për makina kur nuk ka

Kërkoni për makina pa makina

Një ditë ne dolëm me një hipotezë: ndoshta në disa raste porosia mund të përfundojë akoma, edhe nëse nuk kishte makina në kunja. Në fund të fundit, kalon ca kohë midis pinit dhe porosisë, dhe kërkimi për porosinë është më i plotë dhe ndonjëherë përsëritet disa herë: gjatë kësaj kohe, drejtuesit e disponueshëm mund të shfaqen. Ne e dinim edhe të kundërtën: nëse shoferët do të gjendeshin në kunja, nuk ishte fakt se ata do të gjendeshin gjatë porosisë. Ndonjëherë ato zhduken ose të gjithë refuzojnë porosinë.

Për të testuar këtë hipotezë, ne filluam një eksperiment: ne ndaluam së kontrolluari praninë e makinave gjatë një kërkimi në një Pin për një grup testues përdoruesish, d.m.th., ata patën mundësinë të bënin një "porosi pa makina". Rezultati ishte mjaft i papritur: nëse makina nuk ishte në kunj, atëherë në 29% të rasteve ajo u gjet më vonë - kur kërkonte me porosi! Për më tepër, porositë pa makina nuk ishin dukshëm të ndryshme nga porositë e rregullta për sa i përket normave të anulimit, vlerësimeve dhe treguesve të tjerë të cilësisë. Rezervimet pa makina përbënin 5% të të gjitha rezervimeve, por pak më shumë se 1% të të gjitha udhëtimeve të suksesshme.

Për të kuptuar se nga vijnë ekzekutuesit e këtyre urdhrave, le të shohim statuset e tyre gjatë një kërkimi në një Pin:

Si kërkon Yandex.Taxi për makina kur nuk ka

  • Në dispozicion: ishte në dispozicion, por për disa arsye nuk ishte përfshirë në kandidatët, për shembull, ai ishte shumë larg;
  • Me porosi: ishte i zënë, por arriti të çlirohej ose të bëhej i disponueshëm për rendit zinxhir;
  • I zënë: aftësia për të pranuar porosi u çaktivizua, por më pas shoferi u kthye në linjë;
  • I padisponueshem: shoferi nuk ishte online, por ai u shfaq.

Le të shtojmë besueshmërinë

Porositë shtesë janë të shkëlqyera, por 29% e kërkimeve të suksesshme do të thotë që 71% e kohës përdoruesi priti një kohë të gjatë dhe përfundoi duke mos shkuar askund. Edhe pse kjo nuk është një gjë e keqe nga pikëpamja e efikasitetit të sistemit, në fakt i jep përdoruesit shpresë të rreme dhe humbet kohë, pas së cilës ata mërziten dhe (ndoshta) ndalojnë përdorimin e shërbimit. Për të zgjidhur këtë problem, mësuam të parashikojmë gjasat që të gjendet një makinë me porosi.

Skema është si më poshtë:

  • Përdoruesi vendos një kunj.
  • Një kërkim kryhet në kunj.
  • Nëse nuk ka makina, ne parashikojmë: ndoshta ato do të shfaqen.
  • Dhe në varësi të probabilitetit, ju lejojmë ose nuk ju lejojmë të bëni një porosi, por ju paralajmërojmë se dendësia e makinave në këtë zonë në këtë kohë është e ulët.

Në aplikacion dukej kështu:

Si kërkon Yandex.Taxi për makina kur nuk ka

Përdorimi i modelit ju lejon të krijoni porosi të reja më saktë dhe të mos i qetësoni njerëzit më kot. Kjo do të thotë, për të rregulluar raportin e besueshmërisë dhe numrin e porosive pa makina duke përdorur modelin e tërheqjes së saktë. Besueshmëria e shërbimit ndikon në dëshirën për të vazhduar përdorimin e produktit, pra në fund gjithçka zbret në numrin e udhëtimeve.

Pak për rikujtimin e saktësisëNjë nga detyrat themelore në mësimin e makinerive është detyra e klasifikimit: caktimi i një objekti në një nga dy klasat. Në këtë rast, rezultati i algoritmit të mësimit të makinës shpesh bëhet një vlerësim numerik i anëtarësimit në një nga klasat, për shembull, një vlerësim probabiliteti. Sidoqoftë, veprimet që kryhen zakonisht janë binare: nëse makina është e disponueshme, atëherë do t'ju lejojmë ta porosisni, dhe nëse jo, atëherë nuk do ta bëjmë. Për të qenë specifik, le ta quajmë një algoritëm që prodhon një vlerësim numerik një model, dhe një klasifikues një rregull që e cakton atë në një nga dy klasat (1 ose –1). Për të bërë një klasifikues bazuar në vlerësimin e modelit, duhet të zgjidhni një prag vlerësimi. Sa saktësisht varet shumë nga detyra.

Supozoni se po bëjmë një test (klasifikues) për një sëmundje të rrallë dhe të rrezikshme. Bazuar në rezultatet e testit, ne ose e dërgojmë pacientin për një ekzaminim më të detajuar, ose themi: "Mirë, shko në shtëpi". Për ne, dërgimi i një personi të sëmurë në shtëpi është shumë më keq sesa ekzaminimi pa nevojë i një personi të shëndetshëm. Kjo do të thotë, ne duam që testi të funksionojë për sa më shumë njerëz me të vërtetë të sëmurë. Kjo vlerë quhet rikthim =Si kërkon Yandex.Taxi për makina kur nuk ka. Një klasifikues ideal ka një tërheqje prej 100%. Një situatë degjeneruese është dërgimi i të gjithëve për ekzaminim, atëherë edhe tërheqja do të jetë 100%.

Ndodh edhe anasjelltas. Për shembull, ne po bëjmë një sistem testimi për studentët, dhe ai ka një detektor mashtrimi. Nëse papritmas kontrolli nuk funksionon për disa raste të mashtrimit, atëherë kjo është e pakëndshme, por jo kritike. Nga ana tjetër, është jashtëzakonisht e keqe të akuzosh në mënyrë të padrejtë studentët për diçka që nuk e kanë bërë. Dmth për ne është e rëndësishme që ndër përgjigjet pozitive të klasifikuesit të ketë sa më shumë të sakta, ndoshta në dëm të numrit të tyre. Kjo do të thotë që ju duhet të maksimizoni saktësinë = Si kërkon Yandex.Taxi për makina kur nuk ka. Nëse aktivizimi ndodh në të gjitha objektet, atëherë saktësia do të jetë e barabartë me frekuencën e klasës së përcaktuar në mostër.

Nëse algoritmi prodhon një vlerë numerike probabiliteti, atëherë duke zgjedhur pragje të ndryshme, mund të arrini vlera të ndryshme të rikujtimit të saktësisë.

Në problemin tonë situata është si më poshtë. Recall është numri i porosive që mund të ofrojmë, saktësia është besueshmëria e këtyre porosive. Ja si duket kurba e rikujtimit të saktë të modelit tonë:
Si kërkon Yandex.Taxi për makina kur nuk ka
Ka dy raste ekstreme: mos lejoni askënd të urdhërojë dhe lejoni të gjithë të porosisin. Nëse nuk lejoni askënd, atëherë kujtimi do të jetë 0: ne nuk krijojmë porosi, por asnjëri prej tyre nuk do të dështojë. Nëse i lejojmë të gjithë, atëherë tërheqja do të jetë 100% (do të marrim të gjitha porositë e mundshme), dhe saktësia do të jetë 29%, pra 71% e porosive do të jetë e keqe.

Ne përdorëm parametra të ndryshëm të pikës së fillimit si shenja:

  • Koha/vendi.
  • Gjendja e sistemit (numri i makinerive të zëna të të gjitha tarifave dhe kunjave në afërsi).
  • Parametrat e kërkimit (rrezja, numri i kandidatëve, kufizimet).

Më shumë rreth shenjave

Konceptualisht, ne duam të bëjmë dallimin midis dy situatave:

  • "Pyll i thellë" - nuk ka makina këtu në këtë kohë.
  • "I pafat" - ka makina, por gjatë kërkimit nuk kishte asnjë të përshtatshme.

Një shembull i "Pa fat" është nëse ka shumë kërkesë në qendër të premten në mbrëmje. Ka shumë porosi, shumë njerëz të gatshëm dhe shoferë jo të mjaftueshëm për të gjithë. Mund të rezultojë kështu: nuk ka drejtues të përshtatshëm në pin. Por fjalë për fjalë brenda sekondave ato shfaqen, sepse në këtë kohë ka shumë shoferë në këtë vend dhe statusi i tyre po ndryshon vazhdimisht.

Prandaj, tregues të ndryshëm të sistemit në afërsi të pikës A rezultuan të ishin karakteristika të mira:

  • Numri total i makinave.
  • Numri i makinave me porosi.
  • Numri i makinave të padisponueshme për porositje në statusin "I zënë".
  • Numri i përdoruesve.

Në fund të fundit, sa më shumë makina të ketë, aq më shumë ka të ngjarë që njëra prej tyre të bëhet e disponueshme.
Në fakt, për ne është e rëndësishme që jo vetëm të vendosen makina, por të bëhen edhe udhëtime të suksesshme. Prandaj, ishte e mundur të parashikohej probabiliteti i një udhëtimi të suksesshëm. Por ne vendosëm të mos e bëjmë këtë, sepse kjo vlerë varet shumë nga përdoruesi dhe shoferi.

Modeli i algoritmit të trajnimit ishte Garë. Të dhënat e marra nga eksperimenti u përdorën për trajnim. Pas zbatimit, të dhënat e trajnimit duhej të mblidheshin, ndonjëherë duke lejuar një numër të vogël përdoruesish të urdhëronin kundër vendimit të modelit.

Rezultatet e

Rezultatet e eksperimentit ishin siç pritej: përdorimi i modelit ju lejon të rritni ndjeshëm numrin e udhëtimeve të suksesshme për shkak të porosive pa makina, por pa kompromentuar besueshmërinë.

Për momentin, mekanizmi është lançuar në të gjitha qytetet dhe vendet dhe me ndihmën e tij ndodhin rreth 1% e udhëtimeve të suksesshme. Për më tepër, në disa qytete me densitet të ulët makinash, përqindja e udhëtimeve të tilla arrin në 15%.

Postime të tjera rreth teknologjisë Taxi

Burimi: www.habr.com

Shto një koment