Πώς το Yandex.Taxi αναζητά αυτοκίνητα όταν δεν υπάρχουν

Πώς το Yandex.Taxi αναζητά αυτοκίνητα όταν δεν υπάρχουν

Μια καλή υπηρεσία ταξί πρέπει να είναι ασφαλής, αξιόπιστη και γρήγορη. Ο χρήστης δεν θα μπει σε λεπτομέρειες: είναι σημαντικό γι 'αυτόν να κάνει κλικ στο κουμπί "Παραγγελία" και να παραλάβει ένα αυτοκίνητο το συντομότερο δυνατό που θα τον μεταφέρει από το σημείο Α στο σημείο Β. Εάν δεν υπάρχουν αυτοκίνητα κοντά, η υπηρεσία θα πρέπει ενημερώστε αμέσως για αυτό ώστε ο πελάτης να μην έχει ψευδείς προσδοκίες. Αλλά εάν η πινακίδα "Όχι αυτοκίνητα" εμφανίζεται πολύ συχνά, τότε είναι λογικό ένα άτομο απλά να σταματήσει να χρησιμοποιεί αυτήν την υπηρεσία και να πάει σε έναν ανταγωνιστή.

Σε αυτό το άρθρο θέλω να μιλήσω για το πώς, χρησιμοποιώντας μηχανική εκμάθηση, λύσαμε το πρόβλημα της αναζήτησης αυτοκινήτων σε περιοχές χαμηλής πυκνότητας (με άλλα λόγια, όπου, με την πρώτη ματιά, δεν υπάρχουν αυτοκίνητα). Και τι προέκυψε από αυτό.

Ιστορικό

Για να καλέσει ένα ταξί, ο χρήστης εκτελεί μερικά απλά βήματα, αλλά τι συμβαίνει μέσα στην υπηρεσία;

Ο Χρήστης Στάδιο Backend Yandex.Taxi
Επιλέγει το σημείο εκκίνησης Pin Ξεκινάμε μια απλοποιημένη αναζήτηση υποψηφίων - pin search. Με βάση τα προγράμματα οδήγησης που βρέθηκαν, η ώρα άφιξης προβλέπεται - ETA στο pin. Υπολογίζεται ο αυξανόμενος συντελεστής σε ένα δεδομένο σημείο.
Επιλέγει προορισμό, ναύλο, απαιτήσεις Προσφορά Κατασκευάζουμε μια διαδρομή και υπολογίζουμε τις τιμές για όλα τα τιμολόγια, λαμβάνοντας υπόψη τον αυξανόμενο συντελεστή.
Πατήστε το κουμπί «Κλήση Ταξί». Παραγγελία Ξεκινάμε μια πλήρη αναζήτηση για το αυτοκίνητο. Επιλέγουμε τον καταλληλότερο οδηγό και του προσφέρουμε μια παραγγελία.

επί ETA στο pin, υπολογισμός τιμής и επιλέγοντας τον καταλληλότερο οδηγό γράψαμε ήδη. Και αυτή είναι μια ιστορία για την εύρεση οδηγών. Όταν δημιουργείται μια παραγγελία, η αναζήτηση πραγματοποιείται δύο φορές: στο Pin και στην παραγγελία. Η αναζήτηση παραγγελίας γίνεται σε δύο στάδια: πρόσληψη υποψηφίων και κατάταξη. Πρώτον, εντοπίζονται διαθέσιμοι υποψήφιοι οδηγοί που βρίσκονται πιο κοντά στο γράφημα του δρόμου. Στη συνέχεια εφαρμόζονται μπόνους και φιλτράρισμα. Οι υπόλοιποι υποψήφιοι κατατάσσονται και ο νικητής λαμβάνει προσφορά παραγγελίας. Αν συμφωνήσει, ανατίθεται στην παραγγελία και πηγαίνει στο σημείο παράδοσης. Αν αρνηθεί, τότε η προσφορά έρχεται στον επόμενο. Εάν δεν υπάρχουν άλλοι υποψήφιοι, η αναζήτηση ξεκινά ξανά. Αυτό δεν διαρκεί περισσότερο από τρία λεπτά, μετά τα οποία η παραγγελία ακυρώνεται και καίγεται.

