Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala

Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala

Ang isang mahusay na serbisyo ng taxi ay dapat na ligtas, maaasahan at mabilis. Ang gumagamit ay hindi pupunta sa mga detalye: ito ay mahalaga para sa kanya na siya ay nag-click sa "Order" na pindutan at makatanggap ng isang kotse sa lalong madaling panahon na magdadala sa kanya mula sa punto A hanggang punto B. Kung walang mga kotse sa malapit, ang serbisyo ay dapat ipaalam kaagad ang tungkol dito upang ang kliyente ay hindi magkaroon ng mga maling inaasahan. Ngunit kung ang tanda na "Walang mga kotse" ay madalas na lilitaw, kung gayon lohikal na ang isang tao ay titigil lamang sa paggamit ng serbisyong ito at pumunta sa isang katunggali.

Sa artikulong ito gusto kong pag-usapan kung paano, gamit ang pag-aaral ng makina, nalutas namin ang problema sa paghahanap ng mga kotse sa mga lugar na mababa ang density (sa madaling salita, kung saan, sa unang sulyap, walang mga kotse). At kung ano ang nanggaling nito.

prehistory

Upang tumawag ng taxi, nagsasagawa ang user ng ilang simpleng hakbang, ngunit ano ang nangyayari sa loob ng serbisyo?

Gumagamit Stage I-backend ang Yandex.Taxi
Pinipili ang panimulang punto Pin Naglulunsad kami ng pinasimpleng paghahanap para sa mga kandidato - paghahanap ng pin. Batay sa mga driver na natagpuan, ang oras ng pagdating ay hinulaang - ETA sa pin. Ang pagtaas ng koepisyent sa isang naibigay na punto ay kinakalkula.
Pumipili ng destinasyon, pamasahe, mga kinakailangan Alok Bumubuo kami ng ruta at kinakalkula ang mga presyo para sa lahat ng mga taripa, na isinasaalang-alang ang pagtaas ng koepisyent.
Pinindot ang button na "Tumawag ng Taxi". Order Inilunsad namin ang buong paghahanap para sa kotse. Pinipili namin ang pinaka-angkop na driver at nag-aalok sa kanya ng isang order.

Tungkol sa ETA sa pin, pagkalkula ng presyo ΠΈ pagpili ng pinaka-angkop na driver nagsulat na kami. At ito ay isang kuwento tungkol sa paghahanap ng mga driver. Kapag ang isang order ay ginawa, ang paghahanap ay nangyayari nang dalawang beses: sa Pin at sa order. Ang paghahanap para sa isang order ay nagaganap sa dalawang yugto: pangangalap ng mga kandidato at pagraranggo. Una, makikita ang mga available na kandidatong driver na pinakamalapit sa kahabaan ng road graph. Pagkatapos ay inilapat ang mga bonus at pag-filter. Ang natitirang mga kandidato ay niraranggo at ang nanalo ay makakatanggap ng isang alok ng order. Kung siya ay sumang-ayon, siya ay itinalaga sa order at pupunta sa punto ng paghahatid. Kung tumanggi siya, ang alok ay darating sa susunod. Kung wala nang mga kandidato, magsisimula muli ang paghahanap. Ito ay tumatagal ng hindi hihigit sa tatlong minuto, pagkatapos nito ang order ay kinansela at sinunog.

Ang paghahanap sa isang Pin ay katulad ng paghahanap sa isang order, tanging ang pagkakasunud-sunod ay hindi ginawa at ang paghahanap mismo ay isasagawa lamang. Ginagamit din ang mga pinasimpleng setting para sa bilang ng mga kandidato at radius ng paghahanap. Ang ganitong mga pagpapasimple ay kinakailangan dahil mayroong isang order ng magnitude na higit pang mga pin kaysa sa mga order, at ang paghahanap ay isang medyo mahirap na operasyon. Ang pangunahing punto para sa aming kuwento: kung sa panahon ng paunang paghahanap ay walang nakitang angkop na mga kandidato sa Pin, hindi ka namin pinapayagang mag-order. Sabagay, ganyan din naman ang dating.

Ito ang nakita ng user sa application:

Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala

Maghanap ng mga kotseng walang sasakyan

Isang araw nakaisip kami ng isang hypothesis: marahil sa ilang mga kaso ay maaari pa ring kumpletuhin ang order, kahit na walang mga kotse sa pin. Pagkatapos ng lahat, lumipas ang ilang oras sa pagitan ng pin at ng order, at ang paghahanap para sa order ay mas kumpleto at kung minsan ay paulit-ulit nang maraming beses: sa panahong ito, maaaring lumitaw ang mga available na driver. Alam din namin ang kabaligtaran: kung ang mga driver ay natagpuan sa pin, ito ay hindi isang katotohanan na sila ay matatagpuan kapag nag-order. Minsan nawawala sila o lahat ay tumatanggi sa utos.

Upang subukan ang hypothesis na ito, naglunsad kami ng isang eksperimento: huminto kami sa pagsuri sa availability ng mga sasakyan sa panahon ng paghahanap sa isang Pin para sa isang pansubok na pangkat ng mga user, ibig sabihin, nagkaroon sila ng pagkakataong gumawa ng "order nang walang mga sasakyan." Ang resulta ay medyo hindi inaasahan: kung ang kotse ay wala sa pin, pagkatapos ay sa 29% ng mga kaso ito ay natagpuan sa ibang pagkakataon - kapag naghahanap sa order! Bukod dito, ang mga order na walang sasakyan ay hindi gaanong naiiba sa mga regular na order sa mga tuntunin ng mga rate ng pagkansela, mga rating, at iba pang mga tagapagpahiwatig ng kalidad. Ang mga booking na walang sasakyan ay umabot sa 5% ng lahat ng booking, ngunit higit lang sa 1% ng lahat ng matagumpay na biyahe.

Upang maunawaan kung saan nagmumula ang mga tagapagpatupad ng mga order na ito, tingnan natin ang kanilang mga katayuan sa panahon ng paghahanap sa isang Pin:

Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala

  • Available: ay magagamit, ngunit sa ilang kadahilanan ay hindi kasama sa mga kandidato, halimbawa, siya ay masyadong malayo;
  • Sa order: ay abala, ngunit nagawang palayain ang sarili o maging available para sa chain order;
  • abala: ang kakayahang tumanggap ng mga order ay hindi pinagana, ngunit pagkatapos ay bumalik ang driver sa linya;
  • Hindi magagamit: ang driver ay hindi online, ngunit siya ay nagpakita.

Dagdagan natin ang pagiging maaasahan

Ang mga karagdagang order ay mahusay, ngunit 29% ng matagumpay na paghahanap ay nangangahulugan na 71% ng oras na ang user ay naghintay ng mahabang panahon at nauwi sa wala. Bagama't hindi ito isang masamang bagay mula sa punto ng view ng kahusayan ng system, ito ay talagang nagbibigay sa gumagamit ng maling pag-asa at nag-aaksaya ng oras, pagkatapos nito ay nabalisa sila at (maaaring) huminto sa paggamit ng serbisyo. Upang malutas ang problemang ito, natutunan naming hulaan ang posibilidad na ang isang kotse sa order ay matatagpuan.

Ang scheme ay ganito:

  • Ang gumagamit ay naglalagay ng isang pin.
  • Ang isang paghahanap ay isinasagawa sa pin.
  • Kung walang mga kotse, hinuhulaan namin: marahil ay lilitaw ang mga ito.
  • At depende sa posibilidad, pinapayagan o hindi ka namin pinapayagan na mag-order, ngunit binabalaan ka namin na ang density ng mga kotse sa lugar na ito sa oras na ito ay mababa.

Sa application ay ganito ang hitsura:

Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala

Ang paggamit ng modelo ay nagbibigay-daan sa iyong lumikha ng mga bagong order nang mas tumpak at hindi tiyakin ang mga tao nang walang kabuluhan. Iyon ay, upang ayusin ang ratio ng pagiging maaasahan at ang bilang ng mga order nang walang mga makina gamit ang precision-recall na modelo. Ang pagiging maaasahan ng serbisyo ay nakakaimpluwensya sa pagnanais na ipagpatuloy ang paggamit ng produkto, ibig sabihin, sa huli ang lahat ay bumaba sa bilang ng mga biyahe.

Medyo tungkol sa precision-recallAng isa sa mga pangunahing gawain sa machine learning ay ang gawain sa pag-uuri: pagtatalaga ng isang bagay sa isa sa dalawang klase. Sa kasong ito, ang resulta ng machine learning algorithm ay kadalasang nagiging numerical assessment ng membership sa isa sa mga klase, halimbawa, isang probability assessment. Gayunpaman, ang mga pagkilos na ginagawa ay karaniwang binary: kung available ang kotse, hahayaan ka naming mag-order nito, at kung hindi, hindi namin gagawin. Upang maging partikular, tawagin natin ang isang algorithm na gumagawa ng numerical na pagtatantya bilang isang modelo, at isang classifier ang isang panuntunan na nagtatalaga nito sa isa sa dalawang klase (1 o –1). Upang makagawa ng classifier batay sa pagtatasa ng modelo, kailangan mong pumili ng threshold ng pagtasa. Gaano ka eksakto ang nakasalalay sa gawain.

Ipagpalagay na gumagawa tayo ng isang pagsubok (classifier) ​​​​para sa ilang bihirang at mapanganib na sakit. Batay sa mga resulta ng pagsusuri, maaaring ipadala namin ang pasyente para sa isang mas detalyadong pagsusuri, o sabihin: "Mabuti, umuwi ka na." Para sa amin, ang pagpapauwi sa isang maysakit ay mas masahol pa kaysa sa walang-kailangang pagsusuri sa isang malusog na tao. Ibig sabihin, gusto naming gumana ang pagsubok para sa pinakamaraming talagang may sakit hangga't maaari. Ang halagang ito ay tinatawag na recall =Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala. Ang isang perpektong classifier ay may recall na 100%. Ang isang degenerate na sitwasyon ay upang ipadala ang lahat para sa pagsusuri, pagkatapos ay ang pagpapabalik ay magiging 100%.

Kabaligtaran din ang nangyayari. Halimbawa, gumagawa kami ng sistema ng pagsubok para sa mga mag-aaral, at mayroon itong cheating detector. Kung biglang hindi gumana ang tseke para sa ilang mga kaso ng pagdaraya, kung gayon ito ay hindi kasiya-siya, ngunit hindi kritikal. Sa kabilang banda, napakasamang hindi patas na akusahan ang mga estudyante ng isang bagay na hindi nila ginawa. Iyon ay, mahalaga para sa amin na sa mga positibong sagot ng classifier mayroong maraming tama hangga't maaari, marahil sa kapinsalaan ng kanilang bilang. Nangangahulugan ito na kailangan mong i-maximize ang katumpakan = Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala. Kung ang pag-trigger ay nangyayari sa lahat ng mga bagay, kung gayon ang katumpakan ay magiging katumbas ng dalas ng tinukoy na klase sa sample.

Kung ang algorithm ay gumagawa ng numerical probability value, pagkatapos ay sa pamamagitan ng pagpili ng iba't ibang mga threshold, makakamit mo ang iba't ibang mga halaga ng precision-recall.

