Яндекс.Такси көліктер жоқ кезде қалай іздейді

Яндекс.Такси көліктер жоқ кезде қалай іздейді

Жақсы такси қызметі қауіпсіз, сенімді және жылдам болуы керек. Пайдаланушы егжей-тегжейлі айтпайды: ол үшін «Тапсырыс беру» түймесін басып, оны А нүктесінен В нүктесіне апаратын көлікті мүмкіндігінше тез алуы маңызды. Егер жақын жерде көлік болмаса, қызмет көрсету керек. Клиент жалған үміттер болмауы үшін бұл туралы дереу хабарлаңыз. Бірақ егер «Көлік жоқ» белгісі жиі пайда болса, адам бұл қызметті пайдалануды тоқтатып, бәсекелеске баруы қисынды.

Бұл мақалада мен машиналық оқытуды қолдана отырып, біз тығыздығы төмен аудандарда (басқаша айтқанда, бір қарағанда автомобильдер жоқ) автомобильдерді іздеу мәселесін қалай шешкеніміз туралы айтқым келеді. Ал одан не шықты.

тарихын

Такси шақыру үшін пайдаланушы бірнеше қарапайым қадамдарды орындайды, бірақ қызмет ішінде не болады?

Пайдаланушы Кезең Backend Yandex.Taxi
Бастапқы нүктені таңдайды Қосу Біз үміткерлер үшін оңайлатылған іздеуді іске қосамыз - pin іздеу. Табылған драйверлерге сүйене отырып, келу уақыты болжалды - пиндегі ETA. Берілген нүктедегі өсу коэффициенті есептеледі.
Баратын жерді, тарифті, талаптарды таңдайды Ұсыныс Біз барлық тарифтер бойынша өсу коэффициентін ескере отырып, маршрутты саламыз және бағаларды есептейміз.
«Таксиге қоңырау шалу» түймесін басыңыз бұйрық Біз көлікті толық іздеуді бастаймыз. Біз ең қолайлы жүргізушіні таңдап, оған тапсырыс береміз.

туралы ETA пиндегі, бағаны есептеу и ең қолайлы драйверді таңдау жазғанбыз. Бұл жүргізушілерді табу туралы әңгіме. Тапсырыс жасалған кезде іздеу екі рет орындалады: PIN-де және тапсырыста. Тапсырысты іздеу екі кезеңде өтеді: кандидаттарды іріктеу және рейтинг. Біріншіден, жол графигі бойында ең жақын орналасқан қолжетімді кандидат жүргізушілер табылды. Содан кейін бонустар мен сүзу қолданылады. Қалған үміткерлер бағаланады және жеңімпаз тапсырыс ұсынысын алады. Егер ол келіссе, ол тапсырысқа тағайындалады және жеткізу пунктіне барады. Егер ол бас тартса, ұсыныс келесіге келеді. Егер басқа үміткерлер болмаса, іздеу қайтадан басталады. Бұл үш минуттан аспайды, содан кейін тапсырыс жойылады және өртенеді.

Pin арқылы іздеу тапсырыс бойынша іздеуге ұқсас, тек тапсырыс жасалмайды және іздеудің өзі бір рет орындалады. Үміткерлер саны мен іздеу радиусының жеңілдетілген параметрлері де қолданылады. Мұндай оңайлатулар қажет, өйткені тапсырыстарға қарағанда түйреуіштер саны көп, ал іздеу өте қиын операция. Біздің әңгімеміздің негізгі түйіні: егер алдын ала іздеу кезінде Pin-тен лайықты үміткерлер табылмаса, біз сізге тапсырыс беруге рұқсат бермейміз. Кем дегенде, бұрын солай болған.

Қолданбада пайдаланушы мынаны көрді:

Яндекс.Такси көліктер жоқ кезде қалай іздейді

Автокөліксіз көліктерді іздеңіз

Бір күні біз гипотеза ойлап таптық: бәлкім, кейбір жағдайларда пинде машиналар болмаса да, тапсырыс әлі де аяқталуы мүмкін. Ақыр соңында, пин мен тапсырыс арасында біраз уақыт өтеді, ал тапсырысты іздеу неғұрлым толық және кейде бірнеше рет қайталанады: осы уақыт ішінде қол жетімді драйверлер пайда болуы мүмкін. Біз де керісінше білдік: егер жүргізушілер түйреуіштен табылса, тапсырыс бергенде табылатыны шындық емес еді. Кейде олар жоғалып кетеді немесе бәрі тапсырыстан бас тартады.

