Hogyan keres a Yandex.Taxi autókat, amikor nincsenek

Hogyan keres a Yandex.Taxi autókat, amikor nincsenek

A jó taxi szolgáltatásnak biztonságosnak, megbízhatónak és gyorsnak kell lennie. A felhasználó nem megy bele a részletekbe: fontos számára, hogy a „Megrendelem” gombra kattintva a lehető leggyorsabban kapjon egy autót, amely elviszi őt A pontból B pontba. Ha nincs autó a közelben, a szerviznek erről haladéktalanul tájékoztatni kell, hogy az ügyfél ne legyenek hamis elvárásai. De ha a „Nincs autók” tábla túl gyakran jelenik meg, akkor logikus, hogy egy személy egyszerűen abbahagyja a szolgáltatás használatát, és egy versenytárshoz megy.

Ebben a cikkben arról szeretnék beszélni, hogy a gépi tanulás segítségével hogyan oldottuk meg az autókeresés problémáját alacsony sűrűségű területeken (más szóval, ahol első pillantásra nincsenek autók). És mi lett belőle.

őstörténet

A taxi hívásához a felhasználó néhány egyszerű lépést hajt végre, de mi történik a szolgáltatáson belül?

Használó Színpad Háttér Yandex.Taxi
Kijelöli a kezdőpontot Elindítjuk a jelöltek egyszerűsített keresését – gombostűs keresést. A talált illesztőprogramok alapján megjósolható az érkezési idő - ETA a pinben. Egy adott pontban a növekvő együtthatót számítjuk ki.
Kiválasztja az úti célt, a viteldíjat, a követelményeket Ajánlat Útvonalat építünk, és minden tarifára kiszámítjuk az árakat, figyelembe véve a növekvő együtthatót.
Megnyomja a „Call a Taxi” gombot megbízás Teljes körű keresést indítunk az autó után. Kiválasztjuk a legmegfelelőbb sofőrt és megrendelést ajánlunk fel neki.

Про ETA a tűben, árkalkuláció и a legmegfelelőbb sofőr kiválasztása már írtunk. Ez pedig a sofőrkeresésről szól. Megrendelés létrehozásakor a keresés kétszer történik: a PIN-kódon és a rendelésen. A megrendelés keresése két szakaszban zajlik: a jelöltek toborzása és a rangsorolás. Először is megkeresik az elérhető sofőrjelölteket, akik a legközelebb állnak az útdiagram mentén. Ezután bónuszokat és szűrést alkalmaznak. A többi jelöltet rangsorolják, és a nyertes rendelési ajánlatot kap. Ha beleegyezik, beosztják a rendelésbe, és elmegy a kiszállítási pontra. Ha visszautasítja, akkor jön az ajánlat a következőhöz. Ha nincs több jelölt, a keresés újraindul. Ez nem tart tovább három percnél, ezután a rendelés törlődik és elégetik.

A Pin-en történő keresés hasonló a megbízáson történő kereséshez, csak a megbízás nem jön létre, és magát a keresést csak egyszer hajtják végre. A jelöltek számának és keresési sugárának egyszerűsített beállításai is használatosak. Az ilyen egyszerűsítésekre azért van szükség, mert egy nagyságrenddel több csap van, mint parancs, és a keresés meglehetősen nehéz művelet. Történetünk kulcsa: ha az előzetes keresés során nem találtak megfelelő jelöltet a Pin-en, akkor nem engedjük meg a rendelést. Legalábbis régen így volt.

Ezt látta a felhasználó az alkalmazásban:

Hogyan keres a Yandex.Taxi autókat, amikor nincsenek

Autó nélküli autók keresése

Egyik nap felvettünk egy hipotézist: talán bizonyos esetekben a rendelés még akkor is teljesíthető, ha nem voltak autók a tűn. Végül is eltelik egy kis idő a gombostű és a megrendelés között, és a megrendelés keresése teljesebb, és néha többször is megismétlődik: ezalatt megjelenhetnek az elérhető illesztőprogramok. Tudtuk ennek az ellenkezőjét is: ha sofőröket találtak a gombostűn, nem volt tény, hogy rendeléskor megtalálták őket. Néha eltűnnek, vagy mindenki visszautasítja a parancsot.

