Carane Yandex.Taxi nggoleki mobil nalika ora ana

Carane Yandex.Taxi nggoleki mobil nalika ora ana

Layanan taksi sing apik kudu aman, dipercaya lan cepet. Pangguna ora bakal nerangake rincian: penting kanggo dheweke ngeklik tombol "Pesenan" lan nampa mobil kanthi cepet sing bakal nggawa dheweke saka titik A menyang titik B. Yen ora ana mobil sing cedhak, layanan kasebut kudu langsung ngandhani babagan iki supaya klien ora duwe pangarepan palsu. Nanging yen tandha "Ora ana mobil" katon asring banget, iku logis yen wong mung bakal mandheg nggunakake layanan iki lan pindhah menyang pesaing.

Ing artikel iki, aku arep ngomong babagan carane, nggunakake learning machine, kita ngrampungake masalah nggoleki mobil ing wilayah sing kurang kapadhetan (kanthi tembung liya, ing ngendi, ing pandang sepisanan, ora ana mobil). Lan apa teka saka iku.

prasejarah

Kanggo nelpon taksi, pangguna nindakake sawetara langkah sing gampang, nanging apa sing kedadeyan ing layanan kasebut?

Pangguna Stage Backend Yandex.Taxi
Milih titik wiwitan Pin We are launched a simplified search for candidates - pin search. Adhedhasar pembalap sing ditemokake, wektu tekan diprediksi - ETA ing pin. Koefisien mundhak ing titik tartamtu diitung.
Milih tujuan, tarif, syarat nawarake We mbangun rute lan ngetung prices kanggo kabeh tariffs, njupuk menyang akun nambah koefisien.
Pencet tombol "Telpon Taksi". Pesenan Kita miwiti panelusuran lengkap kanggo mobil. Kita milih driver sing paling cocok lan menehi pesenan.

ing ETA ing pin, pitungan rega и milih driver sing paling cocok kita wis nulis. Lan iki crita babagan nemokake driver. Nalika pesenan digawe, telusuran ditindakake kaping pindho: ing Pin lan ing pesenan. Panelusuran pesenan ditindakake ing rong tahap: rekrutmen calon lan peringkat. Kaping pisanan, calon pembalap sing kasedhiya ditemokake sing paling cedhak ing grafik dalan. Banjur bonus lan nyaring ditrapake. Calon sing isih ana peringkat lan sing menang nampa tawaran pesenan. Yen dheweke setuju, dheweke diutus kanggo pesenan lan menyang titik pangiriman. Yen dheweke nolak, banjur tawaran teka menyang sabanjure. Yen ora ana calon maneh, telusuran diwiwiti maneh. Iki ora luwih saka telung menit, sawise pesenan dibatalake lan dibakar.

Panelusuran ing Pin padha karo nggoleki pesenan, mung urutane ora digawe lan telusuran dhewe ditindakake mung sapisan. Setelan sing disederhanakake kanggo jumlah calon lan radius telusuran uga digunakake. Nyederhanakake kuwi perlu amarga ana urutan gedhene pin luwih akeh tinimbang pesenan, lan nggoleki minangka operasi sing rada angel. Titik kunci kanggo crita kita: yen sajrone telusuran awal ora ana calon sing cocog ditemokake ing Pin, mula kita ora ngidini sampeyan nggawe pesenan. Saora-orane wis kaya ngono.

Iki sing dideleng pangguna ing aplikasi kasebut:

Carane Yandex.Taxi nggoleki mobil nalika ora ana

Telusuri mobil tanpa mobil

Sawijining dina kita teka karo hipotesis: mbok menawa ing sawetara kasus pesenan isih bisa rampung, sanajan ora ana mobil ing pin. Sawise kabeh, sawetara wektu ngliwati pin lan pesenan, lan telusuran pesenan luwih lengkap lan kadhangkala diulang kaping pirang-pirang: sajrone wektu iki, driver sing kasedhiya bisa uga katon. Kita uga ngerti ngelawan: yen pembalap ditemokaké ing pin, iku ora kasunyatan sing bakal ketemu nalika pesenan. Kadhangkala dheweke ilang utawa kabeh wong nolak pesenan kasebut.

