कैसे Yandex.Taxi कारों के लिए खोज करता है जब वे नहीं हैं

छवि

एक अच्छी टैक्सी बुकिंग सेवा सुरक्षित, विश्वसनीय और तेज होनी चाहिए। उपयोगकर्ता विवरण में नहीं जाएगा: यह उसके लिए महत्वपूर्ण है कि वह ऑर्डर बटन पर क्लिक करे और जितनी जल्दी हो सके एक कार प्राप्त करे, जो उसे बिंदु ए से बिंदु बी तक पहुंचाएगी। यदि पास में कोई कार नहीं है, तो सेवा को तुरंत इस बारे में सूचित करना चाहिए ताकि ग्राहक को पता न चले। झूठी उम्मीदें विकसित कीं। लेकिन अगर "नो कार्स" प्लेट को अक्सर प्रदर्शित किया जाता है, तो यह तर्कसंगत है कि एक व्यक्ति केवल इस सेवा का उपयोग करना बंद कर देता है और एक प्रतियोगी के लिए छोड़ देता है।

इस लेख में मैं बात करना चाहता हूं कि कैसे, मशीन लर्निंग की मदद से, हमने कम घनत्व वाले क्षेत्र में कारों को खोजने की समस्या को हल किया (दूसरे शब्दों में, जहां, पहली नज़र में, कोई कार नहीं हैं)। और इसका क्या हुआ।

प्रागितिहास


टैक्सी कॉल करने के लिए, उपयोगकर्ता कुछ सरल कदम उठाता है, और सेवा की हिम्मत में क्या होता है?
उपयोगकर्तामंचबैकएंड यैंडेक्स। टेक्सी
एक प्रस्थान बिंदु का चयन करता हैपिनहम उम्मीदवारों के लिए एक सरलीकृत खोज शुरू करते हैं - पिन पर खोजें। पाए गए ड्राइवरों के आधार पर, आने वाले समय की भविष्यवाणी की जाती है - पिन में ईटीए। किसी दिए गए बिंदु पर वेतन वृद्धि कारक की गणना की जाती है।
गंतव्य, टैरिफ, आवश्यकताओं का चयन करता हैप्रस्तावहम एक मार्ग का निर्माण करते हैं और बढ़ते हुए गुणांक को ध्यान में रखते हुए सभी शुल्कों की कीमतों की गणना करते हैं।
बटन दबाएं "कॉल टैक्सी"क्रमहम कार के लिए एक पूर्ण खोज शुरू करते हैं। हम सबसे उपयुक्त ड्राइवर का चयन करते हैं और उसे ऑर्डर देते हैं।

पिन में ईटीए के बारे में , हमने पहले से ही मूल्य की गणना और सबसे उपयुक्त ड्राइवर की पसंद लिखी है। और यह ड्राइवरों को खोजने के बारे में एक कहानी है। जब कोई ऑर्डर बनाया जाता है, तो खोज दो बार होती है: पिन पर और ऑर्डर पर। आदेश पर खोज दो चरणों में होती है: उम्मीदवारों की भर्ती और रैंकिंग। सबसे पहले, रोड ग्राफ़ के साथ आने वाले निशुल्क उम्मीदवार ड्राइवर हैं। फिर बोनस और फ़िल्टरिंग लागू किया जाता है। शेष उम्मीदवारों को रैंक दिया गया है, और विजेता को ऑर्डर का प्रस्ताव मिलता है। यदि वह सहमत है, तो आदेश को सौंपा और वितरण के बिंदु पर जाता है। अगर वह मना करता है, तो प्रस्ताव अगले के पास आता है। यदि अधिक उम्मीदवार नहीं हैं, तो खोज फिर से शुरू होती है। यह तीन मिनट से अधिक नहीं रहता है, जिसके बाद आदेश रद्द कर दिया जाता है - जला दिया गया।

पिन पर खोज ऑर्डर पर खोज के समान है, केवल ऑर्डर नहीं बनाया गया है और खोज केवल एक बार ही की जाती है। इसके अलावा, उम्मीदवारों की संख्या और खोज की त्रिज्या के लिए सरलीकृत सेटिंग्स का उपयोग किया जाता है। इस तरह के सरलीकरण की आवश्यकता है, क्योंकि आदेशों की तुलना में अधिक मात्रा में परिमाण के एक आदेश हैं, और खोज एक कठिन ऑपरेशन है। हमारी कहानी के लिए महत्वपूर्ण क्षण: यदि पिन पर प्रारंभिक खोज के दौरान कोई उपयुक्त उम्मीदवार नहीं थे, तो हम एक आदेश बनाने की अनुमति नहीं देते हैं। कम से कम यह हुआ करता था।