Ennek a hipotézisnek a tesztelésére kísérletet indítottunk: leállítottuk az autók elérhetőségének ellenőrzését a PIN-en végzett keresés során egy felhasználói tesztcsoport számára, azaz lehetőségük volt „autó nélküli rendelést leadni”. Az eredmény egészen váratlan volt: ha az autó nem volt a tűn, akkor az esetek 29%-ában később - a rendelésen történő kereséskor - találták meg! Ráadásul az autó nélküli rendelések a lemondási arányok, minősítések és egyéb minőségi mutatók tekintetében nem különböztek jelentősen a szokásos rendelésektől. Az autó nélküli foglalások az összes foglalás 5%-át, de a sikeres utazások alig több mint 1%-át tették ki.

Hogy megértsük, honnan származnak ezeknek a parancsoknak a végrehajtói, nézzük meg állapotukat a PIN-kódon végzett keresés során:

Hogyan keres a Yandex.Taxi autókat, amikor nincsenek

  • Elérhető: elérhető volt, de valamiért nem került be a jelöltek közé, például túl messze volt;
  • Rendelésre: elfoglalt volt, de sikerült kiszabadítania magát vagy elérhetővé vált láncrend;
  • Elfoglalt: a rendelések elfogadása le volt tiltva, de a sofőr visszatért a sorba;
  • Nem elérhető: a sofőr nem volt online, de megjelent.

Adjuk hozzá a megbízhatóságot

A további rendelések nagyszerűek, de a sikeres keresések 29%-a azt jelenti, hogy az esetek 71%-ában a felhasználó sokáig várt, és végül nem ment sehova. Noha a rendszerhatékonyság szempontjából ebben nincs semmi szörnyű, valójában hamis reményt ad a felhasználónak, és időt veszít, ami után frusztrálttá válik, és (esetleg) abbahagyja a szolgáltatás használatát. A probléma megoldása érdekében megtanultuk megjósolni annak valószínűségét, hogy egy megrendelt autót találnak.

A rendszer a következő:

  • A felhasználó elhelyez egy gombostűt.
  • A gombostűn keresést hajtanak végre.
  • Ha nem lesznek autók, megjósoljuk: talán megjelennek.
  • Valószínűségtől függően pedig engedélyezzük vagy nem engedélyezzük a rendelés leadását, de figyelmeztetünk, hogy ezen a területen jelenleg alacsony az autósűrűség.

Az alkalmazásban így nézett ki:

Hogyan keres a Yandex.Taxi autókat, amikor nincsenek

A modell használatával pontosabban hozhat létre új rendeléseket, és nem nyugtatja meg hiába az embereket. Azaz a megbízhatóság arányának és a gép nélküli megrendelések számának szabályozása a precíziós-visszahívási modell segítségével. A szolgáltatás megbízhatósága befolyásolja a termék további használatának vágyát, vagyis végül minden az utazások számán múlik.

Egy kicsit a precíziós visszaemlékezésrőlA gépi tanulás egyik alapvető feladata az osztályozási feladat: egy objektum hozzárendelése két osztály valamelyikéhez. Ilyenkor a gépi tanulási algoritmus eredménye gyakran valamelyik osztályhoz való tartozás numerikus értékelése, például valószínűségi értékelés. A végrehajtott műveletek azonban általában binárisak: ha az autó elérhető, akkor engedjük megrendelni, ha nem, akkor nem. A pontosság kedvéért nevezzünk egy numerikus becslést előállító algoritmust modellnek, egy osztályozót pedig szabálynak, amely két osztály (1 vagy –1) egyikéhez rendeli. A modellértékelés alapján osztályozó készítéséhez ki kell választani egy értékelési küszöböt. Hogy pontosan hogyan, az nagyban függ a feladattól.

Tegyük fel, hogy tesztet (osztályozót) végzünk valamilyen ritka és veszélyes betegségre. A vizsgálati eredmények alapján vagy részletesebb kivizsgálásra küldjük a beteget, vagy azt mondjuk: „Jó, menjen haza.” Számunkra egy beteg embert hazaküldeni sokkal rosszabb, mint egy egészséges embert feleslegesen megvizsgálni. Vagyis azt szeretnénk, hogy a teszt minél több valóban beteg embernél működjön. Ezt az értéket hívják visszahívás =Hogyan keres a Yandex.Taxi autókat, amikor nincsenek. Egy ideális osztályozó 100%-os visszahívással rendelkezik. Elfajult helyzet, hogy mindenkit kivizsgálásra küldünk, akkor a visszahívás is 100%-os lesz.