Kanggo nguji hipotesis iki, kita ngluncurake eksperimen: kita mandheg mriksa anane mobil sajrone nelusuri Pin kanggo klompok uji pangguna, yaiku, dheweke duwe kesempatan kanggo nggawe "pesenan tanpa mobil." Asil kasebut cukup ora dikarepke: yen mobil ora ana ing pin, banjur ing 29% kasus ditemokake mengko - nalika nggoleki pesenan! Kajaba iku, pesenan tanpa mobil ora beda banget karo pesenan biasa babagan tarif pembatalan, peringkat, lan indikator kualitas liyane. Pesenan tanpa mobil nyumbang 5% kabeh pesenan, nanging luwih saka 1% kabeh lelungan sing sukses.

Kanggo mangerteni saka ngendi para pelaksana pesenan kasebut, ayo deleng statuse nalika nggoleki Pin:

Carane Yandex.Taxi nggoleki mobil nalika ora ana

  • kasedhiya: kasedhiya, nanging sakperangan alesan ora klebu ing calon, contone, iku adoh banget;
  • Ing pesenan: sibuk, nanging bisa mbebasake dhewe utawa kasedhiya kanggo urutan chain;
  • sibuk: kemampuan kanggo nampa pesenan dipatèni, nanging banjur pembalap bali menyang baris;
  • Ora kasedhiya: driver ora online, nanging katon.

Ayo nambah linuwih

Pesenan tambahan apik banget, nanging 29% telusuran sing sukses tegese 71% pangguna ngenteni suwe lan ora ana ing ngendi wae. Nalika ana apa-apa elek babagan iki saka titik efficiency sistem, iku bener menehi pangarep-arep palsu pangguna lan sampah wektu, sawise kang dadi frustasi lan (bisa) mungkasi nggunakake layanan. Kanggo ngatasi masalah iki, kita sinau kanggo prédhiksi kamungkinan sing mobil ing pesenan bakal ketemu.

Skema kasebut kaya ing ngisor iki:

  • Pangguna sijine pin.
  • Panelusuran ditindakake ing pin.
  • Yen ora ana mobil, kita prédhiksi: bisa uga bakal katon.
  • Lan gumantung saka kemungkinan, kita ngidini utawa ora ngidini sampeyan nggawe pesenan, nanging kita ngelingake yen Kapadhetan mobil ing wilayah iki ing wektu iki kurang.

Ing aplikasi katon kaya iki:

Carane Yandex.Taxi nggoleki mobil nalika ora ana

Nggunakake model ngidini sampeyan nggawe pesenan anyar kanthi luwih akurat lan ora njamin wong kanthi muspra. Yaiku, kanggo ngatur rasio linuwih lan jumlah pesenan tanpa mesin nggunakake model precision-recall. Keandalan layanan kasebut nyebabake kepinginan kanggo terus nggunakake produk kasebut, yaiku ing pungkasane kabeh bakal mudhun menyang jumlah lelungan.

A sethitik babagan precision-recallSalah sawijining tugas dhasar ing machine learning yaiku tugas klasifikasi: nemtokake obyek menyang salah siji saka rong kelas. Ing kasus iki, asil saka algoritma machine learning asring dadi Assessment numerik saka anggota ing salah siji saka kelas, contone, Assessment kemungkinan. Nanging, tumindak sing dileksanakake biasane binar: yen mobil kasedhiya, kita bakal ngidini sampeyan supaya, lan yen ora, banjur kita ora. Kanggo tartamtu, ayo kang nelpon algoritma sing mrodhuksi taksiran numerik model, lan classifier aturan sing nemtokake kanggo siji saka rong kelas (1 utawa -1). Kanggo nggawe klasifikasi adhedhasar pambiji model, sampeyan kudu milih ambang pambiji. Carane persis gumantung banget ing tugas.

Upaminipun kita nindakake tes (pengklasifikasi) kanggo sawetara penyakit langka lan mbebayani. Adhedhasar asil tes, kita ngirim pasien kanggo pemeriksaan sing luwih rinci, utawa ujar: "Apik, mulih." Kanggo kita, ngirim wong lara menyang omah luwih ala tinimbang mriksa wong sing sehat. Yaiku, kita pengin tes kasebut bisa digunakake kanggo wong sing lara banget. Nilai iki diarani kelingan =Carane Yandex.Taxi nggoleki mobil nalika ora ana. Klasifikasi becik nduweni kelingan 100%. Kahanan sing rusak yaiku ngirim kabeh wong kanggo ujian, banjur kelingan uga bakal 100%.

Iki uga kedadeyan kanthi cara liya. Contone, kita nggawe sistem testing kanggo siswa, lan wis detector mbeling. Yen dumadakan mriksa ora bisa kanggo sawetara kasus mbeling, iku ora nyenengake, nanging ora kritis. Ing tangan liyane, iku arang banget ala kanggo unfairly nuduh siswa bab sing padha ora nindakake. Sing, iku penting kanggo kita sing ing antarane jawaban positif saka classifier ana minangka akeh sing bener sabisa, mbok menawa kanggo detriment saka nomer. Iki tegese sampeyan kudu nggedhekake tliti = Carane Yandex.Taxi nggoleki mobil nalika ora ana. Yen pemicu ana ing kabeh obyek, presisi bakal padha karo frekuensi kelas sing ditetepake ing sampel.

Yen algoritma ngasilake angka kemungkinan angka, banjur kanthi milih ambang sing beda, sampeyan bisa entuk nilai presisi-eling sing beda.

Ing masalah kita kahanan kaya ing ngisor iki. Kelingan minangka jumlah pesenan sing bisa kita tawarkan, presisi minangka linuwih pesenan kasebut. Iki minangka kurva precision-recall model kita:
Carane Yandex.Taxi nggoleki mobil nalika ora ana
Ana rong kasus ekstrem: ora ngidini sapa wae pesen lan ngidini kabeh wong pesen. Yen sampeyan ora ngidini sapa wae, banjur kelingan bakal dadi 0: kita ora nggawe pesenan, nanging ora ana sing bakal gagal. Yen kita ngidini kabeh wong, banjur kelingan bakal 100% (kita bakal nampa kabeh pesenan bisa), lan tliti bakal 29%, IE 71% pesenan bakal ala.

Kita nggunakake macem-macem parameter titik wiwitan minangka tandha:

  • Wektu/panggonan.
  • Negara sistem (jumlah mesin sing dikuwasani kabeh tarif lan pin ing sacedhake).
  • Parameter telusuran (radius, jumlah calon, watesan).

Liyane babagan pratandha

Secara konseptual, kita pengin mbedakake rong kahanan:

  • "Hutan jero" - ora ana mobil ing wektu iki.
  • "Apes" - ana mobil, nanging nalika nggoleki, ora ana sing cocok.

Salah sawijining conto "Unlucky" yaiku yen ana akeh panjaluk ing tengah ing wayah sore. Ana akeh pesenan, akeh wong sing gelem, lan ora cukup driver kanggo kabeh wong. Bisa uga kaya mangkene: ora ana driver sing cocog ing pin. Nanging secara harfiah ing sawetara detik padha katon, amarga ing wektu iki akeh pembalap ing panggonan iki lan status sing saya ganti.

Mulane, macem-macem indikator sistem ing sacedhake titik A dadi fitur sing apik:

  • Jumlah mobil.
  • Jumlah mobil ing pesenan.
  • Jumlah mobil ora kasedhiya kanggo pesenan ing status "Sibuk".
  • Jumlah pangguna.

Sawise kabeh, luwih akeh mobil, luwih akeh kemungkinan salah sijine bakal kasedhiya.
Nyatane, penting kanggo kita ora mung mobil, nanging uga lelungan sing sukses. Mulane, iku bisa kanggo prédhiksi kemungkinan trip sukses. Nanging kita mutusake ora nindakake iki, amarga nilai iki gumantung banget marang pangguna lan driver.

Algoritma latihan model yaiku CatBoost. Data sing dijupuk saka eksperimen digunakake kanggo latihan. Sawise implementasine, data latihan kudu dikumpulake, kadhangkala ngidini sawetara pangguna supaya bisa nglawan keputusan model kasebut.

Hasil

Asil eksperimen padha kaya samesthine: nggunakake model ngijini sampeyan kanggo Ngartekno nambah nomer lelungan sukses amarga pesenan tanpa mobil, nanging tanpa kompromi linuwih.

Ing wayahe, mekanisme kasebut wis diluncurake ing kabeh kutha lan negara lan kanthi bantuan, kira-kira 1% lelungan sukses kedadeyan. Menapa malih, ing sawetara kutha karo Kapadhetan kurang saka mobil nuduhake lelungan kuwi tekan 15%.

Kiriman liyane babagan teknologi Taksi

Source: www.habr.com

Add a comment