Η αναζήτηση σε ένα 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% των παραγγελιών θα είναι κακή.

Χρησιμοποιήσαμε διάφορες παραμέτρους του σημείου εκκίνησης ως σημάδια:

  • Χρόνος/τόπος.
  • Κατάσταση συστήματος (αριθμός κατειλημμένων μηχανημάτων όλων των τιμολογίων και pins στην περιοχή).
  • Παράμετροι αναζήτησης (ακτίνα, αριθμός υποψηφίων, περιορισμοί).

Περισσότερα για τα σημάδια

Εννοιολογικά, θέλουμε να διακρίνουμε δύο καταστάσεις:

  • "Βαθύ δάσος" - δεν υπάρχουν αυτοκίνητα εδώ αυτή τη στιγμή.
  • "Άτυχος" - υπάρχουν αυτοκίνητα, αλλά κατά την αναζήτηση δεν υπήρχαν κατάλληλα.

Ένα παράδειγμα του «Άτυχου» είναι αν υπάρχει μεγάλη ζήτηση στο κέντρο το βράδυ της Παρασκευής. Υπάρχουν πολλές παραγγελίες, πολλοί άνθρωποι πρόθυμοι και όχι αρκετοί οδηγοί για όλους. Μπορεί να αποδειχθεί έτσι: δεν υπάρχουν κατάλληλα προγράμματα οδήγησης στην καρφίτσα. Αλλά κυριολεκτικά μέσα σε δευτερόλεπτα εμφανίζονται, γιατί αυτή τη στιγμή υπάρχουν πολλοί οδηγοί σε αυτό το μέρος και η κατάστασή τους αλλάζει συνεχώς.

Επομένως, διάφοροι δείκτες συστήματος κοντά στο σημείο Α αποδείχθηκαν καλά χαρακτηριστικά:

  • Συνολικός αριθμός αυτοκινήτων.
  • Αριθμός αυτοκινήτων κατά παραγγελία.
  • Ο αριθμός των αυτοκινήτων που δεν είναι διαθέσιμα για παραγγελία στην κατάσταση "Απασχολημένο".
  • Αριθμός χρηστών.

Άλλωστε, όσο περισσότερα αυτοκίνητα υπάρχουν, τόσο πιο πιθανό είναι ένα από αυτά να γίνει διαθέσιμο.
Μάλιστα, είναι σημαντικό για εμάς να μην εντοπίζονται μόνο αυτοκίνητα, αλλά να γίνονται και επιτυχημένα ταξίδια. Επομένως, ήταν δυνατό να προβλεφθεί η πιθανότητα ενός επιτυχημένου ταξιδιού. Αλλά αποφασίσαμε να μην το κάνουμε αυτό, γιατί αυτή η τιμή εξαρτάται σε μεγάλο βαθμό από τον χρήστη και τον οδηγό.

Ο αλγόριθμος εκπαίδευσης μοντέλου ήταν CatBoost. Τα δεδομένα που προέκυψαν από το πείραμα χρησιμοποιήθηκαν για εκπαίδευση. Μετά την εφαρμογή, έπρεπε να συλλεχθούν δεδομένα εκπαίδευσης, επιτρέποντας μερικές φορές σε μικρό αριθμό χρηστών να παραγγείλουν την απόφαση του μοντέλου.

Αποτελέσματα της

Τα αποτελέσματα του πειράματος ήταν τα αναμενόμενα: η χρήση του μοντέλου σάς επιτρέπει να αυξήσετε σημαντικά τον αριθμό των επιτυχημένων ταξιδιών λόγω παραγγελιών χωρίς αυτοκίνητα, αλλά χωρίς να διακυβεύεται η αξιοπιστία.

Αυτή τη στιγμή, ο μηχανισμός έχει δρομολογηθεί σε όλες τις πόλεις και τις χώρες και με τη βοήθειά του συμβαίνει περίπου το 1% των επιτυχημένων ταξιδιών. Επιπλέον, σε ορισμένες πόλεις με χαμηλή πυκνότητα αυτοκινήτων, το μερίδιο τέτοιων ταξιδιών φτάνει το 15%.

Άλλες αναρτήσεις για την τεχνολογία ταξί

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο