Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào

Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào

Một dịch vụ taxi tốt phải an toàn, đáng tin cậy và nhanh chóng. Người dùng sẽ không đi sâu vào chi tiết: điều quan trọng đối với anh ta là anh ta phải nhấp vào nút “Đặt hàng” và nhận được một chiếc xe sẽ đưa anh ta từ điểm A đến điểm B càng nhanh càng tốt. Nếu không có xe nào gần đó, dịch vụ sẽ thông báo ngay về điều này để khách hàng không có những kỳ vọng sai lầm. Nhưng nếu biển báo “Cấm ô tô” xuất hiện quá thường xuyên, thì điều hợp lý là một người sẽ ngừng sử dụng dịch vụ này và tìm đến đối thủ cạnh tranh.

Trong bài viết này, tôi muốn nói về cách sử dụng máy học để giải quyết vấn đề tìm kiếm ô tô ở những khu vực có mật độ dân số thấp (nói cách khác, nơi mà thoạt nhìn thì không có ô tô). Và điều gì đã xảy ra với nó.

thời tiền sử

Để gọi taxi, người dùng thực hiện một vài bước đơn giản, nhưng điều gì sẽ xảy ra bên trong dịch vụ?

Người sử dụng Sân khấu Phần cuối Yandex.Taxi
Chọn điểm bắt đầu Pin Chúng tôi đang triển khai một tính năng tìm kiếm ứng viên được đơn giản hóa - tìm kiếm mã pin. Dựa trên các trình điều khiển được tìm thấy, thời gian đến được dự đoán - ETA trong mã pin. Hệ số tăng tại một điểm nhất định được tính toán.
Chọn điểm đến, giá vé, yêu cầu Phục vụ Chúng tôi xây dựng lộ trình và tính giá cho tất cả các mức thuế, có tính đến hệ số tăng dần.
Nhấn nút “Gọi taxi” Заказ Chúng tôi khởi động một cuộc tìm kiếm đầy đủ cho chiếc xe. Chúng tôi chọn người lái xe phù hợp nhất và đưa ra mệnh lệnh cho anh ta.

trên ETA trong pin, Tính giá и chọn driver phù hợp nhất chúng tôi đã viết rồi. Và đây là câu chuyện về việc tìm kiếm tài xế. Khi một đơn hàng được tạo, quá trình tìm kiếm diễn ra hai lần: trên Ghim và trên đơn hàng. Việc tìm kiếm đơn hàng diễn ra theo hai giai đoạn: tuyển dụng ứng viên và xếp hạng. Đầu tiên, những người lái xe ứng cử viên có sẵn sẽ được tìm thấy những người gần với biểu đồ đường nhất. Sau đó tiền thưởng và lọc được áp dụng. Các ứng cử viên còn lại được xếp hạng và người chiến thắng nhận được lời đề nghị đặt hàng. Nếu đồng ý thì anh ta được phân công đặt hàng và đến điểm giao hàng. Nếu anh ta từ chối, thì lời đề nghị sẽ đến với người tiếp theo. Nếu không còn ứng viên nào nữa, việc tìm kiếm sẽ bắt đầu lại. Việc này kéo dài không quá ba phút, sau đó đơn hàng sẽ bị hủy và bị đốt cháy.

Tìm kiếm trên Ghim cũng tương tự như tìm kiếm theo đơn hàng, chỉ có điều đơn hàng không được tạo và việc tìm kiếm chỉ được thực hiện một lần. Cài đặt đơn giản hóa về số lượng ứng viên và bán kính tìm kiếm cũng được sử dụng. Việc đơn giản hóa như vậy là cần thiết bởi vì có nhiều chân hơn số lượng đơn đặt hàng và việc tìm kiếm là một hoạt động khá khó khăn. Điểm mấu chốt trong câu chuyện của chúng tôi: nếu trong quá trình tìm kiếm sơ bộ không tìm thấy ứng viên phù hợp nào trên Ghim thì chúng tôi không cho phép bạn đặt hàng. Ít nhất thì trước đây nó đã như vậy.

Đây là những gì người dùng đã thấy trong ứng dụng:

Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào

Tìm kiếm ô tô không có ô tô

Một ngày nọ, chúng tôi nảy ra một giả thuyết: có lẽ trong một số trường hợp, đơn hàng vẫn có thể được hoàn thành, ngay cả khi không có ô tô nào trên chốt. Rốt cuộc, một thời gian trôi qua giữa mã pin và đơn hàng, việc tìm kiếm đơn hàng sẽ hoàn thiện hơn và đôi khi được lặp lại nhiều lần: trong thời gian này, các trình điều khiển có sẵn có thể xuất hiện. Chúng tôi cũng biết điều ngược lại: nếu các trình điều khiển được tìm thấy trên chốt thì thực tế không phải là chúng sẽ được tìm thấy khi đặt hàng. Đôi khi họ biến mất hoặc mọi người đều từ chối mệnh lệnh.