Sa ating problema ang sitwasyon ay ang mga sumusunod. Ang recall ay ang bilang ng mga order na maiaalok namin, ang katumpakan ay ang pagiging maaasahan ng mga order na ito. Ganito ang hitsura ng precision-recall curve ng aming modelo:
Paano naghahanap ng mga sasakyan ang Yandex.Taxi kapag wala
Mayroong dalawang matinding kaso: huwag payagan ang sinuman na mag-order at payagan ang lahat na mag-order. Kung hindi mo pinapayagan ang sinuman, ang pagpapabalik ay magiging 0: hindi kami gumagawa ng mga order, ngunit wala sa mga ito ang mabibigo. Kung papayagan namin ang lahat, 100% ang recall (matatanggap namin ang lahat ng posibleng order), at magiging 29% ang precision, ibig sabihin, magiging masama ang 71% ng mga order.

Gumamit kami ng iba't ibang mga parameter ng panimulang punto bilang mga palatandaan:

  • Oras/lugar.
  • Status ng system (bilang ng mga inookupahang makina ng lahat ng mga taripa at pin sa paligid).
  • Mga parameter ng paghahanap (radius, bilang ng mga kandidato, mga paghihigpit).

Higit pa tungkol sa mga palatandaan

Sa konsepto, gusto naming makilala sa pagitan ng dalawang sitwasyon:

  • "Malalim na kagubatan" - walang mga kotse dito sa oras na ito.
  • "Malas" - may mga kotse, ngunit kapag naghahanap, walang anumang angkop.

Isang halimbawa ng "Malas" ay kung maraming demand sa center sa Biyernes ng gabi. Mayroong maraming mga order, maraming mga tao na nais, at hindi sapat na mga driver para sa lahat. Ito ay maaaring maging ganito: walang angkop na mga driver sa pin. Ngunit literal sa loob ng ilang segundo ay lumilitaw sila, dahil sa oras na ito mayroong maraming mga driver sa lugar na ito at ang kanilang katayuan ay patuloy na nagbabago.

Samakatuwid, ang iba't ibang mga tagapagpahiwatig ng system sa paligid ng punto A ay naging mahusay na mga tampok:

  • Kabuuang bilang ng mga sasakyan.
  • Bilang ng mga sasakyan sa order.
  • Ang bilang ng mga sasakyan na hindi magagamit para sa pag-order sa katayuang "Abala."
  • Bilang ng mga gumagamit.

Pagkatapos ng lahat, kung mas maraming mga kotse ang mayroong, mas malamang na ang isa sa mga ito ay magagamit.
Sa katunayan, mahalaga para sa amin na hindi lamang mga kotse ang matatagpuan, kundi pati na rin ang matagumpay na mga paglalakbay ay ginawa. Samakatuwid, posible na mahulaan ang posibilidad ng isang matagumpay na paglalakbay. Ngunit nagpasya kaming huwag gawin ito, dahil ang halagang ito ay lubos na nakasalalay sa gumagamit at driver.

Ang algorithm ng pagsasanay ng modelo ay CatBoost. Ang data na nakuha mula sa eksperimento ay ginamit para sa pagsasanay. Pagkatapos ng pagpapatupad, kailangang kolektahin ang data ng pagsasanay, kung minsan ay nagbibigay-daan sa isang maliit na bilang ng mga user na mag-order laban sa desisyon ng modelo.

Mga resulta ng

Ang mga resulta ng eksperimento ay tulad ng inaasahan: ang paggamit ng modelo ay nagbibigay-daan sa iyo upang makabuluhang taasan ang bilang ng mga matagumpay na biyahe dahil sa mga order na walang mga kotse, ngunit nang hindi nakompromiso ang pagiging maaasahan.

Sa ngayon, ang mekanismo ay inilunsad sa lahat ng mga lungsod at bansa at sa tulong nito, humigit-kumulang 1% ng matagumpay na mga biyahe ang nangyari. Bukod dito, sa ilang mga lungsod na may mababang density ng mga kotse, ang bahagi ng naturang mga paglalakbay ay umabot sa 15%.

Iba pang mga post tungkol sa teknolohiya ng Taxi

Pinagmulan: www.habr.com

Magdagdag ng komento