Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա

Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա

Լավ տաքսի ծառայությունը պետք է լինի անվտանգ, հուսալի և արագ: Օգտատերը մանրամասների մեջ չի խորանա. նրա համար կարևոր է, որ նա սեղմի «Պատվեր» կոճակը և հնարավորինս արագ ստանա մեքենա, որն իրեն կտանի A կետից B կետ: Եթե մոտակայքում մեքենաներ չկան, ծառայությունը պետք է. անմիջապես տեղեկացրեք այս մասին, որպեսզի հաճախորդը կեղծ ակնկալիքներ չունենա: Բայց եթե «No cars» նշանը շատ հաճախ է հայտնվում, ապա տրամաբանական է, որ մարդը պարզապես կդադարի օգտվել այս ծառայությունից և գնալու է մրցակցի մոտ։

Այս հոդվածում ես ուզում եմ խոսել այն մասին, թե ինչպես, օգտագործելով մեքենայական ուսուցում, մենք լուծեցինք մեքենաների որոնման խնդիրը ցածր խտության տարածքներում (այլ կերպ ասած, որտեղ, առաջին հայացքից, մեքենաներ չկան): Եվ ինչ ստացվեց դրանից:

նախապատմությանը

Տաքսի կանչելու համար օգտատերը կատարում է մի քանի պարզ քայլ, բայց ի՞նչ է կատարվում ծառայության ներսում։

User Փուլ Backend Yandex.Taxi
Ընտրում է մեկնարկային կետը Pin Մենք մեկնարկում ենք թեկնածուների պարզեցված որոնում՝ փին որոնում: Ելնելով հայտնաբերված վարորդներից՝ կանխատեսվում է ժամանման ժամը՝ փինում ETA: Հաշվարկվում է տվյալ կետում աճող գործակիցը:
Ընտրում է ուղղությունը, ուղեվարձը, պահանջները Առաջարկ Մենք կառուցում ենք երթուղի և հաշվարկում գները բոլոր սակագների համար՝ հաշվի առնելով աճող գործակիցը։
Սեղմում է «Զանգել տաքսի» կոճակը Պատվիրել Մենք սկսում ենք մեքենայի ամբողջական որոնում: Մենք ընտրում ենք ամենահարմար վարորդին և առաջարկում նրան պատվեր։