Để kiểm tra giả thuyết này, chúng tôi đã triển khai một thử nghiệm: chúng tôi đã ngừng kiểm tra sự hiện diện của ô tô khi tìm kiếm trên Ghim đối với một nhóm người dùng thử nghiệm, tức là họ có cơ hội thực hiện “đặt hàng mà không cần ô tô”. Kết quả khá bất ngờ: nếu chiếc xe không có trên chốt, thì trong 29% trường hợp, nó được tìm thấy muộn hơn - khi tìm kiếm theo đơn đặt hàng! Hơn nữa, các đơn đặt hàng không có ô tô không khác biệt đáng kể so với các đơn đặt hàng thông thường về tỷ lệ hủy, xếp hạng và các chỉ số chất lượng khác. Các lượt đặt chỗ không có ô tô chiếm 5% tổng số lượt đặt chỗ, nhưng chỉ hơn 1% tổng số chuyến đi thành công.

Để hiểu người thực thi các lệnh này đến từ đâu, hãy xem trạng thái của họ trong quá trình tìm kiếm trên Ghim:

Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào

  • Có sẵn: đã có mặt nhưng vì lý do nào đó lại không được đưa vào danh sách ứng cử viên, chẳng hạn như anh ấy ở quá xa;
  • Theo đơn đặt hàng: bận rộn nhưng đã tìm cách giải thoát bản thân hoặc sẵn sàng cho thứ tự chuỗi;
  • Bận: khả năng nhận lệnh đã bị vô hiệu hóa, nhưng sau đó tài xế đã quay lại xếp hàng;
  • Không có sẵn: Người lái xe không trực tuyến nhưng anh ta đã xuất hiện.

Hãy thêm độ tin cậy

Các đơn đặt hàng bổ sung là rất lớn, nhưng 29% tìm kiếm thành công có nghĩa là 71% thời gian người dùng đã chờ đợi rất lâu và cuối cùng chẳng đi đến đâu. Mặc dù đây không phải là điều xấu từ quan điểm hiệu quả hệ thống, nhưng nó thực sự mang lại cho người dùng hy vọng hão huyền và lãng phí thời gian, sau đó họ cảm thấy khó chịu và (có thể) ngừng sử dụng dịch vụ. Để giải quyết vấn đề này, chúng tôi đã học cách dự đoán khả năng tìm được một chiếc ô tô theo đơn đặt hàng.

Đề án này là:

  • Người dùng đặt một pin.
  • Một tìm kiếm được thực hiện trên pin.
  • Nếu không có ô tô, chúng tôi dự đoán: có thể chúng sẽ xuất hiện.
  • Và tùy theo xác suất mà chúng tôi cho phép hoặc không cho phép bạn đặt hàng, nhưng chúng tôi cảnh báo bạn rằng mật độ xe ô tô ở khu vực này vào thời điểm này thấp.

Trong ứng dụng nó trông như thế này:

Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào

Sử dụng mô hình cho phép bạn tạo đơn hàng mới chính xác hơn và không làm mọi người yên tâm một cách vô ích. Nghĩa là, để điều chỉnh tỷ lệ độ tin cậy và số lượng đơn hàng không có máy sử dụng mô hình thu hồi chính xác. Độ tin cậy của dịch vụ ảnh hưởng đến mong muốn tiếp tục sử dụng sản phẩm, tức là cuối cùng tất cả đều phụ thuộc vào số lượng chuyến đi.

Một chút về thu hồi chính xácMột trong những nhiệm vụ cơ bản trong học máy là nhiệm vụ phân loại: gán một đối tượng vào một trong hai lớp. Trong trường hợp này, kết quả của thuật toán học máy thường trở thành đánh giá bằng số về tư cách thành viên của một trong các lớp, chẳng hạn như đánh giá xác suất. Tuy nhiên, các hành động được thực hiện thường là nhị phân: nếu có xe thì chúng tôi sẽ cho phép bạn đặt hàng, còn nếu không thì chúng tôi sẽ không cho phép. Cụ thể hơn, hãy gọi thuật toán tạo ra ước tính bằng số là mô hình và trình phân loại là quy tắc gán nó cho một trong hai lớp (1 hoặc –1). Để thực hiện phân loại dựa trên đánh giá mô hình, bạn cần chọn ngưỡng đánh giá. Làm thế nào chính xác phụ thuộc rất lớn vào nhiệm vụ.

Giả sử chúng ta đang làm một bài kiểm tra (phân loại) ​​về một số căn bệnh hiếm gặp và nguy hiểm. Dựa trên kết quả xét nghiệm, chúng tôi gửi bệnh nhân đi kiểm tra chi tiết hơn hoặc nói: “Tốt, về nhà đi”. Đối với chúng tôi, việc gửi một người bệnh về nhà còn tệ hơn nhiều so với việc khám một người khỏe mạnh một cách không cần thiết. Nghĩa là, chúng tôi muốn xét nghiệm có hiệu quả với càng nhiều người thực sự ốm càng tốt. Giá trị này được gọi là thu hồi =Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào. Một bộ phân loại lý tưởng có khả năng thu hồi 100%. Một tình trạng thoái hóa là đưa mọi người đi khám thì thu hồi cũng 100%.