Бұл гипотезаны сынау үшін біз экспериментті бастадық: пайдаланушылардың сынақ тобын Pin арқылы іздеу кезінде көліктердің бар-жоғын тексеруді тоқтаттық, яғни оларда «көліксіз тапсырыс беру» мүмкіндігі болды. Нәтиже өте күтпеген болды: егер машина түйреуіште болмаса, 29% жағдайда ол кейінірек табылды - тапсырыс бойынша іздеу кезінде! Оның үстіне автокөліксіз тапсырыстар бас тарту көрсеткіштері, рейтингтері және басқа сапа көрсеткіштері бойынша әдеттегі тапсырыстардан айтарлықтай ерекшеленбеді. Көліксіз брондау барлық тапсырыстардың 5%-ын құрады, бірақ барлық сәтті сапарлардың 1%-дан сәл астамы.

Бұл тапсырыстарды орындаушылардың қайдан келгенін түсіну үшін Pin-те іздеу кезінде олардың күйлерін қарастырайық:

Яндекс.Такси көліктер жоқ кезде қалай іздейді

  • Қол жетімді: қолжетімді болды, бірақ қандай да бір себептермен үміткерлердің қатарына қосылмады, мысалы, ол тым алыс болды;
  • Тапсырыс бойынша: бос болды, бірақ өзін босатып алды немесе қол жетімді болды тізбек тәртібі;
  • Бос емес: тапсырыстарды қабылдау мүмкіндігі өшірілді, бірақ содан кейін жүргізуші сапқа оралды;
  • Жоқ: жүргізуші желіде емес еді, бірақ ол пайда болды.

Сенімділікті қосайық

Қосымша тапсырыстар өте жақсы, бірақ сәтті іздеулердің 29% пайдаланушының 71% ұзақ уақыт күтіп, ешқайда кетпейтінін білдіреді. Жүйе тиімділігі тұрғысынан бұл жаман нәрсе болмаса да, ол пайдаланушыға жалған үміт береді және уақытты жоғалтады, содан кейін олар ренжіп, (мүмкін) қызметті пайдалануды тоқтатуы мүмкін. Бұл мәселені шешу үшін біз тапсырыс бойынша көліктің табылу ықтималдығын болжауды үйрендік.

Схема келесідей:

  • Пайдаланушы түйреуіш қояды.
  • Түтікке іздеу жүргізілуде.
  • Егер көліктер болмаса, біз болжаймыз: мүмкін олар пайда болады.
  • Ал ықтималдылыққа байланысты тапсырыс беруге рұқсат етеміз немесе бермейміз, бірақ қазіргі уақытта бұл аймақта көліктердің тығыздығы төмен екенін ескертеміз.

Қолданбада ол келесідей болды:

Яндекс.Такси көліктер жоқ кезде қалай іздейді

Модельді пайдалану жаңа тапсырыстарды дәлірек жасауға және адамдарды босқа сендірмеуге мүмкіндік береді. Яғни, дәлдік-қайта шақыру үлгісін пайдалана отырып, машиналарсыз сенімділік қатынасы мен тапсырыстар санын реттеу. Қызметтің сенімділігі өнімді пайдалануды жалғастыру ниетіне әсер етеді, яғни ақыр соңында барлығы сапарлар санына байланысты.

Дәлдік - еске түсіру туралы аздапМашиналық оқытудағы негізгі міндеттердің бірі классификациялық тапсырма: объектіні екі класстың біріне тағайындау. Бұл жағдайда машиналық оқыту алгоритмінің нәтижесі көбінесе сыныптардың біріне мүшеліктің сандық бағасына айналады, мысалы, ықтималдықты бағалау. Дегенмен, орындалатын әрекеттер әдетте екілік болып табылады: егер көлік қол жетімді болса, біз сізге тапсырыс беруге рұқсат етеміз, ал егер жоқ болса, біз бермейміз. Нақты болу үшін сандық бағалауды шығаратын алгоритмді модель, ал классификаторды оны екі класстың (1 немесе –1) біріне тағайындайтын ереже деп атаймыз. Модельді бағалау негізінде жіктеуіш жасау үшін бағалау шегін таңдау керек. Қаншалықты дәл тапсырмаға байланысты.

Біз сирек кездесетін және қауіпті ауруға тест (классификатор) жасап жатырмыз делік. Тест нәтижелері бойынша біз науқасты егжей-тегжейлі тексеруге жібереміз немесе: «Жақсы, үйге қайт» дейміз. Біз үшін науқасты үйіне жіберу дені сау адамды қажетсіз тексергеннен әлдеқайда жаман. Яғни, біз тест мүмкіндігінше шын науқас адамдар үшін жұмыс істегенін қалаймыз. Бұл мән қайта шақыру = деп аталадыЯндекс.Такси көліктер жоқ кезде қалай іздейді. Идеал классификатордың 100% еске түсіру мүмкіндігі бар. Бұзылған жағдай - барлығын тексеруге жіберу, содан кейін кері шақыру да 100% болады.