Մոտ ETA-ն քորոցում, գնի հաշվարկ и ընտրելով ամենահարմար վարորդը մենք արդեն գրել ենք. Եվ սա պատմություն է վարորդներ գտնելու մասին: Երբ պատվերը ստեղծվում է, որոնումը տեղի է ունենում երկու անգամ՝ Pin-ում և պատվերի վրա: Պատվերի որոնումը տեղի է ունենում երկու փուլով` թեկնածուների հավաքագրում և վարկանիշավորում: Նախ, հայտնաբերվում են մատչելի թեկնածու վարորդներ, ովքեր ամենամոտն են ճանապարհի գրաֆիկի երկայնքով: Այնուհետև կիրառվում են բոնուսներ և զտում: Մնացած թեկնածուները դասակարգվում են, և հաղթողը ստանում է պատվերի առաջարկ: Եթե ​​համաձայնում է, նրան հանձնարարում են պատվերը և գնում առաքման կետ։ Եթե ​​նա հրաժարվում է, ապա առաջարկը գալիս է հաջորդին։ Եթե ​​այլևս թեկնածուներ չկան, որոնումը նորից սկսվում է։ Դա տևում է ոչ ավելի, քան երեք րոպե, որից հետո պատվերը չեղյալ է հայտարարվում և այրվում:

Փինի վրա որոնումը նման է պատվերի որոնմանը, միայն պատվերը չի ստեղծվում, և որոնումն ինքնին կատարվում է միայն մեկ անգամ: Օգտագործվում են նաև թեկնածուների թվի և որոնման շառավիղի պարզեցված կարգավորումներ: Նման պարզեցումները անհրաժեշտ են, քանի որ մեծության կարգով ավելի շատ քորոցներ կան, քան պատվերներ, իսկ որոնումը բավականին բարդ գործողություն է: Մեր պատմության առանցքային կետը. եթե նախնական որոնման ընթացքում Pin-ում համապատասխան թեկնածուներ չեն հայտնաբերվել, ապա մենք ձեզ թույլ չենք տալիս պատվեր կատարել: Գոնե նախկինում այդպես էր։

Ահա թե ինչ է տեսել օգտատերը հավելվածում.

Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա

Որոնեք մեքենաներ առանց մեքենաների

Մի օր մենք առաջ քաշեցինք մի վարկած՝ միգուցե որոշ դեպքերում պատվերը դեռ կարող է ավարտվել, նույնիսկ եթե պտուտակի վրա մեքենաներ չլինեին։ Ի վերջո, pin-ի և պատվերի միջև որոշակի ժամանակ է անցնում, և պատվերի որոնումն ավելի ամբողջական է և երբեմն կրկնվում է մի քանի անգամ. այս ընթացքում կարող են հայտնվել հասանելի դրայվերներ: Մենք հակառակն էլ գիտեինք՝ եթե վարորդներ հայտնաբերվեին պտուտակի վրա, փաստ չէր, որ պատվիրելու ժամանակ կհայտնաբերվեին։ Երբեմն դրանք անհետանում են կամ բոլորը հրաժարվում են պատվերից։

Այս վարկածը ստուգելու համար մենք փորձարկեցինք. մենք դադարեցրինք ստուգել մեքենաների առկայությունը Pin-ի վրա օգտատերերի թեստային խմբի համար, այսինքն՝ նրանք հնարավորություն ունեին «պատվեր առանց մեքենաների»: Արդյունքը բավականին անսպասելի էր. եթե մեքենան չի եղել պտուտակի վրա, ապա 29% դեպքերում այն ​​հայտնաբերվել է ավելի ուշ՝ պատվերի վրա որոնելիս: Ավելին, առանց մեքենաների պատվերները էապես չէին տարբերվում սովորական պատվերներից՝ չեղարկման դրույքաչափերով, վարկանիշներով և որակի այլ ցուցանիշներով։ Առանց մեքենաների ամրագրումները կազմում են բոլոր ամրագրումների 5%-ը, բայց բոլոր հաջող ուղևորությունների 1%-ից մի փոքր ավելին:

Հասկանալու համար, թե որտեղից են գալիս այս հրամանները կատարողները, եկեք նայենք նրանց կարգավիճակներին Pin-ի վրա որոնումների ժամանակ.

Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա

  • Հասանելի է: հասանելի էր, բայց ինչ-ինչ պատճառներով չէր ընդգրկվել թեկնածուների մեջ, օրինակ՝ շատ հեռու էր;
  • Պատվերով. զբաղված էր, բայց կարողացավ ազատվել իրեն կամ հասանելի դառնալ շղթայի կարգը;
  • Զբաղված: պատվերներ ընդունելու ունակությունը անջատված էր, բայց հետո վարորդը վերադարձավ գիծ.
  • Անհասանելի: վարորդը առցանց չի եղել, բայց հայտնվել է.

Ավելացնենք հուսալիություն

Լրացուցիչ պատվերները հիանալի են, բայց հաջող որոնումների 29%-ը նշանակում է, որ 71%-ի դեպքում օգտատերը երկար սպասել է և վերջապես ոչ մի տեղ չի գնացել: Թեև սա վատ բան չէ համակարգի արդյունավետության տեսանկյունից, սակայն իրականում դա կեղծ հույս է տալիս օգտվողին և ժամանակ է վատնում, որից հետո նրանք նեղանում են և (հնարավոր է) դադարում օգտվել ծառայությունից։ Այս խնդիրը լուծելու համար մենք սովորեցինք կանխատեսել պատվերով մեքենա գտնելու հավանականությունը։

Սխեման այսպիսին է.

  • Օգտագործողը դնում է քորոց:
  • Կատարվում է խուզարկություն քորոցի վրա։
  • Եթե ​​մեքենաներ չլինեն, կանխատեսում ենք՝ գուցե հայտնվեն։
  • Եվ կախված հավանականությունից՝ թույլ ենք տալիս կամ թույլ չենք տալիս պատվիրել, սակայն զգուշացնում ենք, որ այս հատվածում մեքենաների խտությունը այս պահին ցածր է։

Հավելվածում այն ​​այսպիսի տեսք ուներ.

Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա

Մոդելի օգտագործումը թույլ է տալիս ավելի ճշգրիտ ստեղծել նոր պատվերներ և իզուր չհանգստացնել մարդկանց։ Այսինքն՝ կարգավորել հուսալիության հարաբերակցությունը և պատվերների քանակը՝ առանց մեքենաների, օգտագործելով ճշգրիտ հետկանչի մոդելը։ Ծառայության հուսալիությունը ազդում է արտադրանքը շարունակելու ցանկության վրա, այսինքն՝ ի վերջո ամեն ինչ կախված է ուղևորությունների քանակից:

Մի քիչ ճշգրտության-հիշողության մասինՄեքենայի ուսուցման հիմնական խնդիրներից մեկը դասակարգման խնդիրն է՝ օբյեկտի վերագրում երկու դասերից մեկին: Այս դեպքում մեքենայական ուսուցման ալգորիթմի արդյունքը հաճախ դառնում է դասերից մեկին անդամակցության թվային գնահատում, օրինակ՝ հավանականության գնահատում։ Այնուամենայնիվ, գործողությունները, որոնք կատարվում են, սովորաբար երկուական են. եթե մեքենան հասանելի է, ապա մենք ձեզ թույլ կտանք պատվիրել այն, իսկ եթե ոչ, ապա մենք չենք պատվիրի: Որպեսզի կոնկրետ լինենք, եկեք թվային գնահատում արտադրող ալգորիթմը անվանենք մոդել, իսկ դասակարգիչը՝ կանոն, որը վերագրում է այն երկու դասերից մեկին (1 կամ –1): Մոդելի գնահատման հիման վրա դասակարգիչ պատրաստելու համար հարկավոր է ընտրել գնահատման շեմ: Թե կոնկրետ ինչպես, մեծապես կախված է առաջադրանքից:

Ենթադրենք, որ մենք կատարում ենք թեստ (դասակարգիչ) որոշ հազվագյուտ և վտանգավոր հիվանդության համար։ Թեստի արդյունքների հիման վրա հիվանդին կա՛մ ուղարկում ենք ավելի մանրամասն հետազոտության, կա՛մ ասում. «Լավ, գնա տուն»: Մեզ համար հիվանդ մարդուն տուն ուղարկելը շատ ավելի վատ է, քան առողջ մարդուն անտեղի զննելը։ Այսինքն՝ մենք ցանկանում ենք, որ թեստն աշխատի որքան հնարավոր է շատ իսկապես հիվանդ մարդկանց մոտ: Այս արժեքը կոչվում է հետկանչ =Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա. Իդեալական դասակարգիչն ունի 100% հետկանչ: Այլասերված իրավիճակ է՝ բոլորին ուղարկել փորձաքննության, հետո հետկանչն էլ կլինի 100 տոկոս։

Դա տեղի է ունենում նաև հակառակը: Օրինակ՝ ուսանողների համար թեստավորման համակարգ ենք պատրաստում, այն ունի խաբեության դետեկտոր։ Եթե ​​հանկարծ չեկը չաշխատի խաբեության որոշ դեպքերի համար, ապա դա տհաճ է, բայց ոչ կրիտիկական: Մյուս կողմից, չափազանց վատ է ուսանողներին անարդարացիորեն մեղադրել մի բանի մեջ, որը նրանք չեն արել: Այսինքն՝ մեզ համար կարևոր է, որ դասակարգչի դրական պատասխանների մեջ լինեն հնարավորինս շատ ճիշտ պատասխաններ՝ գուցե ի վնաս դրանց թվի։ Սա նշանակում է, որ դուք պետք է առավելագույնի հասցնեք ճշգրտությունը = Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա. Եթե ​​գործարկումը տեղի է ունենում բոլոր օբյեկտների վրա, ապա ճշգրտությունը հավասար կլինի նմուշի սահմանված դասի հաճախականությանը:

Եթե ​​ալգորիթմը արտադրում է թվային հավանականության արժեք, ապա ընտրելով տարբեր շեմեր, կարող եք հասնել տարբեր ճշգրտության-հիշող արժեքների:

Մեր հարցում իրավիճակը հետևյալն է. Հիշեցումը պատվերների քանակն է, որը մենք կարող ենք առաջարկել, ճշգրտությունը այս պատվերների հուսալիությունն է: Ահա թե ինչ տեսք ունի մեր մոդելի ճշգրտության հետկանչի կորը.
Ինչպես է Yandex.Taxi-ն փնտրում մեքենաներ, երբ չկա
Երկու ծայրահեղ դեպք կա՝ ոչ մեկին թույլ մի տվեք պատվիրել և թույլ տվեք բոլորին պատվիրել։ Եթե ​​որևէ մեկին թույլ չտաք, ապա հետկանչը կլինի 0. մենք պատվերներ չենք ստեղծում, բայց դրանցից ոչ մեկը չի ձախողվի: Եթե ​​թույլ տանք բոլորին, ապա հետկանչը կլինի 100% (մենք կստանանք բոլոր հնարավոր պատվերները), իսկ ճշգրտությունը կլինի 29%, այսինքն՝ պատվերների 71%-ը վատ կլինի։

Որպես նշաններ մենք օգտագործեցինք ելակետի տարբեր պարամետրեր.

  • Ժամանակ/տեղ.
  • Համակարգի վիճակը (բոլոր սակագների զբաղեցրած մեքենաների քանակը և մոտակայքում գտնվող կապանքները):
  • Որոնման պարամետրեր (շառավիղ, թեկնածուների քանակ, սահմանափակումներ):

Ավելին նշանների մասին

Հայեցակարգային առումով մենք ցանկանում ենք տարբերակել երկու իրավիճակ.

  • «Խորը անտառ» - այս պահին այստեղ մեքենաներ չկան:
  • «Դժբախտ» - կան մեքենաներ, բայց որոնելիս հարմարները չեն եղել:

«Ձախորդ»-ի օրինակներից մեկն այն է, որ ուրբաթ երեկոյան կենտրոնում մեծ պահանջարկ կա: Պատվերները շատ են, ցանկացողները շատ են, իսկ վարորդները՝ ոչ բոլորին։ Կարող է ստացվել այսպես՝ փինում հարմար դրայվերներ չկան։ Բայց բառացիորեն վայրկյանների ընթացքում նրանք հայտնվում են, քանի որ այս պահին այս վայրում շատ վարորդներ կան, և նրանց կարգավիճակը անընդհատ փոխվում է։

Հետևաբար, A կետի հարևանությամբ տարբեր համակարգի ցուցանիշները լավ հատկանիշներ են.

  • Մեքենաների ընդհանուր քանակը.
  • Պատվերով մեքենաների քանակը.
  • «Զբաղված» կարգավիճակում պատվիրելու համար անհասանելի մեքենաների քանակը:
  • Օգտագործողների թիվը.

Ի վերջո, որքան շատ լինեն մեքենաները, այնքան մեծ է հավանականությունը, որ դրանցից մեկը հասանելի կդառնա։
Իրականում մեզ համար կարեւոր է, որ ոչ միայն մեքենաները տեղակայվեն, այլեւ հաջող ճամփորդություններ կատարվեն։ Ուստի հնարավոր եղավ կանխատեսել հաջող ճանապարհորդության հավանականությունը։ Բայց մենք որոշեցինք դա չանել, քանի որ այս արժեքը մեծապես կախված է օգտագործողից և վարորդից:

Մոդելային ուսուցման ալգորիթմն էր CatBoost- ը. Փորձի արդյունքում ստացված տվյալները օգտագործվել են վերապատրաստման համար: Իրականացումից հետո վերապատրաստման տվյալները պետք է հավաքվեին, երբեմն թույլ տալով փոքր թվով օգտատերերի պատվիրել մոդելի որոշման դեմ:

Արդյունքները

Փորձի արդյունքները սպասվում էին. մոդելի օգտագործումը թույլ է տալիս զգալիորեն ավելացնել հաջող ուղևորությունների թիվը առանց մեքենաների պատվերների, բայց առանց հուսալիության խախտման:

Այս պահին մեխանիզմը գործարկվել է բոլոր քաղաքներում և երկրներում և դրա օգնությամբ տեղի է ունենում հաջող ուղևորությունների մոտ 1%-ը։ Ավելին, մեքենաների ցածր խտությամբ որոշ քաղաքներում նման ուղեւորությունների տեսակարար կշիռը հասնում է 15%-ի։

Այլ գրառումներ Տաքսի տեխնոլոգիայի մասին

Source: www.habr.com

Добавить комментарий