Nó cũng xảy ra theo cách khác. Ví dụ: chúng tôi đang tạo một hệ thống kiểm tra cho học sinh và nó có một máy phát hiện gian lận. Nếu đột nhiên việc kiểm tra không có tác dụng đối với một số trường hợp gian lận, thì điều này thật khó chịu nhưng không nghiêm trọng. Mặt khác, việc buộc tội học sinh một cách không công bằng về điều mà họ không làm là điều vô cùng tồi tệ. Đó là, điều quan trọng đối với chúng tôi là trong số các câu trả lời tích cực của bộ phân loại, có càng nhiều câu trả lời đúng càng tốt, có lẽ gây bất lợi cho số lượng của chúng. Điều này có nghĩa là bạn cần tối đa hóa độ chính xác = Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào. Nếu việc kích hoạt xảy ra trên tất cả các đối tượng thì độ chính xác sẽ bằng tần số của lớp được xác định trong mẫu.

Nếu thuật toán tạo ra một giá trị xác suất bằng số thì bằng cách chọn các ngưỡng khác nhau, bạn có thể đạt được các giá trị thu hồi chính xác khác nhau.

Trong vấn đề của chúng tôi, tình huống như sau. Thu hồi là số lượng đơn hàng chúng tôi có thể cung cấp, độ chính xác là độ tin cậy của các đơn hàng này. Đường cong thu hồi chính xác của mô hình của chúng tôi trông như thế này:
Cách Yandex.Taxi tìm kiếm ô tô khi không có ô tô nào
Có hai trường hợp cực đoan: không cho phép ai đặt hàng và cho phép mọi người đặt hàng. Nếu bạn không cho phép bất kỳ ai, thì việc thu hồi sẽ là 0: chúng tôi không tạo đơn hàng, nhưng không có đơn hàng nào thất bại. Nếu chúng tôi cho phép tất cả mọi người thì tỷ lệ thu hồi sẽ là 100% (chúng tôi sẽ nhận được tất cả các đơn đặt hàng có thể có) và độ chính xác sẽ là 29%, tức là 71% đơn hàng sẽ không tốt.

Chúng tôi đã sử dụng các tham số khác nhau của điểm bắt đầu làm dấu hiệu:

  • Thời gian/địa điểm.
  • Trạng thái hệ thống (số lượng máy được sử dụng ở tất cả các mức giá và chân trong vùng lân cận).
  • Tham số tìm kiếm (bán kính, số lượng ứng viên, hạn chế).

Thông tin thêm về các dấu hiệu

Về mặt khái niệm, chúng tôi muốn phân biệt giữa hai tình huống:

  • “Rừng sâu” - không có ô tô nào ở đây vào thời điểm này.
  • “Xui xẻo” - có ô tô nhưng khi tìm kiếm lại không có chiếc nào phù hợp.

Một ví dụ về “Không may mắn” là nếu có nhiều nhu cầu ở trung tâm vào tối thứ Sáu. Có rất nhiều đơn đặt hàng, rất nhiều người sẵn lòng và không đủ tài xế cho tất cả mọi người. Nó có thể diễn ra như sau: không có trình điều khiển phù hợp trong pin. Nhưng theo đúng nghĩa đen chỉ trong vài giây, chúng xuất hiện, bởi vì tại thời điểm này có rất nhiều tài xế ở nơi này và trạng thái của họ liên tục thay đổi.

Do đó, các chỉ báo hệ thống khác nhau ở vùng lân cận điểm A hóa ra lại là những tính năng tốt:

  • Tổng số xe ô tô.
  • Số lượng xe theo đơn đặt hàng.
  • Số lượng xe không thể đặt hàng ở trạng thái “Bận”.
  • Số lượng người dùng.

Rốt cuộc, càng có nhiều ô tô thì càng có nhiều khả năng một trong số chúng sẽ có sẵn.
Trên thực tế, điều quan trọng đối với chúng tôi là không chỉ định vị được ô tô mà còn thực hiện được những chuyến đi thành công. Vì vậy, có thể dự đoán được khả năng chuyến đi thành công. Nhưng chúng tôi quyết định không làm điều này vì giá trị này phụ thuộc rất nhiều vào người dùng và trình điều khiển.

Thuật toán huấn luyện mô hình được CátBoost. Dữ liệu thu được từ thí nghiệm được sử dụng để huấn luyện. Sau khi triển khai, dữ liệu đào tạo phải được thu thập, đôi khi cho phép một số ít người dùng đặt hàng trái với quyết định của mô hình.

Kết quả

Kết quả thử nghiệm đúng như mong đợi: sử dụng mô hình cho phép bạn tăng đáng kể số chuyến đi thành công do các đơn đặt hàng không có ô tô nhưng không ảnh hưởng đến độ tin cậy.

Hiện tại, cơ chế này đã được triển khai ở tất cả các thành phố và quốc gia và với sự trợ giúp của nó, khoảng 1% số chuyến đi thành công đã diễn ra. Hơn nữa, ở một số thành phố có mật độ ô tô thấp, tỷ lệ những chuyến đi như vậy lên tới 15%.

Các bài viết khác về công nghệ Taxi

Nguồn: www.habr.com

Thêm một lời nhận xét