Ол да керісінше болады. Мысалы, біз студенттерге тестілеу жүйесін жасап жатырмыз, оның алдау детекторы бар. Егер кенеттен тексеру кейбір алдау жағдайлары үшін жұмыс істемесе, бұл жағымсыз, бірақ маңызды емес. Екінші жағынан, студенттерді өздері жасамаған нәрсе үшін әділетсіз айыптау өте жаман. Яғни, біз үшін классификатордың оң жауаптарының арасында мүмкіндігінше дұрыс жауаптардың болуы маңызды, мүмкін олардың санына зиян тигізеді. Бұл дәлдікті барынша арттыру керек дегенді білдіреді = Яндекс.Такси көліктер жоқ кезде қалай іздейді. Егер іске қосу барлық нысандарда орын алса, онда дәлдік үлгідегі анықталған класс жиілігіне тең болады.

Егер алгоритм сандық ықтималдық мәнін шығарса, онда әртүрлі шектерді таңдау арқылы әртүрлі дәлдік-қайта шақыру мәндеріне қол жеткізуге болады.

Біздің мәселеде жағдай келесідей. Еске түсіру - біз ұсына алатын тапсырыстар саны, дәлдік - бұл тапсырыстардың сенімділігі. Біздің модельдің дәлдік-еске алу қисығы келесідей:
Яндекс.Такси көліктер жоқ кезде қалай іздейді
Екі төтенше жағдай бар: ешкімге тапсырыс беруге рұқсат бермеу және барлығына тапсырыс беруге мүмкіндік беру. Егер сіз ешкімге рұқсат бермесеңіз, қайта шақыру 0 болады: біз тапсырыстарды жасамаймыз, бірақ олардың ешқайсысы сәтсіздікке ұшырамайды. Егер біз бәріне рұқсат етсек, онда кері шақыру 100% болады (біз барлық мүмкін тапсырыстарды аламыз), ал дәлдік 29% болады, яғни тапсырыстардың 71% нашар болады.

Біз белгілер ретінде бастапқы нүктенің әртүрлі параметрлерін қолдандық:

  • Уақыт/орын.
  • Жүйе күйі (жақын жерде орналасқан барлық тарифтер мен түйреуіштердегі жұмыс істейтін машиналар саны).
  • Іздеу параметрлері (радиус, үміткерлер саны, шектеулер).

Белгілер туралы толығырақ

Тұжырымдама бойынша біз екі жағдайды ажыратқымыз келеді:

  • «Тұңғиық орман» - бұл жерде қазір көлік жоқ.
  • «Бақытсыз» - көліктер бар, бірақ іздеу кезінде қолайлы көліктер болмады.

Жұма күні кешке орталықта сұраныс көп болса, «Бақытсыздың» бір мысалы. Тапсырыс көп, қалаған адам көп, жүргізуші барлығына жетпейді. Бұл келесідей болуы мүмкін: түйреуіште қолайлы драйверлер жоқ. Бірақ олар бірнеше секунд ішінде пайда болады, өйткені қазіргі уақытта бұл жерде көптеген жүргізушілер бар және олардың мәртебесі үнемі өзгеріп отырады.

Сондықтан А нүктесіне жақын орналасқан әртүрлі жүйелік көрсеткіштер жақсы мүмкіндіктер болып шықты:

  • Автокөліктердің жалпы саны.
  • Тапсырыстағы көліктер саны.
  • «Бос емес» күйінде тапсырыс беру мүмкін емес көліктер саны.
  • Пайдаланушылар саны.

Өйткені, көліктер көп болған сайын, олардың біреуі қолжетімді болады.
Шындығында, біз үшін көліктердің орналасуы ғана емес, сонымен қатар сәтті сапарлардың жасалуы маңызды. Сондықтан сәтті сапардың ықтималдығын болжауға болады. Бірақ біз мұны жасамауға шешім қабылдадық, өйткені бұл мән пайдаланушы мен драйверге байланысты.

Модельді оқыту алгоритмі болды CatBoost. Тәжірибеден алынған мәліметтер оқыту үшін пайдаланылды. Жүзеге асырылғаннан кейін оқыту деректерін жинау керек болды, кейде пайдаланушылардың аз саны модель шешіміне қарсы тапсырыс беруге мүмкіндік береді.

Нәтижелері

Эксперимент нәтижелері күтілгендей болды: модельді пайдалану автокөліксіз тапсырыстар есебінен сәтті сапарлар санын айтарлықтай арттыруға мүмкіндік береді, бірақ сенімділікке нұқсан келтірмейді.

Қазіргі уақытта механизм барлық қалалар мен елдерде іске қосылды және оның көмегімен сәтті сапарлардың шамамен 1% жүзеге асырылады. Оның үстіне автокөліктердің тығыздығы төмен кейбір қалаларда мұндай сапарлардың үлесі 15%-ға жетеді.

Такси технологиясы туралы басқа посттар

Ақпарат көзі: www.habr.com

пікір қалдыру