यहाँ उपयोगकर्ता ने आवेदन में क्या देखा है:



कारों के बिना कारों के लिए खोजें


एक बार हमारे पास एक परिकल्पना थी: शायद, कुछ मामलों में, आदेश अभी भी पूरा हो सकता है, भले ही पिन पर कोई कार न हो। दरअसल, पिन और ऑर्डर के बीच कुछ समय गुजरता है, और ऑर्डर पर खोज अधिक पूर्ण होती है और कभी-कभी कई बार दोहराई जाती है: इस दौरान मुफ्त ड्राइवर दिखाई दे सकते हैं। हम इसके विपरीत भी जानते थे: यदि ड्राइवरों को पिन पर पाया गया था, तो यह एक तथ्य नहीं है कि ऑर्डर करते समय वे मिल जाएंगे। कभी-कभी वे गायब हो जाते हैं या सभी आदेश को मना कर देते हैं।

इस परिकल्पना का परीक्षण करने के लिए, हमने एक प्रयोग शुरू किया: हमने उपयोगकर्ताओं के एक परीक्षण समूह के लिए एक पिन खोज के दौरान मशीनों की उपस्थिति के लिए जाँच बंद कर दी, अर्थात्, उन्हें "बिना मशीनों के आदेश" बनाने का अवसर मिला। परिणाम काफी अप्रत्याशित था: यदि कार पिन पर नहीं थी, तो 29% मामलों में यह बाद में था - जब एक आदेश खोज रहा था! इसके अलावा, कारों के बिना ऑर्डर रद्द होने की दर, रेटिंग और अन्य गुणवत्ता संकेतकों के मामले में सामान्य लोगों से बहुत अलग नहीं थे। कारों के बिना आदेशों की संख्या सभी आदेशों का 5% थी, लेकिन सभी सफल यात्राओं का सिर्फ 1%।

यह समझने के लिए कि इन आदेशों के निष्पादक कहां से आते हैं, आइए पिन पर खोज के दौरान उनकी स्थिति देखें:



  • नि: शुल्क: उपलब्ध था, लेकिन किसी कारण से उम्मीदवारों में नहीं मिला, उदाहरण के लिए, बहुत दूर था;
  • आदेश पर: वह व्यस्त था, लेकिन खुद को मुक्त करने या श्रृंखला के साथ ऑर्डर करने के लिए उपलब्ध होने में कामयाब रहा;
  • व्यस्त: आदेश लेने की क्षमता अक्षम थी, लेकिन फिर ड्राइवर लाइन पर लौट आया;
  • उपलब्ध नहीं: ड्राइवर ऑनलाइन नहीं था, लेकिन वह दिखाई दिया।

विश्वसनीयता जोड़ें


अतिरिक्त आदेश महान हैं, लेकिन 29% सफल खोजों का मतलब है कि 71% मामलों में उपयोगकर्ता लंबे समय से इंतजार कर रहा है और परिणामस्वरूप कहीं भी नहीं छोड़ा है। हालांकि सिस्टम दक्षता के दृष्टिकोण से यह भयानक नहीं है, लेकिन वास्तव में, उपयोगकर्ता झूठी आशा प्राप्त करता है और समय बिताता है, जिसके बाद वह परेशान है और (संभवतः) सेवा का उपयोग करना बंद कर देता है। इस समस्या को हल करने के लिए, हमने इस संभावना की भविष्यवाणी करना सीख लिया कि एक मशीन ऑर्डर पर मिलेगी।

योजना इस प्रकार है:

  • उपयोगकर्ता एक पिन डालता है।
  • पिन पर खोजना।
  • यदि कोई कार नहीं है, तो हम भविष्यवाणी करते हैं: शायद वे दिखाई देंगे।
  • और संभावना के आधार पर, हम एक आदेश देते हैं या नहीं देते हैं, लेकिन हम चेतावनी देते हैं कि इस क्षेत्र में कारों का घनत्व इस समय छोटा है।

आवेदन में, यह इस तरह दिखता है:



मॉडल का उपयोग करने से आप सावधानीपूर्वक नए ऑर्डर बना सकते हैं, व्यर्थ में किसी व्यक्ति को आश्वस्त करने के लिए नहीं। यही है, परिशुद्धता-रिकॉल मॉडल का उपयोग करके विश्वसनीयता के अनुपात और मशीनों के बिना आदेशों की संख्या को समायोजित करना। सेवा की विश्वसनीयता उत्पाद का उपयोग करना जारी रखने की इच्छा को प्रभावित करती है, अर्थात, अंत में, यह सभी यात्रा की संख्या में नीचे आती है।

सटीक-याद के बारे में थोड़ा
मशीन लर्निंग में मूल कार्यों में से एक वर्गीकरण समस्या है: एक वस्तु को दो वर्गों में से एक को असाइन करना। इस मामले में, मशीन लर्निंग एल्गोरिदम के संचालन का परिणाम अक्सर कक्षाओं में से एक से संबंधित एक संख्यात्मक अनुमान बन जाता है, उदाहरण के लिए, एक संभावना अनुमान। हालांकि, जो कार्य किए जाते हैं वे आमतौर पर द्विआधारी होते हैं: यदि हमारे पास एक कार है, तो हम इसे ऑर्डर करने के लिए देते हैं, और यदि नहीं, तो नहीं। निश्चितता के लिए, हम मॉडल को एक एल्गोरिथ्म कहेंगे जो संख्यात्मक अनुमान पैदा करता है, और क्लासिफायरियर - एक नियम जो दो वर्गों (1 या -1) में से एक से संबंधित है। मॉडल के मूल्यांकन के आधार पर एक वर्गीकरण बनाने के लिए, आपको एक मूल्यांकन सीमा का चयन करने की आवश्यकता है। कैसे बिल्कुल - कार्य पर अत्यधिक निर्भर है।

मान लीजिए कि हम कुछ दुर्लभ और खतरनाक बीमारी के लिए एक परीक्षण (क्लासिफायरियर) करते हैं। परीक्षण के परिणामों के आधार पर, हम या तो रोगी को अधिक विस्तृत परीक्षा के लिए भेजते हैं, या कहते हैं: "स्वस्थ, घर जाओ।" हमारे लिए, एक बीमार व्यक्ति को घर भेजना व्यर्थ में एक स्वस्थ व्यक्ति की जांच करने की तुलना में बहुत खराब है। यही है, हम चाहते हैं कि परीक्षण यथासंभव अधिक से अधिक बीमार लोगों के लिए काम करे। इस मान को रिकॉल = कहा जाता है  frac िि classifier  all ि। आदर्श क्लासिफायर रीकॉल 100% है। एक पतित स्थिति सभी को परीक्षा के लिए भेजना है, फिर याद रखना भी 100% होगा।