Ez fordítva is megtörténik. Például tesztrendszert készítünk diákoknak, és van benne csalásérzékelő. Ha az ellenőrzés hirtelen nem működik bizonyos csalási esetekben, akkor ez kellemetlen, de nem kritikus. Másrészt rendkívül rossz dolog igazságtalanul vádolni a diákokat olyasmivel, amit nem tettek meg. Vagyis számunkra fontos, hogy az osztályozó pozitív válaszai között minél több helyes legyen, talán a számuk rovására. Ez azt jelenti, hogy maximalizálni kell a pontosságot = Hogyan keres a Yandex.Taxi autókat, amikor nincsenek. Ha a triggerelés minden objektumon megtörténik, akkor a pontosság megegyezik a mintában definiált osztály gyakoriságával.

Ha az algoritmus numerikus valószínűségi értéket állít elő, akkor különböző küszöbértékek kiválasztásával különböző precíziós-visszahívási értékeket érhet el.

A mi problémánkban a helyzet a következő. A visszahívás az általunk kínált rendelések száma, a precizitás pedig ezeknek a megrendeléseknek a megbízhatósága. Így néz ki modellünk precíziós visszahívási görbéje:
Hogyan keres a Yandex.Taxi autókat, amikor nincsenek
Két szélsőséges eset létezik: senki ne rendeljen, és mindenki rendeljen. Ha nem engedi meg senkinek, akkor a visszahívás 0 lesz: nem hozunk létre rendeléseket, de egyik sem fog meghiúsulni. Ha mindenkinek megengedjük, akkor a visszahívás 100%-os lesz (minden lehetséges rendelést megkapunk), a precizitás pedig 29%, azaz a megrendelések 71%-a lesz rossz.

A kiindulási pont különböző paramétereit használtuk előjelként:

  • Idő/hely.
  • A rendszer állapota (a közelben lévő összes tarifa és érintkező által elfoglalt gépek száma).
  • Keresési paraméterek (sugár, jelöltek száma, korlátozások).

Bővebben a jelekről

Koncepcionálisan két helyzetet szeretnénk megkülönböztetni:

  • „Mély erdő” - jelenleg nincsenek itt autók.
  • „Szerencsétlen” - vannak autók, de a keresés során nem volt megfelelő.

A „szerencsétlen” egyik példája, ha péntek este nagy a kereslet a központban. Sok a rendelés, sok a hajlandóság, és nincs elég sofőr mindenkinek. Így alakulhat: nincsenek megfelelő illesztőprogramok a tűben. De szó szerint másodperceken belül megjelennek, mert ebben az időben sok sofőr van ezen a helyen, és állapotuk folyamatosan változik.

Ezért az A pont közelében lévő különféle rendszerjelzők jó tulajdonságoknak bizonyultak:

  • Az autók teljes száma.
  • A megrendelt autók száma.
  • A „Foglalt” állapotú, nem rendelhető autók száma.
  • Felhasználók száma.

Hiszen minél több autó van, annál valószínűbb, hogy valamelyik elérhető lesz.
Valójában fontos számunkra, hogy ne csak az autókat helyezzék el, hanem a sikeres utakat is megtegyék. Ezért meg lehetett jósolni a sikeres utazás valószínűségét. De úgy döntöttünk, hogy ezt nem tesszük, mert ez az érték nagymértékben függ a felhasználótól és az illesztőprogramtól.

A modellképző algoritmus az volt CatBoost. A kísérlet során kapott adatokat a képzéshez használták fel. A megvalósítást követően betanítási adatokat kellett gyűjteni, így esetenként kevés felhasználó rendelhetett a modell döntése ellenére.

Eredményei

A kísérlet eredményei a várakozásoknak megfelelően alakultak: a modell használatával jelentősen megnövelhető a sikeres utak száma az autók nélküli rendelések miatt, de a megbízhatóság veszélyeztetése nélkül.

Jelenleg a mechanizmust minden városban és országban elindították, és segítségével a sikeres utazások körülbelül 1%-a valósul meg. Ezenkívül néhány alacsony autósűrűségű városban az ilyen utazások aránya eléri a 15% -ot.

További bejegyzések a Taxi technológiáról

Forrás: will.com

Hozzászólás