ऐसा होता है और इसके विपरीत। उदाहरण के लिए, हम छात्रों के लिए एक परीक्षण प्रणाली बनाते हैं, और इसमें एक धोखा डिटेक्टर होता है। यदि अचानक धोखाधड़ी के कुछ मामलों के लिए एक चेक काम नहीं करता है, तो यह अप्रिय है, लेकिन महत्वपूर्ण नहीं है। दूसरी ओर, यह गलत है कि वे गलत तरीके से छात्रों को दोष देते हैं कि उन्होंने क्या नहीं किया। यही है, हमारे लिए यह महत्वपूर्ण है कि क्लासिफायर के सकारात्मक जवाबों के बीच जितना संभव हो उतने सही होने चाहिए, संभवतः उनकी संख्या में गिरावट। इसलिए आपको सटीकता को अधिकतम करने की आवश्यकता है = \ frac {संख्या का सच / सकारात्मक} {{सभी की संख्या \ "सकारात्म । यदि सभी वस्तुओं पर संचालन शुरू होता है, तो नमूना में निर्धारित वर्ग की आवृत्ति के बराबर परिशुद्धता होगी।

यदि एल्गोरिथ्म एक संभावित मान देता है, तो, विभिन्न थ्रेसहोल्ड का चयन करके, आप सटीक-याद के विभिन्न मूल्यों को प्राप्त कर सकते हैं।

हमारे कार्य में, स्थिति इस प्रकार है। रिकॉल उन आदेशों की संख्या है जिन्हें हम प्रस्तुत कर सकते हैं, इन आदेशों की विश्वसनीयता सटीक है। यहाँ हमारे मॉडल का सटीक-रिकॉल वक्र है:

दो चरम मामले हैं: किसी को भी ऑर्डर करने की अनुमति न दें और सभी को ऑर्डर करने की अनुमति दें। यदि आप किसी को अनुमति नहीं देते हैं, तो रिकॉल 0 होगा: हम ऑर्डर नहीं बनाते हैं, लेकिन उनमें से कोई भी विफल नहीं होगा। यदि आप सभी को अनुमति देते हैं, तो रिकॉल 100% होगा (हम सभी संभावित ऑर्डर प्राप्त करेंगे), और सटीक - 29%, यानी 71% ऑर्डर खराब हो जाएंगे।


संकेत के रूप में, हमने प्रस्थान बिंदु के विभिन्न मापदंडों का उपयोग किया:

  • समय / स्थान।
  • सिस्टम की स्थिति (आसपास के सभी टैरिफ और पिनों की कब्जे वाली कारों की संख्या)।
  • खोज पैरामीटर (त्रिज्या, उम्मीदवारों की संख्या, प्रतिबंध)।

लक्षणों पर विवरण


वैचारिक रूप से, हम दो स्थितियों के बीच अंतर करना चाहते हैं:

  • "डेड फॉरेस्ट" - इस समय यहाँ कोई कार नहीं हैं।
  • "अशुभ" - वहाँ कारें हैं, लेकिन खोज करते समय कोई उपयुक्त नहीं थे।

"अनलकी" का एक उदाहरण है अगर शुक्रवार शाम को केंद्र में उच्च मांग है। कई आदेश हैं, कई ऐसे हैं जो बहुत कुछ चाहते हैं, पर्याप्त ड्राइवर नहीं हैं। यह इस तरह से हो सकता है: पिन में उपयुक्त ड्राइवर नहीं हैं। लेकिन सचमुच वे सेकंड में दिखाई देते हैं, क्योंकि इस समय इस जगह में बहुत सारे ड्राइवर हैं और उनकी स्थिति लगातार बदल रही है।

इसलिए, बिंदु A के आसपास के क्षेत्र में सिस्टम की विभिन्न विशेषताएं अच्छी विशेषताएं हैं:

  • कारों की कुल संख्या।
  • आदेश पर कारों की संख्या।
  • "व्यस्त" स्थिति में ऑर्डर के लिए मशीनों की संख्या अनुपलब्ध है।
  • उपयोगकर्ताओं की संख्या।

आखिरकार, जितनी अधिक कारें चारों ओर हैं, उतनी ही संभावना है कि उनमें से कोई भी उपलब्ध हो जाएगी।
वास्तव में, हमारे लिए न केवल कार रखना महत्वपूर्ण है, बल्कि सफल यात्राएं भी करना है। इसलिए, एक सफल यात्रा की संभावना की भविष्यवाणी करना संभव था। लेकिन हमने ऐसा नहीं करने का फैसला किया, क्योंकि यह मूल्य उपयोगकर्ता और ड्राइवर पर अत्यधिक निर्भर है।

कैटबॉस्ट का उपयोग मॉडल लर्निंग एल्गोरिदम के रूप में किया गया था। प्रशिक्षण के लिए हमने प्रयोग से प्राप्त डेटा का उपयोग किया। कार्यान्वयन के बाद, प्रशिक्षण डेटा एकत्र करना आवश्यक था, कभी-कभी उपयोगकर्ताओं की एक छोटी संख्या को मॉडल के निर्णय के विपरीत एक आदेश देने की अनुमति मिलती है।

परिणाम


प्रयोग के परिणाम अपेक्षित होने लगे: कारों के बिना ऑर्डर के कारण मॉडल का उपयोग सफल यात्राओं की संख्या में काफी वृद्धि करने की अनुमति देता है, लेकिन साथ ही साथ विश्वसनीयता को आकर्षित करने के लिए नहीं।

फिलहाल, तंत्र सभी शहरों और देशों में लॉन्च किया गया है, और इसके साथ लगभग 1% सफल यात्राएं होती हैं। इसके अलावा, कारों के कम घनत्व वाले कुछ शहरों में, ऐसी यात्राओं का हिस्सा 15% तक पहुंच जाता है।

अन्य टैक्सी टेक्नोलॉजी पोस्ट


Source:https://habr.com/ru/post/hi450376/


All Articles